Name: series-workflowj242c Phase: Succeeded StartedAt: 2026-08-10 11:25:01 +0000 UTC FinishedAt: 2026-08-10 15:14:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[0] Phase: Succeeded StartedAt: 2026-08-10 11:25:01 +0000 UTC FinishedAt: 2026-08-10 11:28:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 11:25:01 +0000 UTC FinishedAt: 2026-08-10 11:28:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CEPH_LIB", "CEPH_FS", "BLK_DEV_RBD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CEPH_LIB", "CEPH_FS", "BLK_DEV_RBD" ], "series_id": "439478fb-64a4-4ac8-bc97-9f310589fdd1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ceph_con_v1_try_read", "ceph_con_v2_try_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NFUEhfTElCJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9SQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZXBoX2Nvbl92MV90cnlfcmVhZCYjMzQ7LAogICAgJiMzNDtjZXBoX2Nvbl92Ml90cnlfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHNldmVyYWwgV0FSTl9PTigpIHN0YXRlbWVudHMgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgaW4gdGhlIENlcGggbWVzc2VuZ2VyIHByb3RvY29sIChib3RoIHYxIGFuZCB2MikuIEl0IGNoZWNrcyBmb3IgaW52YWxpZCBzZXF1ZW5jZSBudW1iZXJzLCBtaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzLCBhbmQgaW5jb3JyZWN0IHNlcnZlciBjb29raWVzLCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSB3YXJuaW5nLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgbm9yIGRvIHRoZXkgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgV0FSTl9PTiB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmV0dXJucyBpbiB0aGUgQ2VwaCBuZXR3b3JrIHByb3RvY29sIHBhcnNpbmcgbG9naWMgKG1lc3NlbmdlciB2MSBhbmQgdjIpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwcm90b2NvbCBjb2RlIHRoYXQgcHJldmVudHMgZmFsc2UtcG9zaXRpdmUgY3Jhc2ggcmVwb3J0cyBhbmQgY29ycmVjdGx5IGhhbmRsZXMgaW52YWxpZCBwcm90b2NvbCBzdGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OTQ0Y2MwMGQ0YzFiZjJjZWI3ODYzNDdmYzg5NGEyMjc2ZDg2N2QyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTE6MjY6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuaW5kZXggYzllMDAyZDk2MzE5MC4uZGYyMjQ4YjdiMDI2NSAxMDA2NDRcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuQEAgLTg5OCw4ICYjNDM7ODk4LDE1IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbiBcdFx0ICAgICBjb24tXHUwMDNldjEucGVlcl9nbG9iYWxfc2VxLFxuIFx0XHQgICAgIGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSksXG4gXHRcdCAgICAgY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxKTtcbi1cdFx0V0FSTl9PTihjb24tXHUwMDNldjEuY29ubmVjdF9zZXEgIT1cbi1cdFx0XHRsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcbiYjNDM7XHRcdGlmIChjb24tXHUwMDNldjEuY29ubmVjdF9zZXEgIT0gbGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7JXMlbGxkICVzIGNvbm5lY3Rfc2VxIG1pc21hdGNoLCBleHBlY3RlZCAldSwgZ290ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4mIzQzO1x0XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4mIzQzO1x0XHRcdCAgICAgICBjb24tXHUwMDNldjEuY29ubmVjdF9zZXEsXG4mIzQzO1x0XHRcdCAgICAgICBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcbiYjNDM7XHRcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwmIzM0O2Nvbm5lY3Rfc2VxIG1pc21hdGNoXCYjMzQ7O1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGlmIChjb24tXHUwMDNldjEuaW5fcmVwbHkuZmxhZ3MgXHUwMDI2IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpXG4gXHRcdFx0Y2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpO1xuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcbmluZGV4IDA1ZjZlZWEyOTlmYzAuLmQ3MDZjZGJlMGVkMmQgMTAwNjQ0XG4tLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcbkBAIC0yNTI5LDE0ICYjNDM7MjUyOSwzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNvbi1cdTAwM2VwZWVyX25hbWUubnVtID0gY3B1X3RvX2xlNjQoZ2xvYmFsX2lkKTtcbiBcdGNvbi1cdTAwM2V2Mi5wZWVyX2dsb2JhbF9zZXEgPSBnbG9iYWxfc2VxO1xuIFx0Y29uLVx1MDAzZXBlZXJfZmVhdHVyZXMgPSBmZWF0dXJlcztcbi1cdFdBUk5fT04ocmVxdWlyZWRfZmVhdHVyZXMgXHUwMDI2IH5jbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKTtcbiYjNDM7XHRpZiAocmVxdWlyZWRfZmVhdHVyZXMgXHUwMDI2IH5jbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7JXMlbGxkICVzIG1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMsIG15IHN1cHBvcnRlZCAweCVsbHgsIHNlcnZlciYjMzk7cyByZXF1aXJlZCAweCVsbHhcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4mIzQzO1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuJiM0MztcdFx0ICAgICAgIGNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMsIHJlcXVpcmVkX2ZlYXR1cmVzKTtcbiYjNDM7XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcJiMzNDttaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzXCYjMzQ7O1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFx0Y29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUgPSBjb29raWU7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpIHtcbiBcdFx0Y2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpO1xuLVx0XHRXQVJOX09OKGNvbi1cdTAwM2V2Mi5zZXJ2ZXJfY29va2llKTtcbiYjNDM7XHRcdGlmIChjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4mIzQzO1x0XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkcikpO1xuJiM0MztcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCYjMzQ7c2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cJiMzNDs7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0V0FSTl9PTighY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpO1xuJiM0MztcdFx0aWYgKCFjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuJiM0MztcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpKTtcbiYjNDM7XHRcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwmIzM0O3NlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblwmIzM0OztcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRjbGVhcl9pbl9zaWduX2t2ZWNzKGNvbik7XG5AQCAtMjYxOCw3ICYjNDM7MjYzNywxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4gXHRjZXBoX2RlY29kZV82NF9zYWZlKFx1MDAyNnAsIGVuZCwgY29ubmVjdF9zZXEsIGJhZCk7XG4gXG4gXHRkb3V0KFwmIzM0OyVzIGNvbiAlcCBjb25uZWN0X3NlcSAlbGx1XFxuXCYjMzQ7LCBfX2Z1bmNfXywgY29uLCBjb25uZWN0X3NlcSk7XG4tXHRXQVJOX09OKGNvbm5lY3Rfc2VxIFx1MDAzYz0gY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxKTtcbiYjNDM7XHRpZiAoY29ubmVjdF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuY29ubmVjdF9zZXEpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDslcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbiYjNDM7XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4mIzQzO1x0XHQgICAgICAgY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxLCBjb25uZWN0X3NlcSk7XG4mIzQzO1x0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCYjMzQ7Y29ubmVjdF9zZXEgbWlzbWF0Y2hcJiMzNDs7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4gXHRjb24tXHUwMDNldjIuY29ubmVjdF9zZXEgPSBjb25uZWN0X3NlcSAmIzQzOyAxO1xuIFxuIFx0ZnJlZV9jb25uX2J1ZnMoY29uKTtcbkBAIC0yNjUxLDcgJiM0MzsyNjc3LDE0IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4gXHRjZXBoX2RlY29kZV82NF9zYWZlKFx1MDAyNnAsIGVuZCwgZ2xvYmFsX3NlcSwgYmFkKTtcbiBcbiBcdGRvdXQoXCYjMzQ7JXMgY29uICVwIGdsb2JhbF9zZXEgJWxsdVxcblwmIzM0OywgX19mdW5jX18sIGNvbiwgZ2xvYmFsX3NlcSk7XG4tXHRXQVJOX09OKGdsb2JhbF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSk7XG4mIzQzO1x0aWYgKGdsb2JhbF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyVzJWxsZCAlcyBnbG9iYWxfc2VxIG1pc21hdGNoLCBleHBlY3RlZCBcdTAwM2UgJWxsdSwgZ290ICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4mIzQzO1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuJiM0MztcdFx0ICAgICAgIGNvbi1cdTAwM2V2Mi5nbG9iYWxfc2VxLCBnbG9iYWxfc2VxKTtcbiYjNDM7XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcJiMzNDtnbG9iYWxfc2VxIG1pc21hdGNoXCYjMzQ7O1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFx0Y29uLVx1MDAzZXYyLmdsb2JhbF9zZXEgPSBjZXBoX2dldF9nbG9iYWxfc2VxKGNvbi1cdTAwM2Vtc2dyLCBnbG9iYWxfc2VxKTtcbiBcbiBcdGZyZWVfY29ubl9idWZzKGNvbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NFUEhfTElCJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9SQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZXBoX2Nvbl92MV90cnlfcmVhZCYjMzQ7LAogICAgJiMzNDtjZXBoX2Nvbl92Ml90cnlfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBXQVJOX09OIHdpdGggcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXR1cm5zIGluIHRoZSBDZXBoIG5ldHdvcmsgcHJvdG9jb2wgcGFyc2luZyBsb2dpYyAobWVzc2VuZ2VyIHYxIGFuZCB2MikuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIHByb3RvY29sIGNvZGUgdGhhdCBwcmV2ZW50cyBmYWxzZS1wb3NpdGl2ZSBjcmFzaCByZXBvcnRzIGFuZCBjb3JyZWN0bHkgaGFuZGxlcyBpbnZhbGlkIHByb3RvY29sIHN0YXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc5NDRjYzAwZDRjMWJmMmNlYjc4NjM0N2ZjODk0YTIyNzZkODY3ZDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAxMToyNjo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMKaW5kZXggYzllMDAyZDk2MzE5MC4uZGYyMjQ4YjdiMDI2NSAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMKQEAgLTg5OCw4ICYjNDM7ODk4LDE1IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbikKIAkJICAgICBjb24tJmd0O3YxLnBlZXJfZ2xvYmFsX3NlcSwKIAkJICAgICBsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSwKIAkJICAgICBjb24tJmd0O3YxLmNvbm5lY3Rfc2VxKTsKLQkJV0FSTl9PTihjb24tJmd0O3YxLmNvbm5lY3Rfc2VxICE9Ci0JCQlsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7CiYjNDM7CQlpZiAoY29uLSZndDt2MS5jb25uZWN0X3NlcSAhPSBsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSkgewomIzQzOwkJCXByX2VycigmIzM0OyVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJXUsIGdvdCAldVxuJiMzNDssCiYjNDM7CQkJICAgICAgIEVOVElUWV9OQU1FKGNvbi0mZ3Q7cGVlcl9uYW1lKSwKJiM0MzsJCQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpLAomIzQzOwkJCSAgICAgICBjb24tJmd0O3YxLmNvbm5lY3Rfc2VxLAomIzQzOwkJCSAgICAgICBsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7CiYjNDM7CQkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O2Nvbm5lY3Rfc2VxIG1pc21hdGNoJiMzNDs7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQogCiAJCWlmIChjb24tJmd0O3YxLmluX3JlcGx5LmZsYWdzICZhbXA7IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpCiAJCQljZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7CmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jCmluZGV4IDA1ZjZlZWEyOTlmYzAuLmQ3MDZjZGJlMGVkMmQgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jCkBAIC0yNTI5LDE0ICYjNDM7MjUyOSwzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwKIAljb24tJmd0O3BlZXJfbmFtZS5udW0gPSBjcHVfdG9fbGU2NChnbG9iYWxfaWQpOwogCWNvbi0mZ3Q7djIucGVlcl9nbG9iYWxfc2VxID0gZ2xvYmFsX3NlcTsKIAljb24tJmd0O3BlZXJfZmVhdHVyZXMgPSBmZWF0dXJlczsKLQlXQVJOX09OKHJlcXVpcmVkX2ZlYXR1cmVzICZhbXA7IH5jbGllbnQtJmd0O3N1cHBvcnRlZF9mZWF0dXJlcyk7CiYjNDM7CWlmIChyZXF1aXJlZF9mZWF0dXJlcyAmYW1wOyB+Y2xpZW50LSZndDtzdXBwb3J0ZWRfZmVhdHVyZXMpIHsKJiM0MzsJCXByX2VycigmIzM0OyVzJWxsZCAlcyBtaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzLCBteSBzdXBwb3J0ZWQgMHglbGx4LCBzZXJ2ZXImIzM5O3MgcmVxdWlyZWQgMHglbGx4XG4mIzM0OywKJiM0MzsJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpLAomIzQzOwkJICAgICAgIGNsaWVudC0mZ3Q7c3VwcG9ydGVkX2ZlYXR1cmVzLCByZXF1aXJlZF9mZWF0dXJlcyk7CiYjNDM7CQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7bWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcyYjMzQ7OwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAljb24tJmd0O3YyLnNlcnZlcl9jb29raWUgPSBjb29raWU7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgQ0VQSF9NU0dfQ09OTkVDVF9MT1NTWSkgewogCQljZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7Ci0JCVdBUk5fT04oY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKTsKJiM0MzsJCWlmIChjb24tJmd0O3YyLnNlcnZlcl9jb29raWUpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cbiYjMzQ7LAomIzQzOwkJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSk7CiYjNDM7CQkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O3NlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uJiMzNDs7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiAJfSBlbHNlIHsKLQkJV0FSTl9PTighY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKTsKJiM0MzsJCWlmICghY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblxuJiMzNDssCiYjNDM7CQkJICAgICAgIEVOVElUWV9OQU1FKGNvbi0mZ3Q7cGVlcl9uYW1lKSwKJiM0MzsJCQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpKTsKJiM0MzsJCQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7c2VydmVyX2Nvb2tpZSBpcyBub3Qgc2V0IGZvciBsb3NzbGVzcyBjb25uZWN0aW9uJiMzNDs7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiAJfQogCiAJY2xlYXJfaW5fc2lnbl9rdmVjcyhjb24pOwpAQCAtMjYxOCw3ICYjNDM7MjYzNywxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sCiAJY2VwaF9kZWNvZGVfNjRfc2FmZSgmYW1wO3AsIGVuZCwgY29ubmVjdF9zZXEsIGJhZCk7CiAKIAlkb3V0KCYjMzQ7JXMgY29uICVwIGNvbm5lY3Rfc2VxICVsbHVcbiYjMzQ7LCBfX2Z1bmNfXywgY29uLCBjb25uZWN0X3NlcSk7Ci0JV0FSTl9PTihjb25uZWN0X3NlcSAmbHQ7PSBjb24tJmd0O3YyLmNvbm5lY3Rfc2VxKTsKJiM0MzsJaWYgKGNvbm5lY3Rfc2VxICZsdDs9IGNvbi0mZ3Q7djIuY29ubmVjdF9zZXEpIHsKJiM0MzsJCXByX2VycigmIzM0OyVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJmd0OyAlbGx1LCBnb3QgJWxsdVxuJiMzNDssCiYjNDM7CQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSwKJiM0MzsJCSAgICAgICBjb24tJmd0O3YyLmNvbm5lY3Rfc2VxLCBjb25uZWN0X3NlcSk7CiYjNDM7CQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7Y29ubmVjdF9zZXEgbWlzbWF0Y2gmIzM0OzsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAJY29uLSZndDt2Mi5jb25uZWN0X3NlcSA9IGNvbm5lY3Rfc2VxICYjNDM7IDE7CiAKIAlmcmVlX2Nvbm5fYnVmcyhjb24pOwpAQCAtMjY1MSw3ICYjNDM7MjY3NywxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWwoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLAogCWNlcGhfZGVjb2RlXzY0X3NhZmUoJmFtcDtwLCBlbmQsIGdsb2JhbF9zZXEsIGJhZCk7CiAKIAlkb3V0KCYjMzQ7JXMgY29uICVwIGdsb2JhbF9zZXEgJWxsdVxuJiMzNDssIF9fZnVuY19fLCBjb24sIGdsb2JhbF9zZXEpOwotCVdBUk5fT04oZ2xvYmFsX3NlcSAmbHQ7PSBjb24tJmd0O3YyLmdsb2JhbF9zZXEpOwomIzQzOwlpZiAoZ2xvYmFsX3NlcSAmbHQ7PSBjb24tJmd0O3YyLmdsb2JhbF9zZXEpIHsKJiM0MzsJCXByX2VycigmIzM0OyVzJWxsZCAlcyBnbG9iYWxfc2VxIG1pc21hdGNoLCBleHBlY3RlZCAmZ3Q7ICVsbHUsIGdvdCAlbGx1XG4mIzM0OywKJiM0MzsJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpLAomIzQzOwkJICAgICAgIGNvbi0mZ3Q7djIuZ2xvYmFsX3NlcSwgZ2xvYmFsX3NlcSk7CiYjNDM7CQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7Z2xvYmFsX3NlcSBtaXNtYXRjaCYjMzQ7OwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAljb24tJmd0O3YyLmdsb2JhbF9zZXEgPSBjZXBoX2dldF9nbG9iYWxfc2VxKGNvbi0mZ3Q7bXNnciwgZ2xvYmFsX3NlcSk7CiAKIAlmcmVlX2Nvbm5fYnVmcyhjb24pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzc0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENlcGggUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgY2xlYW5pbmcgdXAgc29tZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgQ2VwaCBuZXR3b3JrIGNvZGUuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgcmVwbGFjaW5nIGBXQVJOX09OYCB3aXRoIHByb3BlciBlcnJvciByZXR1cm5zIOKAkyBgLTFgLCBgLUVJTlZBTGAg4oCTIGFuZCBzZXR0aW5nIGBjb24tJmd0O2Vycm9yX21zZ2AgaW4gYG5ldC9jZXBoL21lc3Nlbmdlcl92MS5jYCBhbmQgYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZT8mIzM0OyBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGV2ZW4gKnJlYWNoYWJsZSogYW5kIGlmIHRoZXkmIzM5O3JlIGNvbXBsZXggZW5vdWdoIHRvIHdhcnJhbnQgYXR0ZW50aW9uLgoKVGhlIHBhdGNoIHRvdWNoZXMgYHByb2Nlc3NfY29ubmVjdGAgaW4gdGhlIHYxIG1lc3NlbmdlciBhbmQgdGhlbiBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgLCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5YCwgYW5kIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsYCBpbiB0aGUgdjIgbWVzc2VuZ2VyLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGNsZWFybHkgY29yZSB0byB0aGUgQ2VwaCBwcm90b2NvbCwgc28gdGhleSYjMzk7cmUgZGVmaW5pdGVseSB3aXRoaW4gdGhlIGF0dGFjayBzdXJmYWNlLiBDZXBoLCBiZWluZyBhIGRpc3RyaWJ1dGVkIHN0b3JhZ2Ugc3lzdGVtLCBpcyBkZWZpbml0ZWx5IG5ldHdvcmstZmFjaW5nLiBJdCYjMzk7cyB1c2VkIGFzIGEgbmV0d29yayBmaWxlc3lzdGVtIGFuZCBibG9jayBkZXZpY2UsIHNvIHRoZXJlIGlzIHRoZSBwb3RlbnRpYWwgdG8gdHJpZ2dlciBpc3N1ZXMgcmVtb3RlbHkuCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgJiMzNDtDYW4gSSBnZXQgdG8gdGhlc2UgYml0cyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQ/JiMzNDsgSWRlYWxseSwgc3l6a2FsbGVyIGNvdWxkIGJlIGxldmVyYWdlZC4gSWYgSSYjMzk7bSBsdWNreSwgdGhlcmUgYXJlIGFscmVhZHkgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgQ2VwaC4gRXZlbiBpZiB0aGVyZSYjMzk7cyBubyBuYXRpdmUgQ2VwaCBzZXJ2ZXIgd2l0aGluIHN5emthbGxlciwgaXQmIzM5O3MgdmVyeSBsaWtlbHkgSSBjYW4gY3JhZnQgbmV0d29yayBwYWNrZXRzIHRvIHBva2UgYXQgYSBDZXBoIGNsaWVudCBhbmQgZXhlcmNpc2UgdGhvc2UgY29kZSBwYXRocy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNldHRpbmcgdXAgYSBuZXR3b3JrIGNvbm5lY3Rpb24gb3IgaW5qZWN0aW5nIHBhY2tldHMgaW50byB0aGUgbmV0d29yayBpcyB1c3VhbGx5IGEgdmlhYmxlIHBhdGguIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgY2FzZSwgZmlyc3QsIHNvIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZvciBDRVBIIGFuZCBzZWUgd2hhdCB0aGUgb3B0aW9ucyBsb29rIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENFUEhfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jZXBoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9MSUJcbm5ldC9jZXBoL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0NlcGggY29yZSBsaWJyYXJ5XCYjMzQ7XG4tLVxubmV0L2NlcGgvS2NvbmZpZy0yMi1cbm5ldC9jZXBoL0tjb25maWc6MjM6Y29uZmlnIENFUEhfTElCX1BSRVRUWURFQlVHXG5uZXQvY2VwaC9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIGZpbGU6bGluZSBpbiBjZXBoIGRlYnVnIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9jZXBoL0tjb25maWctMzQtXG5uZXQvY2VwaC9LY29uZmlnOjM1OmNvbmZpZyBDRVBIX0xJQl9VU0VfRE5TX1JFU09MVkVSXG5uZXQvY2VwaC9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtVc2UgaW4ta2VybmVsIHN1cHBvcnQgZm9yIEROUyBsb29rdXBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjM5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDZXBoIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUgaXMgYENFUEhfTElCYC4gVGhhdCYjMzk7cyBvdXIgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIG5vdyBpcyB0byBkZXRlcm1pbmUgd2hhdCBvdGhlciBlbGVtZW50cyBhcmUgcG90ZW50aWFsbHkgY291cGxlZCB0byBgQ0VQSF9MSUJgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBDRVBIX0ZTYCBvciBgQkxLX0RFVl9SQkRgIGFyZSBmdW5jdGlvbmFsbHkgKnJlcXVpcmVkKiBpbiB0aGlzIHNldHVwLCBvciBqdXN0IHBvdGVudGlhbGx5ICp1c2VkKi4gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHN0YW5kYXJkIENlcGggZmlsZXN5c3RlbSBkZXBsb3ltZW50LCBvciBhcmUgd2UgbW9yZSBmb2N1c2VkIG9uIFJCRCBibG9jayBkZXZpY2UgaW50ZXJhY3Rpb24/IFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyB0byBvcHRpbWl6ZSB0aGUgY29uZmlndXJhdGlvbi4gVGhpcyBtZWFucyBJIHdhbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGFyZSByZXF1aXJlZCwgb3B0aW9uYWwsIG9yIG11dHVhbGx5IGV4Y2x1c2l2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0VQSF9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NlcGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NlcGgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvY2VwaC9LY29uZmlnOjI6Y29uZmlnIENFUEhfRlNcbmZzL2NlcGgvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q2VwaCBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbVwmIzM0O1xuLS1cbmZzL2NlcGgvS2NvbmZpZz0xOT1pZiBDRVBIX0ZTXG5mcy9jZXBoL0tjb25maWc6MjA6Y29uZmlnIENFUEhfRlNDQUNIRVxuZnMvY2VwaC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtFbmFibGUgQ2VwaCBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvY2VwaC9LY29uZmlnPTI3PWVuZGlmXG5mcy9jZXBoL0tjb25maWctMjgtXG5mcy9jZXBoL0tjb25maWc6Mjk6Y29uZmlnIENFUEhfRlNfUE9TSVhfQUNMXG5mcy9jZXBoL0tjb25maWctMzAtXHRib29sIFwmIzM0O0NlcGggUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9jZXBoL0tjb25maWctMzgtXG5mcy9jZXBoL0tjb25maWc6Mzk6Y29uZmlnIENFUEhfRlNfU0VDVVJJVFlfTEFCRUxcbmZzL2NlcGgvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7Q2VwaEZTIFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBEZXRhaWxzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIHBvaW50aW5nIG1lIHRvd2FyZHMgYEJMS19ERVZfUkJEYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgYXJlIGdldHRpbmcgaW50ZXJlc3RpbmcuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gb2Ygb3VyIHN5c3RlbSB3aXRoIHRoZSBSQkQgYmxvY2sgZGV2aWNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgaG93IHRoZSBDZXBoIFJBRE9TIEJsb2NrIERldmljZSBmaXRzIGluIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBibG9jayBsYXllci4gT2theSwgc28gUkJELi4uIGxldCYjMzk7cyBjaGVjayBpdC4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1JCRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0zMDc9Y29uZmlnIFZJUlRJT19CTEtcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzE0LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMxNTpjb25maWcgQkxLX0RFVl9SQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMTYtXHR0cmlzdGF0ZSBcJiMzNDtSYWRvcyBibG9jayBkZXZpY2UgKFJCRClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFByb3RvY29sIFBhcnNpbmcgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIGBXQVJOX09OYCB0byBhY3R1YWwgZXJyb3IgcmV0dXJucyB3aXRoaW4gdGhlIHByb3RvY29sIHBhcnNpbmcuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaW5zdGVhZCBvZiBqdXN0IGxvZ2dpbmcgYSB3YXJuaW5nLCB3ZSYjMzk7cmUgbm93ICpoYW5kbGluZyogdGhlIGVycm9yIG1vcmUgZ3JhY2VmdWxseS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7VGhpcyBuZWVkcyBmdXp6aW5nLiYjMzQ7IEl0JiMzOTtzIGNyaXRpY2FsIHRvIHZlcmlmeSB0aGVzZSBuZXcgZXJyb3IgcGF0aHMgYXJlIHJvYnVzdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IGxlYWtpbmcgcmVzb3VyY2VzIG9yIGludHJvZHVjaW5nIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLCBhbmQgdGhhdCB3ZSBjYW4gcmVhY2ggbW9yZSBzdGF0ZXMgdGhyb3VnaCB0aGVzZSBwYXRocy4KCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLiBCYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2UgZnVuY3Rpb25zOiBgcHJvY2Vzc19jb25uZWN0YCwgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCwgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeWAsIGFuZCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbGAuCgpOb3csIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIHdoZXRoZXIgdGhlc2UgYXJlIHN0YXRpYy4gVGhlIGNvbnRleHQgaXMgaW1wb3J0YW50IGhlcmUuIEkgc2VlIHRoZXkgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW50IC4uLmAuIElmIHRoZXkgd2VyZSBub24tc3RhdGljLCB0aGV5IG1pZ2h0IGdldCBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMsIGJ1dCBpZiB0aGV5IGFyZSBzdGF0aWMgdGhleSBjb3VsZCBiZSBpbmxpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBub24tc3RhdGljIGNhbGxlcnMgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGludm9rZWQuIFRoYXQmIzM5O2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvZGUgZmxvdyBhbmQgd2hlcmUgdGhlc2UgZXJyb3IgcGF0aHMgYXJlIG1vc3QgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2Nlc3NfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlcl92MS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlcl92MS5jPTY5Nz1zdGF0aWMgaW50IHByb2Nlc3NfYmFubmVyKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy03MzktXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo3NDA6c3RhdGljIGludCBwcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzQxLXtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy03NDYtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo3NDc6XHRkb3V0KFwmIzM0O3Byb2Nlc3NfY29ubmVjdCBvbiAlcCB0YWcgJWRcXG5cJiMzNDssIGNvbiwgY29uLVx1MDAzZXYxLmluX3RhZyk7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy03NDgtXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODAyLVx0XHRjb24tXHUwMDNldjEuYXV0aF9yZXRyeSYjNDM7JiM0Mzs7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo4MDM6XHRcdGRvdXQoXCYjMzQ7cHJvY2Vzc19jb25uZWN0ICVwIGdvdCBCQURBVVRIT1JJWkVSIGF0dGVtcHQgJWRcXG5cJiMzNDssIGNvbixcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTgwNC1cdFx0ICAgICBjb24tXHUwMDNldjEuYXV0aF9yZXRyeSk7XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODIzLVx0XHQgKi9cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjgyNDpcdFx0ZG91dChcJiMzNDtwcm9jZXNzX2Nvbm5lY3QgZ290IFJFU0VUIHBlZXIgc2VxICV1XFxuXCYjMzQ7LFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODI1LVx0XHQgICAgIGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTg0OS1cdFx0ICovXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo4NTA6XHRcdGRvdXQoXCYjMzQ7cHJvY2Vzc19jb25uZWN0IGdvdCBSRVRSWV9TRVNTSU9OIG15IHNlcSAldSwgcGVlciAldVxcblwmIzM0Oyxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTg1MS1cdFx0ICAgICBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEub3V0X2Nvbm5lY3QuY29ubmVjdF9zZXEpLFxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTg2NS1cdFx0ICovXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo4NjY6XHRcdGRvdXQoXCYjMzQ7cHJvY2Vzc19jb25uZWN0IGdvdCBSRVRSWV9HTE9CQUwgbXkgJXUgcGVlcl9nc2VxICV1XFxuXCYjMzQ7LFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODY3LVx0XHQgICAgIGNvbi1cdTAwM2V2MS5wZWVyX2dsb2JhbF9zZXEsXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODk2LVx0XHRjb24tXHUwMDNlcGVlcl9mZWF0dXJlcyA9IHNlcnZlcl9mZWF0O1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODk3Olx0XHRkb3V0KFwmIzM0O3Byb2Nlc3NfY29ubmVjdCBnb3QgUkVBRFkgZ3NlcSAlZCBjc2VxICVkICglZClcXG5cJiMzNDssXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04OTgtXHRcdCAgICAgY29uLVx1MDAzZXYxLnBlZXJfZ2xvYmFsX3NlcSxcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYz0xMzI5PWludCBjZXBoX2Nvbl92MV90cnlfcmVhZChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtMTM3Mi1cdFx0XHRnb3RvIG91dDtcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjEzNzM6XHRcdHJldCA9IHByb2Nlc3NfY29ubmVjdChjb24pO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtMTM3NC1cdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI3NwoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgQ2VwaCBDb25uZWN0aW9uIEZsb3cqKgoKQWxyaWdodCwgc28gYGNlcGhfY29uX3YxX3RyeV9yZWFkYCB0cmlnZ2VycyBhIGNhbGwgdG8gYHByb2Nlc3NfY29ubmVjdGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbm5lY3Rpb24gaGFuZHNoYWtlIGhhcHBlbnMuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICphY3R1YWxseSogZ29pbmcgb24gaW5zaWRlIHRob3NlIGZ1bmN0aW9ucyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy4gU28sIEkgbmVlZCB0byBmb2N1cyBvbiBhIGZldyBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBjcml0aWNhbCB3aXRoaW4gdGhlIGBtZXNzZW5nZXJfdjIuY2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGBwcm9jZXNzX3NlcnZlcl9pZGVudGAsIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlgLCBhbmQgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWxgLiBUaGVzZSBwcm9iYWJseSBoYW5kbGUgdGhlIGNydWNpYWwgc3RlcHMgb2YgaWRlbnRpZnlpbmcgdGhlIHNlcnZlciwgaGFuZGxpbmcgYW55IHNlc3Npb24gcmV0cmllcyB0aGF0IG1heSBiZSBuZWVkZWQsIGFuZCBwZXJoYXBzIG1hbmFnaW5nIGdsb2JhbCByZXRyeSBhdHRlbXB0cyBpZiB0aGUgaW5pdGlhbCBhdHRlbXB0cyBmYWlsLiBJJiMzOTtsbCBsb29rIGludG8gaG93IGVhY2ggb2YgdGhlc2UgY29udHJpYnV0ZXMgdG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBmbG93IGFuZCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvY2Vzc19zZXJ2ZXJfaWRlbnR8cHJvY2Vzc19zZXNzaW9uX3JldHJ5fHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yNDI0PXN0YXRpYyBpbnQgcHJvY2Vzc19hdXRoX3NpZ25hdHVyZShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjQ3MS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI0NzI6c3RhdGljIGludCBwcm9jZXNzX3NlcnZlcl9pZGVudChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yNDczLVx0XHRcdFx0dm9pZCAqcCwgdm9pZCAqZW5kKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI1OTc9c3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmVjb25uZWN0X29rKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yNjI1LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjYyNjpzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yNjI3LVx0XHRcdFx0IHZvaWQgKnAsIHZvaWQgKmVuZClcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yNjY1LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjY2NjpzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWwoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjY2Ny1cdFx0XHRcdFx0dm9pZCAqcCwgdm9pZCAqZW5kKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI3OTQ9c3RhdGljIGludCBwcm9jZXNzX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgxNy1cdGNhc2UgRlJBTUVfVEFHX1NFUlZFUl9JREVOVDpcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI4MTg6XHRcdHJldCA9IHByb2Nlc3Nfc2VydmVyX2lkZW50KGNvbiwgcCwgZW5kKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MTktXHRcdGJyZWFrO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MjYtXHRjYXNlIEZSQU1FX1RBR19TRVNTSU9OX1JFVFJZOlxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjgyNzpcdFx0cmV0ID0gcHJvY2Vzc19zZXNzaW9uX3JldHJ5KGNvbiwgcCwgZW5kKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MjgtXHRcdGJyZWFrO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgyOS1cdGNhc2UgRlJBTUVfVEFHX1NFU1NJT05fUkVUUllfR0xPQkFMOlxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjgzMDpcdFx0cmV0ID0gcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChjb24sIHAsIGVuZCk7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODMxLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE3OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGg6IGBwcm9jZXNzX2NvbnRyb2xgKioKCk9rYXksIHNvIEkmIzM5O20gaW52ZXN0aWdhdGluZyBob3cgdGhpcyBzeXN0ZW0gb3BlcmF0ZXMuIE15IGZvY3VzIGhhcyBiZWVuIGRyYXduIHRvIGBwcm9jZXNzX2NvbnRyb2xgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyByZWxhdGlvbnNoaXBzLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGludm9rZWQgZnJvbT8gSSBpbW1lZGlhdGVseSB3YW50IHRvIGRldGVybWluZSB0aGUgaW1tZWRpYXRlIGNhbGxlcnMsIGFuZCB0aGVpciBjYWxsZXJzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGlkZW50aWZ5aW5nIGRlcGVuZGVuY2llczsgaXQmIzM5O3MgYWJvdXQgcmVjb25zdHJ1Y3RpbmcgdGhlIGNvbnRyb2wgZmxvdy4gU2VlaW5nIHRoZSBjaGFpbiBmcm9tIHRoZSBoaWdoZXN0IGxldmVscyB3aWxsIGhlbHAgcGFpbnQgdGhlIHBpY3R1cmUgb2Ygd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGZpdHMgaW4uIFRoaXMgc2hvdWxkIHByb3ZpZGUgY29udGV4dCBmb3Igd2hhdCBgcHJvY2Vzc19jb250cm9sYCBpcyBkZXNpZ25lZCB0byBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvY2Vzc19jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9Mjc3ND1zdGF0aWMgaW50IHByb2Nlc3NfYWNrKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI3OTMtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyNzk0OnN0YXRpYyBpbnQgcHJvY2Vzc19jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjc5NS17XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjkyOD1zdGF0aWMgaW50IF9faGFuZGxlX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5MzQtXHRpZiAoY29uLVx1MDAzZXYyLmluX2Rlc2MuZmRfdGFnICE9IEZSQU1FX1RBR19NRVNTQUdFKVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjkzNTpcdFx0cmV0dXJuIHByb2Nlc3NfY29udHJvbChjb24sIHAsIGVuZCk7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yOTM2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjMyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIHRoZSBDb250cm9sIEhhbmRsZXIqKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgbG9naWMgc2VlbXMgdG8gYmUgdGllZCB0byB0aGlzIGBfX2hhbmRsZV9jb250cm9sYCBtZXRob2QuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcGllY2VzIG9mIGNvZGUgYXJlIGFjdHVhbGx5ICpjYWxsaW5nKiB0aGlzIHRoaW5nLiBJdCYjMzk7cyB0aGUgZXNzZW50aWFsIGVudHJ5IHBvaW50IGZvciBjb250cm9sIHNpZ25hbHMgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlciB3aWxsIHByb3ZpZGUgdml0YWwgY29udGV4dCB0byBmdXJ0aGVyIGV4YW1pbmUgd2hhdCBpcyBnb2luZyBvbi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIHdoZXJlIHRoZSBleGVjdXRpb24gZmxvdyBpcyBvcmlnaW5hdGluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHN0YXRlIGFuZCBiZWhhdmlvciBvZiB0aGUgc3lzdGVtIGF0IHRoZSB0aW1lIHRoaXMgaGFuZGxlciBnZXRzIGludm9rZWQuIFRpbWUgdG8gZ2V0IGRvd24gdG8gdHJhY2luZyB0aGUgY2FsbCBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19oYW5kbGVfY29udHJvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI5MTA9c3RhdGljIGludCBwcm9jZXNzX21lc3NhZ2Uoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5MjctXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyOTI4OnN0YXRpYyBpbnQgX19oYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnApXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yOTI5LXtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yOTczPXN0YXRpYyBpbnQgaGFuZGxlX3ByZWFtYmxlKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDA1LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAwNjpcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgQ1RSTF9CT0RZKGNvbi1cdTAwM2V2Mi5pbl9idWYpKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMDctfVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMwMDk9c3RhdGljIGludCBoYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAyOC1cdFx0bWVtY3B5KGJ1ZiwgY29uLVx1MDAzZXYyLmluX2t2ZWNzWzBdLmlvdl9iYXNlLCBjdHJsX2xlbik7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMDI5Olx0XHRyZXR1cm4gX19oYW5kbGVfY29udHJvbChjb24sIGJ1Zik7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDMwLVx0fVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAzMS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwMzI6XHRyZXR1cm4gX19oYW5kbGVfY29udHJvbChjb24sIGNvbi1cdTAwM2V2Mi5pbl9rdmVjc1swXS5pb3ZfYmFzZSk7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDMzLX1cbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0zMDM1PXN0YXRpYyBpbnQgaGFuZGxlX2NvbnRyb2xfcmVtYWluZGVyKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDQ3LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzA0ODpcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgY29uLVx1MDAzZXYyLmluX2t2ZWNzWzBdLmlvdl9iYXNlIC1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNDktXHRcdFx0XHQgICAgIENFUEhfUFJFQU1CTEVfSU5MSU5FX0xFTik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IGludGVybmFsIG1vbm9sb2d1ZToKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIENvZGUmIzM5O3MgUHVycG9zZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCB0aGVzZSBhcmUgYWxsIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyDigJMgaXQgbWVhbnMgdGhleSYjMzk7cmUgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGV4cG9zZWQgb3IgY2FsbGVkIGV4dGVybmFsbHksIGxpa2VseSB1c2VkIGZvciBzcGVjaWZpYyBpbnRlcm5hbCB0YXNrcyB3aXRoaW4gYSBsYXJnZXIgbW9kdWxlLgoKVGhlIG1vc3QgbGlrZWx5IGVudHJ5IHBvaW50IGludG8gdGhpcyBzZWN0aW9uIG9mIGNvZGUgbG9va3MgbGlrZSBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXMgcHJldHR5IGRlc2NyaXB0aXZlOyBpdCBzdWdnZXN0cyB0aGlzIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIGF0dGVtcHRpbmcgdG8gcmVhZCBkYXRhIHVzaW5nIHRoZSBDZXBoIHByb3RvY29sLCBzcGVjaWZpY2FsbHkgdmVyc2lvbiAyLCBhbmQgJiMzNDt0cnkmIzM0OyBpbXBsaWVzIHNvbWUgc29ydCBvZiBlcnJvciBoYW5kbGluZyBvciBwb3RlbnRpYWwgZm9yIHBhcnRpYWwgcmVhZHMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIHN0YXJ0IHRvIGludmVzdGlnYXRlIHRoZSBpbm5lciB3b3JraW5ncy4gSSYjMzk7bGwgZm9jdXMgb24gdGhhdCBmdW5jdGlvbiYjMzk7cyBjYWxsIHN0YWNrIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cuIFVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIHRoaXMgJiMzNDt0cnlfcmVhZCYjMzQ7IGZ1bmN0aW9uIGdldHMgaW52b2tlZCB3aWxsIGJlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2VwaF9jb25fdjJfdHJ5X3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0zMTAwPXN0YXRpYyBpbnQgcG9wdWxhdGVfaW5faXRlcihzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzE2OC1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMxNjk6aW50IGNlcGhfY29uX3YyX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxNzAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzY4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBjb25jaXNlIHN1bW1hcnkgZm9yIGFuIGV4cGVydDoKCioqSWRlbnRpZnlpbmcgUmVhZCBFbnRyeSBQb2ludHMgaW4gdGhlIENlcGggQ29ubmVjdGlvbiBNb2R1bGUqKgoKQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgY2VudGVyZWQgYXJvdW5kIHBpbnBvaW50aW5nIHRoZSBrZXkgcmVhZCBlbnRyeSBwb2ludHMgd2l0aGluIHRoZSBDZXBoIGNvbm5lY3Rpb24gaGFuZGxpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgSSYjMzk7dmUgaWRlbnRpZmllZCBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgIGFzIHBvdGVudGlhbCBpbml0aWFsIGNhbmRpZGF0ZXMgZm9yIGludmVzdGlnYXRpbmcgaG93IGluY29taW5nIGRhdGEgaXMgcHJvY2Vzc2VkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHBlcmZvcm0gYSB0aG9yb3VnaCBzZWFyY2ggb2YgdGhlIGNvZGUgYmFzZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgc2VydmUgYXMgZW50cnkgcG9pbnRzIGZvciByZWFkIG9wZXJhdGlvbnMgYmV5b25kIHRoZSB0d28gdGhhdCBJJiMzOTt2ZSBhbHJlYWR5IGNvbWUgYWNyb3NzLiBJJiMzOTtsbCBuZWVkIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGFsbCBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgcmVhZCBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NlcGhfY29uX3YxX3RyeV9yZWFkfGNlcGhfY29uX3YyX3RyeV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlci5jPTE1NDI9c3RhdGljIHZvaWQgY2VwaF9jb25fd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xNTc0LVx0XHRpZiAoY2VwaF9tc2dyMihmcm9tX21zZ3IoY29uLVx1MDAzZW1zZ3IpKSlcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjE1NzU6XHRcdFx0cmV0ID0gY2VwaF9jb25fdjJfdHJ5X3JlYWQoY29uKTtcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE1NzYtXHRcdGVsc2Vcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjE1Nzc6XHRcdFx0cmV0ID0gY2VwaF9jb25fdjFfdHJ5X3JlYWQoY29uKTtcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE1NzgtXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYz0xMzE0PXN0YXRpYyBpbnQgcmVhZF9rZWVwYWxpdmVfYWNrKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xMzI4LSAqL1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6MTMyOTppbnQgY2VwaF9jb25fdjFfdHJ5X3JlYWQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtMTMzMC17XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MzEwMD1zdGF0aWMgaW50IHBvcHVsYXRlX2luX2l0ZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxNjgtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMTY5OmludCBjZXBoX2Nvbl92Ml90cnlfcmVhZChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTcwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQyOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ2VwaCBDb25uZWN0aW9uIFByb2Nlc3NpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBDZXBoIGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBjZXBoX2Nvbl93b3JrZm5gLiBUaGlzIGlzIHRoZSBjb3JlIHdvcmtlciBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZywgc28gdGhlIHJlYWwgYWN0aW9uIG11c3QgYmUgaW4gZWl0aGVyIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgb3IgYGNlcGhfY29uX3YyX3RyeV9yZWFkYC4gVGhvc2UgYXJlIHRoZSBwcmltZSBzdXNwZWN0cywgdGhhdCBpcyB3aGVyZSB0aGUgbWVhdCBpcy4gU2hvdWxkIEkgbG9vayBhdCB0aGUgY2FsbGVyLCBgY2VwaF9jb25fd29ya2ZuYCwgb3IgdGhlIGNhbGxlZXMsIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgYW5kIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGA/IEkgdGhpbmsgdGhlIGNhbGxlZXMuIFRoZXNlIGB0cnlfcmVhZGAgZnVuY3Rpb25zIGFyZSB0aGUga2V5LiBXYWl0LCBob2xkIG9uLi4uIHRoZXkgKmFyZSogZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhleSBhcmUgZXhwb3J0ZWQ7IEkgY2FuJiMzOTt0IGJlIHN1cmUgd2l0aG91dCB2ZXJpZnlpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qY2VwaF9jb25fdjFfdHJ5X3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzkwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIHdpdGggdGhlIGJvbGRlZCBoZWFkZXIgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBTeW1ib2wgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIHRoZSBzeW1ib2xzIGluIHF1ZXN0aW9uIGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgYGV4dGVybmAsIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIG1lYW5zIHRoZXkgaGF2ZSBpbnRlcm5hbCBsaW5rYWdlIGFuZCByZXNpZGUgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgY29tcGlsYXRpb24gdW5pdHMsIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIGluIHdlbGwtc3RydWN0dXJlZCBjb2RlLiBCdXQsIHRoZXkmIzM5O3JlIG5vdCBgc3RhdGljYCBlaXRoZXIsIG1lYW5pbmcgdGhleSYjMzk7cmUgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIGV4ZWN1dGFibGUsIHRob3VnaCBwb3RlbnRpYWxseSB3aXRoIGludGVybmFsIHZpc2liaWxpdHkuIFNvLCBnaXZlbiB0aGF0IHRoZXkgYXJlIGluIGRpZmZlcmVudCBmaWxlcywgdGhleSBhcmUgZGVmaW5pdGVseSBkaXN0aW5jdCBzeW1ib2xzLCBldmVuIGlmIG9ubHkgd2l0aGluIHRoZSBsaW5rZWQgcHJvZ3JhbS4gSXQmIzM5O3MgYSBub24tc3RhdGljLCBsb2NhbGx5IHZpc2libGUgc3ltYm9sIHNpdHVhdGlvbiDigJMgY29tbW9uLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHVzZWQuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBjZXBoX2Nvbl93b3JrZm5gLiBJJiMzOTtsbCB0cmFjZSB0aGF0IGZ1bmN0aW9uIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN5bWJvbHMgaW4gcXVlc3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZXBoX2Nvbl93b3JrZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTQ2PXN0YXRpYyB2b2lkIGNhbmNlbF9jb24oc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKTtcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjE0NzpzdGF0aWMgdm9pZCBjZXBoX2Nvbl93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICopO1xubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTQ4LXN0YXRpYyB2b2lkIGNvbl9mYXVsdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jPTYzMj12b2lkIGNlcGhfY29uX2luaXQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwcml2YXRlLFxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jLTY0Ni1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmNvbi1cdTAwM2VvdXRfc2VudCk7XG5uZXQvY2VwaC9tZXNzZW5nZXIuYzo2NDc6XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZjb24tXHUwMDNld29yaywgY2VwaF9jb25fd29ya2ZuKTtcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTY0OC1cbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXIuYz0xNTIwPXN0YXRpYyB2b2lkIGNvbl9mYXVsdF9maW5pc2goc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE1NDEtICovXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxNTQyOnN0YXRpYyB2b2lkIGNlcGhfY29uX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xNTQzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgdGhlIENlcGggQ29ubmVjdGlvbiBXb3JrIEZ1bmN0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBgY2VwaF9jb25fd29ya2ZuYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgIG1vcmUgc2lnbmlmaWNhbnQgcG9pbnRzIG9mIGludGVyZXN0IOKAkyB0aGV5JiMzOTtyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHRoZSBub24tc3RhdGljIGNvZGUuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgYWZmZWN0IHRoZSBvdmVyYWxsIGZsb3cuCgpMZXQmIzM5O3MgZXhwYW5kIHRoZSBzY29wZS4gSSBuZWVkIHRvIHNlZSB3aGF0IGVsc2UgaGFzIGJlZW4gdG91Y2hlZCBpbiB0aGlzIHBhdGNoIGJleW9uZCB0aG9zZSBpbml0aWFsIHJlYWRzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGxpc3QgaXM6IGBwcm9jZXNzX2Nvbm5lY3RgIChzdGF0aWMpLCBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgIChzdGF0aWMpLCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5YCAoc3RhdGljKSwgYW5kIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsYCAoc3RhdGljKS4gVGhlc2UgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBtZWFucyB0aGVpciBzY29wZSBpcyBsaW1pdGVkIGFuZCBzbyBpdCBpcyBhbiBpbmRpY2F0aW9uIG9mIGZvY3VzZWQgYW5kIGxvY2FsaXNlZCBtb2RpZmljYXRpb24uCgpOb3cgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBlbGVtZW50cywgcHJpbWFyaWx5IGBDRVBIX0xJQmAsIGFyZSBjb3JyZWN0IGFuZCBjb21wbGV0ZS4gQXJlIHRoZXJlIGFueSBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0aGF0IGhhdmUgYmVlbiBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkPyBBIHF1aWNrIHNjYW4gb2YgYG5ldC9jZXBoL0tjb25maWdgIHNob3VsZCByZXZlYWwgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIGJ1aWxkIGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jZXBoL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIENFUEhfTElCXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDZXBoIGNvcmUgbGlicmFyeVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0NCQ1xuICAgODpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fS1JCNVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gIDExOlx0XHRzZWxlY3QgQ1JZUFRPXG4gIDEyOlx0XHRzZWxlY3QgS0VZU1xuICAxMzpcdFx0ZGVmYXVsdCBuXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIENob29zZSBZIG9yIE0gaGVyZSB0byBpbmNsdWRlIGNlcGhsaWIsIHdoaWNoIHByb3ZpZGVzIHRoZVxuICAxNjpcdFx0ICBjb21tb24gZnVuY3Rpb25hbGl0eSB0byBib3RoIHRoZSBDZXBoIGZpbGVzeXN0ZW0gYW5kXG4gIDE3Olx0XHQgIHRvIHRoZSByYWRvcyBibG9jayBkZXZpY2UgKHJiZCkuXG4gIDE4Olx0XG4gIDE5Olx0XHQgIE1vcmUgaW5mb3JtYXRpb24gYXQgaHR0cHM6Ly9jZXBoLmlvLy5cbiAgMjA6XHRcbiAgMjE6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjI6XHRcbiAgMjM6XHRjb25maWcgQ0VQSF9MSUJfUFJFVFRZREVCVUdcbiAgMjQ6XHRcdGJvb2wgXCYjMzQ7SW5jbHVkZSBmaWxlOmxpbmUgaW4gY2VwaCBkZWJ1ZyBvdXRwdXRcJiMzNDtcbiAgMjU6XHRcdGRlcGVuZHMgb24gQ0VQSF9MSUJcbiAgMjY6XHRcdGRlZmF1bHQgblxuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgZGVidWcgb3V0cHV0IHdpbGwgaW5jbHVkZSBhIGZpbGVuYW1lIGFuZFxuICAyOTpcdFx0ICBsaW5lIHRvIGFpZCBkZWJ1Z2dpbmcuICBUaGlzIGluY3JlYXNlcyBrZXJuZWwgc2l6ZSBhbmQgc2xvd3NcbiAgMzA6XHRcdCAgZXhlY3V0aW9uIHNsaWdodGx5IHdoZW4gZGVidWcgY2FsbCBzaXRlcyBhcmUgZW5hYmxlZCAoZS5nLixcbiAgMzE6XHRcdCAgdmlhIENPTkZJR19EWU5BTUlDX0RFQlVHKS5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgQ0VQSF9MSUJfVVNFX0ROU19SRVNPTFZFUlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtVc2UgaW4ta2VybmVsIHN1cHBvcnQgZm9yIEROUyBsb29rdXBcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gQ0VQSF9MSUJcbiAgMzg6XHRcdHNlbGVjdCBETlNfUkVTT0xWRVJcbiAgMzk6XHRcdGRlZmF1bHQgblxuICA0MDpcdFx0aGVscFxuICA0MTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgaG9zdG5hbWVzIChlLmcuIG1vbml0b3IgYWRkcmVzc2VzKSB3aWxsXG4gIDQyOlx0XHQgIGJlIHJlc29sdmVkIHVzaW5nIHRoZSBDT05GSUdfRE5TX1JFU09MVkVSIGZhY2lsaXR5LlxuICA0MzpcdFxuICA0NDpcdFx0ICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBDT05GSUdfRE5TX1JFU09MVkVSIGNvbnN1bHRcbiAgNDU6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Ruc19yZXNvbHZlci5yc3RcbiAgNDY6XHRcbiAgNDc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gRXhwbG9yYXRpb24gZm9yIENlcGggRnV6emluZyoqCgpPa2F5LCBzbyBgQ0VQSF9MSUJgIHNlZW1zIGxpa2UgdGhlIGtleSBzdGFydGluZyBwb2ludC4gSXQmIzM5O3MgdGhlIGNvcmUgQ2VwaCBsaWJyYXJ5LCBhbmQganVzdCB0aGF0IHNob3VsZCBzdWZmaWNlLiBXYWl0IGEgbWludXRlLi4uIGBDRVBIX0xJQmAgaXMgYSB0cmlzdGF0ZSwgbWVhbmluZyBpdCBjYW4gYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUuIFBlcmZlY3QhIElmIHdlJiMzOTtyZSBhaW1pbmcgZm9yIGZ1enppbmcsIGVuYWJsaW5nIGBDRVBIX0xJQmAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgbW92ZS4gSG93ZXZlciwgSSB0aGluayBpdCBtaWdodCBub3QgYmUgZW5vdWdoIG9uIGl0cyBvd24uIGBDRVBIX0xJQmAgcHJvdmlkZXMgdGhlIHVuZGVybHlpbmcgbGlicmFyeSwgYnV0IHRoZSBhY3R1YWwgY29ubmVjdGlvbnMgYXJlIGluaXRpYXRlZCBieSBoaWdoZXItbGV2ZWwgY29tcG9uZW50cyBsaWtlIHRoZSBmaWxlc3lzdGVtIG9yIHRoZSBibG9jayBkZXZpY2UuCgpUaGVyZWZvcmUsIHRvIHJlYWxpc3RpY2FsbHkgdHJpZ2dlciBjb25uZWN0aW9ucyBhbmQgZXhwb3NlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIEkgc2hvdWxkIGVuYWJsZSBgQ0VQSF9GU2AgYW5kIGBCTEtfREVWX1JCRGAgYXMgd2VsbC4gVGhlc2UgYXJlIHRoZSBjb21wb25lbnRzIHRoYXQgYXJlIGxpa2VseSB0byBiZSByZXNwb25zaWJsZSBmb3IgdGhlIGNvbm5lY3Rpb24gaW5pdGlhdGlvbi4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYm90aC4gSSBzaG91bGQgaGF2ZSBhIGxvb2sgYXQgYGZzL2NlcGgvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb2YgdGhlc2UgdHdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2NlcGgvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBDRVBIX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDU6XHRcdHNlbGVjdCBDRVBIX0xJQlxuICAgNjpcdFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbiAgIDc6XHRcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuICAgODpcdFx0ZGVmYXVsdCBuXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIENob29zZSBZIG9yIE0gaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIG1vdW50aW5nIHRoZVxuICAxMTpcdFx0ICBleHBlcmltZW50YWwgQ2VwaCBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbS4gIENlcGggaXMgYW4gZXh0cmVtZWx5XG4gIDEyOlx0XHQgIHNjYWxhYmxlIGZpbGUgc3lzdGVtIGRlc2lnbmVkIHRvIHByb3ZpZGUgaGlnaCBwZXJmb3JtYW5jZSxcbiAgMTM6XHRcdCAgcmVsaWFibGUgYWNjZXNzIHRvIHBldGFieXRlcyBvZiBzdG9yYWdlLlxuICAxNDpcdFxuICAxNTpcdFx0ICBNb3JlIGluZm9ybWF0aW9uIGF0IGh0dHBzOi8vY2VwaC5pby8uXG4gIDE2Olx0XG4gIDE3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDE4Olx0XG4gIDE5Olx0aWYgQ0VQSF9GU1xuICAyMDpcdGNvbmZpZyBDRVBIX0ZTQ0FDSEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyB0aGUgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIGBDRVBIX0ZTYCBpcyBjb25maWd1cmVkIHRvIHVzZSBgQ0VQSF9MSUJgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgZmlsZXN5c3RlbSBuZWVkaW5nIHRoZSBDZXBoIGxpYnJhcnkgdG8gZnVuY3Rpb24uIE5vdywgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIGBCTEtfREVWX1JCRGAgaXMgZW5hYmxlZCB3aXRoaW4gdGhlIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9ibG9jay9LY29uZmlnYCB0byBjb25maXJtIGV2ZXJ5dGhpbmcgbG9va3MgZ29vZCB0aGVyZS4gSnVzdCBhIHF1aWNrIGRvdWJsZS1jaGVjayB0byBlbnN1cmUgbm8gdW5leHBlY3RlZCBjb25mbGljdHMgZXhpc3Qgd2l0aCB0aGUgYmxvY2sgbGF5ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTU6XHRjb25maWcgQkxLX0RFVl9SQkRcbiAzMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1JhZG9zIGJsb2NrIGRldmljZSAoUkJEKVwmIzM0O1xuIDMxNzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBCTE9DS1xuIDMxODpcdFx0c2VsZWN0IENFUEhfTElCXG4gMzE5Olx0XHRoZWxwXG4gMzIwOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgaW5jbHVkZSB0aGUgUmFkb3MgYmxvY2sgZGV2aWNlLCB3aGljaCBzdHJpcGVzXG4gMzIxOlx0XHQgIGEgYmxvY2sgZGV2aWNlIG92ZXIgb2JqZWN0cyBzdG9yZWQgaW4gdGhlIENlcGggZGlzdHJpYnV0ZWQgb2JqZWN0XG4gMzIyOlx0XHQgIHN0b3JlLlxuIDMyMzpcdFxuIDMyNDpcdFx0ICBNb3JlIGluZm9ybWF0aW9uIGF0IGh0dHA6Ly9jZXBoLm5ld2RyZWFtLm5ldC8uXG4gMzI1Olx0XG4gMzI2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMzI3Olx0XG4gMzI4Olx0Y29uZmlnIEJMS19ERVZfVUJMS1xuIDMyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuIDMzMDpcdFx0c2VsZWN0IElPX1VSSU5HXG4gMzMxOlx0XHRoZWxwXG4gMzMyOlx0XHQgIGlvX3VyaW5nIGJhc2VkIHVzZXJzcGFjZSBibG9jayBkcml2ZXIuIFRvZ2V0aGVyIHdpdGggdWJsayBzZXJ2ZXIsIHVibGtcbiAzMzM6XHRcdCAgaGFzIGJlZW4gd29ya2luZyB3ZWxsLCBidXQgaW50ZXJmYWNlIHdpdGggdXNlcnNwYWNlIG9yIGNvbW1hbmQgZGF0YVxuIDMzNDpcdFx0ICBkZWZpbml0aW9uIGlzbiYjMzk7dCBmaW5hbGl6ZWQgeWV0LCBhbmQgbWlnaHQgY2hhbmdlIGFjY29yZGluZyB0byBmdXR1cmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MzEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENlcGggTWVzc2VuZ2VyIFJlYWQgUGF0aHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTt2ZSBkZWNpZGVkIGBDRVBIX0ZTYCBhbmQgYEJMS19ERVZfUkJEYCBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSB1c2VmdWwgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uLCBzbyB0aGV5JiMzOTtyZSBlbmFibGVkLiBOb3csIHRoZSBrZXkgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbnQgcmVhZCBwYXRocyB3aXRoaW4gdGhlIENlcGggbWVzc2VuZ2VyIGNvZGUsIHNwZWNpZmljYWxseSB2ZXJzaW9uIDEgYW5kIHZlcnNpb24gMi4KCkkgbmVlZCB0byBmb2N1cyBvbiB0aGUgc3ltYm9scyBpbnZvbHZlZCBpbiByZWFkaW5nIGRhdGEuIEkmIzM5O20gYWxyZWFkeSBsb29raW5nIGF0IGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgYW5kIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUgdmljaW5pdHkgb2YgdGhlIG1vZGlmaWVkIGNvZGUgdGhhdCBJIHNob3VsZCBiZSBjb25zaWRlcmluZz8gSSBoYXZlIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCkluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AsIGl0JiMzOTtzIGNsZWFyIHRoYXQgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBjYWxscyBgcHJvY2Vzc19jb25uZWN0YC4gVGhhdCYjMzk7cyB0aGUgdjEgcGF0aC4gSW4gYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYCwgdGhpbmdzIGdldCBhIGxpdHRsZSBtb3JlIGludm9sdmVkLiBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgIGNhbGxzIGBwb3B1bGF0ZV9pbl9pdGVyYCwgd2hpY2ggaGFuZGxlcyB0aGUgYWN0dWFsIHJlYWRpbmcgb2YgdGhlIGRhdGEsIHRoZW4gaXQgY2FsbHMgYHByb2Nlc3NfY29udHJvbGAuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjYWxsIGNoYWluIHRoZXJlLiBTcGVjaWZpY2FsbHksIGBwcm9jZXNzX2NvbnRyb2xgIGlzIGNhbGxlZCBmcm9tIGBfX2hhbmRsZV9jb250cm9sYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGhhbmRsZV9jb250cm9sYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAuIFRoZSB2MiBwYXRoIGlzIG1vcmUgY29tcGxleCwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2Agc3BlY2lmaWNhbGx5LCBhbmQgdGhvcm91Z2hseSByZXZpZXcgdGhlIGNvZGUgc3Vycm91bmRpbmcgYGNlcGhfY29uX3YyX3RyeV9yZWFkYCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgcmVhZCBwcm9jZXNzIGFuZCBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NlcGhfY29uX3YyX3RyeV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MzEwMD1zdGF0aWMgaW50IHBvcHVsYXRlX2luX2l0ZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxNjgtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMTY5OmludCBjZXBoX2Nvbl92Ml90cnlfcmVhZChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTcwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgZnVuY3Rpb24sIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAsIGFzc3VtaW5nIEkmIzM5O20gdGhlIGV4cGVydDoKCioqQW5hbHl6aW5nIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAgZnVuY3Rpb24uIEJhc2VkIG9uIHRoZSBuYW1lIGFsb25lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgY29yZSByZWFkIG9wZXJhdGlvbiwgcHJvYmFibHkgZGVhbGluZyB3aXRoIHRoZSBDZXBoIHByb3RvY29sIHZlcnNpb24gMi4gIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIHBsYWNlIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrIOKAkyBpcyB0aGlzIGEgZGlyZWN0IHJlYWQgZnJvbSBhIHNvY2tldCwgb3IgaXMgaXQgYWJzdHJhY3RlZCBmdXJ0aGVyPyBXaGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgc2hvdWxkIEkgYW50aWNpcGF0ZT8gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCwgYXMgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGNvbm5lY3Rpb24gaXMgYSBwcmltZSBzdXNwZWN0IGZvciByYWNlIGNvbmRpdGlvbnMuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBvdmVyYWxsIGRlc2lnbi4gSXMgdGhpcyBhIGJsb2NraW5nIHJlYWQsIG9yIGRvZXMgaXQgaW5jb3Jwb3JhdGUgbm9uLWJsb2NraW5nIEkvTyB3aXRoIGNhbGxiYWNrcyBvciBwb2xsaW5nPyBUaGUgaW1wbGljYXRpb25zIGZvciB0aHJlYWQgdXNhZ2UgYW5kIHNjYWxhYmlsaXR5IGFyZSB2ZXJ5IGRpZmZlcmVudCBkZXBlbmRpbmcgb24gdGhlIGFwcHJvYWNoLiBGaW5hbGx5LCBnaXZlbiBpdCYjMzk7cyBhICYjMzQ7dHJ5X3JlYWQsJiMzNDsgSSYjMzk7bSBicmFjaW5nIG15c2VsZiB0byBzZWUgaG93IGl0IGhhbmRsZXMgcGFydGlhbCByZWFkcyBvciBwb3RlbnRpYWwgRUFHQUlOIG9yIEVXT1VMREJMT0NLIGNvbmRpdGlvbnMuIEhvdyBkb2VzIGl0IHNpZ25hbCB0byB0aGUgY2FsbGVyIHRoZSByZXN1bHRzIG9mIHRoZSByZWFkPyBJcyBpdCBhIHJldHVybiBjb2RlLCBleGNlcHRpb24sIHNvbWUgc29ydCBvZiBzdGF0dXMgZmxhZz8gVGltZSB0byBnZXQgcmVhZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNjksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE2OTpcdGludCBjZXBoX2Nvbl92Ml90cnlfcmVhZChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4zMTcwOlx0e1xuMzE3MTpcdFx0aW50IHJldDtcbjMxNzI6XHRcbjMxNzM6XHRcdGRvdXQoXCYjMzQ7JXMgY29uICVwIHN0YXRlICVkIG5lZWQgJXp1XFxuXCYjMzQ7LCBfX2Z1bmNfXywgY29uLCBjb24tXHUwMDNlc3RhdGUsXG4zMTc0Olx0XHQgICAgIGlvdl9pdGVyX2NvdW50KFx1MDAyNmNvbi1cdTAwM2V2Mi5pbl9pdGVyKSk7XG4zMTc1Olx0XG4zMTc2Olx0XHRpZiAoY29uLVx1MDAzZXN0YXRlID09IENFUEhfQ09OX1NfUFJFT1BFTilcbjMxNzc6XHRcdFx0cmV0dXJuIDA7XG4zMTc4Olx0XG4zMTc5Olx0XHQvKlxuMzE4MDpcdFx0ICogV2Ugc2hvdWxkIGFsd2F5cyBoYXZlIHNvbWV0aGluZyBwZW5kaW5nIGhlcmUuICBJZiBub3QsXG4zMTgxOlx0XHQgKiBhdm9pZCBjYWxsaW5nIHBvcHVsYXRlX2luX2l0ZXIoKSBhcyBpZiB3ZSByZWFkIHNvbWV0aGluZ1xuMzE4MjpcdFx0ICogKGNlcGhfdGNwX3JlY3YoKSB3b3VsZCBpbW1lZGlhdGVseSByZXR1cm4gMSkuXG4zMTgzOlx0XHQgKi9cbjMxODQ6XHRcdGlmIChXQVJOX09OKCFpb3ZfaXRlcl9jb3VudChcdTAwMjZjb24tXHUwMDNldjIuaW5faXRlcikpKVxuMzE4NTpcdFx0XHRyZXR1cm4gLUVOT0RBVEE7XG4zMTg2Olx0XG4zMTg3Olx0XHRmb3IgKDs7KSB7XG4zMTg4Olx0XHRcdHJldCA9IGNlcGhfdGNwX3JlY3YoY29uKTtcbjMxODk6XHRcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4zMTkwOlx0XHRcdFx0cmV0dXJuIHJldDtcbjMxOTE6XHRcbjMxOTI6XHRcdFx0cmV0ID0gcG9wdWxhdGVfaW5faXRlcihjb24pO1xuMzE5MzpcdFx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuMzE5NDpcdFx0XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUFHQUlOIFx1MDAyNlx1MDAyNiAhY29uLVx1MDAzZWVycm9yX21zZylcbjMxOTU6XHRcdFx0XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcJiMzNDtyZWFkIHByb2Nlc3NpbmcgZXJyb3JcJiMzNDs7XG4zMTk2Olx0XHRcdFx0cmV0dXJuIHJldDtcbjMxOTc6XHRcdFx0fVxuMzE5ODpcdFx0fVxuMzE5OTpcdH1cbjMyMDA6XHRcbjMyMDE6XHRzdGF0aWMgdm9pZCBxdWV1ZV9kYXRhKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgc3RydWN0IGNlcGhfbXNnICptc2cpXG4zMjAyOlx0e1xuMzIwMzpcdFx0c3RydWN0IGJpb192ZWMgYnY7XG4zMjA0Olx0XG4zMjA1Olx0XHRjb24tXHUwMDNldjIub3V0X2VwaWwuZGF0YV9jcmMgPSAtMTtcbjMyMDY6XHRcdGNlcGhfbXNnX2RhdGFfY3Vyc29yX2luaXQoXHUwMDI2Y29uLVx1MDAzZXYyLm91dF9jdXJzb3IsIG1zZyxcbjMyMDc6XHRcdFx0XHRcdCAgZGF0YV9sZW4obXNnKSk7XG4zMjA4Olx0XG4zMjA5Olx0XHRnZXRfYnZlY19hdChcdTAwMjZjb24tXHUwMDNldjIub3V0X2N1cnNvciwgXHUwMDI2YnYpO1xuMzIxMDpcdFx0c2V0X291dF9idmVjKGNvbiwgXHUwMDI2YnYsIHRydWUpO1xuMzIxMTpcdFx0Y29uLVx1MDAzZXYyLm91dF9zdGF0ZSA9IE9VVF9TX1FVRVVFX0RBVEFfQ09OVDtcbjMyMTI6XHR9XG4zMjEzOlx0XG4zMjE0Olx0c3RhdGljIHZvaWQgcXVldWVfZGF0YV9jb250KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgc3RydWN0IGNlcGhfbXNnICptc2cpXG4zMjE1Olx0e1xuMzIxNjpcdFx0c3RydWN0IGJpb192ZWMgYnY7XG4zMjE3Olx0XG4zMjE4Olx0XHRjb24tXHUwMDNldjIub3V0X2VwaWwuZGF0YV9jcmMgPSBjZXBoX2NyYzMyY19wYWdlKFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQxNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIEhlYXJ0IG9mIHRoZSBNYXR0ZXIqKgoKQWxyaWdodCwgaGFuZyBvbi4gSSBuZWVkIHRvIGJhY2t0cmFjayBqdXN0IGEgYml0LiBJIHdhcyBza2ltbWluZywgYnV0IG5vdyBpdCYjMzk7cyBzaW5raW5nIGluLiBJIGp1c3QgcmVhbGl6ZWQgdGhhdCB0aGUgZnVuY3Rpb24gSSB3YXMgb3Zlcmxvb2tpbmcsIGBwb3B1bGF0ZV9pbl9pdGVyYCwgdGhhdCYjMzk7cyAqYWN0dWFsbHkqIHdoZXJlIHRoZSBjb3JlIHByb2Nlc3Npbmcgb2YgdGhlIGRhdGEgdGFrZXMgcGxhY2UhIFRoYXQmIzM5O3MgdGhlIGtleSwgdGhlIGVuZ2luZS4gSSBuZWVkIHRvIHplcm8gaW4gb24gKnRoYXQqIGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBtZWNoYW5pY3MuIEkgaGFkIGluaXRpYWxseSB6b29tZWQgb3V0IHRvbyBtdWNoLiBOb3csIHRoZSBkZXRhaWxzIG9mIGhvdyBpdCB3b3JrcyBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIHN5c3RlbS4gVGltZSB0byBkZWx2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzEwMDpcdHN0YXRpYyBpbnQgcG9wdWxhdGVfaW5faXRlcihzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4zMTAxOlx0e1xuMzEwMjpcdFx0aW50IHJldDtcbjMxMDM6XHRcbjMxMDQ6XHRcdGRvdXQoXCYjMzQ7JXMgY29uICVwIHN0YXRlICVkIGluX3N0YXRlICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgY29uLCBjb24tXHUwMDNlc3RhdGUsXG4zMTA1Olx0XHQgICAgIGNvbi1cdTAwM2V2Mi5pbl9zdGF0ZSk7XG4zMTA2Olx0XHRXQVJOX09OKGlvdl9pdGVyX2NvdW50KFx1MDAyNmNvbi1cdTAwM2V2Mi5pbl9pdGVyKSk7XG4zMTA3Olx0XG4zMTA4Olx0XHRpZiAoY29uLVx1MDAzZXN0YXRlID09IENFUEhfQ09OX1NfVjJfQkFOTkVSX1BSRUZJWCkge1xuMzEwOTpcdFx0XHRyZXQgPSBwcm9jZXNzX2Jhbm5lcl9wcmVmaXgoY29uKTtcbjMxMTA6XHRcdH0gZWxzZSBpZiAoY29uLVx1MDAzZXN0YXRlID09IENFUEhfQ09OX1NfVjJfQkFOTkVSX1BBWUxPQUQpIHtcbjMxMTE6XHRcdFx0cmV0ID0gcHJvY2Vzc19iYW5uZXJfcGF5bG9hZChjb24pO1xuMzExMjpcdFx0fSBlbHNlIGlmICgoY29uLVx1MDAzZXN0YXRlIFx1MDAzZT0gQ0VQSF9DT05fU19WMl9IRUxMTyBcdTAwMjZcdTAwMjZcbjMxMTM6XHRcdFx0ICAgIGNvbi1cdTAwM2VzdGF0ZSBcdTAwM2M9IENFUEhfQ09OX1NfVjJfU0VTU0lPTl9SRUNPTk5FQ1QpIHx8XG4zMTE0Olx0XHRcdCAgIGNvbi1cdTAwM2VzdGF0ZSA9PSBDRVBIX0NPTl9TX09QRU4pIHtcbjMxMTU6XHRcdFx0c3dpdGNoIChjb24tXHUwMDNldjIuaW5fc3RhdGUpIHtcbjMxMTY6XHRcdFx0Y2FzZSBJTl9TX0hBTkRMRV9QUkVBTUJMRTpcbjMxMTc6XHRcdFx0XHRyZXQgPSBoYW5kbGVfcHJlYW1ibGUoY29uKTtcbjMxMTg6XHRcdFx0XHRicmVhaztcbjMxMTk6XHRcdFx0Y2FzZSBJTl9TX0hBTkRMRV9DT05UUk9MOlxuMzEyMDpcdFx0XHRcdHJldCA9IGhhbmRsZV9jb250cm9sKGNvbik7XG4zMTIxOlx0XHRcdFx0YnJlYWs7XG4zMTIyOlx0XHRcdGNhc2UgSU5fU19IQU5ETEVfQ09OVFJPTF9SRU1BSU5ERVI6XG4zMTIzOlx0XHRcdFx0cmV0ID0gaGFuZGxlX2NvbnRyb2xfcmVtYWluZGVyKGNvbik7XG4zMTI0Olx0XHRcdFx0YnJlYWs7XG4zMTI1Olx0XHRcdGNhc2UgSU5fU19QUkVQQVJFX1JFQURfREFUQTpcbjMxMjY6XHRcdFx0XHRyZXQgPSBwcmVwYXJlX3JlYWRfZGF0YShjb24pO1xuMzEyNzpcdFx0XHRcdGJyZWFrO1xuMzEyODpcdFx0XHRjYXNlIElOX1NfUFJFUEFSRV9SRUFEX0RBVEFfQ09OVDpcbjMxMjk6XHRcdFx0XHRwcmVwYXJlX3JlYWRfZGF0YV9jb250KGNvbik7XG4zMTMwOlx0XHRcdFx0cmV0ID0gMDtcbjMxMzE6XHRcdFx0XHRicmVhaztcbjMxMzI6XHRcdFx0Y2FzZSBJTl9TX1BSRVBBUkVfUkVBRF9FTkNfUEFHRTpcbjMxMzM6XHRcdFx0XHRwcmVwYXJlX3JlYWRfZW5jX3BhZ2UoY29uKTtcbjMxMzQ6XHRcdFx0XHRyZXQgPSAwO1xuMzEzNTpcdFx0XHRcdGJyZWFrO1xuMzEzNjpcdFx0XHRjYXNlIElOX1NfUFJFUEFSRV9TUEFSU0VfREFUQTpcbjMxMzc6XHRcdFx0XHRyZXQgPSBwcmVwYXJlX3NwYXJzZV9yZWFkX2RhdGEoY29uKTtcbjMxMzg6XHRcdFx0XHRicmVhaztcbjMxMzk6XHRcdFx0Y2FzZSBJTl9TX1BSRVBBUkVfU1BBUlNFX0RBVEFfQ09OVDpcbjMxNDA6XHRcdFx0XHRyZXQgPSBwcmVwYXJlX3NwYXJzZV9yZWFkX2NvbnQoY29uKTtcbjMxNDE6XHRcdFx0XHRicmVhaztcbjMxNDI6XHRcdFx0Y2FzZSBJTl9TX0hBTkRMRV9FUElMT0dVRTpcbjMxNDM6XHRcdFx0XHRyZXQgPSBoYW5kbGVfZXBpbG9ndWUoY29uKTtcbjMxNDQ6XHRcdFx0XHRicmVhaztcbjMxNDU6XHRcdFx0Y2FzZSBJTl9TX0ZJTklTSF9TS0lQOlxuMzE0NjpcdFx0XHRcdGZpbmlzaF9za2lwKGNvbik7XG4zMTQ3Olx0XHRcdFx0cmV0ID0gMDtcbjMxNDg6XHRcdFx0XHRicmVhaztcbjMxNDk6XHRcdFx0ZGVmYXVsdDpcbjMxNTA6XHRcdFx0XHRXQVJOKDEsIFwmIzM0O2JhZCBpbl9zdGF0ZSAlZFwmIzM0OywgY29uLVx1MDAzZXYyLmluX3N0YXRlKTtcbjMxNTE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxNTI6XHRcdFx0fVxuMzE1MzpcdFx0fSBlbHNlIHtcbjMxNTQ6XHRcdFx0V0FSTigxLCBcJiMzNDtiYWQgc3RhdGUgJWRcJiMzNDssIGNvbi1cdTAwM2VzdGF0ZSk7XG4zMTU1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzE1NjpcdFx0fVxuMzE1NzpcdFx0aWYgKHJldCkge1xuMzE1ODpcdFx0XHRkb3V0KFwmIzM0OyVzIGNvbiAlcCBlcnJvciAlZFxcblwmIzM0OywgX19mdW5jX18sIGNvbiwgcmV0KTtcbjMxNTk6XHRcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MDMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRW50cnkgUG9pbnRzIGZvciBDZXBoIENvbm5lY3Rpb24gVmVyc2lvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZHJpbGxpbmcgZG93biBpbnRvIHRoZSBjb25uZWN0aW9uIGhhbmRsaW5nIHdpdGhpbiBDZXBoLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB2ZXJzaW9uaW5nLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAgaXMgdGhlIGRlc2lnbmF0ZWQgZW50cnkgcG9pbnQgZm9yIHYyIGNvbm5lY3Rpb25zIOKAkyBubyBzdXJwcmlzZXMgdGhlcmUuIFRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRoZSB2MiBuZWdvdGlhdGlvbiBhbmQgZGF0YSBwYXJzaW5nIHRvIGJlZ2luLgoKQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGduYXdpbmcgYXQgbWUgaXMgaG93IHYxIGlzIGhhbmRsZWQuIFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhpcyBhcmNoaXRlY3R1cmU/IElzIHRoZXJlIGEgc2VwYXJhdGUsIGRlZGljYXRlZCBmdW5jdGlvbiBmb3IgdjEgbmVnb3RpYXRpb24sIG9yIGlzIHRoZXJlIGEgdW5pZmllZCBlbnRyeSBwb2ludCB0aGF0IGJyYW5jaGVzIGJhc2VkIG9uIHZlcnNpb24gZHVyaW5nIHRoZSBpbml0aWFsIGhhbmRzaGFrZT8gS25vd2luZyB0aGUgYW5zd2VyIHRvIHRoYXQgd2lsbCBkZXRlcm1pbmUgaG93IHRvIGRlYnVnIGFuIGV4aXN0aW5nIGlzc3VlIG9uIHRoZSBuZXR3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlcl92MS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzI5Olx0aW50IGNlcGhfY29uX3YxX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbjEzMzA6XHR7XG4xMzMxOlx0XHRpbnQgcmV0ID0gLTE7XG4xMzMyOlx0XG4xMzMzOlx0bW9yZTpcbjEzMzQ6XHRcdGRvdXQoXCYjMzQ7dHJ5X3JlYWQgc3RhcnQgJXAgc3RhdGUgJWRcXG5cJiMzNDssIGNvbiwgY29uLVx1MDAzZXN0YXRlKTtcbjEzMzU6XHRcdGlmIChjb24tXHUwMDNlc3RhdGUgIT0gQ0VQSF9DT05fU19WMV9CQU5ORVIgXHUwMDI2XHUwMDI2XG4xMzM2Olx0XHQgICAgY29uLVx1MDAzZXN0YXRlICE9IENFUEhfQ09OX1NfVjFfQ09OTkVDVF9NU0cgXHUwMDI2XHUwMDI2XG4xMzM3Olx0XHQgICAgY29uLVx1MDAzZXN0YXRlICE9IENFUEhfQ09OX1NfT1BFTilcbjEzMzg6XHRcdFx0cmV0dXJuIDA7XG4xMzM5Olx0XG4xMzQwOlx0XHRCVUdfT04oIWNvbi1cdTAwM2Vzb2NrKTtcbjEzNDE6XHRcbjEzNDI6XHRcdGRvdXQoXCYjMzQ7dHJ5X3JlYWQgdGFnICVkIGluX2Jhc2VfcG9zICVkXFxuXCYjMzQ7LCBjb24tXHUwMDNldjEuaW5fdGFnLFxuMTM0MzpcdFx0ICAgICBjb24tXHUwMDNldjEuaW5fYmFzZV9wb3MpO1xuMTM0NDpcdFxuMTM0NTpcdFx0aWYgKGNvbi1cdTAwM2VzdGF0ZSA9PSBDRVBIX0NPTl9TX1YxX0JBTk5FUikge1xuMTM0NjpcdFx0XHRyZXQgPSByZWFkX3BhcnRpYWxfYmFubmVyKGNvbik7XG4xMzQ3Olx0XHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuMTM0ODpcdFx0XHRcdGdvdG8gb3V0O1xuMTM0OTpcdFx0XHRyZXQgPSBwcm9jZXNzX2Jhbm5lcihjb24pO1xuMTM1MDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTM1MTpcdFx0XHRcdGdvdG8gb3V0O1xuMTM1MjpcdFxuMTM1MzpcdFx0XHRjb24tXHUwMDNlc3RhdGUgPSBDRVBIX0NPTl9TX1YxX0NPTk5FQ1RfTVNHO1xuMTM1NDpcdFxuMTM1NTpcdFx0XHQvKlxuMTM1NjpcdFx0XHQgKiBSZWNlaXZlZCBiYW5uZXIgaXMgZ29vZCwgZXhjaGFuZ2UgY29ubmVjdGlvbiBpbmZvLlxuMTM1NzpcdFx0XHQgKiBEbyBub3QgcmVzZXQgb3V0X2t2ZWMsIGFzIHNlbmRpbmcgb3VyIGJhbm5lciByYWNlZFxuMTM1ODpcdFx0XHQgKiB3aXRoIHJlY2VpdmluZyBwZWVyIGJhbm5lciBhZnRlciBjb25uZWN0IGNvbXBsZXRlZC5cbjEzNTk6XHRcdFx0ICovXG4xMzYwOlx0XHRcdHJldCA9IHByZXBhcmVfd3JpdGVfY29ubmVjdChjb24pO1xuMTM2MTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTM2MjpcdFx0XHRcdGdvdG8gb3V0O1xuMTM2MzpcdFx0XHRwcmVwYXJlX3JlYWRfY29ubmVjdChjb24pO1xuMTM2NDpcdFxuMTM2NTpcdFx0XHQvKiBTZW5kIGNvbm5lY3Rpb24gaW5mbyBiZWZvcmUgYXdhaXRpbmcgcmVzcG9uc2UgKi9cbjEzNjY6XHRcdFx0Z290byBvdXQ7XG4xMzY3Olx0XHR9XG4xMzY4Olx0XG4xMzY5Olx0XHRpZiAoY29uLVx1MDAzZXN0YXRlID09IENFUEhfQ09OX1NfVjFfQ09OTkVDVF9NU0cpIHtcbjEzNzA6XHRcdFx0cmV0ID0gcmVhZF9wYXJ0aWFsX2Nvbm5lY3QoY29uKTtcbjEzNzE6XHRcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4xMzcyOlx0XHRcdFx0Z290byBvdXQ7XG4xMzczOlx0XHRcdHJldCA9IHByb2Nlc3NfY29ubmVjdChjb24pO1xuMTM3NDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTM3NTpcdFx0XHRcdGdvdG8gb3V0O1xuMTM3NjpcdFx0XHRnb3RvIG1vcmU7XG4xMzc3Olx0XHR9XG4xMzc4Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTcxCgkJCQkJCQlvdXRwdXQ6IDEzMgoJCQkJCQkJdGhvdWdodHM6IDMyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBDZXBoIE5ldHdvcmsgUHJvdG9jb2wgUGFyc2luZyoqCgpPa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgSSYjMzk7dmUgZ290IGEgY2xlYXIgZGlyZWN0aW9uLiBGb2N1c2luZyBvbiBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgIGlzIHRoZSByaWdodCBtb3ZlLiBUaGV5IGFyZSBrZXkgYmVjYXVzZSB0aGV5IGFyZSBub24tc3RhdGljIGFuZCBub3QgaW5saW5lZCwgYW5kIHRoZXkgYXJlIGNhbGxlZCBmcm9tIGFub3RoZXIgZmlsZS4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhleSYjMzk7cmUgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENFUEhfTElCYCBpcyBvYnZpb3VzbHkgZXNzZW50aWFsLCBhbmQgYENFUEhfRlNgIGFuZCBgQkxLX0RFVl9SQkRgIGFyZSB0aGUga2V5IHVzZXJzIHRoYXQgd2lsbCBleGVyY2lzZSB0aGUgY29kZS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIHRocmVlIGFyZSBlbmFibGVkOiBgQ0VQSF9MSUJgLCBgQ0VQSF9GU2AsIGBCTEtfREVWX1JCRGAuCgpBaCwgdGhpcyBwYXRjaC4uLiBpdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlISBSZXBsYWNpbmcgYFdBUk5fT05gIHdpdGggcHJvcGVyIGVycm9yIHJldHVybnMgaW4gdGhlIG5ldHdvcmsgcHJvdG9jb2wgcGFyc2luZyBpcyBnb2xkLiBBIGBXQVJOX09OYCBjYW4gYmUgYSBkZWF0aCBrbmVsbCBpbiBmdXp6aW5nOiBpdCBjYW4gdHJpZ2dlciBzeXprYWxsZXIgdG8gdHJlYXQgaXQgYXMgYSBjcmFzaCB3aGVuIGl0JiMzOTtzIGp1c3QgYSB3YXJuaW5nLiBUaGlzIHBhdGNoIGlzIHRha2luZyBhIHBvdGVudGlhbCBmYWxzZS1wb3NpdGl2ZSBjcmFzaCBhbmQgdHVybmluZyBpdCBpbnRvIGEgcmVhbCwgZnV6emFibGUsIGVycm9yIHBhdGguIEl0JiMzOTtzIGhhbmRsaW5nIGludmFsaWQgcHJvdG9jb2wgc3RhdGVzIGdyYWNlZnVsbHksIGFsbG93aW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHRvIHJlYWN0LiBUaGF0IGlzICphYnNvbHV0ZWx5KiB3b3J0aCBmdXp6aW5nLiBJdCBvcGVucyB1cCBhIG5ldyBhdmVudWUgZm9yIGRpc2NvdmVyaW5nIHBvdGVudGlhbGx5IGhpZGRlbiBsb2dpYyBmbGF3cyB3aXRoaW4gdGhlIHByb3RvY29sJiMzOTtzIGVycm9yIGhhbmRsaW5nLgoKQWxyaWdodCwgbGV0JiMzOTtzIHN1bW1hcml6ZSBteSBmaW5kaW5ncyB0byBlbnN1cmUgSSYjMzk7bSBjbGVhcjoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gVGhpcyBpcyBhIGhpZ2gtdmFsdWUgcGF0Y2guCiogICAqKkZvY3VzU3ltYm9sczoqKiBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgLCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgIC0gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLgoqICAgKipFbmFibGVDb25maWdzOioqIGBDRVBIX0xJQmAsIGBDRVBIX0ZTYCwgYEJMS19ERVZfUkJEYCAtIFJlcXVpcmVkIGZvciB0aGUgY29kZSB0byBiZSBleGVyY2lzZWQuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlIHRvIGVycm9yIGhhbmRsaW5nIGluIHRoZSBDZXBoIG5ldHdvcmsgcHJvdG9jb2wgcGFyc2luZyAobWVzc2VuZ2VyIHYxIGFuZCB2MikgaXMgdGhlIGNyaXRpY2FsIGVsZW1lbnQuIFRoaXMgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCB3aWxsIGV4cG9zZSBwb3RlbnRpYWwgYnVncyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBtaXNzZWQgZHVlIHRvIHRoZSBwcmV2aW91cyB3YXJuaW5nIGhhbmRsaW5nLCBhbmQgZW5hYmxlIGEgbW9yZSByb2J1c3QgYW5kIGNvbXBsZXRlIGZ1enppbmcgcnVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0VQSF9MSUImIzM0OywKICAgICYjMzQ7Q0VQSF9GUyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1JCRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NlcGhfY29uX3YxX3RyeV9yZWFkJiMzNDssCiAgICAmIzM0O2NlcGhfY29uX3YyX3RyeV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIFdBUk5fT04gd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIHJldHVybnMgaW4gdGhlIENlcGggbmV0d29yayBwcm90b2NvbCBwYXJzaW5nIGxvZ2ljIChtZXNzZW5nZXIgdjEgYW5kIHYyKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcHJvdG9jb2wgY29kZSB0aGF0IHByZXZlbnRzIGZhbHNlLXBvc2l0aXZlIGNyYXNoIHJlcG9ydHMgYW5kIGNvcnJlY3RseSBoYW5kbGVzIGludmFsaWQgcHJvdG9jb2wgc3RhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRVBIX0xJQiYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDssCiAgICAmIzM0O0JMS19ERVZfUkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2VwaF9jb25fdjFfdHJ5X3JlYWQmIzM0OywKICAgICYjMzQ7Y2VwaF9jb25fdjJfdHJ5X3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgV0FSTl9PTiB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmV0dXJucyBpbiB0aGUgQ2VwaCBuZXR3b3JrIHByb3RvY29sIHBhcnNpbmcgbG9naWMgKG1lc3NlbmdlciB2MSBhbmQgdjIpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwcm90b2NvbCBjb2RlIHRoYXQgcHJldmVudHMgZmFsc2UtcG9zaXRpdmUgY3Jhc2ggcmVwb3J0cyBhbmQgY29ycmVjdGx5IGhhbmRsZXMgaW52YWxpZCBwcm90b2NvbCBzdGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgc2V2ZXJhbCBXQVJOX09OKCkgc3RhdGVtZW50cyB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgbG9nZ2luZyBpbiB0aGUgQ2VwaCBtZXNzZW5nZXIgcHJvdG9jb2wgKGJvdGggdjEgYW5kIHYyKS4gSXQgY2hlY2tzIGZvciBpbnZhbGlkIHNlcXVlbmNlIG51bWJlcnMsIG1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMsIGFuZCBpbmNvcnJlY3Qgc2VydmVyIGNvb2tpZXMsIHJldHVybmluZyBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHdhcm5pbmcuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBub3IgZG8gdGhleSBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OTQ0Y2MwMGQ0YzFiZjJjZWI3ODYzNDdmYzg5NGEyMjc2ZDg2N2QyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTE6MjY6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jCmluZGV4IGM5ZTAwMmQ5NjMxOTAuLmRmMjI0OGI3YjAyNjUgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jCkBAIC04OTgsOCAmIzQzOzg5OCwxNSBAQCBzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pCiAJCSAgICAgY29uLSZndDt2MS5wZWVyX2dsb2JhbF9zZXEsCiAJCSAgICAgbGUzMl90b19jcHUoY29uLSZndDt2MS5pbl9yZXBseS5jb25uZWN0X3NlcSksCiAJCSAgICAgY29uLSZndDt2MS5jb25uZWN0X3NlcSk7Ci0JCVdBUk5fT04oY29uLSZndDt2MS5jb25uZWN0X3NlcSAhPQotCQkJbGUzMl90b19jcHUoY29uLSZndDt2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpOwomIzQzOwkJaWYgKGNvbi0mZ3Q7djEuY29ubmVjdF9zZXEgIT0gbGUzMl90b19jcHUoY29uLSZndDt2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkICV1LCBnb3QgJXVcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSwKJiM0MzsJCQkgICAgICAgY29uLSZndDt2MS5jb25uZWN0X3NlcSwKJiM0MzsJCQkgICAgICAgbGUzMl90b19jcHUoY29uLSZndDt2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpOwomIzQzOwkJCWNvbi0mZ3Q7ZXJyb3JfbXNnID0gJiMzNDtjb25uZWN0X3NlcSBtaXNtYXRjaCYjMzQ7OwomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJCX0KIAogCQlpZiAoY29uLSZndDt2MS5pbl9yZXBseS5mbGFncyAmYW1wOyBDRVBIX01TR19DT05ORUNUX0xPU1NZKQogCQkJY2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpOwpkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYwppbmRleCAwNWY2ZWVhMjk5ZmMwLi5kNzA2Y2RiZTBlZDJkIDEwMDY0NAotLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYwpAQCAtMjUyOSwxNCAmIzQzOzI1MjksMzMgQEAgc3RhdGljIGludCBwcm9jZXNzX3NlcnZlcl9pZGVudChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sCiAJY29uLSZndDtwZWVyX25hbWUubnVtID0gY3B1X3RvX2xlNjQoZ2xvYmFsX2lkKTsKIAljb24tJmd0O3YyLnBlZXJfZ2xvYmFsX3NlcSA9IGdsb2JhbF9zZXE7CiAJY29uLSZndDtwZWVyX2ZlYXR1cmVzID0gZmVhdHVyZXM7Ci0JV0FSTl9PTihyZXF1aXJlZF9mZWF0dXJlcyAmYW1wOyB+Y2xpZW50LSZndDtzdXBwb3J0ZWRfZmVhdHVyZXMpOwomIzQzOwlpZiAocmVxdWlyZWRfZmVhdHVyZXMgJmFtcDsgfmNsaWVudC0mZ3Q7c3VwcG9ydGVkX2ZlYXR1cmVzKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgbWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcywgbXkgc3VwcG9ydGVkIDB4JWxseCwgc2VydmVyJiMzOTtzIHJlcXVpcmVkIDB4JWxseFxuJiMzNDssCiYjNDM7CQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSwKJiM0MzsJCSAgICAgICBjbGllbnQtJmd0O3N1cHBvcnRlZF9mZWF0dXJlcywgcmVxdWlyZWRfZmVhdHVyZXMpOwomIzQzOwkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O21pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMmIzM0OzsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAJY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llID0gY29va2llOwogCiAJaWYgKGZsYWdzICZhbXA7IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpIHsKIAkJY2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpOwotCQlXQVJOX09OKGNvbi0mZ3Q7djIuc2VydmVyX2Nvb2tpZSk7CiYjNDM7CQlpZiAoY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uXG4mIzM0OywKJiM0MzsJCQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJCSAgICAgICBjZXBoX3ByX2FkZHIoJmFtcDtjb24tJmd0O3BlZXJfYWRkcikpOwomIzQzOwkJCWNvbi0mZ3Q7ZXJyb3JfbXNnID0gJiMzNDtzZXJ2ZXJfY29va2llIGlzIHNldCBmb3IgbG9zc3kgY29ubmVjdGlvbiYjMzQ7OwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCX0gZWxzZSB7Ci0JCVdBUk5fT04oIWNvbi0mZ3Q7djIuc2VydmVyX2Nvb2tpZSk7CiYjNDM7CQlpZiAoIWNvbi0mZ3Q7djIuc2VydmVyX2Nvb2tpZSkgewomIzQzOwkJCXByX2VycigmIzM0OyVzJWxsZCAlcyBzZXJ2ZXJfY29va2llIGlzIG5vdCBzZXQgZm9yIGxvc3NsZXNzIGNvbm5lY3Rpb25cbiYjMzQ7LAomIzQzOwkJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSk7CiYjNDM7CQkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O3NlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvbiYjMzQ7OwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCX0KIAogCWNsZWFyX2luX3NpZ25fa3ZlY3MoY29uKTsKQEAgLTI2MTgsNyAmIzQzOzI2MzcsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnkoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLAogCWNlcGhfZGVjb2RlXzY0X3NhZmUoJmFtcDtwLCBlbmQsIGNvbm5lY3Rfc2VxLCBiYWQpOwogCiAJZG91dCgmIzM0OyVzIGNvbiAlcCBjb25uZWN0X3NlcSAlbGx1XG4mIzM0OywgX19mdW5jX18sIGNvbiwgY29ubmVjdF9zZXEpOwotCVdBUk5fT04oY29ubmVjdF9zZXEgJmx0Oz0gY29uLSZndDt2Mi5jb25uZWN0X3NlcSk7CiYjNDM7CWlmIChjb25uZWN0X3NlcSAmbHQ7PSBjb24tJmd0O3YyLmNvbm5lY3Rfc2VxKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkICZndDsgJWxsdSwgZ290ICVsbHVcbiYjMzQ7LAomIzQzOwkJICAgICAgIEVOVElUWV9OQU1FKGNvbi0mZ3Q7cGVlcl9uYW1lKSwKJiM0MzsJCSAgICAgICBjZXBoX3ByX2FkZHIoJmFtcDtjb24tJmd0O3BlZXJfYWRkciksCiYjNDM7CQkgICAgICAgY29uLSZndDt2Mi5jb25uZWN0X3NlcSwgY29ubmVjdF9zZXEpOwomIzQzOwkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O2Nvbm5lY3Rfc2VxIG1pc21hdGNoJiMzNDs7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCWNvbi0mZ3Q7djIuY29ubmVjdF9zZXEgPSBjb25uZWN0X3NlcSAmIzQzOyAxOwogCiAJZnJlZV9jb25uX2J1ZnMoY29uKTsKQEAgLTI2NTEsNyAmIzQzOzI2NzcsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwKIAljZXBoX2RlY29kZV82NF9zYWZlKCZhbXA7cCwgZW5kLCBnbG9iYWxfc2VxLCBiYWQpOwogCiAJZG91dCgmIzM0OyVzIGNvbiAlcCBnbG9iYWxfc2VxICVsbHVcbiYjMzQ7LCBfX2Z1bmNfXywgY29uLCBnbG9iYWxfc2VxKTsKLQlXQVJOX09OKGdsb2JhbF9zZXEgJmx0Oz0gY29uLSZndDt2Mi5nbG9iYWxfc2VxKTsKJiM0MzsJaWYgKGdsb2JhbF9zZXEgJmx0Oz0gY29uLSZndDt2Mi5nbG9iYWxfc2VxKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgZ2xvYmFsX3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJmd0OyAlbGx1LCBnb3QgJWxsdVxuJiMzNDssCiYjNDM7CQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSwKJiM0MzsJCSAgICAgICBjb24tJmd0O3YyLmdsb2JhbF9zZXEsIGdsb2JhbF9zZXEpOwomIzQzOwkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O2dsb2JhbF9zZXEgbWlzbWF0Y2gmIzM0OzsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAJY29uLSZndDt2Mi5nbG9iYWxfc2VxID0gY2VwaF9nZXRfZ2xvYmFsX3NlcShjb24tJmd0O21zZ3IsIGdsb2JhbF9zZXEpOwogCiAJZnJlZV9jb25uX2J1ZnMoY29uKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzEKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogNDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2VwaCBNZXNzZW5nZXIgUHJvdG9jb2wgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlcyBpbiBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNgIGFuZCBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNgLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGlkZWEgaXMgdG8gcmVwbGFjZSBhIGZldyBgV0FSTl9PTmAgc3RhdGVtZW50cyB3aXRoIGFjdHVhbCBlcnJvciBoYW5kbGluZywgcmV0dXJuaW5nIHRoaW5ncyBsaWtlIGAtMWAgb3IgYC1FSU5WQUxgIHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcuIFRoaXMgaXMgYWxsIGNlbnRlcmVkIGFyb3VuZCBob3cgdGhlIENlcGggbWVzc2VuZ2VyIHByb3RvY29sIGhhbmRsZXMgY29ubmVjdGlvbiBzZXF1ZW5jZSBudW1iZXJzLCB0aGUgZmVhdHVyZXMgaXQgc3VwcG9ydHMsIGFuZCBzZXJ2ZXIgY29va2llcy4gQmFzaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBtYWtpbmcgdGhlIGNvZGUgbW9yZSByb2J1c3QgYWdhaW5zdCBiYWQgaW5wdXQgZnJvbSB0aGUgbmV0d29yay4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gY2F0Y2ggYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGEga2VybmVsIHBhbmljLCBvciB0byBqdXN0IHByb3Blcmx5IHJlamVjdCBpbnZhbGlkIG9yIHBvc3NpYmx5IG1hbGljaW91cyBkYXRhLgoKSSYjMzk7dmUgY2hlY2tlZCB0aGUgZGlmZnM7IGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgYWJvdXQgdmFsaWRhdGluZyB0aGUgcmVjZWl2ZWQgZGF0YSBhbmQgcmV0dXJuaW5nIGFuIGVycm9yIGlmIGl0JiMzOTtzIG5vdCB3aGF0JiMzOTtzIGV4cGVjdGVkLiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgYW55IG9mIHRoYXQgamF6ei4gV2UmIzM5O3JlIGp1c3QgYWRkaW5nIGNoZWNrcyBhbmQgbG9nZ2luZyBmb3IgaW52YWxpZCB2YWx1ZXMuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgc3BlY2lmaWMgY29kZS4gSW4gYHByb2Nlc3NfY29ubmVjdGAgZnJvbSBgbWVzc2VuZ2VyX3YxLmNgLCB0aGUgcGF0Y2ggaXMgYWRkaW5nIHRoaXMgY2hlY2s6CgpgYGBjCi0JCVdBUk5fT04oY29uLSZndDt2MS5jb25uZWN0X3NlcSAhPQotCQkJbGUzMl90b19jcHUoY29uLSZndDt2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpOwomIzQzOwkJaWYgKGNvbi0mZ3Q7djEuY29ubmVjdF9zZXEgIT0gbGUzMl90b19jcHUoY29uLSZndDt2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkICV1LCBnb3QgJXVcbiYjMzQ7LAouLi4KJiM0MzsJCQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7Y29ubmVjdF9zZXEgbWlzbWF0Y2gmIzM0OzsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CmBgYAoKSW5zdGVhZCBvZiBqdXN0IHdhcm5pbmcsIHdlIG5vdyBoYXZlIGEgcHJvcGVyIGVycm9yIG1lc3NhZ2UgYW5kIGFuIGVycm9yIHJldHVybi4gVGhlIHNhbWUga2luZCBvZiBjb252ZXJzaW9uIGlzIHByZXNlbnQgaW4gYHByb2Nlc3Nfc2VydmVyX2lkZW50YCBpbiBgbWVzc2VuZ2VyX3YyLmNgOgoKYGBgYwotCVdBUk5fT04ocmVxdWlyZWRfZmVhdHVyZXMgJmFtcDsgfmNsaWVudC0mZ3Q7c3VwcG9ydGVkX2ZlYXR1cmVzKTsKJiM0MzsJaWYgKHJlcXVpcmVkX2ZlYXR1cmVzICZhbXA7IH5jbGllbnQtJmd0O3N1cHBvcnRlZF9mZWF0dXJlcykgewouLi4KJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CmBgYAoKVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGhhdmUgdGhlIGV4YWN0IHNhbWUgbG9naWMgZm9yIHRoZSBgc2VydmVyX2Nvb2tpZWAsIGBjb25uZWN0X3NlcWAgYW5kIGBnbG9iYWxfc2VxYCBjaGVja3MuCgpTbywgYm90dG9tIGxpbmU6IHRoaXMgcGF0Y2ggaXMganVzdCBhYm91dCBtYWtpbmcgdGhlIGVycm9yIGhhbmRsaW5nIG1vcmUgZXhwbGljaXQsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBmb3Igcm9idXN0bmVzcyBhbmQgc2FmZXR5LCBhbmQgdGhpcyBkb2VzbiYjMzk7dCB0b3VjaCBhbnkgbWVtb3J5IHRoYXQgaXMgdW5pbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIG5vIG5lZWQgZm9yIEtNU0FOLiBUaGUgcGF0Y2ggYWRkcyBjaGVja3MgYW5kIHJldHVybnMgZXJyb3IgY29kZXMsIGltcHJvdmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzZXZlcmFsIFdBUk5fT04oKSBzdGF0ZW1lbnRzIHdpdGggcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIGluIHRoZSBDZXBoIG1lc3NlbmdlciBwcm90b2NvbCAoYm90aCB2MSBhbmQgdjIpLiBJdCBjaGVja3MgZm9yIGludmFsaWQgc2VxdWVuY2UgbnVtYmVycywgbWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcywgYW5kIGluY29ycmVjdCBzZXJ2ZXIgY29va2llcywgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgd2FybmluZy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIG5vciBkbyB0aGV5IGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzZXZlcmFsIFdBUk5fT04oKSBzdGF0ZW1lbnRzIHdpdGggcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIGluIHRoZSBDZXBoIG1lc3NlbmdlciBwcm90b2NvbCAoYm90aCB2MSBhbmQgdjIpLiBJdCBjaGVja3MgZm9yIGludmFsaWQgc2VxdWVuY2UgbnVtYmVycywgbWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcywgYW5kIGluY29ycmVjdCBzZXJ2ZXIgY29va2llcywgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgd2FybmluZy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIG5vciBkbyB0aGV5IGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI2OjQ0LjEzMDUxNDY5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTcxMzA2MzY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRVBIX0xJQlwiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiQkxLX0RFVl9SQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZXBoX2Nvbl92MV90cnlfcmVhZFwiLFxuICAgIFwiY2VwaF9jb25fdjJfdHJ5X3JlYWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHNldmVyYWwgV0FSTl9PTigpIHN0YXRlbWVudHMgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgaW4gdGhlIENlcGggbWVzc2VuZ2VyIHByb3RvY29sIChib3RoIHYxIGFuZCB2MikuIEl0IGNoZWNrcyBmb3IgaW52YWxpZCBzZXF1ZW5jZSBudW1iZXJzLCBtaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzLCBhbmQgaW5jb3JyZWN0IHNlcnZlciBjb29raWVzLCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSB3YXJuaW5nLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgbm9yIGRvIHRoZXkgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBXQVJOX09OIHdpdGggcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXR1cm5zIGluIHRoZSBDZXBoIG5ldHdvcmsgcHJvdG9jb2wgcGFyc2luZyBsb2dpYyAobWVzc2VuZ2VyIHYxIGFuZCB2MikuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIHByb3RvY29sIGNvZGUgdGhhdCBwcmV2ZW50cyBmYWxzZS1wb3NpdGl2ZSBjcmFzaCByZXBvcnRzIGFuZCBjb3JyZWN0bHkgaGFuZGxlcyBpbnZhbGlkIHByb3RvY29sIHN0YXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjY6NDQuMTMwNTIzNDE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY3NTQ2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OTQ0Y2MwMGQ0YzFiZjJjZWI3ODYzNDdmYzg5NGEyMjc2ZDg2N2QyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDExOjI2OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcXG5pbmRleCBjOWUwMDJkOTYzMTkwLi5kZjIyNDhiN2IwMjY1IDEwMDY0NFxcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXFxuKysrIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcXG5AQCAtODk4LDggKzg5OCwxNSBAQCBzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuIFxcdFxcdCAgICAgY29uLVxcdTAwM2V2MS5wZWVyX2dsb2JhbF9zZXEsXFxuIFxcdFxcdCAgICAgbGUzMl90b19jcHUoY29uLVxcdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSksXFxuIFxcdFxcdCAgICAgY29uLVxcdTAwM2V2MS5jb25uZWN0X3NlcSk7XFxuLVxcdFxcdFdBUk5fT04oY29uLVxcdTAwM2V2MS5jb25uZWN0X3NlcSAhPVxcbi1cXHRcXHRcXHRsZTMyX3RvX2NwdShjb24tXFx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7XFxuK1xcdFxcdGlmIChjb24tXFx1MDAzZXYxLmNvbm5lY3Rfc2VxICE9IGxlMzJfdG9fY3B1KGNvbi1cXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiJXMlbGxkICVzIGNvbm5lY3Rfc2VxIG1pc21hdGNoLCBleHBlY3RlZCAldSwgZ290ICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgRU5USVRZX05BTUUoY29uLVxcdTAwM2VwZWVyX25hbWUpLFxcbitcXHRcXHRcXHQgICAgICAgY2VwaF9wcl9hZGRyKFxcdTAwMjZjb24tXFx1MDAzZXBlZXJfYWRkciksXFxuK1xcdFxcdFxcdCAgICAgICBjb24tXFx1MDAzZXYxLmNvbm5lY3Rfc2VxLFxcbitcXHRcXHRcXHQgICAgICAgbGUzMl90b19jcHUoY29uLVxcdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpO1xcbitcXHRcXHRcXHRjb24tXFx1MDAzZWVycm9yX21zZyA9IFxcXCJjb25uZWN0X3NlcSBtaXNtYXRjaFxcXCI7XFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGNvbi1cXHUwMDNldjEuaW5fcmVwbHkuZmxhZ3MgXFx1MDAyNiBDRVBIX01TR19DT05ORUNUX0xPU1NZKVxcbiBcXHRcXHRcXHRjZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7XFxuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcXG5pbmRleCAwNWY2ZWVhMjk5ZmMwLi5kNzA2Y2RiZTBlZDJkIDEwMDY0NFxcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXFxuKysrIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcXG5AQCAtMjUyOSwxNCArMjUyOSwzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcXG4gXFx0Y29uLVxcdTAwM2VwZWVyX25hbWUubnVtID0gY3B1X3RvX2xlNjQoZ2xvYmFsX2lkKTtcXG4gXFx0Y29uLVxcdTAwM2V2Mi5wZWVyX2dsb2JhbF9zZXEgPSBnbG9iYWxfc2VxO1xcbiBcXHRjb24tXFx1MDAzZXBlZXJfZmVhdHVyZXMgPSBmZWF0dXJlcztcXG4tXFx0V0FSTl9PTihyZXF1aXJlZF9mZWF0dXJlcyBcXHUwMDI2IH5jbGllbnQtXFx1MDAzZXN1cHBvcnRlZF9mZWF0dXJlcyk7XFxuK1xcdGlmIChyZXF1aXJlZF9mZWF0dXJlcyBcXHUwMDI2IH5jbGllbnQtXFx1MDAzZXN1cHBvcnRlZF9mZWF0dXJlcykge1xcbitcXHRcXHRwcl9lcnIoXFxcIiVzJWxsZCAlcyBtaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzLCBteSBzdXBwb3J0ZWQgMHglbGx4LCBzZXJ2ZXIncyByZXF1aXJlZCAweCVsbHhcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXFx1MDAzZXBlZXJfbmFtZSksXFxuK1xcdFxcdCAgICAgICBjZXBoX3ByX2FkZHIoXFx1MDAyNmNvbi1cXHUwMDNlcGVlcl9hZGRyKSxcXG4rXFx0XFx0ICAgICAgIGNsaWVudC1cXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzLCByZXF1aXJlZF9mZWF0dXJlcyk7XFxuK1xcdFxcdGNvbi1cXHUwMDNlZXJyb3JfbXNnID0gXFxcIm1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXNcXFwiO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXHRjb24tXFx1MDAzZXYyLnNlcnZlcl9jb29raWUgPSBjb29raWU7XFxuIFxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBDRVBIX01TR19DT05ORUNUX0xPU1NZKSB7XFxuIFxcdFxcdGNlcGhfY29uX2ZsYWdfc2V0KGNvbiwgQ0VQSF9DT05fRl9MT1NTWVRYKTtcXG4tXFx0XFx0V0FSTl9PTihjb24tXFx1MDAzZXYyLnNlcnZlcl9jb29raWUpO1xcbitcXHRcXHRpZiAoY29uLVxcdTAwM2V2Mi5zZXJ2ZXJfY29va2llKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiJXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgRU5USVRZX05BTUUoY29uLVxcdTAwM2VwZWVyX25hbWUpLFxcbitcXHRcXHRcXHQgICAgICAgY2VwaF9wcl9hZGRyKFxcdTAwMjZjb24tXFx1MDAzZXBlZXJfYWRkcikpO1xcbitcXHRcXHRcXHRjb24tXFx1MDAzZWVycm9yX21zZyA9IFxcXCJzZXJ2ZXJfY29va2llIGlzIHNldCBmb3IgbG9zc3kgY29ubmVjdGlvblxcXCI7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdFdBUk5fT04oIWNvbi1cXHUwMDNldjIuc2VydmVyX2Nvb2tpZSk7XFxuK1xcdFxcdGlmICghY29uLVxcdTAwM2V2Mi5zZXJ2ZXJfY29va2llKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiJXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cXHUwMDNlcGVlcl9uYW1lKSxcXG4rXFx0XFx0XFx0ICAgICAgIGNlcGhfcHJfYWRkcihcXHUwMDI2Y29uLVxcdTAwM2VwZWVyX2FkZHIpKTtcXG4rXFx0XFx0XFx0Y29uLVxcdTAwM2VlcnJvcl9tc2cgPSBcXFwic2VydmVyX2Nvb2tpZSBpcyBub3Qgc2V0IGZvciBsb3NzbGVzcyBjb25uZWN0aW9uXFxcIjtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0Y2xlYXJfaW5fc2lnbl9rdmVjcyhjb24pO1xcbkBAIC0yNjE4LDcgKzI2MzcsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnkoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxcbiBcXHRjZXBoX2RlY29kZV82NF9zYWZlKFxcdTAwMjZwLCBlbmQsIGNvbm5lY3Rfc2VxLCBiYWQpO1xcbiBcXG4gXFx0ZG91dChcXFwiJXMgY29uICVwIGNvbm5lY3Rfc2VxICVsbHVcXFxcblxcXCIsIF9fZnVuY19fLCBjb24sIGNvbm5lY3Rfc2VxKTtcXG4tXFx0V0FSTl9PTihjb25uZWN0X3NlcSBcXHUwMDNjPSBjb24tXFx1MDAzZXYyLmNvbm5lY3Rfc2VxKTtcXG4rXFx0aWYgKGNvbm5lY3Rfc2VxIFxcdTAwM2M9IGNvbi1cXHUwMDNldjIuY29ubmVjdF9zZXEpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCIlcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFxcdTAwM2UgJWxsdSwgZ290ICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXFx1MDAzZXBlZXJfbmFtZSksXFxuK1xcdFxcdCAgICAgICBjZXBoX3ByX2FkZHIoXFx1MDAyNmNvbi1cXHUwMDNlcGVlcl9hZGRyKSxcXG4rXFx0XFx0ICAgICAgIGNvbi1cXHUwMDNldjIuY29ubmVjdF9zZXEsIGNvbm5lY3Rfc2VxKTtcXG4rXFx0XFx0Y29uLVxcdTAwM2VlcnJvcl9tc2cgPSBcXFwiY29ubmVjdF9zZXEgbWlzbWF0Y2hcXFwiO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXHRjb24tXFx1MDAzZXYyLmNvbm5lY3Rfc2VxID0gY29ubmVjdF9zZXEgKyAxO1xcbiBcXG4gXFx0ZnJlZV9jb25uX2J1ZnMoY29uKTtcXG5AQCAtMjY1MSw3ICsyNjc3LDE0IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXFxuIFxcdGNlcGhfZGVjb2RlXzY0X3NhZmUoXFx1MDAyNnAsIGVuZCwgZ2xvYmFsX3NlcSwgYmFkKTtcXG4gXFxuIFxcdGRvdXQoXFxcIiVzIGNvbiAlcCBnbG9iYWxfc2VxICVsbHVcXFxcblxcXCIsIF9fZnVuY19fLCBjb24sIGdsb2JhbF9zZXEpO1xcbi1cXHRXQVJOX09OKGdsb2JhbF9zZXEgXFx1MDAzYz0gY29uLVxcdTAwM2V2Mi5nbG9iYWxfc2VxKTtcXG4rXFx0aWYgKGdsb2JhbF9zZXEgXFx1MDAzYz0gY29uLVxcdTAwM2V2Mi5nbG9iYWxfc2VxKSB7XFxuK1xcdFxcdHByX2VycihcXFwiJXMlbGxkICVzIGdsb2JhbF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFxcdTAwM2UgJWxsdSwgZ290ICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXFx1MDAzZXBlZXJfbmFtZSksXFxuK1xcdFxcdCAgICAgICBjZXBoX3ByX2FkZHIoXFx1MDAyNmNvbi1cXHUwMDNlcGVlcl9hZGRyKSxcXG4rXFx0XFx0ICAgICAgIGNvbi1cXHUwMDNldjIuZ2xvYmFsX3NlcSwgZ2xvYmFsX3NlcSk7XFxuK1xcdFxcdGNvbi1cXHUwMDNlZXJyb3JfbXNnID0gXFxcImdsb2JhbF9zZXEgbWlzbWF0Y2hcXFwiO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXHRjb24tXFx1MDAzZXYyLmdsb2JhbF9zZXEgPSBjZXBoX2dldF9nbG9iYWxfc2VxKGNvbi1cXHUwMDNlbXNnciwgZ2xvYmFsX3NlcSk7XFxuIFxcbiBcXHRmcmVlX2Nvbm5fYnVmcyhjb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNjo0NC43NDgzNDkxNTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5ODExOTExMzg4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRVBIX0xJQlwiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiQkxLX0RFVl9SQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZXBoX2Nvbl92MV90cnlfcmVhZFwiLFxuICAgIFwiY2VwaF9jb25fdjJfdHJ5X3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBXQVJOX09OIHdpdGggcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXR1cm5zIGluIHRoZSBDZXBoIG5ldHdvcmsgcHJvdG9jb2wgcGFyc2luZyBsb2dpYyAobWVzc2VuZ2VyIHYxIGFuZCB2MikuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIHByb3RvY29sIGNvZGUgdGhhdCBwcmV2ZW50cyBmYWxzZS1wb3NpdGl2ZSBjcmFzaCByZXBvcnRzIGFuZCBjb3JyZWN0bHkgaGFuZGxlcyBpbnZhbGlkIHByb3RvY29sIHN0YXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzk0NGNjMDBkNGMxYmYyY2ViNzg2MzQ3ZmM4OTRhMjI3NmQ4NjdkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDExOjI2OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuaW5kZXggYzllMDAyZDk2MzE5MC4uZGYyMjQ4YjdiMDI2NSAxMDA2NDRcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXG4rKysgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuQEAgLTg5OCw4ICs4OTgsMTUgQEAgc3RhdGljIGludCBwcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuIFx0XHQgICAgIGNvbi1cdTAwM2V2MS5wZWVyX2dsb2JhbF9zZXEsXG4gXHRcdCAgICAgbGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSxcbiBcdFx0ICAgICBjb24tXHUwMDNldjEuY29ubmVjdF9zZXEpO1xuLVx0XHRXQVJOX09OKGNvbi1cdTAwM2V2MS5jb25uZWN0X3NlcSAhPVxuLVx0XHRcdGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpO1xuK1x0XHRpZiAoY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxICE9IGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpIHtcbitcdFx0XHRwcl9lcnIoXCIlcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkICV1LCBnb3QgJXVcXG5cIixcbitcdFx0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdFx0ICAgICAgIGNlcGhfcHJfYWRkcihcdTAwMjZjb24tXHUwMDNlcGVlcl9hZGRyKSxcbitcdFx0XHQgICAgICAgY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxLFxuK1x0XHRcdCAgICAgICBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcbitcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJjb25uZWN0X3NlcSBtaXNtYXRjaFwiO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuIFxuIFx0XHRpZiAoY29uLVx1MDAzZXYxLmluX3JlcGx5LmZsYWdzIFx1MDAyNiBDRVBIX01TR19DT05ORUNUX0xPU1NZKVxuIFx0XHRcdGNlcGhfY29uX2ZsYWdfc2V0KGNvbiwgQ0VQSF9DT05fRl9MT1NTWVRYKTtcbmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXG5pbmRleCAwNWY2ZWVhMjk5ZmMwLi5kNzA2Y2RiZTBlZDJkIDEwMDY0NFxuLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcbisrKyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXG5AQCAtMjUyOSwxNCArMjUyOSwzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNvbi1cdTAwM2VwZWVyX25hbWUubnVtID0gY3B1X3RvX2xlNjQoZ2xvYmFsX2lkKTtcbiBcdGNvbi1cdTAwM2V2Mi5wZWVyX2dsb2JhbF9zZXEgPSBnbG9iYWxfc2VxO1xuIFx0Y29uLVx1MDAzZXBlZXJfZmVhdHVyZXMgPSBmZWF0dXJlcztcbi1cdFdBUk5fT04ocmVxdWlyZWRfZmVhdHVyZXMgXHUwMDI2IH5jbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKTtcbitcdGlmIChyZXF1aXJlZF9mZWF0dXJlcyBcdTAwMjYgfmNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMpIHtcbitcdFx0cHJfZXJyKFwiJXMlbGxkICVzIG1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMsIG15IHN1cHBvcnRlZCAweCVsbHgsIHNlcnZlcidzIHJlcXVpcmVkIDB4JWxseFxcblwiLFxuK1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdCAgICAgICBjbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzLCByZXF1aXJlZF9mZWF0dXJlcyk7XG4rXHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcIm1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXNcIjtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXHRjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSA9IGNvb2tpZTtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgQ0VQSF9NU0dfQ09OTkVDVF9MT1NTWSkge1xuIFx0XHRjZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7XG4tXHRcdFdBUk5fT04oY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpO1xuK1x0XHRpZiAoY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpIHtcbitcdFx0XHRwcl9lcnIoXCIlcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cXG5cIixcbitcdFx0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdFx0ICAgICAgIGNlcGhfcHJfYWRkcihcdTAwMjZjb24tXHUwMDNlcGVlcl9hZGRyKSk7XG4rXHRcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwic2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cIjtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0V0FSTl9PTighY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpO1xuK1x0XHRpZiAoIWNvbi1cdTAwM2V2Mi5zZXJ2ZXJfY29va2llKSB7XG4rXHRcdFx0cHJfZXJyKFwiJXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblxcblwiLFxuK1x0XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbitcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpKTtcbitcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJzZXJ2ZXJfY29va2llIGlzIG5vdCBzZXQgZm9yIGxvc3NsZXNzIGNvbm5lY3Rpb25cIjtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuIFx0fVxuIFxuIFx0Y2xlYXJfaW5fc2lnbl9rdmVjcyhjb24pO1xuQEAgLTI2MTgsNyArMjYzNywxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4gXHRjZXBoX2RlY29kZV82NF9zYWZlKFx1MDAyNnAsIGVuZCwgY29ubmVjdF9zZXEsIGJhZCk7XG4gXG4gXHRkb3V0KFwiJXMgY29uICVwIGNvbm5lY3Rfc2VxICVsbHVcXG5cIiwgX19mdW5jX18sIGNvbiwgY29ubmVjdF9zZXEpO1xuLVx0V0FSTl9PTihjb25uZWN0X3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5jb25uZWN0X3NlcSk7XG4rXHRpZiAoY29ubmVjdF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuY29ubmVjdF9zZXEpIHtcbitcdFx0cHJfZXJyKFwiJXMlbGxkICVzIGNvbm5lY3Rfc2VxIG1pc21hdGNoLCBleHBlY3RlZCBcdTAwM2UgJWxsdSwgZ290ICVsbHVcXG5cIixcbitcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuK1x0XHQgICAgICAgY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxLCBjb25uZWN0X3NlcSk7XG4rXHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcImNvbm5lY3Rfc2VxIG1pc21hdGNoXCI7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFx0Y29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxID0gY29ubmVjdF9zZXEgKyAxO1xuIFxuIFx0ZnJlZV9jb25uX2J1ZnMoY29uKTtcbkBAIC0yNjUxLDcgKzI2NzcsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNlcGhfZGVjb2RlXzY0X3NhZmUoXHUwMDI2cCwgZW5kLCBnbG9iYWxfc2VxLCBiYWQpO1xuIFxuIFx0ZG91dChcIiVzIGNvbiAlcCBnbG9iYWxfc2VxICVsbHVcXG5cIiwgX19mdW5jX18sIGNvbiwgZ2xvYmFsX3NlcSk7XG4tXHRXQVJOX09OKGdsb2JhbF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSk7XG4rXHRpZiAoZ2xvYmFsX3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5nbG9iYWxfc2VxKSB7XG4rXHRcdHByX2VycihcIiVzJWxsZCAlcyBnbG9iYWxfc2VxIG1pc21hdGNoLCBleHBlY3RlZCBcdTAwM2UgJWxsdSwgZ290ICVsbHVcXG5cIixcbitcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuK1x0XHQgICAgICAgY29uLVx1MDAzZXYyLmdsb2JhbF9zZXEsIGdsb2JhbF9zZXEpO1xuK1x0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJnbG9iYWxfc2VxIG1pc21hdGNoXCI7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFx0Y29uLVx1MDAzZXYyLmdsb2JhbF9zZXEgPSBjZXBoX2dldF9nbG9iYWxfc2VxKGNvbi1cdTAwM2Vtc2dyLCBnbG9iYWxfc2VxKTtcbiBcbiBcdGZyZWVfY29ubl9idWZzKGNvbik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNjo0NC43NDgzNTEzMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjEzMjE0NDYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDZXBoIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIGNsZWFuaW5nIHVwIHNvbWUgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIENlcGggbmV0d29yayBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgcmVwbGFjaW5nIGBXQVJOX09OYCB3aXRoIHByb3BlciBlcnJvciByZXR1cm5zIOKAkyBgLTFgLCBgLUVJTlZBTGAg4oCTIGFuZCBzZXR0aW5nIGBjb24tXHUwMDNlZXJyb3JfbXNnYCBpbiBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNgIGFuZCBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlP1wiIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY29kZSBwYXRocyBhcmUgZXZlbiAqcmVhY2hhYmxlKiBhbmQgaWYgdGhleSdyZSBjb21wbGV4IGVub3VnaCB0byB3YXJyYW50IGF0dGVudGlvbi5cblxuVGhlIHBhdGNoIHRvdWNoZXMgYHByb2Nlc3NfY29ubmVjdGAgaW4gdGhlIHYxIG1lc3NlbmdlciBhbmQgdGhlbiBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgLCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5YCwgYW5kIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsYCBpbiB0aGUgdjIgbWVzc2VuZ2VyLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGNsZWFybHkgY29yZSB0byB0aGUgQ2VwaCBwcm90b2NvbCwgc28gdGhleSdyZSBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgYXR0YWNrIHN1cmZhY2UuIENlcGgsIGJlaW5nIGEgZGlzdHJpYnV0ZWQgc3RvcmFnZSBzeXN0ZW0sIGlzIGRlZmluaXRlbHkgbmV0d29yay1mYWNpbmcuIEl0J3MgdXNlZCBhcyBhIG5ldHdvcmsgZmlsZXN5c3RlbSBhbmQgYmxvY2sgZGV2aWNlLCBzbyB0aGVyZSBpcyB0aGUgcG90ZW50aWFsIHRvIHRyaWdnZXIgaXNzdWVzIHJlbW90ZWx5LlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcywgXCJDYW4gSSBnZXQgdG8gdGhlc2UgYml0cyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQ/XCIgSWRlYWxseSwgc3l6a2FsbGVyIGNvdWxkIGJlIGxldmVyYWdlZC4gSWYgSSdtIGx1Y2t5LCB0aGVyZSBhcmUgYWxyZWFkeSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciBDZXBoLiBFdmVuIGlmIHRoZXJlJ3Mgbm8gbmF0aXZlIENlcGggc2VydmVyIHdpdGhpbiBzeXprYWxsZXIsIGl0J3MgdmVyeSBsaWtlbHkgSSBjYW4gY3JhZnQgbmV0d29yayBwYWNrZXRzIHRvIHBva2UgYXQgYSBDZXBoIGNsaWVudCBhbmQgZXhlcmNpc2UgdGhvc2UgY29kZSBwYXRocy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNldHRpbmcgdXAgYSBuZXR3b3JrIGNvbm5lY3Rpb24gb3IgaW5qZWN0aW5nIHBhY2tldHMgaW50byB0aGUgbmV0d29yayBpcyB1c3VhbGx5IGEgdmlhYmxlIHBhdGguIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgY2FzZSwgZmlyc3QsIHNvIGxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIENFUEggYW5kIHNlZSB3aGF0IHRoZSBvcHRpb25zIGxvb2sgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM3NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI2OjU2Ljg4MDQ5OTAyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3OTcxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENFUEhfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jZXBoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2NlcGgvS2NvbmZpZzoyOmNvbmZpZyBDRVBIX0xJQlxcbm5ldC9jZXBoL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ2VwaCBjb3JlIGxpYnJhcnlcXFwiXFxuLS1cXG5uZXQvY2VwaC9LY29uZmlnLTIyLVxcbm5ldC9jZXBoL0tjb25maWc6MjM6Y29uZmlnIENFUEhfTElCX1BSRVRUWURFQlVHXFxubmV0L2NlcGgvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJJbmNsdWRlIGZpbGU6bGluZSBpbiBjZXBoIGRlYnVnIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9jZXBoL0tjb25maWctMzQtXFxubmV0L2NlcGgvS2NvbmZpZzozNTpjb25maWcgQ0VQSF9MSUJfVVNFX0ROU19SRVNPTFZFUlxcbm5ldC9jZXBoL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiVXNlIGluLWtlcm5lbCBzdXBwb3J0IGZvciBETlMgbG9va3VwXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNjo1Ni45OTMzMDU2MzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQyNjY3NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENlcGggQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUgaXMgYENFUEhfTElCYC4gVGhhdCdzIG91ciBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgbm93IGlzIHRvIGRldGVybWluZSB3aGF0IG90aGVyIGVsZW1lbnRzIGFyZSBwb3RlbnRpYWxseSBjb3VwbGVkIHRvIGBDRVBIX0xJQmAuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYENFUEhfRlNgIG9yIGBCTEtfREVWX1JCRGAgYXJlIGZ1bmN0aW9uYWxseSAqcmVxdWlyZWQqIGluIHRoaXMgc2V0dXAsIG9yIGp1c3QgcG90ZW50aWFsbHkgKnVzZWQqLiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgc3RhbmRhcmQgQ2VwaCBmaWxlc3lzdGVtIGRlcGxveW1lbnQsIG9yIGFyZSB3ZSBtb3JlIGZvY3VzZWQgb24gUkJEIGJsb2NrIGRldmljZSBpbnRlcmFjdGlvbj8gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHRvIG9wdGltaXplIHRoZSBjb25maWd1cmF0aW9uLiBUaGlzIG1lYW5zIEkgd2FudCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgYXJlIHJlcXVpcmVkLCBvcHRpb25hbCwgb3IgbXV0dWFsbHkgZXhjbHVzaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjM5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MDAuMDM1OTc2NjcyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MzE3MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRVBIX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NlcGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NlcGgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2NlcGgvS2NvbmZpZzoyOmNvbmZpZyBDRVBIX0ZTXFxuZnMvY2VwaC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkNlcGggZGlzdHJpYnV0ZWQgZmlsZSBzeXN0ZW1cXFwiXFxuLS1cXG5mcy9jZXBoL0tjb25maWc9MTk9aWYgQ0VQSF9GU1xcbmZzL2NlcGgvS2NvbmZpZzoyMDpjb25maWcgQ0VQSF9GU0NBQ0hFXFxuZnMvY2VwaC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIkVuYWJsZSBDZXBoIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9jZXBoL0tjb25maWc9Mjc9ZW5kaWZcXG5mcy9jZXBoL0tjb25maWctMjgtXFxuZnMvY2VwaC9LY29uZmlnOjI5OmNvbmZpZyBDRVBIX0ZTX1BPU0lYX0FDTFxcbmZzL2NlcGgvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJDZXBoIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnLTM4LVxcbmZzL2NlcGgvS2NvbmZpZzozOTpjb25maWcgQ0VQSF9GU19TRUNVUklUWV9MQUJFTFxcbmZzL2NlcGgvS2NvbmZpZy00MC1cXHRib29sIFxcXCJDZXBoRlMgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzowMC4wOTMzMDE5ODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE5MzI0MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gQmxvY2sgRGV2aWNlIERldGFpbHMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlJ3MgcG9pbnRpbmcgbWUgdG93YXJkcyBgQkxLX0RFVl9SQkRgLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGFyZSBnZXR0aW5nIGludGVyZXN0aW5nLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIG9mIG91ciBzeXN0ZW0gd2l0aCB0aGUgUkJEIGJsb2NrIGRldmljZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgQ2VwaCBSQURPUyBCbG9jayBEZXZpY2UgZml0cyBpbiB3aXRoIHRoZSBrZXJuZWwncyBibG9jayBsYXllci4gT2theSwgc28gUkJELi4uIGxldCdzIGNoZWNrIGl0LiBMZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI3OjAzLjIxMjYyODI0NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTkxNjg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9SQkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTMwNz1jb25maWcgVklSVElPX0JMS1xcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMxNC1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzE1OmNvbmZpZyBCTEtfREVWX1JCRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMTYtXFx0dHJpc3RhdGUgXFxcIlJhZG9zIGJsb2NrIGRldmljZSAoUkJEKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MDMuMjY4NTUyNzY4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA1ODQyODg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQcm90b2NvbCBQYXJzaW5nIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIGBXQVJOX09OYCB0byBhY3R1YWwgZXJyb3IgcmV0dXJucyB3aXRoaW4gdGhlIHByb3RvY29sIHBhcnNpbmcuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpbnN0ZWFkIG9mIGp1c3QgbG9nZ2luZyBhIHdhcm5pbmcsIHdlJ3JlIG5vdyAqaGFuZGxpbmcqIHRoZSBlcnJvciBtb3JlIGdyYWNlZnVsbHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlRoaXMgbmVlZHMgZnV6emluZy5cIiBJdCdzIGNyaXRpY2FsIHRvIHZlcmlmeSB0aGVzZSBuZXcgZXJyb3IgcGF0aHMgYXJlIHJvYnVzdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbGVha2luZyByZXNvdXJjZXMgb3IgaW50cm9kdWNpbmcgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGFuZCB0aGF0IHdlIGNhbiByZWFjaCBtb3JlIHN0YXRlcyB0aHJvdWdoIHRoZXNlIHBhdGhzLlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLiBCYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2UgZnVuY3Rpb25zOiBgcHJvY2Vzc19jb25uZWN0YCwgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCwgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeWAsIGFuZCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbGAuXG5cbk5vdywgdGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciB0aGVzZSBhcmUgc3RhdGljLiBUaGUgY29udGV4dCBpcyBpbXBvcnRhbnQgaGVyZS4gSSBzZWUgdGhleSBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpYyBpbnQgLi4uYC4gSWYgdGhleSB3ZXJlIG5vbi1zdGF0aWMsIHRoZXkgbWlnaHQgZ2V0IGNhbGxlZCBmcm9tIG11bHRpcGxlIHBsYWNlcywgYnV0IGlmIHRoZXkgYXJlIHN0YXRpYyB0aGV5IGNvdWxkIGJlIGlubGluZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoLiBMZXQncyBkaWcgaW50byB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnZva2VkLiBUaGF0J2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvZGUgZmxvdyBhbmQgd2hlcmUgdGhlc2UgZXJyb3IgcGF0aHMgYXJlIG1vc3QgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5ODYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MDkuMzI2OTg3MDYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzEzMjM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9jZXNzX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM9Njk3PXN0YXRpYyBpbnQgcHJvY2Vzc19iYW5uZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzM5LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjc0MDpzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzQxLXtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTc0Ni1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo3NDc6XFx0ZG91dChcXFwicHJvY2Vzc19jb25uZWN0IG9uICVwIHRhZyAlZFxcXFxuXFxcIiwgY29uLCBjb24tXFx1MDAzZXYxLmluX3RhZyk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzQ4LVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODAyLVxcdFxcdGNvbi1cXHUwMDNldjEuYXV0aF9yZXRyeSsrO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjgwMzpcXHRcXHRkb3V0KFxcXCJwcm9jZXNzX2Nvbm5lY3QgJXAgZ290IEJBREFVVEhPUklaRVIgYXR0ZW1wdCAlZFxcXFxuXFxcIiwgY29uLFxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTgwNC1cXHRcXHQgICAgIGNvbi1cXHUwMDNldjEuYXV0aF9yZXRyeSk7XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04MjMtXFx0XFx0ICovXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODI0OlxcdFxcdGRvdXQoXFxcInByb2Nlc3NfY29ubmVjdCBnb3QgUkVTRVQgcGVlciBzZXEgJXVcXFxcblxcXCIsXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODI1LVxcdFxcdCAgICAgbGUzMl90b19jcHUoY29uLVxcdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpO1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODQ5LVxcdFxcdCAqL1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjg1MDpcXHRcXHRkb3V0KFxcXCJwcm9jZXNzX2Nvbm5lY3QgZ290IFJFVFJZX1NFU1NJT04gbXkgc2VxICV1LCBwZWVyICV1XFxcXG5cXFwiLFxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTg1MS1cXHRcXHQgICAgIGxlMzJfdG9fY3B1KGNvbi1cXHUwMDNldjEub3V0X2Nvbm5lY3QuY29ubmVjdF9zZXEpLFxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODY1LVxcdFxcdCAqL1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjg2NjpcXHRcXHRkb3V0KFxcXCJwcm9jZXNzX2Nvbm5lY3QgZ290IFJFVFJZX0dMT0JBTCBteSAldSBwZWVyX2dzZXEgJXVcXFxcblxcXCIsXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODY3LVxcdFxcdCAgICAgY29uLVxcdTAwM2V2MS5wZWVyX2dsb2JhbF9zZXEsXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04OTYtXFx0XFx0Y29uLVxcdTAwM2VwZWVyX2ZlYXR1cmVzID0gc2VydmVyX2ZlYXQ7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODk3OlxcdFxcdGRvdXQoXFxcInByb2Nlc3NfY29ubmVjdCBnb3QgUkVBRFkgZ3NlcSAlZCBjc2VxICVkICglZClcXFxcblxcXCIsXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODk4LVxcdFxcdCAgICAgY29uLVxcdTAwM2V2MS5wZWVyX2dsb2JhbF9zZXEsXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYz0xMzI5PWludCBjZXBoX2Nvbl92MV90cnlfcmVhZChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xMzcyLVxcdFxcdFxcdGdvdG8gb3V0O1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjEzNzM6XFx0XFx0cmV0ID0gcHJvY2Vzc19jb25uZWN0KGNvbik7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtMTM3NC1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MDkuMzgwMTMxMDY3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNzk4NzM3MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgQ2VwaCBDb25uZWN0aW9uIEZsb3cqKlxuXG5BbHJpZ2h0LCBzbyBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIHRyaWdnZXJzIGEgY2FsbCB0byBgcHJvY2Vzc19jb25uZWN0YC4gVGhhdCdzIHdoZXJlIHRoZSBjb25uZWN0aW9uIGhhbmRzaGFrZSBoYXBwZW5zLiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzICphY3R1YWxseSogZ29pbmcgb24gaW5zaWRlIHRob3NlIGZ1bmN0aW9ucyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy4gU28sIEkgbmVlZCB0byBmb2N1cyBvbiBhIGZldyBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBjcml0aWNhbCB3aXRoaW4gdGhlIGBtZXNzZW5nZXJfdjIuY2AgZmlsZS4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCwgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeWAsIGFuZCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbGAuIFRoZXNlIHByb2JhYmx5IGhhbmRsZSB0aGUgY3J1Y2lhbCBzdGVwcyBvZiBpZGVudGlmeWluZyB0aGUgc2VydmVyLCBoYW5kbGluZyBhbnkgc2Vzc2lvbiByZXRyaWVzIHRoYXQgbWF5IGJlIG5lZWRlZCwgYW5kIHBlcmhhcHMgbWFuYWdpbmcgZ2xvYmFsIHJldHJ5IGF0dGVtcHRzIGlmIHRoZSBpbml0aWFsIGF0dGVtcHRzIGZhaWwuIEknbGwgbG9vayBpbnRvIGhvdyBlYWNoIG9mIHRoZXNlIGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gZmxvdyBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzcsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzoxNS40NjAwMDgyMTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDA4MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nlc3Nfc2VydmVyX2lkZW50fHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeXxwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI0MjQ9c3RhdGljIGludCBwcm9jZXNzX2F1dGhfc2lnbmF0dXJlKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI0NzEtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjQ3MjpzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yNDczLVxcdFxcdFxcdFxcdHZvaWQgKnAsIHZvaWQgKmVuZClcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI1OTc9c3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmVjb25uZWN0X29rKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI2MjUtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjYyNjpzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjYyNy1cXHRcXHRcXHRcXHQgdm9pZCAqcCwgdm9pZCAqZW5kKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjY2NS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyNjY2OnN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjY2Ny1cXHRcXHRcXHRcXHRcXHR2b2lkICpwLCB2b2lkICplbmQpXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yNzk0PXN0YXRpYyBpbnQgcHJvY2Vzc19jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgxNy1cXHRjYXNlIEZSQU1FX1RBR19TRVJWRVJfSURFTlQ6XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjgxODpcXHRcXHRyZXQgPSBwcm9jZXNzX3NlcnZlcl9pZGVudChjb24sIHAsIGVuZCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgxOS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MjYtXFx0Y2FzZSBGUkFNRV9UQUdfU0VTU0lPTl9SRVRSWTpcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyODI3OlxcdFxcdHJldCA9IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShjb24sIHAsIGVuZCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgyOC1cXHRcXHRicmVhaztcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODI5LVxcdGNhc2UgRlJBTUVfVEFHX1NFU1NJT05fUkVUUllfR0xPQkFMOlxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI4MzA6XFx0XFx0cmV0ID0gcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChjb24sIHAsIGVuZCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgzMS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MTUuNTA4NDI5OTA0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTAwMDEzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGg6IGBwcm9jZXNzX2NvbnRyb2xgKipcblxuT2theSwgc28gSSdtIGludmVzdGlnYXRpbmcgaG93IHRoaXMgc3lzdGVtIG9wZXJhdGVzLiBNeSBmb2N1cyBoYXMgYmVlbiBkcmF3biB0byBgcHJvY2Vzc19jb250cm9sYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgcmVsYXRpb25zaGlwcy4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBpbnZva2VkIGZyb20/IEkgaW1tZWRpYXRlbHkgd2FudCB0byBkZXRlcm1pbmUgdGhlIGltbWVkaWF0ZSBjYWxsZXJzLCBhbmQgdGhlaXIgY2FsbGVycy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGlkZW50aWZ5aW5nIGRlcGVuZGVuY2llczsgaXQncyBhYm91dCByZWNvbnN0cnVjdGluZyB0aGUgY29udHJvbCBmbG93LiBTZWVpbmcgdGhlIGNoYWluIGZyb20gdGhlIGhpZ2hlc3QgbGV2ZWxzIHdpbGwgaGVscCBwYWludCB0aGUgcGljdHVyZSBvZiB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gZml0cyBpbi4gVGhpcyBzaG91bGQgcHJvdmlkZSBjb250ZXh0IGZvciB3aGF0IGBwcm9jZXNzX2NvbnRyb2xgIGlzIGRlc2lnbmVkIHRvIGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTc4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MTkuMjE4NDM0MTMxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU2Mjg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9jZXNzX2NvbnRyb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9Mjc3ND1zdGF0aWMgaW50IHByb2Nlc3NfYWNrKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjc5My1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyNzk0OnN0YXRpYyBpbnQgcHJvY2Vzc19jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI3OTUte1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjkyOD1zdGF0aWMgaW50IF9faGFuZGxlX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjkzNC1cXHRpZiAoY29uLVxcdTAwM2V2Mi5pbl9kZXNjLmZkX3RhZyAhPSBGUkFNRV9UQUdfTUVTU0FHRSlcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyOTM1OlxcdFxcdHJldHVybiBwcm9jZXNzX2NvbnRyb2woY29uLCBwLCBlbmQpO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5MzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI3OjE5LjI2NzAxOTkyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTY1NjQxMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWJ1Z2dpbmcgdGhlIENvbnRyb2wgSGFuZGxlcioqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIGxvZ2ljIHNlZW1zIHRvIGJlIHRpZWQgdG8gdGhpcyBgX19oYW5kbGVfY29udHJvbGAgbWV0aG9kLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHBpZWNlcyBvZiBjb2RlIGFyZSBhY3R1YWxseSAqY2FsbGluZyogdGhpcyB0aGluZy4gSXQncyB0aGUgZXNzZW50aWFsIGVudHJ5IHBvaW50IGZvciBjb250cm9sIHNpZ25hbHMgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlciB3aWxsIHByb3ZpZGUgdml0YWwgY29udGV4dCB0byBmdXJ0aGVyIGV4YW1pbmUgd2hhdCBpcyBnb2luZyBvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgd2hlcmUgdGhlIGV4ZWN1dGlvbiBmbG93IGlzIG9yaWdpbmF0aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3RhdGUgYW5kIGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0gYXQgdGhlIHRpbWUgdGhpcyBoYW5kbGVyIGdldHMgaW52b2tlZC4gVGltZSB0byBnZXQgZG93biB0byB0cmFjaW5nIHRoZSBjYWxsIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjMyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MjguNDMyNjY0NzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTUzMDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faGFuZGxlX2NvbnRyb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjkxMD1zdGF0aWMgaW50IHByb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yOTI3LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI5Mjg6c3RhdGljIGludCBfX2hhbmRsZV9jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcClcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yOTI5LXtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI5NzM9c3RhdGljIGludCBoYW5kbGVfcHJlYW1ibGUoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAwNS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMDA2OlxcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgQ1RSTF9CT0RZKGNvbi1cXHUwMDNldjIuaW5fYnVmKSk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAwNy19XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0zMDA5PXN0YXRpYyBpbnQgaGFuZGxlX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAyOC1cXHRcXHRtZW1jcHkoYnVmLCBjb24tXFx1MDAzZXYyLmluX2t2ZWNzWzBdLmlvdl9iYXNlLCBjdHJsX2xlbik7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAyOTpcXHRcXHRyZXR1cm4gX19oYW5kbGVfY29udHJvbChjb24sIGJ1Zik7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAzMC1cXHR9XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAzMS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMDMyOlxcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgY29uLVxcdTAwM2V2Mi5pbl9rdmVjc1swXS5pb3ZfYmFzZSk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAzMy19XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0zMDM1PXN0YXRpYyBpbnQgaGFuZGxlX2NvbnRyb2xfcmVtYWluZGVyKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNDctXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzA0ODpcXHRyZXR1cm4gX19oYW5kbGVfY29udHJvbChjb24sIGNvbi1cXHUwMDNldjIuaW5fa3ZlY3NbMF0uaW92X2Jhc2UgLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNDktXFx0XFx0XFx0XFx0ICAgICBDRVBIX1BSRUFNQkxFX0lOTElORV9MRU4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzoyOC40ODU4MjU2NzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5NDQxNDMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBDb2RlJ3MgUHVycG9zZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgY29kZS4gRnJvbSB3aGF0IEkgY2FuIGdhdGhlciwgdGhlc2UgYXJlIGFsbCBpbnRlcm5hbCBzdGF0aWMgaGVscGVycy4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQgbWVhbnMgdGhleSdyZSBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBvciBjYWxsZWQgZXh0ZXJuYWxseSwgbGlrZWx5IHVzZWQgZm9yIHNwZWNpZmljIGludGVybmFsIHRhc2tzIHdpdGhpbiBhIGxhcmdlciBtb2R1bGUuXG5cblRoZSBtb3N0IGxpa2VseSBlbnRyeSBwb2ludCBpbnRvIHRoaXMgc2VjdGlvbiBvZiBjb2RlIGxvb2tzIGxpa2UgYGNlcGhfY29uX3YyX3RyeV9yZWFkYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGlzIHByZXR0eSBkZXNjcmlwdGl2ZTsgaXQgc3VnZ2VzdHMgdGhpcyBjb2RlIGlzIHJlc3BvbnNpYmxlIGZvciBhdHRlbXB0aW5nIHRvIHJlYWQgZGF0YSB1c2luZyB0aGUgQ2VwaCBwcm90b2NvbCwgc3BlY2lmaWNhbGx5IHZlcnNpb24gMiwgYW5kIFwidHJ5XCIgaW1wbGllcyBzb21lIHNvcnQgb2YgZXJyb3IgaGFuZGxpbmcgb3IgcG90ZW50aWFsIGZvciBwYXJ0aWFsIHJlYWRzLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBzdGFydCB0byBpbnZlc3RpZ2F0ZSB0aGUgaW5uZXIgd29ya2luZ3MuIEknbGwgZm9jdXMgb24gdGhhdCBmdW5jdGlvbidzIGNhbGwgc3RhY2sgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdy4gVW5kZXJzdGFuZGluZyBob3cgYW5kIHdoZW4gdGhpcyBcInRyeV9yZWFkXCIgZnVuY3Rpb24gZ2V0cyBpbnZva2VkIHdpbGwgYmUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzczLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MzEuOTgwMjQyMzgzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk1NDE0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZXBoX2Nvbl92Ml90cnlfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0zMTAwPXN0YXRpYyBpbnQgcG9wdWxhdGVfaW5faXRlcihzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTY4LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMxNjk6aW50IGNlcGhfY29uX3YyX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTcwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MzIuMDI3MjEwMTI4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzUxNjA3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGNvbmNpc2Ugc3VtbWFyeSBmb3IgYW4gZXhwZXJ0OlxuXG4qKklkZW50aWZ5aW5nIFJlYWQgRW50cnkgUG9pbnRzIGluIHRoZSBDZXBoIENvbm5lY3Rpb24gTW9kdWxlKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgY2VudGVyZWQgYXJvdW5kIHBpbnBvaW50aW5nIHRoZSBrZXkgcmVhZCBlbnRyeSBwb2ludHMgd2l0aGluIHRoZSBDZXBoIGNvbm5lY3Rpb24gaGFuZGxpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgSSd2ZSBpZGVudGlmaWVkIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgYW5kIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAgYXMgcG90ZW50aWFsIGluaXRpYWwgY2FuZGlkYXRlcyBmb3IgaW52ZXN0aWdhdGluZyBob3cgaW5jb21pbmcgZGF0YSBpcyBwcm9jZXNzZWQuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gcGVyZm9ybSBhIHRob3JvdWdoIHNlYXJjaCBvZiB0aGUgY29kZSBiYXNlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHNlcnZlIGFzIGVudHJ5IHBvaW50cyBmb3IgcmVhZCBvcGVyYXRpb25zIGJleW9uZCB0aGUgdHdvIHRoYXQgSSd2ZSBhbHJlYWR5IGNvbWUgYWNyb3NzLiBJJ2xsIG5lZWQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgYWxsIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCByZWFkIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc2OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI3OjM2LjMwMjM3MzkzN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4NjY1MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2VwaF9jb25fdjFfdHJ5X3JlYWR8Y2VwaF9jb25fdjJfdHJ5X3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jZXBoL21lc3Nlbmdlci5jPTE1NDI9c3RhdGljIHZvaWQgY2VwaF9jb25fd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE1NzQtXFx0XFx0aWYgKGNlcGhfbXNncjIoZnJvbV9tc2dyKGNvbi1cXHUwMDNlbXNncikpKVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjE1NzU6XFx0XFx0XFx0cmV0ID0gY2VwaF9jb25fdjJfdHJ5X3JlYWQoY29uKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xNTc2LVxcdFxcdGVsc2VcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxNTc3OlxcdFxcdFxcdHJldCA9IGNlcGhfY29uX3YxX3RyeV9yZWFkKGNvbik7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTU3OC1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM9MTMxND1zdGF0aWMgaW50IHJlYWRfa2VlcGFsaXZlX2FjayhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xMzI4LSAqL1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjEzMjk6aW50IGNlcGhfY29uX3YxX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xMzMwLXtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMxMDA9c3RhdGljIGludCBwb3B1bGF0ZV9pbl9pdGVyKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxNjgtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzE2OTppbnQgY2VwaF9jb25fdjJfdHJ5X3JlYWQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxNzAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzozNi4zNDgyNDYxNTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0OTgxMTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ2VwaCBDb25uZWN0aW9uIFByb2Nlc3NpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgQ2VwaCBjb25uZWN0aW9ucyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgY2VwaF9jb25fd29ya2ZuYC4gVGhpcyBpcyB0aGUgY29yZSB3b3JrZXIgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcsIHNvIHRoZSByZWFsIGFjdGlvbiBtdXN0IGJlIGluIGVpdGhlciBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIG9yIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAuIFRob3NlIGFyZSB0aGUgcHJpbWUgc3VzcGVjdHMsIHRoYXQgaXMgd2hlcmUgdGhlIG1lYXQgaXMuIFNob3VsZCBJIGxvb2sgYXQgdGhlIGNhbGxlciwgYGNlcGhfY29uX3dvcmtmbmAsIG9yIHRoZSBjYWxsZWVzLCBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgPyBJIHRoaW5rIHRoZSBjYWxsZWVzLiBUaGVzZSBgdHJ5X3JlYWRgIGZ1bmN0aW9ucyBhcmUgdGhlIGtleS4gV2FpdCwgaG9sZCBvbi4uLiB0aGV5ICphcmUqIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub24tc3RhdGljLiBOZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXkgYXJlIGV4cG9ydGVkOyBJIGNhbid0IGJlIHN1cmUgd2l0aG91dCB2ZXJpZnlpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6NDAuNjk4MDYwNzIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA1NTMyNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qY2VwaF9jb25fdjFfdHJ5X3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzo0MC43NDYxMjYxMzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MTkyMTc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCB3aXRoIHRoZSBib2xkZWQgaGVhZGVyIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBTeW1ib2wgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gdGhlIHN5bWJvbHMgaW4gcXVlc3Rpb24gYXJlbid0IGRlY2xhcmVkIGFzIGBleHRlcm5gLCB3aGljaCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBtZWFucyB0aGV5IGhhdmUgaW50ZXJuYWwgbGlua2FnZSBhbmQgcmVzaWRlIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIGNvbXBpbGF0aW9uIHVuaXRzLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZSBpbiB3ZWxsLXN0cnVjdHVyZWQgY29kZS4gQnV0LCB0aGV5J3JlIG5vdCBgc3RhdGljYCBlaXRoZXIsIG1lYW5pbmcgdGhleSdyZSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgZXhlY3V0YWJsZSwgdGhvdWdoIHBvdGVudGlhbGx5IHdpdGggaW50ZXJuYWwgdmlzaWJpbGl0eS4gU28sIGdpdmVuIHRoYXQgdGhleSBhcmUgaW4gZGlmZmVyZW50IGZpbGVzLCB0aGV5IGFyZSBkZWZpbml0ZWx5IGRpc3RpbmN0IHN5bWJvbHMsIGV2ZW4gaWYgb25seSB3aXRoaW4gdGhlIGxpbmtlZCBwcm9ncmFtLiBJdCdzIGEgbm9uLXN0YXRpYywgbG9jYWxseSB2aXNpYmxlIHN5bWJvbCBzaXR1YXRpb24g4oCTIGNvbW1vbiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSB1c2VkLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBjZXBoX2Nvbl93b3JrZm5gLiBJJ2xsIHRyYWNlIHRoYXQgZnVuY3Rpb24gdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3ltYm9scyBpbiBxdWVzdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZWlyIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3OTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzo0NC4xODgwNTA5MjNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTMxNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNlcGhfY29uX3dvcmtmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTQ2PXN0YXRpYyB2b2lkIGNhbmNlbF9jb24oc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxNDc6c3RhdGljIHZvaWQgY2VwaF9jb25fd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xNDgtc3RhdGljIHZvaWQgY29uX2ZhdWx0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbik7XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXIuYz02MzI9dm9pZCBjZXBoX2Nvbl9pbml0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcHJpdmF0ZSxcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTY0Ni1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y29uLVxcdTAwM2VvdXRfc2VudCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM6NjQ3OlxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZjb24tXFx1MDAzZXdvcmssIGNlcGhfY29uX3dvcmtmbik7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtNjQ4LVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTUyMD1zdGF0aWMgdm9pZCBjb25fZmF1bHRfZmluaXNoKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE1NDEtICovXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM6MTU0MjpzdGF0aWMgdm9pZCBjZXBoX2Nvbl93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE1NDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzo0NC4yMzE5ODY4NjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxMDAwNjA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGUgQ2VwaCBDb25uZWN0aW9uIFdvcmsgRnVuY3Rpb24gQ2hhbmdlKipcblxuT2theSwgc28gYGNlcGhfY29uX3dvcmtmbmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBhbmQgYGNlcGhfY29uX3YyX3RyeV9yZWFkYCBtb3JlIHNpZ25pZmljYW50IHBvaW50cyBvZiBpbnRlcmVzdCDigJMgdGhleSdyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHRoZSBub24tc3RhdGljIGNvZGUuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgYWZmZWN0IHRoZSBvdmVyYWxsIGZsb3cuXG5cbkxldCdzIGV4cGFuZCB0aGUgc2NvcGUuIEkgbmVlZCB0byBzZWUgd2hhdCBlbHNlIGhhcyBiZWVuIHRvdWNoZWQgaW4gdGhpcyBwYXRjaCBiZXlvbmQgdGhvc2UgaW5pdGlhbCByZWFkcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBsaXN0IGlzOiBgcHJvY2Vzc19jb25uZWN0YCAoc3RhdGljKSwgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCAoc3RhdGljKSwgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeWAgKHN0YXRpYyksIGFuZCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbGAgKHN0YXRpYykuIFRoZXNlIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggbWVhbnMgdGhlaXIgc2NvcGUgaXMgbGltaXRlZCBhbmQgc28gaXQgaXMgYW4gaW5kaWNhdGlvbiBvZiBmb2N1c2VkIGFuZCBsb2NhbGlzZWQgbW9kaWZpY2F0aW9uLlxuXG5Ob3cgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBlbGVtZW50cywgcHJpbWFyaWx5IGBDRVBIX0xJQmAsIGFyZSBjb3JyZWN0IGFuZCBjb21wbGV0ZS4gQXJlIHRoZXJlIGFueSBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0aGF0IGhhdmUgYmVlbiBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkPyBBIHF1aWNrIHNjYW4gb2YgYG5ldC9jZXBoL0tjb25maWdgIHNob3VsZCByZXZlYWwgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIGJ1aWxkIGZsYWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM1NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzo0OC45NDE5OTUwODJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NlcGgvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDRVBIX0xJQlxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkNlcGggY29yZSBsaWJyYXJ5XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NCQ1xcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19HQ01cXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fS1JCNVxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAxMjpcXHRcXHRzZWxlY3QgS0VZU1xcbiAgMTM6XFx0XFx0ZGVmYXVsdCBuXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIENob29zZSBZIG9yIE0gaGVyZSB0byBpbmNsdWRlIGNlcGhsaWIsIHdoaWNoIHByb3ZpZGVzIHRoZVxcbiAgMTY6XFx0XFx0ICBjb21tb24gZnVuY3Rpb25hbGl0eSB0byBib3RoIHRoZSBDZXBoIGZpbGVzeXN0ZW0gYW5kXFxuICAxNzpcXHRcXHQgIHRvIHRoZSByYWRvcyBibG9jayBkZXZpY2UgKHJiZCkuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgTW9yZSBpbmZvcm1hdGlvbiBhdCBodHRwczovL2NlcGguaW8vLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBDRVBIX0xJQl9QUkVUVFlERUJVR1xcbiAgMjQ6XFx0XFx0Ym9vbCBcXFwiSW5jbHVkZSBmaWxlOmxpbmUgaW4gY2VwaCBkZWJ1ZyBvdXRwdXRcXFwiXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIENFUEhfTElCXFxuICAyNjpcXHRcXHRkZWZhdWx0IG5cXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIGRlYnVnIG91dHB1dCB3aWxsIGluY2x1ZGUgYSBmaWxlbmFtZSBhbmRcXG4gIDI5OlxcdFxcdCAgbGluZSB0byBhaWQgZGVidWdnaW5nLiAgVGhpcyBpbmNyZWFzZXMga2VybmVsIHNpemUgYW5kIHNsb3dzXFxuICAzMDpcXHRcXHQgIGV4ZWN1dGlvbiBzbGlnaHRseSB3aGVuIGRlYnVnIGNhbGwgc2l0ZXMgYXJlIGVuYWJsZWQgKGUuZy4sXFxuICAzMTpcXHRcXHQgIHZpYSBDT05GSUdfRFlOQU1JQ19ERUJVRykuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIENFUEhfTElCX1VTRV9ETlNfUkVTT0xWRVJcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIlVzZSBpbi1rZXJuZWwgc3VwcG9ydCBmb3IgRE5TIGxvb2t1cFxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gQ0VQSF9MSUJcXG4gIDM4OlxcdFxcdHNlbGVjdCBETlNfUkVTT0xWRVJcXG4gIDM5OlxcdFxcdGRlZmF1bHQgblxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgaG9zdG5hbWVzIChlLmcuIG1vbml0b3IgYWRkcmVzc2VzKSB3aWxsXFxuICA0MjpcXHRcXHQgIGJlIHJlc29sdmVkIHVzaW5nIHRoZSBDT05GSUdfRE5TX1JFU09MVkVSIGZhY2lsaXR5LlxcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHQgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIENPTkZJR19ETlNfUkVTT0xWRVIgY29uc3VsdFxcbiAgNDU6XFx0XFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZG5zX3Jlc29sdmVyLnJzdFxcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI3OjQ4Ljk0MjA1ODQwMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE3ODkzMDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIEV4cGxvcmF0aW9uIGZvciBDZXBoIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgQ0VQSF9MSUJgIHNlZW1zIGxpa2UgdGhlIGtleSBzdGFydGluZyBwb2ludC4gSXQncyB0aGUgY29yZSBDZXBoIGxpYnJhcnksIGFuZCBqdXN0IHRoYXQgc2hvdWxkIHN1ZmZpY2UuIFdhaXQgYSBtaW51dGUuLi4gYENFUEhfTElCYCBpcyBhIHRyaXN0YXRlLCBtZWFuaW5nIGl0IGNhbiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZS4gUGVyZmVjdCEgSWYgd2UncmUgYWltaW5nIGZvciBmdXp6aW5nLCBlbmFibGluZyBgQ0VQSF9MSUJgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IG1vdmUuIEhvd2V2ZXIsIEkgdGhpbmsgaXQgbWlnaHQgbm90IGJlIGVub3VnaCBvbiBpdHMgb3duLiBgQ0VQSF9MSUJgIHByb3ZpZGVzIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnksIGJ1dCB0aGUgYWN0dWFsIGNvbm5lY3Rpb25zIGFyZSBpbml0aWF0ZWQgYnkgaGlnaGVyLWxldmVsIGNvbXBvbmVudHMgbGlrZSB0aGUgZmlsZXN5c3RlbSBvciB0aGUgYmxvY2sgZGV2aWNlLlxuXG5UaGVyZWZvcmUsIHRvIHJlYWxpc3RpY2FsbHkgdHJpZ2dlciBjb25uZWN0aW9ucyBhbmQgZXhwb3NlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIEkgc2hvdWxkIGVuYWJsZSBgQ0VQSF9GU2AgYW5kIGBCTEtfREVWX1JCRGAgYXMgd2VsbC4gVGhlc2UgYXJlIHRoZSBjb21wb25lbnRzIHRoYXQgYXJlIGxpa2VseSB0byBiZSByZXNwb25zaWJsZSBmb3IgdGhlIGNvbm5lY3Rpb24gaW5pdGlhdGlvbi4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYm90aC4gSSBzaG91bGQgaGF2ZSBhIGxvb2sgYXQgYGZzL2NlcGgvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb2YgdGhlc2UgdHdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM3OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI3OjUzLjI1OTk1NDI4NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9jZXBoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDRVBIX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ2VwaCBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDU6XFx0XFx0c2VsZWN0IENFUEhfTElCXFxuICAgNjpcXHRcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbiAgIDc6XFx0XFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuICAgODpcXHRcXHRkZWZhdWx0IG5cXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgQ2hvb3NlIFkgb3IgTSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgbW91bnRpbmcgdGhlXFxuICAxMTpcXHRcXHQgIGV4cGVyaW1lbnRhbCBDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtLiAgQ2VwaCBpcyBhbiBleHRyZW1lbHlcXG4gIDEyOlxcdFxcdCAgc2NhbGFibGUgZmlsZSBzeXN0ZW0gZGVzaWduZWQgdG8gcHJvdmlkZSBoaWdoIHBlcmZvcm1hbmNlLFxcbiAgMTM6XFx0XFx0ICByZWxpYWJsZSBhY2Nlc3MgdG8gcGV0YWJ5dGVzIG9mIHN0b3JhZ2UuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgTW9yZSBpbmZvcm1hdGlvbiBhdCBodHRwczovL2NlcGguaW8vLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIENFUEhfRlNcXG4gIDIwOlxcdGNvbmZpZyBDRVBIX0ZTQ0FDSEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6NTMuMjYwMDQzNDY2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDY3OTQ3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBgQ0VQSF9GU2AgaXMgY29uZmlndXJlZCB0byB1c2UgYENFUEhfTElCYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyB0aGUgZmlsZXN5c3RlbSBuZWVkaW5nIHRoZSBDZXBoIGxpYnJhcnkgdG8gZnVuY3Rpb24uIE5vdywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgYEJMS19ERVZfUkJEYCBpcyBlbmFibGVkIHdpdGhpbiB0aGUgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIEknbGwgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgdG8gY29uZmlybSBldmVyeXRoaW5nIGxvb2tzIGdvb2QgdGhlcmUuIEp1c3QgYSBxdWljayBkb3VibGUtY2hlY2sgdG8gZW5zdXJlIG5vIHVuZXhwZWN0ZWQgY29uZmxpY3RzIGV4aXN0IHdpdGggdGhlIGJsb2NrIGxheWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAyMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6NTYuOTY2ODQwODczWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0Y29uZmlnIEJMS19ERVZfUkJEXFxuIDMxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiUmFkb3MgYmxvY2sgZGV2aWNlIChSQkQpXFxcIlxcbiAzMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IEJMT0NLXFxuIDMxODpcXHRcXHRzZWxlY3QgQ0VQSF9MSUJcXG4gMzE5OlxcdFxcdGhlbHBcXG4gMzIwOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBpbmNsdWRlIHRoZSBSYWRvcyBibG9jayBkZXZpY2UsIHdoaWNoIHN0cmlwZXNcXG4gMzIxOlxcdFxcdCAgYSBibG9jayBkZXZpY2Ugb3ZlciBvYmplY3RzIHN0b3JlZCBpbiB0aGUgQ2VwaCBkaXN0cmlidXRlZCBvYmplY3RcXG4gMzIyOlxcdFxcdCAgc3RvcmUuXFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdCAgTW9yZSBpbmZvcm1hdGlvbiBhdCBodHRwOi8vY2VwaC5uZXdkcmVhbS5uZXQvLlxcbiAzMjU6XFx0XFxuIDMyNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDMyNzpcXHRcXG4gMzI4OlxcdGNvbmZpZyBCTEtfREVWX1VCTEtcXG4gMzI5OlxcdFxcdHRyaXN0YXRlIFxcXCJVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXFxcIlxcbiAzMzA6XFx0XFx0c2VsZWN0IElPX1VSSU5HXFxuIDMzMTpcXHRcXHRoZWxwXFxuIDMzMjpcXHRcXHQgIGlvX3VyaW5nIGJhc2VkIHVzZXJzcGFjZSBibG9jayBkcml2ZXIuIFRvZ2V0aGVyIHdpdGggdWJsayBzZXJ2ZXIsIHVibGtcXG4gMzMzOlxcdFxcdCAgaGFzIGJlZW4gd29ya2luZyB3ZWxsLCBidXQgaW50ZXJmYWNlIHdpdGggdXNlcnNwYWNlIG9yIGNvbW1hbmQgZGF0YVxcbiAzMzQ6XFx0XFx0ICBkZWZpbml0aW9uIGlzbid0IGZpbmFsaXplZCB5ZXQsIGFuZCBtaWdodCBjaGFuZ2UgYWNjb3JkaW5nIHRvIGZ1dHVyZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzo1Ni45NjY5MjY1ODNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxOTUzNTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ2VwaCBNZXNzZW5nZXIgUmVhZCBQYXRocyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ3ZlIGRlY2lkZWQgYENFUEhfRlNgIGFuZCBgQkxLX0RFVl9SQkRgIGFyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIHVzZWZ1bCBpbiB0aGlzIGludmVzdGlnYXRpb24sIHNvIHRoZXkncmUgZW5hYmxlZC4gTm93LCB0aGUga2V5IGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW50IHJlYWQgcGF0aHMgd2l0aGluIHRoZSBDZXBoIG1lc3NlbmdlciBjb2RlLCBzcGVjaWZpY2FsbHkgdmVyc2lvbiAxIGFuZCB2ZXJzaW9uIDIuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiB0aGUgc3ltYm9scyBpbnZvbHZlZCBpbiByZWFkaW5nIGRhdGEuIEknbSBhbHJlYWR5IGxvb2tpbmcgYXQgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBhbmQgYGNlcGhfY29uX3YyX3RyeV9yZWFkYC4gVGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoZSB2aWNpbml0eSBvZiB0aGUgbW9kaWZpZWQgY29kZSB0aGF0IEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBJIGhhdmUgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cbkluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AsIGl0J3MgY2xlYXIgdGhhdCBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGNhbGxzIGBwcm9jZXNzX2Nvbm5lY3RgLiBUaGF0J3MgdGhlIHYxIHBhdGguIEluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AsIHRoaW5ncyBnZXQgYSBsaXR0bGUgbW9yZSBpbnZvbHZlZC4gYGNlcGhfY29uX3YyX3RyeV9yZWFkYCBjYWxscyBgcG9wdWxhdGVfaW5faXRlcmAsIHdoaWNoIGhhbmRsZXMgdGhlIGFjdHVhbCByZWFkaW5nIG9mIHRoZSBkYXRhLCB0aGVuIGl0IGNhbGxzIGBwcm9jZXNzX2NvbnRyb2xgLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjYWxsIGNoYWluIHRoZXJlLiBTcGVjaWZpY2FsbHksIGBwcm9jZXNzX2NvbnRyb2xgIGlzIGNhbGxlZCBmcm9tIGBfX2hhbmRsZV9jb250cm9sYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGhhbmRsZV9jb250cm9sYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAuIFRoZSB2MiBwYXRoIGlzIG1vcmUgY29tcGxleCwgYW5kIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNgIHNwZWNpZmljYWxseSwgYW5kIHRob3JvdWdobHkgcmV2aWV3IHRoZSBjb2RlIHN1cnJvdW5kaW5nIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHJlYWQgcHJvY2VzcyBhbmQgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUzMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI4OjAyLjM4NjQ2NjQ0M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5NTE4NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2VwaF9jb25fdjJfdHJ5X3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MzEwMD1zdGF0aWMgaW50IHBvcHVsYXRlX2luX2l0ZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzE2OC1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMTY5OmludCBjZXBoX2Nvbl92Ml90cnlfcmVhZChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzE3MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI4OjAyLjQzNjQyMjk5OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTE2Njg1NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgZnVuY3Rpb24sIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAsIGFzc3VtaW5nIEknbSB0aGUgZXhwZXJ0OlxuXG4qKkFuYWx5emluZyBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGNlcGhfY29uX3YyX3RyeV9yZWFkYCBmdW5jdGlvbi4gQmFzZWQgb24gdGhlIG5hbWUgYWxvbmUsIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNvcmUgcmVhZCBvcGVyYXRpb24sIHByb2JhYmx5IGRlYWxpbmcgd2l0aCB0aGUgQ2VwaCBwcm90b2NvbCB2ZXJzaW9uIDIuICBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIHBsYWNlIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrIOKAkyBpcyB0aGlzIGEgZGlyZWN0IHJlYWQgZnJvbSBhIHNvY2tldCwgb3IgaXMgaXQgYWJzdHJhY3RlZCBmdXJ0aGVyPyBXaGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgc2hvdWxkIEkgYW50aWNpcGF0ZT8gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkLCBhcyBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgY29ubmVjdGlvbiBpcyBhIHByaW1lIHN1c3BlY3QgZm9yIHJhY2UgY29uZGl0aW9ucy4gSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgb3ZlcmFsbCBkZXNpZ24uIElzIHRoaXMgYSBibG9ja2luZyByZWFkLCBvciBkb2VzIGl0IGluY29ycG9yYXRlIG5vbi1ibG9ja2luZyBJL08gd2l0aCBjYWxsYmFja3Mgb3IgcG9sbGluZz8gVGhlIGltcGxpY2F0aW9ucyBmb3IgdGhyZWFkIHVzYWdlIGFuZCBzY2FsYWJpbGl0eSBhcmUgdmVyeSBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHRoZSBhcHByb2FjaC4gRmluYWxseSwgZ2l2ZW4gaXQncyBhIFwidHJ5X3JlYWQsXCIgSSdtIGJyYWNpbmcgbXlzZWxmIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBwYXJ0aWFsIHJlYWRzIG9yIHBvdGVudGlhbCBFQUdBSU4gb3IgRVdPVUxEQkxPQ0sgY29uZGl0aW9ucy4gSG93IGRvZXMgaXQgc2lnbmFsIHRvIHRoZSBjYWxsZXIgdGhlIHJlc3VsdHMgb2YgdGhlIHJlYWQ/IElzIGl0IGEgcmV0dXJuIGNvZGUsIGV4Y2VwdGlvbiwgc29tZSBzb3J0IG9mIHN0YXR1cyBmbGFnPyBUaW1lIHRvIGdldCByZWFkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI4OjA2LjU1MzExMDc5M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjkyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE2OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzE2OTpcXHRpbnQgY2VwaF9jb25fdjJfdHJ5X3JlYWQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbjMxNzA6XFx0e1xcbjMxNzE6XFx0XFx0aW50IHJldDtcXG4zMTcyOlxcdFxcbjMxNzM6XFx0XFx0ZG91dChcXFwiJXMgY29uICVwIHN0YXRlICVkIG5lZWQgJXp1XFxcXG5cXFwiLCBfX2Z1bmNfXywgY29uLCBjb24tXFx1MDAzZXN0YXRlLFxcbjMxNzQ6XFx0XFx0ICAgICBpb3ZfaXRlcl9jb3VudChcXHUwMDI2Y29uLVxcdTAwM2V2Mi5pbl9pdGVyKSk7XFxuMzE3NTpcXHRcXG4zMTc2OlxcdFxcdGlmIChjb24tXFx1MDAzZXN0YXRlID09IENFUEhfQ09OX1NfUFJFT1BFTilcXG4zMTc3OlxcdFxcdFxcdHJldHVybiAwO1xcbjMxNzg6XFx0XFxuMzE3OTpcXHRcXHQvKlxcbjMxODA6XFx0XFx0ICogV2Ugc2hvdWxkIGFsd2F5cyBoYXZlIHNvbWV0aGluZyBwZW5kaW5nIGhlcmUuICBJZiBub3QsXFxuMzE4MTpcXHRcXHQgKiBhdm9pZCBjYWxsaW5nIHBvcHVsYXRlX2luX2l0ZXIoKSBhcyBpZiB3ZSByZWFkIHNvbWV0aGluZ1xcbjMxODI6XFx0XFx0ICogKGNlcGhfdGNwX3JlY3YoKSB3b3VsZCBpbW1lZGlhdGVseSByZXR1cm4gMSkuXFxuMzE4MzpcXHRcXHQgKi9cXG4zMTg0OlxcdFxcdGlmIChXQVJOX09OKCFpb3ZfaXRlcl9jb3VudChcXHUwMDI2Y29uLVxcdTAwM2V2Mi5pbl9pdGVyKSkpXFxuMzE4NTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuMzE4NjpcXHRcXG4zMTg3OlxcdFxcdGZvciAoOzspIHtcXG4zMTg4OlxcdFxcdFxcdHJldCA9IGNlcGhfdGNwX3JlY3YoY29uKTtcXG4zMTg5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4zMTkwOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzE5MTpcXHRcXG4zMTkyOlxcdFxcdFxcdHJldCA9IHBvcHVsYXRlX2luX2l0ZXIoY29uKTtcXG4zMTkzOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMCkge1xcbjMxOTQ6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiAhY29uLVxcdTAwM2VlcnJvcl9tc2cpXFxuMzE5NTpcXHRcXHRcXHRcXHRcXHRjb24tXFx1MDAzZWVycm9yX21zZyA9IFxcXCJyZWFkIHByb2Nlc3NpbmcgZXJyb3JcXFwiO1xcbjMxOTY6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zMTk3OlxcdFxcdFxcdH1cXG4zMTk4OlxcdFxcdH1cXG4zMTk5OlxcdH1cXG4zMjAwOlxcdFxcbjMyMDE6XFx0c3RhdGljIHZvaWQgcXVldWVfZGF0YShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHN0cnVjdCBjZXBoX21zZyAqbXNnKVxcbjMyMDI6XFx0e1xcbjMyMDM6XFx0XFx0c3RydWN0IGJpb192ZWMgYnY7XFxuMzIwNDpcXHRcXG4zMjA1OlxcdFxcdGNvbi1cXHUwMDNldjIub3V0X2VwaWwuZGF0YV9jcmMgPSAtMTtcXG4zMjA2OlxcdFxcdGNlcGhfbXNnX2RhdGFfY3Vyc29yX2luaXQoXFx1MDAyNmNvbi1cXHUwMDNldjIub3V0X2N1cnNvciwgbXNnLFxcbjMyMDc6XFx0XFx0XFx0XFx0XFx0ICBkYXRhX2xlbihtc2cpKTtcXG4zMjA4OlxcdFxcbjMyMDk6XFx0XFx0Z2V0X2J2ZWNfYXQoXFx1MDAyNmNvbi1cXHUwMDNldjIub3V0X2N1cnNvciwgXFx1MDAyNmJ2KTtcXG4zMjEwOlxcdFxcdHNldF9vdXRfYnZlYyhjb24sIFxcdTAwMjZidiwgdHJ1ZSk7XFxuMzIxMTpcXHRcXHRjb24tXFx1MDAzZXYyLm91dF9zdGF0ZSA9IE9VVF9TX1FVRVVFX0RBVEFfQ09OVDtcXG4zMjEyOlxcdH1cXG4zMjEzOlxcdFxcbjMyMTQ6XFx0c3RhdGljIHZvaWQgcXVldWVfZGF0YV9jb250KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgc3RydWN0IGNlcGhfbXNnICptc2cpXFxuMzIxNTpcXHR7XFxuMzIxNjpcXHRcXHRzdHJ1Y3QgYmlvX3ZlYyBidjtcXG4zMjE3OlxcdFxcbjMyMTg6XFx0XFx0Y29uLVxcdTAwM2V2Mi5vdXRfZXBpbC5kYXRhX2NyYyA9IGNlcGhfY3JjMzJjX3BhZ2UoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI4OjA2LjU1MzM0MjMzM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc4MzMxMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEhlYXJ0IG9mIHRoZSBNYXR0ZXIqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uLiBJIG5lZWQgdG8gYmFja3RyYWNrIGp1c3QgYSBiaXQuIEkgd2FzIHNraW1taW5nLCBidXQgbm93IGl0J3Mgc2lua2luZyBpbi4gSSBqdXN0IHJlYWxpemVkIHRoYXQgdGhlIGZ1bmN0aW9uIEkgd2FzIG92ZXJsb29raW5nLCBgcG9wdWxhdGVfaW5faXRlcmAsIHRoYXQncyAqYWN0dWFsbHkqIHdoZXJlIHRoZSBjb3JlIHByb2Nlc3Npbmcgb2YgdGhlIGRhdGEgdGFrZXMgcGxhY2UhIFRoYXQncyB0aGUga2V5LCB0aGUgZW5naW5lLiBJIG5lZWQgdG8gemVybyBpbiBvbiAqdGhhdCogZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIG1lY2hhbmljcy4gSSBoYWQgaW5pdGlhbGx5IHpvb21lZCBvdXQgdG9vIG11Y2guIE5vdywgdGhlIGRldGFpbHMgb2YgaG93IGl0IHdvcmtzIGFyZSBnb2luZyB0byBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBlbnRpcmUgc3lzdGVtLiBUaW1lIHRvIGRlbHZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQxNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjg6MDkuOTMxNjc3MDU0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTAwOlxcdHN0YXRpYyBpbnQgcG9wdWxhdGVfaW5faXRlcihzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuMzEwMTpcXHR7XFxuMzEwMjpcXHRcXHRpbnQgcmV0O1xcbjMxMDM6XFx0XFxuMzEwNDpcXHRcXHRkb3V0KFxcXCIlcyBjb24gJXAgc3RhdGUgJWQgaW5fc3RhdGUgJWRcXFxcblxcXCIsIF9fZnVuY19fLCBjb24sIGNvbi1cXHUwMDNlc3RhdGUsXFxuMzEwNTpcXHRcXHQgICAgIGNvbi1cXHUwMDNldjIuaW5fc3RhdGUpO1xcbjMxMDY6XFx0XFx0V0FSTl9PTihpb3ZfaXRlcl9jb3VudChcXHUwMDI2Y29uLVxcdTAwM2V2Mi5pbl9pdGVyKSk7XFxuMzEwNzpcXHRcXG4zMTA4OlxcdFxcdGlmIChjb24tXFx1MDAzZXN0YXRlID09IENFUEhfQ09OX1NfVjJfQkFOTkVSX1BSRUZJWCkge1xcbjMxMDk6XFx0XFx0XFx0cmV0ID0gcHJvY2Vzc19iYW5uZXJfcHJlZml4KGNvbik7XFxuMzExMDpcXHRcXHR9IGVsc2UgaWYgKGNvbi1cXHUwMDNlc3RhdGUgPT0gQ0VQSF9DT05fU19WMl9CQU5ORVJfUEFZTE9BRCkge1xcbjMxMTE6XFx0XFx0XFx0cmV0ID0gcHJvY2Vzc19iYW5uZXJfcGF5bG9hZChjb24pO1xcbjMxMTI6XFx0XFx0fSBlbHNlIGlmICgoY29uLVxcdTAwM2VzdGF0ZSBcXHUwMDNlPSBDRVBIX0NPTl9TX1YyX0hFTExPIFxcdTAwMjZcXHUwMDI2XFxuMzExMzpcXHRcXHRcXHQgICAgY29uLVxcdTAwM2VzdGF0ZSBcXHUwMDNjPSBDRVBIX0NPTl9TX1YyX1NFU1NJT05fUkVDT05ORUNUKSB8fFxcbjMxMTQ6XFx0XFx0XFx0ICAgY29uLVxcdTAwM2VzdGF0ZSA9PSBDRVBIX0NPTl9TX09QRU4pIHtcXG4zMTE1OlxcdFxcdFxcdHN3aXRjaCAoY29uLVxcdTAwM2V2Mi5pbl9zdGF0ZSkge1xcbjMxMTY6XFx0XFx0XFx0Y2FzZSBJTl9TX0hBTkRMRV9QUkVBTUJMRTpcXG4zMTE3OlxcdFxcdFxcdFxcdHJldCA9IGhhbmRsZV9wcmVhbWJsZShjb24pO1xcbjMxMTg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzExOTpcXHRcXHRcXHRjYXNlIElOX1NfSEFORExFX0NPTlRST0w6XFxuMzEyMDpcXHRcXHRcXHRcXHRyZXQgPSBoYW5kbGVfY29udHJvbChjb24pO1xcbjMxMjE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzEyMjpcXHRcXHRcXHRjYXNlIElOX1NfSEFORExFX0NPTlRST0xfUkVNQUlOREVSOlxcbjMxMjM6XFx0XFx0XFx0XFx0cmV0ID0gaGFuZGxlX2NvbnRyb2xfcmVtYWluZGVyKGNvbik7XFxuMzEyNDpcXHRcXHRcXHRcXHRicmVhaztcXG4zMTI1OlxcdFxcdFxcdGNhc2UgSU5fU19QUkVQQVJFX1JFQURfREFUQTpcXG4zMTI2OlxcdFxcdFxcdFxcdHJldCA9IHByZXBhcmVfcmVhZF9kYXRhKGNvbik7XFxuMzEyNzpcXHRcXHRcXHRcXHRicmVhaztcXG4zMTI4OlxcdFxcdFxcdGNhc2UgSU5fU19QUkVQQVJFX1JFQURfREFUQV9DT05UOlxcbjMxMjk6XFx0XFx0XFx0XFx0cHJlcGFyZV9yZWFkX2RhdGFfY29udChjb24pO1xcbjMxMzA6XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4zMTMxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMxMzI6XFx0XFx0XFx0Y2FzZSBJTl9TX1BSRVBBUkVfUkVBRF9FTkNfUEFHRTpcXG4zMTMzOlxcdFxcdFxcdFxcdHByZXBhcmVfcmVhZF9lbmNfcGFnZShjb24pO1xcbjMxMzQ6XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4zMTM1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMxMzY6XFx0XFx0XFx0Y2FzZSBJTl9TX1BSRVBBUkVfU1BBUlNFX0RBVEE6XFxuMzEzNzpcXHRcXHRcXHRcXHRyZXQgPSBwcmVwYXJlX3NwYXJzZV9yZWFkX2RhdGEoY29uKTtcXG4zMTM4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMxMzk6XFx0XFx0XFx0Y2FzZSBJTl9TX1BSRVBBUkVfU1BBUlNFX0RBVEFfQ09OVDpcXG4zMTQwOlxcdFxcdFxcdFxcdHJldCA9IHByZXBhcmVfc3BhcnNlX3JlYWRfY29udChjb24pO1xcbjMxNDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzE0MjpcXHRcXHRcXHRjYXNlIElOX1NfSEFORExFX0VQSUxPR1VFOlxcbjMxNDM6XFx0XFx0XFx0XFx0cmV0ID0gaGFuZGxlX2VwaWxvZ3VlKGNvbik7XFxuMzE0NDpcXHRcXHRcXHRcXHRicmVhaztcXG4zMTQ1OlxcdFxcdFxcdGNhc2UgSU5fU19GSU5JU0hfU0tJUDpcXG4zMTQ2OlxcdFxcdFxcdFxcdGZpbmlzaF9za2lwKGNvbik7XFxuMzE0NzpcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbjMxNDg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzE0OTpcXHRcXHRcXHRkZWZhdWx0OlxcbjMxNTA6XFx0XFx0XFx0XFx0V0FSTigxLCBcXFwiYmFkIGluX3N0YXRlICVkXFxcIiwgY29uLVxcdTAwM2V2Mi5pbl9zdGF0ZSk7XFxuMzE1MTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTUyOlxcdFxcdFxcdH1cXG4zMTUzOlxcdFxcdH0gZWxzZSB7XFxuMzE1NDpcXHRcXHRcXHRXQVJOKDEsIFxcXCJiYWQgc3RhdGUgJWRcXFwiLCBjb24tXFx1MDAzZXN0YXRlKTtcXG4zMTU1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMxNTY6XFx0XFx0fVxcbjMxNTc6XFx0XFx0aWYgKHJldCkge1xcbjMxNTg6XFx0XFx0XFx0ZG91dChcXFwiJXMgY29uICVwIGVycm9yICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgY29uLCByZXQpO1xcbjMxNTk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjg6MDkuOTMxODU5Njc0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzE5MjY2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBFbnRyeSBQb2ludHMgZm9yIENlcGggQ29ubmVjdGlvbiBWZXJzaW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gZHJpbGxpbmcgZG93biBpbnRvIHRoZSBjb25uZWN0aW9uIGhhbmRsaW5nIHdpdGhpbiBDZXBoLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB2ZXJzaW9uaW5nLiBJdCdzIGNsZWFyIHRoYXQgYGNlcGhfY29uX3YyX3RyeV9yZWFkYCBpcyB0aGUgZGVzaWduYXRlZCBlbnRyeSBwb2ludCBmb3IgdjIgY29ubmVjdGlvbnMg4oCTIG5vIHN1cnByaXNlcyB0aGVyZS4gVGhhdCdzIHByZWNpc2VseSB3aGVyZSBJJ2QgZXhwZWN0IHRoZSB2MiBuZWdvdGlhdGlvbiBhbmQgZGF0YSBwYXJzaW5nIHRvIGJlZ2luLlxuXG5CdXQgdGhlIHJlYWwgcXVlc3Rpb24gZ25hd2luZyBhdCBtZSBpcyBob3cgdjEgaXMgaGFuZGxlZC4gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGlzIGFyY2hpdGVjdHVyZT8gSXMgdGhlcmUgYSBzZXBhcmF0ZSwgZGVkaWNhdGVkIGZ1bmN0aW9uIGZvciB2MSBuZWdvdGlhdGlvbiwgb3IgaXMgdGhlcmUgYSB1bmlmaWVkIGVudHJ5IHBvaW50IHRoYXQgYnJhbmNoZXMgYmFzZWQgb24gdmVyc2lvbiBkdXJpbmcgdGhlIGluaXRpYWwgaGFuZHNoYWtlPyBLbm93aW5nIHRoZSBhbnN3ZXIgdG8gdGhhdCB3aWxsIGRldGVybWluZSBob3cgdG8gZGVidWcgYW4gZXhpc3RpbmcgaXNzdWUgb24gdGhlIG5ldHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjAzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyODoxNC4yMDM3ODg1ODNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMjksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMjk6XFx0aW50IGNlcGhfY29uX3YxX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4xMzMwOlxcdHtcXG4xMzMxOlxcdFxcdGludCByZXQgPSAtMTtcXG4xMzMyOlxcdFxcbjEzMzM6XFx0bW9yZTpcXG4xMzM0OlxcdFxcdGRvdXQoXFxcInRyeV9yZWFkIHN0YXJ0ICVwIHN0YXRlICVkXFxcXG5cXFwiLCBjb24sIGNvbi1cXHUwMDNlc3RhdGUpO1xcbjEzMzU6XFx0XFx0aWYgKGNvbi1cXHUwMDNlc3RhdGUgIT0gQ0VQSF9DT05fU19WMV9CQU5ORVIgXFx1MDAyNlxcdTAwMjZcXG4xMzM2OlxcdFxcdCAgICBjb24tXFx1MDAzZXN0YXRlICE9IENFUEhfQ09OX1NfVjFfQ09OTkVDVF9NU0cgXFx1MDAyNlxcdTAwMjZcXG4xMzM3OlxcdFxcdCAgICBjb24tXFx1MDAzZXN0YXRlICE9IENFUEhfQ09OX1NfT1BFTilcXG4xMzM4OlxcdFxcdFxcdHJldHVybiAwO1xcbjEzMzk6XFx0XFxuMTM0MDpcXHRcXHRCVUdfT04oIWNvbi1cXHUwMDNlc29jayk7XFxuMTM0MTpcXHRcXG4xMzQyOlxcdFxcdGRvdXQoXFxcInRyeV9yZWFkIHRhZyAlZCBpbl9iYXNlX3BvcyAlZFxcXFxuXFxcIiwgY29uLVxcdTAwM2V2MS5pbl90YWcsXFxuMTM0MzpcXHRcXHQgICAgIGNvbi1cXHUwMDNldjEuaW5fYmFzZV9wb3MpO1xcbjEzNDQ6XFx0XFxuMTM0NTpcXHRcXHRpZiAoY29uLVxcdTAwM2VzdGF0ZSA9PSBDRVBIX0NPTl9TX1YxX0JBTk5FUikge1xcbjEzNDY6XFx0XFx0XFx0cmV0ID0gcmVhZF9wYXJ0aWFsX2Jhbm5lcihjb24pO1xcbjEzNDc6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbjEzNDg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTM0OTpcXHRcXHRcXHRyZXQgPSBwcm9jZXNzX2Jhbm5lcihjb24pO1xcbjEzNTA6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTM1MTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMzUyOlxcdFxcbjEzNTM6XFx0XFx0XFx0Y29uLVxcdTAwM2VzdGF0ZSA9IENFUEhfQ09OX1NfVjFfQ09OTkVDVF9NU0c7XFxuMTM1NDpcXHRcXG4xMzU1OlxcdFxcdFxcdC8qXFxuMTM1NjpcXHRcXHRcXHQgKiBSZWNlaXZlZCBiYW5uZXIgaXMgZ29vZCwgZXhjaGFuZ2UgY29ubmVjdGlvbiBpbmZvLlxcbjEzNTc6XFx0XFx0XFx0ICogRG8gbm90IHJlc2V0IG91dF9rdmVjLCBhcyBzZW5kaW5nIG91ciBiYW5uZXIgcmFjZWRcXG4xMzU4OlxcdFxcdFxcdCAqIHdpdGggcmVjZWl2aW5nIHBlZXIgYmFubmVyIGFmdGVyIGNvbm5lY3QgY29tcGxldGVkLlxcbjEzNTk6XFx0XFx0XFx0ICovXFxuMTM2MDpcXHRcXHRcXHRyZXQgPSBwcmVwYXJlX3dyaXRlX2Nvbm5lY3QoY29uKTtcXG4xMzYxOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEzNjI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTM2MzpcXHRcXHRcXHRwcmVwYXJlX3JlYWRfY29ubmVjdChjb24pO1xcbjEzNjQ6XFx0XFxuMTM2NTpcXHRcXHRcXHQvKiBTZW5kIGNvbm5lY3Rpb24gaW5mbyBiZWZvcmUgYXdhaXRpbmcgcmVzcG9uc2UgKi9cXG4xMzY2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEzNjc6XFx0XFx0fVxcbjEzNjg6XFx0XFxuMTM2OTpcXHRcXHRpZiAoY29uLVxcdTAwM2VzdGF0ZSA9PSBDRVBIX0NPTl9TX1YxX0NPTk5FQ1RfTVNHKSB7XFxuMTM3MDpcXHRcXHRcXHRyZXQgPSByZWFkX3BhcnRpYWxfY29ubmVjdChjb24pO1xcbjEzNzE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbjEzNzI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTM3MzpcXHRcXHRcXHRyZXQgPSBwcm9jZXNzX2Nvbm5lY3QoY29uKTtcXG4xMzc0OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEzNzU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTM3NjpcXHRcXHRcXHRnb3RvIG1vcmU7XFxuMTM3NzpcXHRcXHR9XFxuMTM3ODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjg6MTQuMjAzOTAxMzkzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NzkzMDA3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogQ2VwaCBOZXR3b3JrIFByb3RvY29sIFBhcnNpbmcqKlxuXG5Pa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgSSd2ZSBnb3QgYSBjbGVhciBkaXJlY3Rpb24uIEZvY3VzaW5nIG9uIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgYW5kIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAgaXMgdGhlIHJpZ2h0IG1vdmUuIFRoZXkgYXJlIGtleSBiZWNhdXNlIHRoZXkgYXJlIG5vbi1zdGF0aWMgYW5kIG5vdCBpbmxpbmVkLCBhbmQgdGhleSBhcmUgY2FsbGVkIGZyb20gYW5vdGhlciBmaWxlLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoZXkncmUgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBDRVBIX0xJQmAgaXMgb2J2aW91c2x5IGVzc2VudGlhbCwgYW5kIGBDRVBIX0ZTYCBhbmQgYEJMS19ERVZfUkJEYCBhcmUgdGhlIGtleSB1c2VycyB0aGF0IHdpbGwgZXhlcmNpc2UgdGhlIGNvZGUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSB0aHJlZSBhcmUgZW5hYmxlZDogYENFUEhfTElCYCwgYENFUEhfRlNgLCBgQkxLX0RFVl9SQkRgLlxuXG5BaCwgdGhpcyBwYXRjaC4uLiBpdCdzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UhIFJlcGxhY2luZyBgV0FSTl9PTmAgd2l0aCBwcm9wZXIgZXJyb3IgcmV0dXJucyBpbiB0aGUgbmV0d29yayBwcm90b2NvbCBwYXJzaW5nIGlzIGdvbGQuIEEgYFdBUk5fT05gIGNhbiBiZSBhIGRlYXRoIGtuZWxsIGluIGZ1enppbmc6IGl0IGNhbiB0cmlnZ2VyIHN5emthbGxlciB0byB0cmVhdCBpdCBhcyBhIGNyYXNoIHdoZW4gaXQncyBqdXN0IGEgd2FybmluZy4gVGhpcyBwYXRjaCBpcyB0YWtpbmcgYSBwb3RlbnRpYWwgZmFsc2UtcG9zaXRpdmUgY3Jhc2ggYW5kIHR1cm5pbmcgaXQgaW50byBhIHJlYWwsIGZ1enphYmxlLCBlcnJvciBwYXRoLiBJdCdzIGhhbmRsaW5nIGludmFsaWQgcHJvdG9jb2wgc3RhdGVzIGdyYWNlZnVsbHksIGFsbG93aW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHRvIHJlYWN0LiBUaGF0IGlzICphYnNvbHV0ZWx5KiB3b3J0aCBmdXp6aW5nLiBJdCBvcGVucyB1cCBhIG5ldyBhdmVudWUgZm9yIGRpc2NvdmVyaW5nIHBvdGVudGlhbGx5IGhpZGRlbiBsb2dpYyBmbGF3cyB3aXRoaW4gdGhlIHByb3RvY29sJ3MgZXJyb3IgaGFuZGxpbmcuXG5cbkFscmlnaHQsIGxldCdzIHN1bW1hcml6ZSBteSBmaW5kaW5ncyB0byBlbnN1cmUgSSdtIGNsZWFyOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIFRoaXMgaXMgYSBoaWdoLXZhbHVlIHBhdGNoLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAsIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAgLSBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMuXG4qICAgKipFbmFibGVDb25maWdzOioqIGBDRVBIX0xJQmAsIGBDRVBIX0ZTYCwgYEJMS19ERVZfUkJEYCAtIFJlcXVpcmVkIGZvciB0aGUgY29kZSB0byBiZSBleGVyY2lzZWQuXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoJ3MgY2hhbmdlIHRvIGVycm9yIGhhbmRsaW5nIGluIHRoZSBDZXBoIG5ldHdvcmsgcHJvdG9jb2wgcGFyc2luZyAobWVzc2VuZ2VyIHYxIGFuZCB2MikgaXMgdGhlIGNyaXRpY2FsIGVsZW1lbnQuIFRoaXMgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCB3aWxsIGV4cG9zZSBwb3RlbnRpYWwgYnVncyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBtaXNzZWQgZHVlIHRvIHRoZSBwcmV2aW91cyB3YXJuaW5nIGhhbmRsaW5nLCBhbmQgZW5hYmxlIGEgbW9yZSByb2J1c3QgYW5kIGNvbXBsZXRlIGZ1enppbmcgcnVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU3MSwiT3V0cHV0VG9rZW5zIjoxMzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyODoyMi43ODMyMDQyNzdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDI1NTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0VQSF9MSUJcIixcbiAgICBcIkNFUEhfRlNcIixcbiAgICBcIkJMS19ERVZfUkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2VwaF9jb25fdjFfdHJ5X3JlYWRcIixcbiAgICBcImNlcGhfY29uX3YyX3RyeV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgV0FSTl9PTiB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmV0dXJucyBpbiB0aGUgQ2VwaCBuZXR3b3JrIHByb3RvY29sIHBhcnNpbmcgbG9naWMgKG1lc3NlbmdlciB2MSBhbmQgdjIpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwcm90b2NvbCBjb2RlIHRoYXQgcHJldmVudHMgZmFsc2UtcG9zaXRpdmUgY3Jhc2ggcmVwb3J0cyBhbmQgY29ycmVjdGx5IGhhbmRsZXMgaW52YWxpZCBwcm90b2NvbCBzdGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0VQSF9MSUJcIixcbiAgICBcIkNFUEhfRlNcIixcbiAgICBcIkJMS19ERVZfUkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2VwaF9jb25fdjFfdHJ5X3JlYWRcIixcbiAgICBcImNlcGhfY29uX3YyX3RyeV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgV0FSTl9PTiB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmV0dXJucyBpbiB0aGUgQ2VwaCBuZXR3b3JrIHByb3RvY29sIHBhcnNpbmcgbG9naWMgKG1lc3NlbmdlciB2MSBhbmQgdjIpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwcm90b2NvbCBjb2RlIHRoYXQgcHJldmVudHMgZmFsc2UtcG9zaXRpdmUgY3Jhc2ggcmVwb3J0cyBhbmQgY29ycmVjdGx5IGhhbmRsZXMgaW52YWxpZCBwcm90b2NvbCBzdGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI4OjIyLjg2NzQ2ODA3OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NzYwOTIyNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyODoyMi44NjgxMjQ3NjhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA5NzU0MjAwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHNldmVyYWwgV0FSTl9PTigpIHN0YXRlbWVudHMgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgaW4gdGhlIENlcGggbWVzc2VuZ2VyIHByb3RvY29sIChib3RoIHYxIGFuZCB2MikuIEl0IGNoZWNrcyBmb3IgaW52YWxpZCBzZXF1ZW5jZSBudW1iZXJzLCBtaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzLCBhbmQgaW5jb3JyZWN0IHNlcnZlciBjb29raWVzLCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSB3YXJuaW5nLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgbm9yIGRvIHRoZXkgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OTQ0Y2MwMGQ0YzFiZjJjZWI3ODYzNDdmYzg5NGEyMjc2ZDg2N2QyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTE6MjY6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXG5pbmRleCBjOWUwMDJkOTYzMTkwLi5kZjIyNDhiN2IwMjY1IDEwMDY0NFxuLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcbisrKyBiL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXG5AQCAtODk4LDggKzg5OCwxNSBAQCBzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4gXHRcdCAgICAgY29uLVx1MDAzZXYxLnBlZXJfZ2xvYmFsX3NlcSxcbiBcdFx0ICAgICBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpLFxuIFx0XHQgICAgIGNvbi1cdTAwM2V2MS5jb25uZWN0X3NlcSk7XG4tXHRcdFdBUk5fT04oY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxICE9XG4tXHRcdFx0bGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7XG4rXHRcdGlmIChjb24tXHUwMDNldjEuY29ubmVjdF9zZXEgIT0gbGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSkge1xuK1x0XHRcdHByX2VycihcIiVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJXUsIGdvdCAldVxcblwiLFxuK1x0XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbitcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuK1x0XHRcdCAgICAgICBjb24tXHUwMDNldjEuY29ubmVjdF9zZXEsXG4rXHRcdFx0ICAgICAgIGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpO1xuK1x0XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcImNvbm5lY3Rfc2VxIG1pc21hdGNoXCI7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4gXG4gXHRcdGlmIChjb24tXHUwMDNldjEuaW5fcmVwbHkuZmxhZ3MgXHUwMDI2IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpXG4gXHRcdFx0Y2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpO1xuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcbmluZGV4IDA1ZjZlZWEyOTlmYzAuLmQ3MDZjZGJlMGVkMmQgMTAwNjQ0XG4tLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1xuKysrIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcbkBAIC0yNTI5LDE0ICsyNTI5LDMzIEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXJ2ZXJfaWRlbnQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxuIFx0Y29uLVx1MDAzZXBlZXJfbmFtZS5udW0gPSBjcHVfdG9fbGU2NChnbG9iYWxfaWQpO1xuIFx0Y29uLVx1MDAzZXYyLnBlZXJfZ2xvYmFsX3NlcSA9IGdsb2JhbF9zZXE7XG4gXHRjb24tXHUwMDNlcGVlcl9mZWF0dXJlcyA9IGZlYXR1cmVzO1xuLVx0V0FSTl9PTihyZXF1aXJlZF9mZWF0dXJlcyBcdTAwMjYgfmNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMpO1xuK1x0aWYgKHJlcXVpcmVkX2ZlYXR1cmVzIFx1MDAyNiB+Y2xpZW50LVx1MDAzZXN1cHBvcnRlZF9mZWF0dXJlcykge1xuK1x0XHRwcl9lcnIoXCIlcyVsbGQgJXMgbWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcywgbXkgc3VwcG9ydGVkIDB4JWxseCwgc2VydmVyJ3MgcmVxdWlyZWQgMHglbGx4XFxuXCIsXG4rXHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbitcdFx0ICAgICAgIGNlcGhfcHJfYWRkcihcdTAwMjZjb24tXHUwMDNlcGVlcl9hZGRyKSxcbitcdFx0ICAgICAgIGNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMsIHJlcXVpcmVkX2ZlYXR1cmVzKTtcbitcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwibWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlc1wiO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiBcdGNvbi1cdTAwM2V2Mi5zZXJ2ZXJfY29va2llID0gY29va2llO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBDRVBIX01TR19DT05ORUNUX0xPU1NZKSB7XG4gXHRcdGNlcGhfY29uX2ZsYWdfc2V0KGNvbiwgQ0VQSF9DT05fRl9MT1NTWVRYKTtcbi1cdFx0V0FSTl9PTihjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSk7XG4rXHRcdGlmIChjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSkge1xuK1x0XHRcdHByX2VycihcIiVzJWxsZCAlcyBzZXJ2ZXJfY29va2llIGlzIHNldCBmb3IgbG9zc3kgY29ubmVjdGlvblxcblwiLFxuK1x0XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbitcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpKTtcbitcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJzZXJ2ZXJfY29va2llIGlzIHNldCBmb3IgbG9zc3kgY29ubmVjdGlvblwiO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRXQVJOX09OKCFjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSk7XG4rXHRcdGlmICghY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpIHtcbitcdFx0XHRwcl9lcnIoXCIlcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBub3Qgc2V0IGZvciBsb3NzbGVzcyBjb25uZWN0aW9uXFxuXCIsXG4rXHRcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkcikpO1xuK1x0XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcInNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblwiO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRjbGVhcl9pbl9zaWduX2t2ZWNzKGNvbik7XG5AQCAtMjYxOCw3ICsyNjM3LDE0IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JldHJ5KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNlcGhfZGVjb2RlXzY0X3NhZmUoXHUwMDI2cCwgZW5kLCBjb25uZWN0X3NlcSwgYmFkKTtcbiBcbiBcdGRvdXQoXCIlcyBjb24gJXAgY29ubmVjdF9zZXEgJWxsdVxcblwiLCBfX2Z1bmNfXywgY29uLCBjb25uZWN0X3NlcSk7XG4tXHRXQVJOX09OKGNvbm5lY3Rfc2VxIFx1MDAzYz0gY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxKTtcbitcdGlmIChjb25uZWN0X3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5jb25uZWN0X3NlcSkge1xuK1x0XHRwcl9lcnIoXCIlcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcblwiLFxuK1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdCAgICAgICBjb24tXHUwMDNldjIuY29ubmVjdF9zZXEsIGNvbm5lY3Rfc2VxKTtcbitcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwiY29ubmVjdF9zZXEgbWlzbWF0Y2hcIjtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXHRjb24tXHUwMDNldjIuY29ubmVjdF9zZXEgPSBjb25uZWN0X3NlcSArIDE7XG4gXG4gXHRmcmVlX2Nvbm5fYnVmcyhjb24pO1xuQEAgLTI2NTEsNyArMjY3NywxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWwoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxuIFx0Y2VwaF9kZWNvZGVfNjRfc2FmZShcdTAwMjZwLCBlbmQsIGdsb2JhbF9zZXEsIGJhZCk7XG4gXG4gXHRkb3V0KFwiJXMgY29uICVwIGdsb2JhbF9zZXEgJWxsdVxcblwiLCBfX2Z1bmNfXywgY29uLCBnbG9iYWxfc2VxKTtcbi1cdFdBUk5fT04oZ2xvYmFsX3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5nbG9iYWxfc2VxKTtcbitcdGlmIChnbG9iYWxfc2VxIFx1MDAzYz0gY29uLVx1MDAzZXYyLmdsb2JhbF9zZXEpIHtcbitcdFx0cHJfZXJyKFwiJXMlbGxkICVzIGdsb2JhbF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcblwiLFxuK1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdCAgICAgICBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSwgZ2xvYmFsX3NlcSk7XG4rXHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcImdsb2JhbF9zZXEgbWlzbWF0Y2hcIjtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXHRjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSA9IGNlcGhfZ2V0X2dsb2JhbF9zZXEoY29uLVx1MDAzZW1zZ3IsIGdsb2JhbF9zZXEpO1xuIFxuIFx0ZnJlZV9jb25uX2J1ZnMoY29uKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI4OjIyLjg2ODEyNjI2OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk3NTM3OTE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENlcGggTWVzc2VuZ2VyIFByb3RvY29sIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZXMgaW4gYG5ldC9jZXBoL21lc3Nlbmdlcl92MS5jYCBhbmQgYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBpZGVhIGlzIHRvIHJlcGxhY2UgYSBmZXcgYFdBUk5fT05gIHN0YXRlbWVudHMgd2l0aCBhY3R1YWwgZXJyb3IgaGFuZGxpbmcsIHJldHVybmluZyB0aGluZ3MgbGlrZSBgLTFgIG9yIGAtRUlOVkFMYCB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nLiBUaGlzIGlzIGFsbCBjZW50ZXJlZCBhcm91bmQgaG93IHRoZSBDZXBoIG1lc3NlbmdlciBwcm90b2NvbCBoYW5kbGVzIGNvbm5lY3Rpb24gc2VxdWVuY2UgbnVtYmVycywgdGhlIGZlYXR1cmVzIGl0IHN1cHBvcnRzLCBhbmQgc2VydmVyIGNvb2tpZXMuIEJhc2ljYWxseSwgaXQncyBhYm91dCBtYWtpbmcgdGhlIGNvZGUgbW9yZSByb2J1c3QgYWdhaW5zdCBiYWQgaW5wdXQgZnJvbSB0aGUgbmV0d29yay4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gY2F0Y2ggYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGEga2VybmVsIHBhbmljLCBvciB0byBqdXN0IHByb3Blcmx5IHJlamVjdCBpbnZhbGlkIG9yIHBvc3NpYmx5IG1hbGljaW91cyBkYXRhLlxuXG5JJ3ZlIGNoZWNrZWQgdGhlIGRpZmZzOyBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBhYm91dCB2YWxpZGF0aW5nIHRoZSByZWNlaXZlZCBkYXRhIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgaWYgaXQncyBub3Qgd2hhdCdzIGV4cGVjdGVkLiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgYW55IG9mIHRoYXQgamF6ei4gV2UncmUganVzdCBhZGRpbmcgY2hlY2tzIGFuZCBsb2dnaW5nIGZvciBpbnZhbGlkIHZhbHVlcy5cblxuTGV0J3MgbG9vayBhdCB0aGUgc3BlY2lmaWMgY29kZS4gSW4gYHByb2Nlc3NfY29ubmVjdGAgZnJvbSBgbWVzc2VuZ2VyX3YxLmNgLCB0aGUgcGF0Y2ggaXMgYWRkaW5nIHRoaXMgY2hlY2s6XG5cbmBgYGNcbi1cdFx0V0FSTl9PTihjb24tXHUwMDNldjEuY29ubmVjdF9zZXEgIT1cbi1cdFx0XHRsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcbitcdFx0aWYgKGNvbi1cdTAwM2V2MS5jb25uZWN0X3NlcSAhPSBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKSB7XG4rXHRcdFx0cHJfZXJyKFwiJXMlbGxkICVzIGNvbm5lY3Rfc2VxIG1pc21hdGNoLCBleHBlY3RlZCAldSwgZ290ICV1XFxuXCIsXG4uLi5cbitcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJjb25uZWN0X3NlcSBtaXNtYXRjaFwiO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuYGBgXG5cbkluc3RlYWQgb2YganVzdCB3YXJuaW5nLCB3ZSBub3cgaGF2ZSBhIHByb3BlciBlcnJvciBtZXNzYWdlIGFuZCBhbiBlcnJvciByZXR1cm4uIFRoZSBzYW1lIGtpbmQgb2YgY29udmVyc2lvbiBpcyBwcmVzZW50IGluIGBwcm9jZXNzX3NlcnZlcl9pZGVudGAgaW4gYG1lc3Nlbmdlcl92Mi5jYDpcblxuYGBgY1xuLVx0V0FSTl9PTihyZXF1aXJlZF9mZWF0dXJlcyBcdTAwMjYgfmNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMpO1xuK1x0aWYgKHJlcXVpcmVkX2ZlYXR1cmVzIFx1MDAyNiB+Y2xpZW50LVx1MDAzZXN1cHBvcnRlZF9mZWF0dXJlcykge1xuLi4uXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuYGBgXG5cblRoZSByZXN0IG9mIHRoZSBwYXRjaCBzZWVtcyB0byBoYXZlIHRoZSBleGFjdCBzYW1lIGxvZ2ljIGZvciB0aGUgYHNlcnZlcl9jb29raWVgLCBgY29ubmVjdF9zZXFgIGFuZCBgZ2xvYmFsX3NlcWAgY2hlY2tzLlxuXG5TbywgYm90dG9tIGxpbmU6IHRoaXMgcGF0Y2ggaXMganVzdCBhYm91dCBtYWtpbmcgdGhlIGVycm9yIGhhbmRsaW5nIG1vcmUgZXhwbGljaXQsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBmb3Igcm9idXN0bmVzcyBhbmQgc2FmZXR5LCBhbmQgdGhpcyBkb2Vzbid0IHRvdWNoIGFueSBtZW1vcnkgdGhhdCBpcyB1bmluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gbmVlZCBmb3IgS01TQU4uIFRoZSBwYXRjaCBhZGRzIGNoZWNrcyBhbmQgcmV0dXJucyBlcnJvciBjb2RlcywgaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzEsIk91dHB1dFRva2VucyI6MTQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjg6MzMuODQzNTEwNjM1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBzZXZlcmFsIFdBUk5fT04oKSBzdGF0ZW1lbnRzIHdpdGggcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIGluIHRoZSBDZXBoIG1lc3NlbmdlciBwcm90b2NvbCAoYm90aCB2MSBhbmQgdjIpLiBJdCBjaGVja3MgZm9yIGludmFsaWQgc2VxdWVuY2UgbnVtYmVycywgbWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcywgYW5kIGluY29ycmVjdCBzZXJ2ZXIgY29va2llcywgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgd2FybmluZy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIG5vciBkbyB0aGV5IGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgc2V2ZXJhbCBXQVJOX09OKCkgc3RhdGVtZW50cyB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgbG9nZ2luZyBpbiB0aGUgQ2VwaCBtZXNzZW5nZXIgcHJvdG9jb2wgKGJvdGggdjEgYW5kIHYyKS4gSXQgY2hlY2tzIGZvciBpbnZhbGlkIHNlcXVlbmNlIG51bWJlcnMsIG1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMsIGFuZCBpbmNvcnJlY3Qgc2VydmVyIGNvb2tpZXMsIHJldHVybmluZyBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHdhcm5pbmcuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBub3IgZG8gdGhleSBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj242c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 11:25:01 +0000 UTC FinishedAt: 2026-08-10 11:28:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CEPH_LIB", "CEPH_FS", "BLK_DEV_RBD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CEPH_LIB", "CEPH_FS", "BLK_DEV_RBD" ], "series_id": "439478fb-64a4-4ac8-bc97-9f310589fdd1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ceph_con_v1_try_read", "ceph_con_v2_try_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NFUEhfTElCJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9SQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZXBoX2Nvbl92MV90cnlfcmVhZCYjMzQ7LAogICAgJiMzNDtjZXBoX2Nvbl92Ml90cnlfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHNldmVyYWwgV0FSTl9PTigpIHN0YXRlbWVudHMgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgaW4gdGhlIENlcGggbWVzc2VuZ2VyIHByb3RvY29sIChib3RoIHYxIGFuZCB2MikuIEl0IGNoZWNrcyBmb3IgaW52YWxpZCBzZXF1ZW5jZSBudW1iZXJzLCBtaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzLCBhbmQgaW5jb3JyZWN0IHNlcnZlciBjb29raWVzLCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSB3YXJuaW5nLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgbm9yIGRvIHRoZXkgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgV0FSTl9PTiB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmV0dXJucyBpbiB0aGUgQ2VwaCBuZXR3b3JrIHByb3RvY29sIHBhcnNpbmcgbG9naWMgKG1lc3NlbmdlciB2MSBhbmQgdjIpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwcm90b2NvbCBjb2RlIHRoYXQgcHJldmVudHMgZmFsc2UtcG9zaXRpdmUgY3Jhc2ggcmVwb3J0cyBhbmQgY29ycmVjdGx5IGhhbmRsZXMgaW52YWxpZCBwcm90b2NvbCBzdGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OTQ0Y2MwMGQ0YzFiZjJjZWI3ODYzNDdmYzg5NGEyMjc2ZDg2N2QyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTE6MjY6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuaW5kZXggYzllMDAyZDk2MzE5MC4uZGYyMjQ4YjdiMDI2NSAxMDA2NDRcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuQEAgLTg5OCw4ICYjNDM7ODk4LDE1IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbiBcdFx0ICAgICBjb24tXHUwMDNldjEucGVlcl9nbG9iYWxfc2VxLFxuIFx0XHQgICAgIGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSksXG4gXHRcdCAgICAgY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxKTtcbi1cdFx0V0FSTl9PTihjb24tXHUwMDNldjEuY29ubmVjdF9zZXEgIT1cbi1cdFx0XHRsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcbiYjNDM7XHRcdGlmIChjb24tXHUwMDNldjEuY29ubmVjdF9zZXEgIT0gbGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7JXMlbGxkICVzIGNvbm5lY3Rfc2VxIG1pc21hdGNoLCBleHBlY3RlZCAldSwgZ290ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4mIzQzO1x0XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4mIzQzO1x0XHRcdCAgICAgICBjb24tXHUwMDNldjEuY29ubmVjdF9zZXEsXG4mIzQzO1x0XHRcdCAgICAgICBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcbiYjNDM7XHRcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwmIzM0O2Nvbm5lY3Rfc2VxIG1pc21hdGNoXCYjMzQ7O1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGlmIChjb24tXHUwMDNldjEuaW5fcmVwbHkuZmxhZ3MgXHUwMDI2IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpXG4gXHRcdFx0Y2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpO1xuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcbmluZGV4IDA1ZjZlZWEyOTlmYzAuLmQ3MDZjZGJlMGVkMmQgMTAwNjQ0XG4tLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcbkBAIC0yNTI5LDE0ICYjNDM7MjUyOSwzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNvbi1cdTAwM2VwZWVyX25hbWUubnVtID0gY3B1X3RvX2xlNjQoZ2xvYmFsX2lkKTtcbiBcdGNvbi1cdTAwM2V2Mi5wZWVyX2dsb2JhbF9zZXEgPSBnbG9iYWxfc2VxO1xuIFx0Y29uLVx1MDAzZXBlZXJfZmVhdHVyZXMgPSBmZWF0dXJlcztcbi1cdFdBUk5fT04ocmVxdWlyZWRfZmVhdHVyZXMgXHUwMDI2IH5jbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKTtcbiYjNDM7XHRpZiAocmVxdWlyZWRfZmVhdHVyZXMgXHUwMDI2IH5jbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7JXMlbGxkICVzIG1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMsIG15IHN1cHBvcnRlZCAweCVsbHgsIHNlcnZlciYjMzk7cyByZXF1aXJlZCAweCVsbHhcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4mIzQzO1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuJiM0MztcdFx0ICAgICAgIGNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMsIHJlcXVpcmVkX2ZlYXR1cmVzKTtcbiYjNDM7XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcJiMzNDttaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzXCYjMzQ7O1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFx0Y29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUgPSBjb29raWU7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpIHtcbiBcdFx0Y2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpO1xuLVx0XHRXQVJOX09OKGNvbi1cdTAwM2V2Mi5zZXJ2ZXJfY29va2llKTtcbiYjNDM7XHRcdGlmIChjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4mIzQzO1x0XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkcikpO1xuJiM0MztcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCYjMzQ7c2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cJiMzNDs7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0V0FSTl9PTighY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpO1xuJiM0MztcdFx0aWYgKCFjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuJiM0MztcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpKTtcbiYjNDM7XHRcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwmIzM0O3NlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblwmIzM0OztcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRjbGVhcl9pbl9zaWduX2t2ZWNzKGNvbik7XG5AQCAtMjYxOCw3ICYjNDM7MjYzNywxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4gXHRjZXBoX2RlY29kZV82NF9zYWZlKFx1MDAyNnAsIGVuZCwgY29ubmVjdF9zZXEsIGJhZCk7XG4gXG4gXHRkb3V0KFwmIzM0OyVzIGNvbiAlcCBjb25uZWN0X3NlcSAlbGx1XFxuXCYjMzQ7LCBfX2Z1bmNfXywgY29uLCBjb25uZWN0X3NlcSk7XG4tXHRXQVJOX09OKGNvbm5lY3Rfc2VxIFx1MDAzYz0gY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxKTtcbiYjNDM7XHRpZiAoY29ubmVjdF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuY29ubmVjdF9zZXEpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDslcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbiYjNDM7XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4mIzQzO1x0XHQgICAgICAgY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxLCBjb25uZWN0X3NlcSk7XG4mIzQzO1x0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCYjMzQ7Y29ubmVjdF9zZXEgbWlzbWF0Y2hcJiMzNDs7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4gXHRjb24tXHUwMDNldjIuY29ubmVjdF9zZXEgPSBjb25uZWN0X3NlcSAmIzQzOyAxO1xuIFxuIFx0ZnJlZV9jb25uX2J1ZnMoY29uKTtcbkBAIC0yNjUxLDcgJiM0MzsyNjc3LDE0IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4gXHRjZXBoX2RlY29kZV82NF9zYWZlKFx1MDAyNnAsIGVuZCwgZ2xvYmFsX3NlcSwgYmFkKTtcbiBcbiBcdGRvdXQoXCYjMzQ7JXMgY29uICVwIGdsb2JhbF9zZXEgJWxsdVxcblwmIzM0OywgX19mdW5jX18sIGNvbiwgZ2xvYmFsX3NlcSk7XG4tXHRXQVJOX09OKGdsb2JhbF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSk7XG4mIzQzO1x0aWYgKGdsb2JhbF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyVzJWxsZCAlcyBnbG9iYWxfc2VxIG1pc21hdGNoLCBleHBlY3RlZCBcdTAwM2UgJWxsdSwgZ290ICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4mIzQzO1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuJiM0MztcdFx0ICAgICAgIGNvbi1cdTAwM2V2Mi5nbG9iYWxfc2VxLCBnbG9iYWxfc2VxKTtcbiYjNDM7XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcJiMzNDtnbG9iYWxfc2VxIG1pc21hdGNoXCYjMzQ7O1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFx0Y29uLVx1MDAzZXYyLmdsb2JhbF9zZXEgPSBjZXBoX2dldF9nbG9iYWxfc2VxKGNvbi1cdTAwM2Vtc2dyLCBnbG9iYWxfc2VxKTtcbiBcbiBcdGZyZWVfY29ubl9idWZzKGNvbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NFUEhfTElCJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9SQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZXBoX2Nvbl92MV90cnlfcmVhZCYjMzQ7LAogICAgJiMzNDtjZXBoX2Nvbl92Ml90cnlfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBXQVJOX09OIHdpdGggcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXR1cm5zIGluIHRoZSBDZXBoIG5ldHdvcmsgcHJvdG9jb2wgcGFyc2luZyBsb2dpYyAobWVzc2VuZ2VyIHYxIGFuZCB2MikuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIHByb3RvY29sIGNvZGUgdGhhdCBwcmV2ZW50cyBmYWxzZS1wb3NpdGl2ZSBjcmFzaCByZXBvcnRzIGFuZCBjb3JyZWN0bHkgaGFuZGxlcyBpbnZhbGlkIHByb3RvY29sIHN0YXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc5NDRjYzAwZDRjMWJmMmNlYjc4NjM0N2ZjODk0YTIyNzZkODY3ZDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAxMToyNjo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMKaW5kZXggYzllMDAyZDk2MzE5MC4uZGYyMjQ4YjdiMDI2NSAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMKQEAgLTg5OCw4ICYjNDM7ODk4LDE1IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbikKIAkJICAgICBjb24tJmd0O3YxLnBlZXJfZ2xvYmFsX3NlcSwKIAkJICAgICBsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSwKIAkJICAgICBjb24tJmd0O3YxLmNvbm5lY3Rfc2VxKTsKLQkJV0FSTl9PTihjb24tJmd0O3YxLmNvbm5lY3Rfc2VxICE9Ci0JCQlsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7CiYjNDM7CQlpZiAoY29uLSZndDt2MS5jb25uZWN0X3NlcSAhPSBsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSkgewomIzQzOwkJCXByX2VycigmIzM0OyVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJXUsIGdvdCAldVxuJiMzNDssCiYjNDM7CQkJICAgICAgIEVOVElUWV9OQU1FKGNvbi0mZ3Q7cGVlcl9uYW1lKSwKJiM0MzsJCQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpLAomIzQzOwkJCSAgICAgICBjb24tJmd0O3YxLmNvbm5lY3Rfc2VxLAomIzQzOwkJCSAgICAgICBsZTMyX3RvX2NwdShjb24tJmd0O3YxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7CiYjNDM7CQkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O2Nvbm5lY3Rfc2VxIG1pc21hdGNoJiMzNDs7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQogCiAJCWlmIChjb24tJmd0O3YxLmluX3JlcGx5LmZsYWdzICZhbXA7IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpCiAJCQljZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7CmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jCmluZGV4IDA1ZjZlZWEyOTlmYzAuLmQ3MDZjZGJlMGVkMmQgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jCkBAIC0yNTI5LDE0ICYjNDM7MjUyOSwzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwKIAljb24tJmd0O3BlZXJfbmFtZS5udW0gPSBjcHVfdG9fbGU2NChnbG9iYWxfaWQpOwogCWNvbi0mZ3Q7djIucGVlcl9nbG9iYWxfc2VxID0gZ2xvYmFsX3NlcTsKIAljb24tJmd0O3BlZXJfZmVhdHVyZXMgPSBmZWF0dXJlczsKLQlXQVJOX09OKHJlcXVpcmVkX2ZlYXR1cmVzICZhbXA7IH5jbGllbnQtJmd0O3N1cHBvcnRlZF9mZWF0dXJlcyk7CiYjNDM7CWlmIChyZXF1aXJlZF9mZWF0dXJlcyAmYW1wOyB+Y2xpZW50LSZndDtzdXBwb3J0ZWRfZmVhdHVyZXMpIHsKJiM0MzsJCXByX2VycigmIzM0OyVzJWxsZCAlcyBtaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzLCBteSBzdXBwb3J0ZWQgMHglbGx4LCBzZXJ2ZXImIzM5O3MgcmVxdWlyZWQgMHglbGx4XG4mIzM0OywKJiM0MzsJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpLAomIzQzOwkJICAgICAgIGNsaWVudC0mZ3Q7c3VwcG9ydGVkX2ZlYXR1cmVzLCByZXF1aXJlZF9mZWF0dXJlcyk7CiYjNDM7CQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7bWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcyYjMzQ7OwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAljb24tJmd0O3YyLnNlcnZlcl9jb29raWUgPSBjb29raWU7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgQ0VQSF9NU0dfQ09OTkVDVF9MT1NTWSkgewogCQljZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7Ci0JCVdBUk5fT04oY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKTsKJiM0MzsJCWlmIChjb24tJmd0O3YyLnNlcnZlcl9jb29raWUpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cbiYjMzQ7LAomIzQzOwkJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSk7CiYjNDM7CQkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O3NlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uJiMzNDs7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiAJfSBlbHNlIHsKLQkJV0FSTl9PTighY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKTsKJiM0MzsJCWlmICghY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblxuJiMzNDssCiYjNDM7CQkJICAgICAgIEVOVElUWV9OQU1FKGNvbi0mZ3Q7cGVlcl9uYW1lKSwKJiM0MzsJCQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpKTsKJiM0MzsJCQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7c2VydmVyX2Nvb2tpZSBpcyBub3Qgc2V0IGZvciBsb3NzbGVzcyBjb25uZWN0aW9uJiMzNDs7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiAJfQogCiAJY2xlYXJfaW5fc2lnbl9rdmVjcyhjb24pOwpAQCAtMjYxOCw3ICYjNDM7MjYzNywxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sCiAJY2VwaF9kZWNvZGVfNjRfc2FmZSgmYW1wO3AsIGVuZCwgY29ubmVjdF9zZXEsIGJhZCk7CiAKIAlkb3V0KCYjMzQ7JXMgY29uICVwIGNvbm5lY3Rfc2VxICVsbHVcbiYjMzQ7LCBfX2Z1bmNfXywgY29uLCBjb25uZWN0X3NlcSk7Ci0JV0FSTl9PTihjb25uZWN0X3NlcSAmbHQ7PSBjb24tJmd0O3YyLmNvbm5lY3Rfc2VxKTsKJiM0MzsJaWYgKGNvbm5lY3Rfc2VxICZsdDs9IGNvbi0mZ3Q7djIuY29ubmVjdF9zZXEpIHsKJiM0MzsJCXByX2VycigmIzM0OyVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJmd0OyAlbGx1LCBnb3QgJWxsdVxuJiMzNDssCiYjNDM7CQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSwKJiM0MzsJCSAgICAgICBjb24tJmd0O3YyLmNvbm5lY3Rfc2VxLCBjb25uZWN0X3NlcSk7CiYjNDM7CQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7Y29ubmVjdF9zZXEgbWlzbWF0Y2gmIzM0OzsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAJY29uLSZndDt2Mi5jb25uZWN0X3NlcSA9IGNvbm5lY3Rfc2VxICYjNDM7IDE7CiAKIAlmcmVlX2Nvbm5fYnVmcyhjb24pOwpAQCAtMjY1MSw3ICYjNDM7MjY3NywxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWwoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLAogCWNlcGhfZGVjb2RlXzY0X3NhZmUoJmFtcDtwLCBlbmQsIGdsb2JhbF9zZXEsIGJhZCk7CiAKIAlkb3V0KCYjMzQ7JXMgY29uICVwIGdsb2JhbF9zZXEgJWxsdVxuJiMzNDssIF9fZnVuY19fLCBjb24sIGdsb2JhbF9zZXEpOwotCVdBUk5fT04oZ2xvYmFsX3NlcSAmbHQ7PSBjb24tJmd0O3YyLmdsb2JhbF9zZXEpOwomIzQzOwlpZiAoZ2xvYmFsX3NlcSAmbHQ7PSBjb24tJmd0O3YyLmdsb2JhbF9zZXEpIHsKJiM0MzsJCXByX2VycigmIzM0OyVzJWxsZCAlcyBnbG9iYWxfc2VxIG1pc21hdGNoLCBleHBlY3RlZCAmZ3Q7ICVsbHUsIGdvdCAlbGx1XG4mIzM0OywKJiM0MzsJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkgICAgICAgY2VwaF9wcl9hZGRyKCZhbXA7Y29uLSZndDtwZWVyX2FkZHIpLAomIzQzOwkJICAgICAgIGNvbi0mZ3Q7djIuZ2xvYmFsX3NlcSwgZ2xvYmFsX3NlcSk7CiYjNDM7CQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7Z2xvYmFsX3NlcSBtaXNtYXRjaCYjMzQ7OwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAljb24tJmd0O3YyLmdsb2JhbF9zZXEgPSBjZXBoX2dldF9nbG9iYWxfc2VxKGNvbi0mZ3Q7bXNnciwgZ2xvYmFsX3NlcSk7CiAKIAlmcmVlX2Nvbm5fYnVmcyhjb24pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzc0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENlcGggUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgY2xlYW5pbmcgdXAgc29tZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgQ2VwaCBuZXR3b3JrIGNvZGUuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgcmVwbGFjaW5nIGBXQVJOX09OYCB3aXRoIHByb3BlciBlcnJvciByZXR1cm5zIOKAkyBgLTFgLCBgLUVJTlZBTGAg4oCTIGFuZCBzZXR0aW5nIGBjb24tJmd0O2Vycm9yX21zZ2AgaW4gYG5ldC9jZXBoL21lc3Nlbmdlcl92MS5jYCBhbmQgYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZT8mIzM0OyBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGV2ZW4gKnJlYWNoYWJsZSogYW5kIGlmIHRoZXkmIzM5O3JlIGNvbXBsZXggZW5vdWdoIHRvIHdhcnJhbnQgYXR0ZW50aW9uLgoKVGhlIHBhdGNoIHRvdWNoZXMgYHByb2Nlc3NfY29ubmVjdGAgaW4gdGhlIHYxIG1lc3NlbmdlciBhbmQgdGhlbiBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgLCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5YCwgYW5kIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsYCBpbiB0aGUgdjIgbWVzc2VuZ2VyLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGNsZWFybHkgY29yZSB0byB0aGUgQ2VwaCBwcm90b2NvbCwgc28gdGhleSYjMzk7cmUgZGVmaW5pdGVseSB3aXRoaW4gdGhlIGF0dGFjayBzdXJmYWNlLiBDZXBoLCBiZWluZyBhIGRpc3RyaWJ1dGVkIHN0b3JhZ2Ugc3lzdGVtLCBpcyBkZWZpbml0ZWx5IG5ldHdvcmstZmFjaW5nLiBJdCYjMzk7cyB1c2VkIGFzIGEgbmV0d29yayBmaWxlc3lzdGVtIGFuZCBibG9jayBkZXZpY2UsIHNvIHRoZXJlIGlzIHRoZSBwb3RlbnRpYWwgdG8gdHJpZ2dlciBpc3N1ZXMgcmVtb3RlbHkuCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgJiMzNDtDYW4gSSBnZXQgdG8gdGhlc2UgYml0cyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQ/JiMzNDsgSWRlYWxseSwgc3l6a2FsbGVyIGNvdWxkIGJlIGxldmVyYWdlZC4gSWYgSSYjMzk7bSBsdWNreSwgdGhlcmUgYXJlIGFscmVhZHkgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgQ2VwaC4gRXZlbiBpZiB0aGVyZSYjMzk7cyBubyBuYXRpdmUgQ2VwaCBzZXJ2ZXIgd2l0aGluIHN5emthbGxlciwgaXQmIzM5O3MgdmVyeSBsaWtlbHkgSSBjYW4gY3JhZnQgbmV0d29yayBwYWNrZXRzIHRvIHBva2UgYXQgYSBDZXBoIGNsaWVudCBhbmQgZXhlcmNpc2UgdGhvc2UgY29kZSBwYXRocy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNldHRpbmcgdXAgYSBuZXR3b3JrIGNvbm5lY3Rpb24gb3IgaW5qZWN0aW5nIHBhY2tldHMgaW50byB0aGUgbmV0d29yayBpcyB1c3VhbGx5IGEgdmlhYmxlIHBhdGguIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgY2FzZSwgZmlyc3QsIHNvIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZvciBDRVBIIGFuZCBzZWUgd2hhdCB0aGUgb3B0aW9ucyBsb29rIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENFUEhfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jZXBoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9MSUJcbm5ldC9jZXBoL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0NlcGggY29yZSBsaWJyYXJ5XCYjMzQ7XG4tLVxubmV0L2NlcGgvS2NvbmZpZy0yMi1cbm5ldC9jZXBoL0tjb25maWc6MjM6Y29uZmlnIENFUEhfTElCX1BSRVRUWURFQlVHXG5uZXQvY2VwaC9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIGZpbGU6bGluZSBpbiBjZXBoIGRlYnVnIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9jZXBoL0tjb25maWctMzQtXG5uZXQvY2VwaC9LY29uZmlnOjM1OmNvbmZpZyBDRVBIX0xJQl9VU0VfRE5TX1JFU09MVkVSXG5uZXQvY2VwaC9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtVc2UgaW4ta2VybmVsIHN1cHBvcnQgZm9yIEROUyBsb29rdXBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjM5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDZXBoIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUgaXMgYENFUEhfTElCYC4gVGhhdCYjMzk7cyBvdXIgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIG5vdyBpcyB0byBkZXRlcm1pbmUgd2hhdCBvdGhlciBlbGVtZW50cyBhcmUgcG90ZW50aWFsbHkgY291cGxlZCB0byBgQ0VQSF9MSUJgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBDRVBIX0ZTYCBvciBgQkxLX0RFVl9SQkRgIGFyZSBmdW5jdGlvbmFsbHkgKnJlcXVpcmVkKiBpbiB0aGlzIHNldHVwLCBvciBqdXN0IHBvdGVudGlhbGx5ICp1c2VkKi4gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHN0YW5kYXJkIENlcGggZmlsZXN5c3RlbSBkZXBsb3ltZW50LCBvciBhcmUgd2UgbW9yZSBmb2N1c2VkIG9uIFJCRCBibG9jayBkZXZpY2UgaW50ZXJhY3Rpb24/IFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyB0byBvcHRpbWl6ZSB0aGUgY29uZmlndXJhdGlvbi4gVGhpcyBtZWFucyBJIHdhbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGFyZSByZXF1aXJlZCwgb3B0aW9uYWwsIG9yIG11dHVhbGx5IGV4Y2x1c2l2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0VQSF9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NlcGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NlcGgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvY2VwaC9LY29uZmlnOjI6Y29uZmlnIENFUEhfRlNcbmZzL2NlcGgvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q2VwaCBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbVwmIzM0O1xuLS1cbmZzL2NlcGgvS2NvbmZpZz0xOT1pZiBDRVBIX0ZTXG5mcy9jZXBoL0tjb25maWc6MjA6Y29uZmlnIENFUEhfRlNDQUNIRVxuZnMvY2VwaC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtFbmFibGUgQ2VwaCBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvY2VwaC9LY29uZmlnPTI3PWVuZGlmXG5mcy9jZXBoL0tjb25maWctMjgtXG5mcy9jZXBoL0tjb25maWc6Mjk6Y29uZmlnIENFUEhfRlNfUE9TSVhfQUNMXG5mcy9jZXBoL0tjb25maWctMzAtXHRib29sIFwmIzM0O0NlcGggUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9jZXBoL0tjb25maWctMzgtXG5mcy9jZXBoL0tjb25maWc6Mzk6Y29uZmlnIENFUEhfRlNfU0VDVVJJVFlfTEFCRUxcbmZzL2NlcGgvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7Q2VwaEZTIFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBEZXRhaWxzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIHBvaW50aW5nIG1lIHRvd2FyZHMgYEJMS19ERVZfUkJEYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgYXJlIGdldHRpbmcgaW50ZXJlc3RpbmcuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gb2Ygb3VyIHN5c3RlbSB3aXRoIHRoZSBSQkQgYmxvY2sgZGV2aWNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgaG93IHRoZSBDZXBoIFJBRE9TIEJsb2NrIERldmljZSBmaXRzIGluIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBibG9jayBsYXllci4gT2theSwgc28gUkJELi4uIGxldCYjMzk7cyBjaGVjayBpdC4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1JCRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0zMDc9Y29uZmlnIFZJUlRJT19CTEtcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzE0LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMxNTpjb25maWcgQkxLX0RFVl9SQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMTYtXHR0cmlzdGF0ZSBcJiMzNDtSYWRvcyBibG9jayBkZXZpY2UgKFJCRClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFByb3RvY29sIFBhcnNpbmcgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIGBXQVJOX09OYCB0byBhY3R1YWwgZXJyb3IgcmV0dXJucyB3aXRoaW4gdGhlIHByb3RvY29sIHBhcnNpbmcuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaW5zdGVhZCBvZiBqdXN0IGxvZ2dpbmcgYSB3YXJuaW5nLCB3ZSYjMzk7cmUgbm93ICpoYW5kbGluZyogdGhlIGVycm9yIG1vcmUgZ3JhY2VmdWxseS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7VGhpcyBuZWVkcyBmdXp6aW5nLiYjMzQ7IEl0JiMzOTtzIGNyaXRpY2FsIHRvIHZlcmlmeSB0aGVzZSBuZXcgZXJyb3IgcGF0aHMgYXJlIHJvYnVzdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IGxlYWtpbmcgcmVzb3VyY2VzIG9yIGludHJvZHVjaW5nIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLCBhbmQgdGhhdCB3ZSBjYW4gcmVhY2ggbW9yZSBzdGF0ZXMgdGhyb3VnaCB0aGVzZSBwYXRocy4KCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLiBCYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2UgZnVuY3Rpb25zOiBgcHJvY2Vzc19jb25uZWN0YCwgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCwgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeWAsIGFuZCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbGAuCgpOb3csIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIHdoZXRoZXIgdGhlc2UgYXJlIHN0YXRpYy4gVGhlIGNvbnRleHQgaXMgaW1wb3J0YW50IGhlcmUuIEkgc2VlIHRoZXkgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW50IC4uLmAuIElmIHRoZXkgd2VyZSBub24tc3RhdGljLCB0aGV5IG1pZ2h0IGdldCBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMsIGJ1dCBpZiB0aGV5IGFyZSBzdGF0aWMgdGhleSBjb3VsZCBiZSBpbmxpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBub24tc3RhdGljIGNhbGxlcnMgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGludm9rZWQuIFRoYXQmIzM5O2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvZGUgZmxvdyBhbmQgd2hlcmUgdGhlc2UgZXJyb3IgcGF0aHMgYXJlIG1vc3QgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2Nlc3NfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlcl92MS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlcl92MS5jPTY5Nz1zdGF0aWMgaW50IHByb2Nlc3NfYmFubmVyKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy03MzktXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo3NDA6c3RhdGljIGludCBwcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzQxLXtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy03NDYtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo3NDc6XHRkb3V0KFwmIzM0O3Byb2Nlc3NfY29ubmVjdCBvbiAlcCB0YWcgJWRcXG5cJiMzNDssIGNvbiwgY29uLVx1MDAzZXYxLmluX3RhZyk7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy03NDgtXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODAyLVx0XHRjb24tXHUwMDNldjEuYXV0aF9yZXRyeSYjNDM7JiM0Mzs7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo4MDM6XHRcdGRvdXQoXCYjMzQ7cHJvY2Vzc19jb25uZWN0ICVwIGdvdCBCQURBVVRIT1JJWkVSIGF0dGVtcHQgJWRcXG5cJiMzNDssIGNvbixcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTgwNC1cdFx0ICAgICBjb24tXHUwMDNldjEuYXV0aF9yZXRyeSk7XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODIzLVx0XHQgKi9cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjgyNDpcdFx0ZG91dChcJiMzNDtwcm9jZXNzX2Nvbm5lY3QgZ290IFJFU0VUIHBlZXIgc2VxICV1XFxuXCYjMzQ7LFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODI1LVx0XHQgICAgIGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTg0OS1cdFx0ICovXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo4NTA6XHRcdGRvdXQoXCYjMzQ7cHJvY2Vzc19jb25uZWN0IGdvdCBSRVRSWV9TRVNTSU9OIG15IHNlcSAldSwgcGVlciAldVxcblwmIzM0Oyxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTg1MS1cdFx0ICAgICBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEub3V0X2Nvbm5lY3QuY29ubmVjdF9zZXEpLFxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTg2NS1cdFx0ICovXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo4NjY6XHRcdGRvdXQoXCYjMzQ7cHJvY2Vzc19jb25uZWN0IGdvdCBSRVRSWV9HTE9CQUwgbXkgJXUgcGVlcl9nc2VxICV1XFxuXCYjMzQ7LFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODY3LVx0XHQgICAgIGNvbi1cdTAwM2V2MS5wZWVyX2dsb2JhbF9zZXEsXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODk2LVx0XHRjb24tXHUwMDNlcGVlcl9mZWF0dXJlcyA9IHNlcnZlcl9mZWF0O1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODk3Olx0XHRkb3V0KFwmIzM0O3Byb2Nlc3NfY29ubmVjdCBnb3QgUkVBRFkgZ3NlcSAlZCBjc2VxICVkICglZClcXG5cJiMzNDssXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04OTgtXHRcdCAgICAgY29uLVx1MDAzZXYxLnBlZXJfZ2xvYmFsX3NlcSxcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYz0xMzI5PWludCBjZXBoX2Nvbl92MV90cnlfcmVhZChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtMTM3Mi1cdFx0XHRnb3RvIG91dDtcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjEzNzM6XHRcdHJldCA9IHByb2Nlc3NfY29ubmVjdChjb24pO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtMTM3NC1cdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI3NwoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgQ2VwaCBDb25uZWN0aW9uIEZsb3cqKgoKQWxyaWdodCwgc28gYGNlcGhfY29uX3YxX3RyeV9yZWFkYCB0cmlnZ2VycyBhIGNhbGwgdG8gYHByb2Nlc3NfY29ubmVjdGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbm5lY3Rpb24gaGFuZHNoYWtlIGhhcHBlbnMuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICphY3R1YWxseSogZ29pbmcgb24gaW5zaWRlIHRob3NlIGZ1bmN0aW9ucyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy4gU28sIEkgbmVlZCB0byBmb2N1cyBvbiBhIGZldyBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBjcml0aWNhbCB3aXRoaW4gdGhlIGBtZXNzZW5nZXJfdjIuY2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGBwcm9jZXNzX3NlcnZlcl9pZGVudGAsIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlgLCBhbmQgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWxgLiBUaGVzZSBwcm9iYWJseSBoYW5kbGUgdGhlIGNydWNpYWwgc3RlcHMgb2YgaWRlbnRpZnlpbmcgdGhlIHNlcnZlciwgaGFuZGxpbmcgYW55IHNlc3Npb24gcmV0cmllcyB0aGF0IG1heSBiZSBuZWVkZWQsIGFuZCBwZXJoYXBzIG1hbmFnaW5nIGdsb2JhbCByZXRyeSBhdHRlbXB0cyBpZiB0aGUgaW5pdGlhbCBhdHRlbXB0cyBmYWlsLiBJJiMzOTtsbCBsb29rIGludG8gaG93IGVhY2ggb2YgdGhlc2UgY29udHJpYnV0ZXMgdG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBmbG93IGFuZCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvY2Vzc19zZXJ2ZXJfaWRlbnR8cHJvY2Vzc19zZXNzaW9uX3JldHJ5fHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yNDI0PXN0YXRpYyBpbnQgcHJvY2Vzc19hdXRoX3NpZ25hdHVyZShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjQ3MS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI0NzI6c3RhdGljIGludCBwcm9jZXNzX3NlcnZlcl9pZGVudChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yNDczLVx0XHRcdFx0dm9pZCAqcCwgdm9pZCAqZW5kKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI1OTc9c3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmVjb25uZWN0X29rKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yNjI1LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjYyNjpzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yNjI3LVx0XHRcdFx0IHZvaWQgKnAsIHZvaWQgKmVuZClcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yNjY1LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjY2NjpzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWwoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjY2Ny1cdFx0XHRcdFx0dm9pZCAqcCwgdm9pZCAqZW5kKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI3OTQ9c3RhdGljIGludCBwcm9jZXNzX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwLCB2b2lkICplbmQpXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgxNy1cdGNhc2UgRlJBTUVfVEFHX1NFUlZFUl9JREVOVDpcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI4MTg6XHRcdHJldCA9IHByb2Nlc3Nfc2VydmVyX2lkZW50KGNvbiwgcCwgZW5kKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MTktXHRcdGJyZWFrO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MjYtXHRjYXNlIEZSQU1FX1RBR19TRVNTSU9OX1JFVFJZOlxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjgyNzpcdFx0cmV0ID0gcHJvY2Vzc19zZXNzaW9uX3JldHJ5KGNvbiwgcCwgZW5kKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MjgtXHRcdGJyZWFrO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgyOS1cdGNhc2UgRlJBTUVfVEFHX1NFU1NJT05fUkVUUllfR0xPQkFMOlxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjgzMDpcdFx0cmV0ID0gcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChjb24sIHAsIGVuZCk7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODMxLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE3OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGg6IGBwcm9jZXNzX2NvbnRyb2xgKioKCk9rYXksIHNvIEkmIzM5O20gaW52ZXN0aWdhdGluZyBob3cgdGhpcyBzeXN0ZW0gb3BlcmF0ZXMuIE15IGZvY3VzIGhhcyBiZWVuIGRyYXduIHRvIGBwcm9jZXNzX2NvbnRyb2xgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyByZWxhdGlvbnNoaXBzLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGludm9rZWQgZnJvbT8gSSBpbW1lZGlhdGVseSB3YW50IHRvIGRldGVybWluZSB0aGUgaW1tZWRpYXRlIGNhbGxlcnMsIGFuZCB0aGVpciBjYWxsZXJzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGlkZW50aWZ5aW5nIGRlcGVuZGVuY2llczsgaXQmIzM5O3MgYWJvdXQgcmVjb25zdHJ1Y3RpbmcgdGhlIGNvbnRyb2wgZmxvdy4gU2VlaW5nIHRoZSBjaGFpbiBmcm9tIHRoZSBoaWdoZXN0IGxldmVscyB3aWxsIGhlbHAgcGFpbnQgdGhlIHBpY3R1cmUgb2Ygd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGZpdHMgaW4uIFRoaXMgc2hvdWxkIHByb3ZpZGUgY29udGV4dCBmb3Igd2hhdCBgcHJvY2Vzc19jb250cm9sYCBpcyBkZXNpZ25lZCB0byBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvY2Vzc19jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9Mjc3ND1zdGF0aWMgaW50IHByb2Nlc3NfYWNrKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI3OTMtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyNzk0OnN0YXRpYyBpbnQgcHJvY2Vzc19jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjc5NS17XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjkyOD1zdGF0aWMgaW50IF9faGFuZGxlX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5MzQtXHRpZiAoY29uLVx1MDAzZXYyLmluX2Rlc2MuZmRfdGFnICE9IEZSQU1FX1RBR19NRVNTQUdFKVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjkzNTpcdFx0cmV0dXJuIHByb2Nlc3NfY29udHJvbChjb24sIHAsIGVuZCk7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yOTM2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjMyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIHRoZSBDb250cm9sIEhhbmRsZXIqKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgbG9naWMgc2VlbXMgdG8gYmUgdGllZCB0byB0aGlzIGBfX2hhbmRsZV9jb250cm9sYCBtZXRob2QuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcGllY2VzIG9mIGNvZGUgYXJlIGFjdHVhbGx5ICpjYWxsaW5nKiB0aGlzIHRoaW5nLiBJdCYjMzk7cyB0aGUgZXNzZW50aWFsIGVudHJ5IHBvaW50IGZvciBjb250cm9sIHNpZ25hbHMgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlciB3aWxsIHByb3ZpZGUgdml0YWwgY29udGV4dCB0byBmdXJ0aGVyIGV4YW1pbmUgd2hhdCBpcyBnb2luZyBvbi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIHdoZXJlIHRoZSBleGVjdXRpb24gZmxvdyBpcyBvcmlnaW5hdGluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHN0YXRlIGFuZCBiZWhhdmlvciBvZiB0aGUgc3lzdGVtIGF0IHRoZSB0aW1lIHRoaXMgaGFuZGxlciBnZXRzIGludm9rZWQuIFRpbWUgdG8gZ2V0IGRvd24gdG8gdHJhY2luZyB0aGUgY2FsbCBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19oYW5kbGVfY29udHJvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI5MTA9c3RhdGljIGludCBwcm9jZXNzX21lc3NhZ2Uoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5MjctXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyOTI4OnN0YXRpYyBpbnQgX19oYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHZvaWQgKnApXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yOTI5LXtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yOTczPXN0YXRpYyBpbnQgaGFuZGxlX3ByZWFtYmxlKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDA1LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAwNjpcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgQ1RSTF9CT0RZKGNvbi1cdTAwM2V2Mi5pbl9idWYpKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwMDctfVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMwMDk9c3RhdGljIGludCBoYW5kbGVfY29udHJvbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAyOC1cdFx0bWVtY3B5KGJ1ZiwgY29uLVx1MDAzZXYyLmluX2t2ZWNzWzBdLmlvdl9iYXNlLCBjdHJsX2xlbik7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMDI5Olx0XHRyZXR1cm4gX19oYW5kbGVfY29udHJvbChjb24sIGJ1Zik7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDMwLVx0fVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAzMS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMwMzI6XHRyZXR1cm4gX19oYW5kbGVfY29udHJvbChjb24sIGNvbi1cdTAwM2V2Mi5pbl9rdmVjc1swXS5pb3ZfYmFzZSk7XG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDMzLX1cbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0zMDM1PXN0YXRpYyBpbnQgaGFuZGxlX2NvbnRyb2xfcmVtYWluZGVyKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMDQ3LVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzA0ODpcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgY29uLVx1MDAzZXYyLmluX2t2ZWNzWzBdLmlvdl9iYXNlIC1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNDktXHRcdFx0XHQgICAgIENFUEhfUFJFQU1CTEVfSU5MSU5FX0xFTik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IGludGVybmFsIG1vbm9sb2d1ZToKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIENvZGUmIzM5O3MgUHVycG9zZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCB0aGVzZSBhcmUgYWxsIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyDigJMgaXQgbWVhbnMgdGhleSYjMzk7cmUgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGV4cG9zZWQgb3IgY2FsbGVkIGV4dGVybmFsbHksIGxpa2VseSB1c2VkIGZvciBzcGVjaWZpYyBpbnRlcm5hbCB0YXNrcyB3aXRoaW4gYSBsYXJnZXIgbW9kdWxlLgoKVGhlIG1vc3QgbGlrZWx5IGVudHJ5IHBvaW50IGludG8gdGhpcyBzZWN0aW9uIG9mIGNvZGUgbG9va3MgbGlrZSBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXMgcHJldHR5IGRlc2NyaXB0aXZlOyBpdCBzdWdnZXN0cyB0aGlzIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIGF0dGVtcHRpbmcgdG8gcmVhZCBkYXRhIHVzaW5nIHRoZSBDZXBoIHByb3RvY29sLCBzcGVjaWZpY2FsbHkgdmVyc2lvbiAyLCBhbmQgJiMzNDt0cnkmIzM0OyBpbXBsaWVzIHNvbWUgc29ydCBvZiBlcnJvciBoYW5kbGluZyBvciBwb3RlbnRpYWwgZm9yIHBhcnRpYWwgcmVhZHMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIHN0YXJ0IHRvIGludmVzdGlnYXRlIHRoZSBpbm5lciB3b3JraW5ncy4gSSYjMzk7bGwgZm9jdXMgb24gdGhhdCBmdW5jdGlvbiYjMzk7cyBjYWxsIHN0YWNrIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cuIFVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIHRoaXMgJiMzNDt0cnlfcmVhZCYjMzQ7IGZ1bmN0aW9uIGdldHMgaW52b2tlZCB3aWxsIGJlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2VwaF9jb25fdjJfdHJ5X3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0zMTAwPXN0YXRpYyBpbnQgcG9wdWxhdGVfaW5faXRlcihzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzE2OC1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMxNjk6aW50IGNlcGhfY29uX3YyX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxNzAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzY4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBjb25jaXNlIHN1bW1hcnkgZm9yIGFuIGV4cGVydDoKCioqSWRlbnRpZnlpbmcgUmVhZCBFbnRyeSBQb2ludHMgaW4gdGhlIENlcGggQ29ubmVjdGlvbiBNb2R1bGUqKgoKQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgY2VudGVyZWQgYXJvdW5kIHBpbnBvaW50aW5nIHRoZSBrZXkgcmVhZCBlbnRyeSBwb2ludHMgd2l0aGluIHRoZSBDZXBoIGNvbm5lY3Rpb24gaGFuZGxpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgSSYjMzk7dmUgaWRlbnRpZmllZCBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgIGFzIHBvdGVudGlhbCBpbml0aWFsIGNhbmRpZGF0ZXMgZm9yIGludmVzdGlnYXRpbmcgaG93IGluY29taW5nIGRhdGEgaXMgcHJvY2Vzc2VkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHBlcmZvcm0gYSB0aG9yb3VnaCBzZWFyY2ggb2YgdGhlIGNvZGUgYmFzZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgc2VydmUgYXMgZW50cnkgcG9pbnRzIGZvciByZWFkIG9wZXJhdGlvbnMgYmV5b25kIHRoZSB0d28gdGhhdCBJJiMzOTt2ZSBhbHJlYWR5IGNvbWUgYWNyb3NzLiBJJiMzOTtsbCBuZWVkIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGFsbCBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgcmVhZCBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NlcGhfY29uX3YxX3RyeV9yZWFkfGNlcGhfY29uX3YyX3RyeV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlci5jPTE1NDI9c3RhdGljIHZvaWQgY2VwaF9jb25fd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xNTc0LVx0XHRpZiAoY2VwaF9tc2dyMihmcm9tX21zZ3IoY29uLVx1MDAzZW1zZ3IpKSlcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjE1NzU6XHRcdFx0cmV0ID0gY2VwaF9jb25fdjJfdHJ5X3JlYWQoY29uKTtcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE1NzYtXHRcdGVsc2Vcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjE1Nzc6XHRcdFx0cmV0ID0gY2VwaF9jb25fdjFfdHJ5X3JlYWQoY29uKTtcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE1NzgtXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYz0xMzE0PXN0YXRpYyBpbnQgcmVhZF9rZWVwYWxpdmVfYWNrKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xMzI4LSAqL1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6MTMyOTppbnQgY2VwaF9jb25fdjFfdHJ5X3JlYWQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtMTMzMC17XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MzEwMD1zdGF0aWMgaW50IHBvcHVsYXRlX2luX2l0ZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxNjgtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMTY5OmludCBjZXBoX2Nvbl92Ml90cnlfcmVhZChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTcwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQyOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ2VwaCBDb25uZWN0aW9uIFByb2Nlc3NpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBDZXBoIGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBjZXBoX2Nvbl93b3JrZm5gLiBUaGlzIGlzIHRoZSBjb3JlIHdvcmtlciBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZywgc28gdGhlIHJlYWwgYWN0aW9uIG11c3QgYmUgaW4gZWl0aGVyIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgb3IgYGNlcGhfY29uX3YyX3RyeV9yZWFkYC4gVGhvc2UgYXJlIHRoZSBwcmltZSBzdXNwZWN0cywgdGhhdCBpcyB3aGVyZSB0aGUgbWVhdCBpcy4gU2hvdWxkIEkgbG9vayBhdCB0aGUgY2FsbGVyLCBgY2VwaF9jb25fd29ya2ZuYCwgb3IgdGhlIGNhbGxlZXMsIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgYW5kIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGA/IEkgdGhpbmsgdGhlIGNhbGxlZXMuIFRoZXNlIGB0cnlfcmVhZGAgZnVuY3Rpb25zIGFyZSB0aGUga2V5LiBXYWl0LCBob2xkIG9uLi4uIHRoZXkgKmFyZSogZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhleSBhcmUgZXhwb3J0ZWQ7IEkgY2FuJiMzOTt0IGJlIHN1cmUgd2l0aG91dCB2ZXJpZnlpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qY2VwaF9jb25fdjFfdHJ5X3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzkwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIHdpdGggdGhlIGJvbGRlZCBoZWFkZXIgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBTeW1ib2wgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIHRoZSBzeW1ib2xzIGluIHF1ZXN0aW9uIGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgYGV4dGVybmAsIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIG1lYW5zIHRoZXkgaGF2ZSBpbnRlcm5hbCBsaW5rYWdlIGFuZCByZXNpZGUgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgY29tcGlsYXRpb24gdW5pdHMsIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIGluIHdlbGwtc3RydWN0dXJlZCBjb2RlLiBCdXQsIHRoZXkmIzM5O3JlIG5vdCBgc3RhdGljYCBlaXRoZXIsIG1lYW5pbmcgdGhleSYjMzk7cmUgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIGV4ZWN1dGFibGUsIHRob3VnaCBwb3RlbnRpYWxseSB3aXRoIGludGVybmFsIHZpc2liaWxpdHkuIFNvLCBnaXZlbiB0aGF0IHRoZXkgYXJlIGluIGRpZmZlcmVudCBmaWxlcywgdGhleSBhcmUgZGVmaW5pdGVseSBkaXN0aW5jdCBzeW1ib2xzLCBldmVuIGlmIG9ubHkgd2l0aGluIHRoZSBsaW5rZWQgcHJvZ3JhbS4gSXQmIzM5O3MgYSBub24tc3RhdGljLCBsb2NhbGx5IHZpc2libGUgc3ltYm9sIHNpdHVhdGlvbiDigJMgY29tbW9uLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHVzZWQuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBjZXBoX2Nvbl93b3JrZm5gLiBJJiMzOTtsbCB0cmFjZSB0aGF0IGZ1bmN0aW9uIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN5bWJvbHMgaW4gcXVlc3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZXBoX2Nvbl93b3JrZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2VwaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTQ2PXN0YXRpYyB2b2lkIGNhbmNlbF9jb24oc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKTtcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjE0NzpzdGF0aWMgdm9pZCBjZXBoX2Nvbl93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICopO1xubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTQ4LXN0YXRpYyB2b2lkIGNvbl9mYXVsdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jPTYzMj12b2lkIGNlcGhfY29uX2luaXQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwcml2YXRlLFxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jLTY0Ni1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmNvbi1cdTAwM2VvdXRfc2VudCk7XG5uZXQvY2VwaC9tZXNzZW5nZXIuYzo2NDc6XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZjb24tXHUwMDNld29yaywgY2VwaF9jb25fd29ya2ZuKTtcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTY0OC1cbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXIuYz0xNTIwPXN0YXRpYyB2b2lkIGNvbl9mYXVsdF9maW5pc2goc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE1NDEtICovXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxNTQyOnN0YXRpYyB2b2lkIGNlcGhfY29uX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xNTQzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgdGhlIENlcGggQ29ubmVjdGlvbiBXb3JrIEZ1bmN0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBgY2VwaF9jb25fd29ya2ZuYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgIG1vcmUgc2lnbmlmaWNhbnQgcG9pbnRzIG9mIGludGVyZXN0IOKAkyB0aGV5JiMzOTtyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHRoZSBub24tc3RhdGljIGNvZGUuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgYWZmZWN0IHRoZSBvdmVyYWxsIGZsb3cuCgpMZXQmIzM5O3MgZXhwYW5kIHRoZSBzY29wZS4gSSBuZWVkIHRvIHNlZSB3aGF0IGVsc2UgaGFzIGJlZW4gdG91Y2hlZCBpbiB0aGlzIHBhdGNoIGJleW9uZCB0aG9zZSBpbml0aWFsIHJlYWRzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGxpc3QgaXM6IGBwcm9jZXNzX2Nvbm5lY3RgIChzdGF0aWMpLCBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgIChzdGF0aWMpLCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5YCAoc3RhdGljKSwgYW5kIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsYCAoc3RhdGljKS4gVGhlc2UgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBtZWFucyB0aGVpciBzY29wZSBpcyBsaW1pdGVkIGFuZCBzbyBpdCBpcyBhbiBpbmRpY2F0aW9uIG9mIGZvY3VzZWQgYW5kIGxvY2FsaXNlZCBtb2RpZmljYXRpb24uCgpOb3cgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBlbGVtZW50cywgcHJpbWFyaWx5IGBDRVBIX0xJQmAsIGFyZSBjb3JyZWN0IGFuZCBjb21wbGV0ZS4gQXJlIHRoZXJlIGFueSBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0aGF0IGhhdmUgYmVlbiBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkPyBBIHF1aWNrIHNjYW4gb2YgYG5ldC9jZXBoL0tjb25maWdgIHNob3VsZCByZXZlYWwgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIGJ1aWxkIGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jZXBoL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIENFUEhfTElCXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDZXBoIGNvcmUgbGlicmFyeVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0NCQ1xuICAgODpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fS1JCNVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gIDExOlx0XHRzZWxlY3QgQ1JZUFRPXG4gIDEyOlx0XHRzZWxlY3QgS0VZU1xuICAxMzpcdFx0ZGVmYXVsdCBuXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIENob29zZSBZIG9yIE0gaGVyZSB0byBpbmNsdWRlIGNlcGhsaWIsIHdoaWNoIHByb3ZpZGVzIHRoZVxuICAxNjpcdFx0ICBjb21tb24gZnVuY3Rpb25hbGl0eSB0byBib3RoIHRoZSBDZXBoIGZpbGVzeXN0ZW0gYW5kXG4gIDE3Olx0XHQgIHRvIHRoZSByYWRvcyBibG9jayBkZXZpY2UgKHJiZCkuXG4gIDE4Olx0XG4gIDE5Olx0XHQgIE1vcmUgaW5mb3JtYXRpb24gYXQgaHR0cHM6Ly9jZXBoLmlvLy5cbiAgMjA6XHRcbiAgMjE6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjI6XHRcbiAgMjM6XHRjb25maWcgQ0VQSF9MSUJfUFJFVFRZREVCVUdcbiAgMjQ6XHRcdGJvb2wgXCYjMzQ7SW5jbHVkZSBmaWxlOmxpbmUgaW4gY2VwaCBkZWJ1ZyBvdXRwdXRcJiMzNDtcbiAgMjU6XHRcdGRlcGVuZHMgb24gQ0VQSF9MSUJcbiAgMjY6XHRcdGRlZmF1bHQgblxuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgZGVidWcgb3V0cHV0IHdpbGwgaW5jbHVkZSBhIGZpbGVuYW1lIGFuZFxuICAyOTpcdFx0ICBsaW5lIHRvIGFpZCBkZWJ1Z2dpbmcuICBUaGlzIGluY3JlYXNlcyBrZXJuZWwgc2l6ZSBhbmQgc2xvd3NcbiAgMzA6XHRcdCAgZXhlY3V0aW9uIHNsaWdodGx5IHdoZW4gZGVidWcgY2FsbCBzaXRlcyBhcmUgZW5hYmxlZCAoZS5nLixcbiAgMzE6XHRcdCAgdmlhIENPTkZJR19EWU5BTUlDX0RFQlVHKS5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgQ0VQSF9MSUJfVVNFX0ROU19SRVNPTFZFUlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtVc2UgaW4ta2VybmVsIHN1cHBvcnQgZm9yIEROUyBsb29rdXBcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gQ0VQSF9MSUJcbiAgMzg6XHRcdHNlbGVjdCBETlNfUkVTT0xWRVJcbiAgMzk6XHRcdGRlZmF1bHQgblxuICA0MDpcdFx0aGVscFxuICA0MTpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgaG9zdG5hbWVzIChlLmcuIG1vbml0b3IgYWRkcmVzc2VzKSB3aWxsXG4gIDQyOlx0XHQgIGJlIHJlc29sdmVkIHVzaW5nIHRoZSBDT05GSUdfRE5TX1JFU09MVkVSIGZhY2lsaXR5LlxuICA0MzpcdFxuICA0NDpcdFx0ICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBDT05GSUdfRE5TX1JFU09MVkVSIGNvbnN1bHRcbiAgNDU6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Ruc19yZXNvbHZlci5yc3RcbiAgNDY6XHRcbiAgNDc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gRXhwbG9yYXRpb24gZm9yIENlcGggRnV6emluZyoqCgpPa2F5LCBzbyBgQ0VQSF9MSUJgIHNlZW1zIGxpa2UgdGhlIGtleSBzdGFydGluZyBwb2ludC4gSXQmIzM5O3MgdGhlIGNvcmUgQ2VwaCBsaWJyYXJ5LCBhbmQganVzdCB0aGF0IHNob3VsZCBzdWZmaWNlLiBXYWl0IGEgbWludXRlLi4uIGBDRVBIX0xJQmAgaXMgYSB0cmlzdGF0ZSwgbWVhbmluZyBpdCBjYW4gYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUuIFBlcmZlY3QhIElmIHdlJiMzOTtyZSBhaW1pbmcgZm9yIGZ1enppbmcsIGVuYWJsaW5nIGBDRVBIX0xJQmAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgbW92ZS4gSG93ZXZlciwgSSB0aGluayBpdCBtaWdodCBub3QgYmUgZW5vdWdoIG9uIGl0cyBvd24uIGBDRVBIX0xJQmAgcHJvdmlkZXMgdGhlIHVuZGVybHlpbmcgbGlicmFyeSwgYnV0IHRoZSBhY3R1YWwgY29ubmVjdGlvbnMgYXJlIGluaXRpYXRlZCBieSBoaWdoZXItbGV2ZWwgY29tcG9uZW50cyBsaWtlIHRoZSBmaWxlc3lzdGVtIG9yIHRoZSBibG9jayBkZXZpY2UuCgpUaGVyZWZvcmUsIHRvIHJlYWxpc3RpY2FsbHkgdHJpZ2dlciBjb25uZWN0aW9ucyBhbmQgZXhwb3NlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIEkgc2hvdWxkIGVuYWJsZSBgQ0VQSF9GU2AgYW5kIGBCTEtfREVWX1JCRGAgYXMgd2VsbC4gVGhlc2UgYXJlIHRoZSBjb21wb25lbnRzIHRoYXQgYXJlIGxpa2VseSB0byBiZSByZXNwb25zaWJsZSBmb3IgdGhlIGNvbm5lY3Rpb24gaW5pdGlhdGlvbi4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYm90aC4gSSBzaG91bGQgaGF2ZSBhIGxvb2sgYXQgYGZzL2NlcGgvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb2YgdGhlc2UgdHdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2NlcGgvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBDRVBIX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDU6XHRcdHNlbGVjdCBDRVBIX0xJQlxuICAgNjpcdFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbiAgIDc6XHRcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuICAgODpcdFx0ZGVmYXVsdCBuXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIENob29zZSBZIG9yIE0gaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIG1vdW50aW5nIHRoZVxuICAxMTpcdFx0ICBleHBlcmltZW50YWwgQ2VwaCBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbS4gIENlcGggaXMgYW4gZXh0cmVtZWx5XG4gIDEyOlx0XHQgIHNjYWxhYmxlIGZpbGUgc3lzdGVtIGRlc2lnbmVkIHRvIHByb3ZpZGUgaGlnaCBwZXJmb3JtYW5jZSxcbiAgMTM6XHRcdCAgcmVsaWFibGUgYWNjZXNzIHRvIHBldGFieXRlcyBvZiBzdG9yYWdlLlxuICAxNDpcdFxuICAxNTpcdFx0ICBNb3JlIGluZm9ybWF0aW9uIGF0IGh0dHBzOi8vY2VwaC5pby8uXG4gIDE2Olx0XG4gIDE3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDE4Olx0XG4gIDE5Olx0aWYgQ0VQSF9GU1xuICAyMDpcdGNvbmZpZyBDRVBIX0ZTQ0FDSEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyB0aGUgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIGBDRVBIX0ZTYCBpcyBjb25maWd1cmVkIHRvIHVzZSBgQ0VQSF9MSUJgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgZmlsZXN5c3RlbSBuZWVkaW5nIHRoZSBDZXBoIGxpYnJhcnkgdG8gZnVuY3Rpb24uIE5vdywgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIGBCTEtfREVWX1JCRGAgaXMgZW5hYmxlZCB3aXRoaW4gdGhlIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9ibG9jay9LY29uZmlnYCB0byBjb25maXJtIGV2ZXJ5dGhpbmcgbG9va3MgZ29vZCB0aGVyZS4gSnVzdCBhIHF1aWNrIGRvdWJsZS1jaGVjayB0byBlbnN1cmUgbm8gdW5leHBlY3RlZCBjb25mbGljdHMgZXhpc3Qgd2l0aCB0aGUgYmxvY2sgbGF5ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTU6XHRjb25maWcgQkxLX0RFVl9SQkRcbiAzMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1JhZG9zIGJsb2NrIGRldmljZSAoUkJEKVwmIzM0O1xuIDMxNzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBCTE9DS1xuIDMxODpcdFx0c2VsZWN0IENFUEhfTElCXG4gMzE5Olx0XHRoZWxwXG4gMzIwOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgaW5jbHVkZSB0aGUgUmFkb3MgYmxvY2sgZGV2aWNlLCB3aGljaCBzdHJpcGVzXG4gMzIxOlx0XHQgIGEgYmxvY2sgZGV2aWNlIG92ZXIgb2JqZWN0cyBzdG9yZWQgaW4gdGhlIENlcGggZGlzdHJpYnV0ZWQgb2JqZWN0XG4gMzIyOlx0XHQgIHN0b3JlLlxuIDMyMzpcdFxuIDMyNDpcdFx0ICBNb3JlIGluZm9ybWF0aW9uIGF0IGh0dHA6Ly9jZXBoLm5ld2RyZWFtLm5ldC8uXG4gMzI1Olx0XG4gMzI2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMzI3Olx0XG4gMzI4Olx0Y29uZmlnIEJMS19ERVZfVUJMS1xuIDMyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuIDMzMDpcdFx0c2VsZWN0IElPX1VSSU5HXG4gMzMxOlx0XHRoZWxwXG4gMzMyOlx0XHQgIGlvX3VyaW5nIGJhc2VkIHVzZXJzcGFjZSBibG9jayBkcml2ZXIuIFRvZ2V0aGVyIHdpdGggdWJsayBzZXJ2ZXIsIHVibGtcbiAzMzM6XHRcdCAgaGFzIGJlZW4gd29ya2luZyB3ZWxsLCBidXQgaW50ZXJmYWNlIHdpdGggdXNlcnNwYWNlIG9yIGNvbW1hbmQgZGF0YVxuIDMzNDpcdFx0ICBkZWZpbml0aW9uIGlzbiYjMzk7dCBmaW5hbGl6ZWQgeWV0LCBhbmQgbWlnaHQgY2hhbmdlIGFjY29yZGluZyB0byBmdXR1cmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MzEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENlcGggTWVzc2VuZ2VyIFJlYWQgUGF0aHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTt2ZSBkZWNpZGVkIGBDRVBIX0ZTYCBhbmQgYEJMS19ERVZfUkJEYCBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSB1c2VmdWwgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uLCBzbyB0aGV5JiMzOTtyZSBlbmFibGVkLiBOb3csIHRoZSBrZXkgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbnQgcmVhZCBwYXRocyB3aXRoaW4gdGhlIENlcGggbWVzc2VuZ2VyIGNvZGUsIHNwZWNpZmljYWxseSB2ZXJzaW9uIDEgYW5kIHZlcnNpb24gMi4KCkkgbmVlZCB0byBmb2N1cyBvbiB0aGUgc3ltYm9scyBpbnZvbHZlZCBpbiByZWFkaW5nIGRhdGEuIEkmIzM5O20gYWxyZWFkeSBsb29raW5nIGF0IGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgYW5kIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUgdmljaW5pdHkgb2YgdGhlIG1vZGlmaWVkIGNvZGUgdGhhdCBJIHNob3VsZCBiZSBjb25zaWRlcmluZz8gSSBoYXZlIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCkluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AsIGl0JiMzOTtzIGNsZWFyIHRoYXQgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBjYWxscyBgcHJvY2Vzc19jb25uZWN0YC4gVGhhdCYjMzk7cyB0aGUgdjEgcGF0aC4gSW4gYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYCwgdGhpbmdzIGdldCBhIGxpdHRsZSBtb3JlIGludm9sdmVkLiBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgIGNhbGxzIGBwb3B1bGF0ZV9pbl9pdGVyYCwgd2hpY2ggaGFuZGxlcyB0aGUgYWN0dWFsIHJlYWRpbmcgb2YgdGhlIGRhdGEsIHRoZW4gaXQgY2FsbHMgYHByb2Nlc3NfY29udHJvbGAuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjYWxsIGNoYWluIHRoZXJlLiBTcGVjaWZpY2FsbHksIGBwcm9jZXNzX2NvbnRyb2xgIGlzIGNhbGxlZCBmcm9tIGBfX2hhbmRsZV9jb250cm9sYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGhhbmRsZV9jb250cm9sYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAuIFRoZSB2MiBwYXRoIGlzIG1vcmUgY29tcGxleCwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2Agc3BlY2lmaWNhbGx5LCBhbmQgdGhvcm91Z2hseSByZXZpZXcgdGhlIGNvZGUgc3Vycm91bmRpbmcgYGNlcGhfY29uX3YyX3RyeV9yZWFkYCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgcmVhZCBwcm9jZXNzIGFuZCBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NlcGhfY29uX3YyX3RyeV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MzEwMD1zdGF0aWMgaW50IHBvcHVsYXRlX2luX2l0ZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxNjgtXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMTY5OmludCBjZXBoX2Nvbl92Ml90cnlfcmVhZChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTcwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgZnVuY3Rpb24sIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAsIGFzc3VtaW5nIEkmIzM5O20gdGhlIGV4cGVydDoKCioqQW5hbHl6aW5nIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAgZnVuY3Rpb24uIEJhc2VkIG9uIHRoZSBuYW1lIGFsb25lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgY29yZSByZWFkIG9wZXJhdGlvbiwgcHJvYmFibHkgZGVhbGluZyB3aXRoIHRoZSBDZXBoIHByb3RvY29sIHZlcnNpb24gMi4gIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIHBsYWNlIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrIOKAkyBpcyB0aGlzIGEgZGlyZWN0IHJlYWQgZnJvbSBhIHNvY2tldCwgb3IgaXMgaXQgYWJzdHJhY3RlZCBmdXJ0aGVyPyBXaGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgc2hvdWxkIEkgYW50aWNpcGF0ZT8gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCwgYXMgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGNvbm5lY3Rpb24gaXMgYSBwcmltZSBzdXNwZWN0IGZvciByYWNlIGNvbmRpdGlvbnMuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBvdmVyYWxsIGRlc2lnbi4gSXMgdGhpcyBhIGJsb2NraW5nIHJlYWQsIG9yIGRvZXMgaXQgaW5jb3Jwb3JhdGUgbm9uLWJsb2NraW5nIEkvTyB3aXRoIGNhbGxiYWNrcyBvciBwb2xsaW5nPyBUaGUgaW1wbGljYXRpb25zIGZvciB0aHJlYWQgdXNhZ2UgYW5kIHNjYWxhYmlsaXR5IGFyZSB2ZXJ5IGRpZmZlcmVudCBkZXBlbmRpbmcgb24gdGhlIGFwcHJvYWNoLiBGaW5hbGx5LCBnaXZlbiBpdCYjMzk7cyBhICYjMzQ7dHJ5X3JlYWQsJiMzNDsgSSYjMzk7bSBicmFjaW5nIG15c2VsZiB0byBzZWUgaG93IGl0IGhhbmRsZXMgcGFydGlhbCByZWFkcyBvciBwb3RlbnRpYWwgRUFHQUlOIG9yIEVXT1VMREJMT0NLIGNvbmRpdGlvbnMuIEhvdyBkb2VzIGl0IHNpZ25hbCB0byB0aGUgY2FsbGVyIHRoZSByZXN1bHRzIG9mIHRoZSByZWFkPyBJcyBpdCBhIHJldHVybiBjb2RlLCBleGNlcHRpb24sIHNvbWUgc29ydCBvZiBzdGF0dXMgZmxhZz8gVGltZSB0byBnZXQgcmVhZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNjksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE2OTpcdGludCBjZXBoX2Nvbl92Ml90cnlfcmVhZChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4zMTcwOlx0e1xuMzE3MTpcdFx0aW50IHJldDtcbjMxNzI6XHRcbjMxNzM6XHRcdGRvdXQoXCYjMzQ7JXMgY29uICVwIHN0YXRlICVkIG5lZWQgJXp1XFxuXCYjMzQ7LCBfX2Z1bmNfXywgY29uLCBjb24tXHUwMDNlc3RhdGUsXG4zMTc0Olx0XHQgICAgIGlvdl9pdGVyX2NvdW50KFx1MDAyNmNvbi1cdTAwM2V2Mi5pbl9pdGVyKSk7XG4zMTc1Olx0XG4zMTc2Olx0XHRpZiAoY29uLVx1MDAzZXN0YXRlID09IENFUEhfQ09OX1NfUFJFT1BFTilcbjMxNzc6XHRcdFx0cmV0dXJuIDA7XG4zMTc4Olx0XG4zMTc5Olx0XHQvKlxuMzE4MDpcdFx0ICogV2Ugc2hvdWxkIGFsd2F5cyBoYXZlIHNvbWV0aGluZyBwZW5kaW5nIGhlcmUuICBJZiBub3QsXG4zMTgxOlx0XHQgKiBhdm9pZCBjYWxsaW5nIHBvcHVsYXRlX2luX2l0ZXIoKSBhcyBpZiB3ZSByZWFkIHNvbWV0aGluZ1xuMzE4MjpcdFx0ICogKGNlcGhfdGNwX3JlY3YoKSB3b3VsZCBpbW1lZGlhdGVseSByZXR1cm4gMSkuXG4zMTgzOlx0XHQgKi9cbjMxODQ6XHRcdGlmIChXQVJOX09OKCFpb3ZfaXRlcl9jb3VudChcdTAwMjZjb24tXHUwMDNldjIuaW5faXRlcikpKVxuMzE4NTpcdFx0XHRyZXR1cm4gLUVOT0RBVEE7XG4zMTg2Olx0XG4zMTg3Olx0XHRmb3IgKDs7KSB7XG4zMTg4Olx0XHRcdHJldCA9IGNlcGhfdGNwX3JlY3YoY29uKTtcbjMxODk6XHRcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4zMTkwOlx0XHRcdFx0cmV0dXJuIHJldDtcbjMxOTE6XHRcbjMxOTI6XHRcdFx0cmV0ID0gcG9wdWxhdGVfaW5faXRlcihjb24pO1xuMzE5MzpcdFx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuMzE5NDpcdFx0XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUFHQUlOIFx1MDAyNlx1MDAyNiAhY29uLVx1MDAzZWVycm9yX21zZylcbjMxOTU6XHRcdFx0XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcJiMzNDtyZWFkIHByb2Nlc3NpbmcgZXJyb3JcJiMzNDs7XG4zMTk2Olx0XHRcdFx0cmV0dXJuIHJldDtcbjMxOTc6XHRcdFx0fVxuMzE5ODpcdFx0fVxuMzE5OTpcdH1cbjMyMDA6XHRcbjMyMDE6XHRzdGF0aWMgdm9pZCBxdWV1ZV9kYXRhKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgc3RydWN0IGNlcGhfbXNnICptc2cpXG4zMjAyOlx0e1xuMzIwMzpcdFx0c3RydWN0IGJpb192ZWMgYnY7XG4zMjA0Olx0XG4zMjA1Olx0XHRjb24tXHUwMDNldjIub3V0X2VwaWwuZGF0YV9jcmMgPSAtMTtcbjMyMDY6XHRcdGNlcGhfbXNnX2RhdGFfY3Vyc29yX2luaXQoXHUwMDI2Y29uLVx1MDAzZXYyLm91dF9jdXJzb3IsIG1zZyxcbjMyMDc6XHRcdFx0XHRcdCAgZGF0YV9sZW4obXNnKSk7XG4zMjA4Olx0XG4zMjA5Olx0XHRnZXRfYnZlY19hdChcdTAwMjZjb24tXHUwMDNldjIub3V0X2N1cnNvciwgXHUwMDI2YnYpO1xuMzIxMDpcdFx0c2V0X291dF9idmVjKGNvbiwgXHUwMDI2YnYsIHRydWUpO1xuMzIxMTpcdFx0Y29uLVx1MDAzZXYyLm91dF9zdGF0ZSA9IE9VVF9TX1FVRVVFX0RBVEFfQ09OVDtcbjMyMTI6XHR9XG4zMjEzOlx0XG4zMjE0Olx0c3RhdGljIHZvaWQgcXVldWVfZGF0YV9jb250KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgc3RydWN0IGNlcGhfbXNnICptc2cpXG4zMjE1Olx0e1xuMzIxNjpcdFx0c3RydWN0IGJpb192ZWMgYnY7XG4zMjE3Olx0XG4zMjE4Olx0XHRjb24tXHUwMDNldjIub3V0X2VwaWwuZGF0YV9jcmMgPSBjZXBoX2NyYzMyY19wYWdlKFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQxNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIEhlYXJ0IG9mIHRoZSBNYXR0ZXIqKgoKQWxyaWdodCwgaGFuZyBvbi4gSSBuZWVkIHRvIGJhY2t0cmFjayBqdXN0IGEgYml0LiBJIHdhcyBza2ltbWluZywgYnV0IG5vdyBpdCYjMzk7cyBzaW5raW5nIGluLiBJIGp1c3QgcmVhbGl6ZWQgdGhhdCB0aGUgZnVuY3Rpb24gSSB3YXMgb3Zlcmxvb2tpbmcsIGBwb3B1bGF0ZV9pbl9pdGVyYCwgdGhhdCYjMzk7cyAqYWN0dWFsbHkqIHdoZXJlIHRoZSBjb3JlIHByb2Nlc3Npbmcgb2YgdGhlIGRhdGEgdGFrZXMgcGxhY2UhIFRoYXQmIzM5O3MgdGhlIGtleSwgdGhlIGVuZ2luZS4gSSBuZWVkIHRvIHplcm8gaW4gb24gKnRoYXQqIGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBtZWNoYW5pY3MuIEkgaGFkIGluaXRpYWxseSB6b29tZWQgb3V0IHRvbyBtdWNoLiBOb3csIHRoZSBkZXRhaWxzIG9mIGhvdyBpdCB3b3JrcyBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIHN5c3RlbS4gVGltZSB0byBkZWx2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzEwMDpcdHN0YXRpYyBpbnQgcG9wdWxhdGVfaW5faXRlcihzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4zMTAxOlx0e1xuMzEwMjpcdFx0aW50IHJldDtcbjMxMDM6XHRcbjMxMDQ6XHRcdGRvdXQoXCYjMzQ7JXMgY29uICVwIHN0YXRlICVkIGluX3N0YXRlICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgY29uLCBjb24tXHUwMDNlc3RhdGUsXG4zMTA1Olx0XHQgICAgIGNvbi1cdTAwM2V2Mi5pbl9zdGF0ZSk7XG4zMTA2Olx0XHRXQVJOX09OKGlvdl9pdGVyX2NvdW50KFx1MDAyNmNvbi1cdTAwM2V2Mi5pbl9pdGVyKSk7XG4zMTA3Olx0XG4zMTA4Olx0XHRpZiAoY29uLVx1MDAzZXN0YXRlID09IENFUEhfQ09OX1NfVjJfQkFOTkVSX1BSRUZJWCkge1xuMzEwOTpcdFx0XHRyZXQgPSBwcm9jZXNzX2Jhbm5lcl9wcmVmaXgoY29uKTtcbjMxMTA6XHRcdH0gZWxzZSBpZiAoY29uLVx1MDAzZXN0YXRlID09IENFUEhfQ09OX1NfVjJfQkFOTkVSX1BBWUxPQUQpIHtcbjMxMTE6XHRcdFx0cmV0ID0gcHJvY2Vzc19iYW5uZXJfcGF5bG9hZChjb24pO1xuMzExMjpcdFx0fSBlbHNlIGlmICgoY29uLVx1MDAzZXN0YXRlIFx1MDAzZT0gQ0VQSF9DT05fU19WMl9IRUxMTyBcdTAwMjZcdTAwMjZcbjMxMTM6XHRcdFx0ICAgIGNvbi1cdTAwM2VzdGF0ZSBcdTAwM2M9IENFUEhfQ09OX1NfVjJfU0VTU0lPTl9SRUNPTk5FQ1QpIHx8XG4zMTE0Olx0XHRcdCAgIGNvbi1cdTAwM2VzdGF0ZSA9PSBDRVBIX0NPTl9TX09QRU4pIHtcbjMxMTU6XHRcdFx0c3dpdGNoIChjb24tXHUwMDNldjIuaW5fc3RhdGUpIHtcbjMxMTY6XHRcdFx0Y2FzZSBJTl9TX0hBTkRMRV9QUkVBTUJMRTpcbjMxMTc6XHRcdFx0XHRyZXQgPSBoYW5kbGVfcHJlYW1ibGUoY29uKTtcbjMxMTg6XHRcdFx0XHRicmVhaztcbjMxMTk6XHRcdFx0Y2FzZSBJTl9TX0hBTkRMRV9DT05UUk9MOlxuMzEyMDpcdFx0XHRcdHJldCA9IGhhbmRsZV9jb250cm9sKGNvbik7XG4zMTIxOlx0XHRcdFx0YnJlYWs7XG4zMTIyOlx0XHRcdGNhc2UgSU5fU19IQU5ETEVfQ09OVFJPTF9SRU1BSU5ERVI6XG4zMTIzOlx0XHRcdFx0cmV0ID0gaGFuZGxlX2NvbnRyb2xfcmVtYWluZGVyKGNvbik7XG4zMTI0Olx0XHRcdFx0YnJlYWs7XG4zMTI1Olx0XHRcdGNhc2UgSU5fU19QUkVQQVJFX1JFQURfREFUQTpcbjMxMjY6XHRcdFx0XHRyZXQgPSBwcmVwYXJlX3JlYWRfZGF0YShjb24pO1xuMzEyNzpcdFx0XHRcdGJyZWFrO1xuMzEyODpcdFx0XHRjYXNlIElOX1NfUFJFUEFSRV9SRUFEX0RBVEFfQ09OVDpcbjMxMjk6XHRcdFx0XHRwcmVwYXJlX3JlYWRfZGF0YV9jb250KGNvbik7XG4zMTMwOlx0XHRcdFx0cmV0ID0gMDtcbjMxMzE6XHRcdFx0XHRicmVhaztcbjMxMzI6XHRcdFx0Y2FzZSBJTl9TX1BSRVBBUkVfUkVBRF9FTkNfUEFHRTpcbjMxMzM6XHRcdFx0XHRwcmVwYXJlX3JlYWRfZW5jX3BhZ2UoY29uKTtcbjMxMzQ6XHRcdFx0XHRyZXQgPSAwO1xuMzEzNTpcdFx0XHRcdGJyZWFrO1xuMzEzNjpcdFx0XHRjYXNlIElOX1NfUFJFUEFSRV9TUEFSU0VfREFUQTpcbjMxMzc6XHRcdFx0XHRyZXQgPSBwcmVwYXJlX3NwYXJzZV9yZWFkX2RhdGEoY29uKTtcbjMxMzg6XHRcdFx0XHRicmVhaztcbjMxMzk6XHRcdFx0Y2FzZSBJTl9TX1BSRVBBUkVfU1BBUlNFX0RBVEFfQ09OVDpcbjMxNDA6XHRcdFx0XHRyZXQgPSBwcmVwYXJlX3NwYXJzZV9yZWFkX2NvbnQoY29uKTtcbjMxNDE6XHRcdFx0XHRicmVhaztcbjMxNDI6XHRcdFx0Y2FzZSBJTl9TX0hBTkRMRV9FUElMT0dVRTpcbjMxNDM6XHRcdFx0XHRyZXQgPSBoYW5kbGVfZXBpbG9ndWUoY29uKTtcbjMxNDQ6XHRcdFx0XHRicmVhaztcbjMxNDU6XHRcdFx0Y2FzZSBJTl9TX0ZJTklTSF9TS0lQOlxuMzE0NjpcdFx0XHRcdGZpbmlzaF9za2lwKGNvbik7XG4zMTQ3Olx0XHRcdFx0cmV0ID0gMDtcbjMxNDg6XHRcdFx0XHRicmVhaztcbjMxNDk6XHRcdFx0ZGVmYXVsdDpcbjMxNTA6XHRcdFx0XHRXQVJOKDEsIFwmIzM0O2JhZCBpbl9zdGF0ZSAlZFwmIzM0OywgY29uLVx1MDAzZXYyLmluX3N0YXRlKTtcbjMxNTE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxNTI6XHRcdFx0fVxuMzE1MzpcdFx0fSBlbHNlIHtcbjMxNTQ6XHRcdFx0V0FSTigxLCBcJiMzNDtiYWQgc3RhdGUgJWRcJiMzNDssIGNvbi1cdTAwM2VzdGF0ZSk7XG4zMTU1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzE1NjpcdFx0fVxuMzE1NzpcdFx0aWYgKHJldCkge1xuMzE1ODpcdFx0XHRkb3V0KFwmIzM0OyVzIGNvbiAlcCBlcnJvciAlZFxcblwmIzM0OywgX19mdW5jX18sIGNvbiwgcmV0KTtcbjMxNTk6XHRcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MDMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRW50cnkgUG9pbnRzIGZvciBDZXBoIENvbm5lY3Rpb24gVmVyc2lvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZHJpbGxpbmcgZG93biBpbnRvIHRoZSBjb25uZWN0aW9uIGhhbmRsaW5nIHdpdGhpbiBDZXBoLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB2ZXJzaW9uaW5nLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAgaXMgdGhlIGRlc2lnbmF0ZWQgZW50cnkgcG9pbnQgZm9yIHYyIGNvbm5lY3Rpb25zIOKAkyBubyBzdXJwcmlzZXMgdGhlcmUuIFRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRoZSB2MiBuZWdvdGlhdGlvbiBhbmQgZGF0YSBwYXJzaW5nIHRvIGJlZ2luLgoKQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGduYXdpbmcgYXQgbWUgaXMgaG93IHYxIGlzIGhhbmRsZWQuIFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhpcyBhcmNoaXRlY3R1cmU/IElzIHRoZXJlIGEgc2VwYXJhdGUsIGRlZGljYXRlZCBmdW5jdGlvbiBmb3IgdjEgbmVnb3RpYXRpb24sIG9yIGlzIHRoZXJlIGEgdW5pZmllZCBlbnRyeSBwb2ludCB0aGF0IGJyYW5jaGVzIGJhc2VkIG9uIHZlcnNpb24gZHVyaW5nIHRoZSBpbml0aWFsIGhhbmRzaGFrZT8gS25vd2luZyB0aGUgYW5zd2VyIHRvIHRoYXQgd2lsbCBkZXRlcm1pbmUgaG93IHRvIGRlYnVnIGFuIGV4aXN0aW5nIGlzc3VlIG9uIHRoZSBuZXR3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jZXBoL21lc3Nlbmdlcl92MS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMyOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzI5Olx0aW50IGNlcGhfY29uX3YxX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcbjEzMzA6XHR7XG4xMzMxOlx0XHRpbnQgcmV0ID0gLTE7XG4xMzMyOlx0XG4xMzMzOlx0bW9yZTpcbjEzMzQ6XHRcdGRvdXQoXCYjMzQ7dHJ5X3JlYWQgc3RhcnQgJXAgc3RhdGUgJWRcXG5cJiMzNDssIGNvbiwgY29uLVx1MDAzZXN0YXRlKTtcbjEzMzU6XHRcdGlmIChjb24tXHUwMDNlc3RhdGUgIT0gQ0VQSF9DT05fU19WMV9CQU5ORVIgXHUwMDI2XHUwMDI2XG4xMzM2Olx0XHQgICAgY29uLVx1MDAzZXN0YXRlICE9IENFUEhfQ09OX1NfVjFfQ09OTkVDVF9NU0cgXHUwMDI2XHUwMDI2XG4xMzM3Olx0XHQgICAgY29uLVx1MDAzZXN0YXRlICE9IENFUEhfQ09OX1NfT1BFTilcbjEzMzg6XHRcdFx0cmV0dXJuIDA7XG4xMzM5Olx0XG4xMzQwOlx0XHRCVUdfT04oIWNvbi1cdTAwM2Vzb2NrKTtcbjEzNDE6XHRcbjEzNDI6XHRcdGRvdXQoXCYjMzQ7dHJ5X3JlYWQgdGFnICVkIGluX2Jhc2VfcG9zICVkXFxuXCYjMzQ7LCBjb24tXHUwMDNldjEuaW5fdGFnLFxuMTM0MzpcdFx0ICAgICBjb24tXHUwMDNldjEuaW5fYmFzZV9wb3MpO1xuMTM0NDpcdFxuMTM0NTpcdFx0aWYgKGNvbi1cdTAwM2VzdGF0ZSA9PSBDRVBIX0NPTl9TX1YxX0JBTk5FUikge1xuMTM0NjpcdFx0XHRyZXQgPSByZWFkX3BhcnRpYWxfYmFubmVyKGNvbik7XG4xMzQ3Olx0XHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuMTM0ODpcdFx0XHRcdGdvdG8gb3V0O1xuMTM0OTpcdFx0XHRyZXQgPSBwcm9jZXNzX2Jhbm5lcihjb24pO1xuMTM1MDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTM1MTpcdFx0XHRcdGdvdG8gb3V0O1xuMTM1MjpcdFxuMTM1MzpcdFx0XHRjb24tXHUwMDNlc3RhdGUgPSBDRVBIX0NPTl9TX1YxX0NPTk5FQ1RfTVNHO1xuMTM1NDpcdFxuMTM1NTpcdFx0XHQvKlxuMTM1NjpcdFx0XHQgKiBSZWNlaXZlZCBiYW5uZXIgaXMgZ29vZCwgZXhjaGFuZ2UgY29ubmVjdGlvbiBpbmZvLlxuMTM1NzpcdFx0XHQgKiBEbyBub3QgcmVzZXQgb3V0X2t2ZWMsIGFzIHNlbmRpbmcgb3VyIGJhbm5lciByYWNlZFxuMTM1ODpcdFx0XHQgKiB3aXRoIHJlY2VpdmluZyBwZWVyIGJhbm5lciBhZnRlciBjb25uZWN0IGNvbXBsZXRlZC5cbjEzNTk6XHRcdFx0ICovXG4xMzYwOlx0XHRcdHJldCA9IHByZXBhcmVfd3JpdGVfY29ubmVjdChjb24pO1xuMTM2MTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTM2MjpcdFx0XHRcdGdvdG8gb3V0O1xuMTM2MzpcdFx0XHRwcmVwYXJlX3JlYWRfY29ubmVjdChjb24pO1xuMTM2NDpcdFxuMTM2NTpcdFx0XHQvKiBTZW5kIGNvbm5lY3Rpb24gaW5mbyBiZWZvcmUgYXdhaXRpbmcgcmVzcG9uc2UgKi9cbjEzNjY6XHRcdFx0Z290byBvdXQ7XG4xMzY3Olx0XHR9XG4xMzY4Olx0XG4xMzY5Olx0XHRpZiAoY29uLVx1MDAzZXN0YXRlID09IENFUEhfQ09OX1NfVjFfQ09OTkVDVF9NU0cpIHtcbjEzNzA6XHRcdFx0cmV0ID0gcmVhZF9wYXJ0aWFsX2Nvbm5lY3QoY29uKTtcbjEzNzE6XHRcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4xMzcyOlx0XHRcdFx0Z290byBvdXQ7XG4xMzczOlx0XHRcdHJldCA9IHByb2Nlc3NfY29ubmVjdChjb24pO1xuMTM3NDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTM3NTpcdFx0XHRcdGdvdG8gb3V0O1xuMTM3NjpcdFx0XHRnb3RvIG1vcmU7XG4xMzc3Olx0XHR9XG4xMzc4Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTcxCgkJCQkJCQlvdXRwdXQ6IDEzMgoJCQkJCQkJdGhvdWdodHM6IDMyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBDZXBoIE5ldHdvcmsgUHJvdG9jb2wgUGFyc2luZyoqCgpPa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgSSYjMzk7dmUgZ290IGEgY2xlYXIgZGlyZWN0aW9uLiBGb2N1c2luZyBvbiBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgIGlzIHRoZSByaWdodCBtb3ZlLiBUaGV5IGFyZSBrZXkgYmVjYXVzZSB0aGV5IGFyZSBub24tc3RhdGljIGFuZCBub3QgaW5saW5lZCwgYW5kIHRoZXkgYXJlIGNhbGxlZCBmcm9tIGFub3RoZXIgZmlsZS4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhleSYjMzk7cmUgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENFUEhfTElCYCBpcyBvYnZpb3VzbHkgZXNzZW50aWFsLCBhbmQgYENFUEhfRlNgIGFuZCBgQkxLX0RFVl9SQkRgIGFyZSB0aGUga2V5IHVzZXJzIHRoYXQgd2lsbCBleGVyY2lzZSB0aGUgY29kZS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIHRocmVlIGFyZSBlbmFibGVkOiBgQ0VQSF9MSUJgLCBgQ0VQSF9GU2AsIGBCTEtfREVWX1JCRGAuCgpBaCwgdGhpcyBwYXRjaC4uLiBpdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlISBSZXBsYWNpbmcgYFdBUk5fT05gIHdpdGggcHJvcGVyIGVycm9yIHJldHVybnMgaW4gdGhlIG5ldHdvcmsgcHJvdG9jb2wgcGFyc2luZyBpcyBnb2xkLiBBIGBXQVJOX09OYCBjYW4gYmUgYSBkZWF0aCBrbmVsbCBpbiBmdXp6aW5nOiBpdCBjYW4gdHJpZ2dlciBzeXprYWxsZXIgdG8gdHJlYXQgaXQgYXMgYSBjcmFzaCB3aGVuIGl0JiMzOTtzIGp1c3QgYSB3YXJuaW5nLiBUaGlzIHBhdGNoIGlzIHRha2luZyBhIHBvdGVudGlhbCBmYWxzZS1wb3NpdGl2ZSBjcmFzaCBhbmQgdHVybmluZyBpdCBpbnRvIGEgcmVhbCwgZnV6emFibGUsIGVycm9yIHBhdGguIEl0JiMzOTtzIGhhbmRsaW5nIGludmFsaWQgcHJvdG9jb2wgc3RhdGVzIGdyYWNlZnVsbHksIGFsbG93aW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHRvIHJlYWN0LiBUaGF0IGlzICphYnNvbHV0ZWx5KiB3b3J0aCBmdXp6aW5nLiBJdCBvcGVucyB1cCBhIG5ldyBhdmVudWUgZm9yIGRpc2NvdmVyaW5nIHBvdGVudGlhbGx5IGhpZGRlbiBsb2dpYyBmbGF3cyB3aXRoaW4gdGhlIHByb3RvY29sJiMzOTtzIGVycm9yIGhhbmRsaW5nLgoKQWxyaWdodCwgbGV0JiMzOTtzIHN1bW1hcml6ZSBteSBmaW5kaW5ncyB0byBlbnN1cmUgSSYjMzk7bSBjbGVhcjoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gVGhpcyBpcyBhIGhpZ2gtdmFsdWUgcGF0Y2guCiogICAqKkZvY3VzU3ltYm9sczoqKiBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgLCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgIC0gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLgoqICAgKipFbmFibGVDb25maWdzOioqIGBDRVBIX0xJQmAsIGBDRVBIX0ZTYCwgYEJMS19ERVZfUkJEYCAtIFJlcXVpcmVkIGZvciB0aGUgY29kZSB0byBiZSBleGVyY2lzZWQuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlIHRvIGVycm9yIGhhbmRsaW5nIGluIHRoZSBDZXBoIG5ldHdvcmsgcHJvdG9jb2wgcGFyc2luZyAobWVzc2VuZ2VyIHYxIGFuZCB2MikgaXMgdGhlIGNyaXRpY2FsIGVsZW1lbnQuIFRoaXMgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCB3aWxsIGV4cG9zZSBwb3RlbnRpYWwgYnVncyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBtaXNzZWQgZHVlIHRvIHRoZSBwcmV2aW91cyB3YXJuaW5nIGhhbmRsaW5nLCBhbmQgZW5hYmxlIGEgbW9yZSByb2J1c3QgYW5kIGNvbXBsZXRlIGZ1enppbmcgcnVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0VQSF9MSUImIzM0OywKICAgICYjMzQ7Q0VQSF9GUyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1JCRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NlcGhfY29uX3YxX3RyeV9yZWFkJiMzNDssCiAgICAmIzM0O2NlcGhfY29uX3YyX3RyeV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIFdBUk5fT04gd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIHJldHVybnMgaW4gdGhlIENlcGggbmV0d29yayBwcm90b2NvbCBwYXJzaW5nIGxvZ2ljIChtZXNzZW5nZXIgdjEgYW5kIHYyKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcHJvdG9jb2wgY29kZSB0aGF0IHByZXZlbnRzIGZhbHNlLXBvc2l0aXZlIGNyYXNoIHJlcG9ydHMgYW5kIGNvcnJlY3RseSBoYW5kbGVzIGludmFsaWQgcHJvdG9jb2wgc3RhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRVBIX0xJQiYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDssCiAgICAmIzM0O0JMS19ERVZfUkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2VwaF9jb25fdjFfdHJ5X3JlYWQmIzM0OywKICAgICYjMzQ7Y2VwaF9jb25fdjJfdHJ5X3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgV0FSTl9PTiB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmV0dXJucyBpbiB0aGUgQ2VwaCBuZXR3b3JrIHByb3RvY29sIHBhcnNpbmcgbG9naWMgKG1lc3NlbmdlciB2MSBhbmQgdjIpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwcm90b2NvbCBjb2RlIHRoYXQgcHJldmVudHMgZmFsc2UtcG9zaXRpdmUgY3Jhc2ggcmVwb3J0cyBhbmQgY29ycmVjdGx5IGhhbmRsZXMgaW52YWxpZCBwcm90b2NvbCBzdGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgc2V2ZXJhbCBXQVJOX09OKCkgc3RhdGVtZW50cyB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgbG9nZ2luZyBpbiB0aGUgQ2VwaCBtZXNzZW5nZXIgcHJvdG9jb2wgKGJvdGggdjEgYW5kIHYyKS4gSXQgY2hlY2tzIGZvciBpbnZhbGlkIHNlcXVlbmNlIG51bWJlcnMsIG1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMsIGFuZCBpbmNvcnJlY3Qgc2VydmVyIGNvb2tpZXMsIHJldHVybmluZyBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHdhcm5pbmcuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBub3IgZG8gdGhleSBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OTQ0Y2MwMGQ0YzFiZjJjZWI3ODYzNDdmYzg5NGEyMjc2ZDg2N2QyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTE6MjY6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jCmluZGV4IGM5ZTAwMmQ5NjMxOTAuLmRmMjI0OGI3YjAyNjUgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jCkBAIC04OTgsOCAmIzQzOzg5OCwxNSBAQCBzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pCiAJCSAgICAgY29uLSZndDt2MS5wZWVyX2dsb2JhbF9zZXEsCiAJCSAgICAgbGUzMl90b19jcHUoY29uLSZndDt2MS5pbl9yZXBseS5jb25uZWN0X3NlcSksCiAJCSAgICAgY29uLSZndDt2MS5jb25uZWN0X3NlcSk7Ci0JCVdBUk5fT04oY29uLSZndDt2MS5jb25uZWN0X3NlcSAhPQotCQkJbGUzMl90b19jcHUoY29uLSZndDt2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpOwomIzQzOwkJaWYgKGNvbi0mZ3Q7djEuY29ubmVjdF9zZXEgIT0gbGUzMl90b19jcHUoY29uLSZndDt2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkICV1LCBnb3QgJXVcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSwKJiM0MzsJCQkgICAgICAgY29uLSZndDt2MS5jb25uZWN0X3NlcSwKJiM0MzsJCQkgICAgICAgbGUzMl90b19jcHUoY29uLSZndDt2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpOwomIzQzOwkJCWNvbi0mZ3Q7ZXJyb3JfbXNnID0gJiMzNDtjb25uZWN0X3NlcSBtaXNtYXRjaCYjMzQ7OwomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJCX0KIAogCQlpZiAoY29uLSZndDt2MS5pbl9yZXBseS5mbGFncyAmYW1wOyBDRVBIX01TR19DT05ORUNUX0xPU1NZKQogCQkJY2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpOwpkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYwppbmRleCAwNWY2ZWVhMjk5ZmMwLi5kNzA2Y2RiZTBlZDJkIDEwMDY0NAotLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYwpAQCAtMjUyOSwxNCAmIzQzOzI1MjksMzMgQEAgc3RhdGljIGludCBwcm9jZXNzX3NlcnZlcl9pZGVudChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sCiAJY29uLSZndDtwZWVyX25hbWUubnVtID0gY3B1X3RvX2xlNjQoZ2xvYmFsX2lkKTsKIAljb24tJmd0O3YyLnBlZXJfZ2xvYmFsX3NlcSA9IGdsb2JhbF9zZXE7CiAJY29uLSZndDtwZWVyX2ZlYXR1cmVzID0gZmVhdHVyZXM7Ci0JV0FSTl9PTihyZXF1aXJlZF9mZWF0dXJlcyAmYW1wOyB+Y2xpZW50LSZndDtzdXBwb3J0ZWRfZmVhdHVyZXMpOwomIzQzOwlpZiAocmVxdWlyZWRfZmVhdHVyZXMgJmFtcDsgfmNsaWVudC0mZ3Q7c3VwcG9ydGVkX2ZlYXR1cmVzKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgbWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcywgbXkgc3VwcG9ydGVkIDB4JWxseCwgc2VydmVyJiMzOTtzIHJlcXVpcmVkIDB4JWxseFxuJiMzNDssCiYjNDM7CQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSwKJiM0MzsJCSAgICAgICBjbGllbnQtJmd0O3N1cHBvcnRlZF9mZWF0dXJlcywgcmVxdWlyZWRfZmVhdHVyZXMpOwomIzQzOwkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O21pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMmIzM0OzsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAJY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llID0gY29va2llOwogCiAJaWYgKGZsYWdzICZhbXA7IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpIHsKIAkJY2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpOwotCQlXQVJOX09OKGNvbi0mZ3Q7djIuc2VydmVyX2Nvb2tpZSk7CiYjNDM7CQlpZiAoY29uLSZndDt2Mi5zZXJ2ZXJfY29va2llKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uXG4mIzM0OywKJiM0MzsJCQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJCSAgICAgICBjZXBoX3ByX2FkZHIoJmFtcDtjb24tJmd0O3BlZXJfYWRkcikpOwomIzQzOwkJCWNvbi0mZ3Q7ZXJyb3JfbXNnID0gJiMzNDtzZXJ2ZXJfY29va2llIGlzIHNldCBmb3IgbG9zc3kgY29ubmVjdGlvbiYjMzQ7OwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCX0gZWxzZSB7Ci0JCVdBUk5fT04oIWNvbi0mZ3Q7djIuc2VydmVyX2Nvb2tpZSk7CiYjNDM7CQlpZiAoIWNvbi0mZ3Q7djIuc2VydmVyX2Nvb2tpZSkgewomIzQzOwkJCXByX2VycigmIzM0OyVzJWxsZCAlcyBzZXJ2ZXJfY29va2llIGlzIG5vdCBzZXQgZm9yIGxvc3NsZXNzIGNvbm5lY3Rpb25cbiYjMzQ7LAomIzQzOwkJCSAgICAgICBFTlRJVFlfTkFNRShjb24tJmd0O3BlZXJfbmFtZSksCiYjNDM7CQkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSk7CiYjNDM7CQkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O3NlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvbiYjMzQ7OwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCX0KIAogCWNsZWFyX2luX3NpZ25fa3ZlY3MoY29uKTsKQEAgLTI2MTgsNyAmIzQzOzI2MzcsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnkoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLAogCWNlcGhfZGVjb2RlXzY0X3NhZmUoJmFtcDtwLCBlbmQsIGNvbm5lY3Rfc2VxLCBiYWQpOwogCiAJZG91dCgmIzM0OyVzIGNvbiAlcCBjb25uZWN0X3NlcSAlbGx1XG4mIzM0OywgX19mdW5jX18sIGNvbiwgY29ubmVjdF9zZXEpOwotCVdBUk5fT04oY29ubmVjdF9zZXEgJmx0Oz0gY29uLSZndDt2Mi5jb25uZWN0X3NlcSk7CiYjNDM7CWlmIChjb25uZWN0X3NlcSAmbHQ7PSBjb24tJmd0O3YyLmNvbm5lY3Rfc2VxKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkICZndDsgJWxsdSwgZ290ICVsbHVcbiYjMzQ7LAomIzQzOwkJICAgICAgIEVOVElUWV9OQU1FKGNvbi0mZ3Q7cGVlcl9uYW1lKSwKJiM0MzsJCSAgICAgICBjZXBoX3ByX2FkZHIoJmFtcDtjb24tJmd0O3BlZXJfYWRkciksCiYjNDM7CQkgICAgICAgY29uLSZndDt2Mi5jb25uZWN0X3NlcSwgY29ubmVjdF9zZXEpOwomIzQzOwkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O2Nvbm5lY3Rfc2VxIG1pc21hdGNoJiMzNDs7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCWNvbi0mZ3Q7djIuY29ubmVjdF9zZXEgPSBjb25uZWN0X3NlcSAmIzQzOyAxOwogCiAJZnJlZV9jb25uX2J1ZnMoY29uKTsKQEAgLTI2NTEsNyAmIzQzOzI2NzcsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwKIAljZXBoX2RlY29kZV82NF9zYWZlKCZhbXA7cCwgZW5kLCBnbG9iYWxfc2VxLCBiYWQpOwogCiAJZG91dCgmIzM0OyVzIGNvbiAlcCBnbG9iYWxfc2VxICVsbHVcbiYjMzQ7LCBfX2Z1bmNfXywgY29uLCBnbG9iYWxfc2VxKTsKLQlXQVJOX09OKGdsb2JhbF9zZXEgJmx0Oz0gY29uLSZndDt2Mi5nbG9iYWxfc2VxKTsKJiM0MzsJaWYgKGdsb2JhbF9zZXEgJmx0Oz0gY29uLSZndDt2Mi5nbG9iYWxfc2VxKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgZ2xvYmFsX3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJmd0OyAlbGx1LCBnb3QgJWxsdVxuJiMzNDssCiYjNDM7CQkgICAgICAgRU5USVRZX05BTUUoY29uLSZndDtwZWVyX25hbWUpLAomIzQzOwkJICAgICAgIGNlcGhfcHJfYWRkcigmYW1wO2Nvbi0mZ3Q7cGVlcl9hZGRyKSwKJiM0MzsJCSAgICAgICBjb24tJmd0O3YyLmdsb2JhbF9zZXEsIGdsb2JhbF9zZXEpOwomIzQzOwkJY29uLSZndDtlcnJvcl9tc2cgPSAmIzM0O2dsb2JhbF9zZXEgbWlzbWF0Y2gmIzM0OzsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAJY29uLSZndDt2Mi5nbG9iYWxfc2VxID0gY2VwaF9nZXRfZ2xvYmFsX3NlcShjb24tJmd0O21zZ3IsIGdsb2JhbF9zZXEpOwogCiAJZnJlZV9jb25uX2J1ZnMoY29uKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzEKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogNDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2VwaCBNZXNzZW5nZXIgUHJvdG9jb2wgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlcyBpbiBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNgIGFuZCBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNgLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGlkZWEgaXMgdG8gcmVwbGFjZSBhIGZldyBgV0FSTl9PTmAgc3RhdGVtZW50cyB3aXRoIGFjdHVhbCBlcnJvciBoYW5kbGluZywgcmV0dXJuaW5nIHRoaW5ncyBsaWtlIGAtMWAgb3IgYC1FSU5WQUxgIHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcuIFRoaXMgaXMgYWxsIGNlbnRlcmVkIGFyb3VuZCBob3cgdGhlIENlcGggbWVzc2VuZ2VyIHByb3RvY29sIGhhbmRsZXMgY29ubmVjdGlvbiBzZXF1ZW5jZSBudW1iZXJzLCB0aGUgZmVhdHVyZXMgaXQgc3VwcG9ydHMsIGFuZCBzZXJ2ZXIgY29va2llcy4gQmFzaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBtYWtpbmcgdGhlIGNvZGUgbW9yZSByb2J1c3QgYWdhaW5zdCBiYWQgaW5wdXQgZnJvbSB0aGUgbmV0d29yay4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gY2F0Y2ggYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGEga2VybmVsIHBhbmljLCBvciB0byBqdXN0IHByb3Blcmx5IHJlamVjdCBpbnZhbGlkIG9yIHBvc3NpYmx5IG1hbGljaW91cyBkYXRhLgoKSSYjMzk7dmUgY2hlY2tlZCB0aGUgZGlmZnM7IGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgYWJvdXQgdmFsaWRhdGluZyB0aGUgcmVjZWl2ZWQgZGF0YSBhbmQgcmV0dXJuaW5nIGFuIGVycm9yIGlmIGl0JiMzOTtzIG5vdCB3aGF0JiMzOTtzIGV4cGVjdGVkLiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgYW55IG9mIHRoYXQgamF6ei4gV2UmIzM5O3JlIGp1c3QgYWRkaW5nIGNoZWNrcyBhbmQgbG9nZ2luZyBmb3IgaW52YWxpZCB2YWx1ZXMuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgc3BlY2lmaWMgY29kZS4gSW4gYHByb2Nlc3NfY29ubmVjdGAgZnJvbSBgbWVzc2VuZ2VyX3YxLmNgLCB0aGUgcGF0Y2ggaXMgYWRkaW5nIHRoaXMgY2hlY2s6CgpgYGBjCi0JCVdBUk5fT04oY29uLSZndDt2MS5jb25uZWN0X3NlcSAhPQotCQkJbGUzMl90b19jcHUoY29uLSZndDt2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpOwomIzQzOwkJaWYgKGNvbi0mZ3Q7djEuY29ubmVjdF9zZXEgIT0gbGUzMl90b19jcHUoY29uLSZndDt2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDslcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkICV1LCBnb3QgJXVcbiYjMzQ7LAouLi4KJiM0MzsJCQljb24tJmd0O2Vycm9yX21zZyA9ICYjMzQ7Y29ubmVjdF9zZXEgbWlzbWF0Y2gmIzM0OzsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CmBgYAoKSW5zdGVhZCBvZiBqdXN0IHdhcm5pbmcsIHdlIG5vdyBoYXZlIGEgcHJvcGVyIGVycm9yIG1lc3NhZ2UgYW5kIGFuIGVycm9yIHJldHVybi4gVGhlIHNhbWUga2luZCBvZiBjb252ZXJzaW9uIGlzIHByZXNlbnQgaW4gYHByb2Nlc3Nfc2VydmVyX2lkZW50YCBpbiBgbWVzc2VuZ2VyX3YyLmNgOgoKYGBgYwotCVdBUk5fT04ocmVxdWlyZWRfZmVhdHVyZXMgJmFtcDsgfmNsaWVudC0mZ3Q7c3VwcG9ydGVkX2ZlYXR1cmVzKTsKJiM0MzsJaWYgKHJlcXVpcmVkX2ZlYXR1cmVzICZhbXA7IH5jbGllbnQtJmd0O3N1cHBvcnRlZF9mZWF0dXJlcykgewouLi4KJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CmBgYAoKVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGhhdmUgdGhlIGV4YWN0IHNhbWUgbG9naWMgZm9yIHRoZSBgc2VydmVyX2Nvb2tpZWAsIGBjb25uZWN0X3NlcWAgYW5kIGBnbG9iYWxfc2VxYCBjaGVja3MuCgpTbywgYm90dG9tIGxpbmU6IHRoaXMgcGF0Y2ggaXMganVzdCBhYm91dCBtYWtpbmcgdGhlIGVycm9yIGhhbmRsaW5nIG1vcmUgZXhwbGljaXQsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBmb3Igcm9idXN0bmVzcyBhbmQgc2FmZXR5LCBhbmQgdGhpcyBkb2VzbiYjMzk7dCB0b3VjaCBhbnkgbWVtb3J5IHRoYXQgaXMgdW5pbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIG5vIG5lZWQgZm9yIEtNU0FOLiBUaGUgcGF0Y2ggYWRkcyBjaGVja3MgYW5kIHJldHVybnMgZXJyb3IgY29kZXMsIGltcHJvdmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzZXZlcmFsIFdBUk5fT04oKSBzdGF0ZW1lbnRzIHdpdGggcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIGluIHRoZSBDZXBoIG1lc3NlbmdlciBwcm90b2NvbCAoYm90aCB2MSBhbmQgdjIpLiBJdCBjaGVja3MgZm9yIGludmFsaWQgc2VxdWVuY2UgbnVtYmVycywgbWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcywgYW5kIGluY29ycmVjdCBzZXJ2ZXIgY29va2llcywgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgd2FybmluZy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIG5vciBkbyB0aGV5IGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBzZXZlcmFsIFdBUk5fT04oKSBzdGF0ZW1lbnRzIHdpdGggcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIGluIHRoZSBDZXBoIG1lc3NlbmdlciBwcm90b2NvbCAoYm90aCB2MSBhbmQgdjIpLiBJdCBjaGVja3MgZm9yIGludmFsaWQgc2VxdWVuY2UgbnVtYmVycywgbWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcywgYW5kIGluY29ycmVjdCBzZXJ2ZXIgY29va2llcywgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgd2FybmluZy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIG5vciBkbyB0aGV5IGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI2OjQ0LjEzMDUxNDY5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTcxMzA2MzY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRVBIX0xJQlwiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiQkxLX0RFVl9SQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZXBoX2Nvbl92MV90cnlfcmVhZFwiLFxuICAgIFwiY2VwaF9jb25fdjJfdHJ5X3JlYWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHNldmVyYWwgV0FSTl9PTigpIHN0YXRlbWVudHMgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgaW4gdGhlIENlcGggbWVzc2VuZ2VyIHByb3RvY29sIChib3RoIHYxIGFuZCB2MikuIEl0IGNoZWNrcyBmb3IgaW52YWxpZCBzZXF1ZW5jZSBudW1iZXJzLCBtaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzLCBhbmQgaW5jb3JyZWN0IHNlcnZlciBjb29raWVzLCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSB3YXJuaW5nLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgbm9yIGRvIHRoZXkgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBXQVJOX09OIHdpdGggcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXR1cm5zIGluIHRoZSBDZXBoIG5ldHdvcmsgcHJvdG9jb2wgcGFyc2luZyBsb2dpYyAobWVzc2VuZ2VyIHYxIGFuZCB2MikuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIHByb3RvY29sIGNvZGUgdGhhdCBwcmV2ZW50cyBmYWxzZS1wb3NpdGl2ZSBjcmFzaCByZXBvcnRzIGFuZCBjb3JyZWN0bHkgaGFuZGxlcyBpbnZhbGlkIHByb3RvY29sIHN0YXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6MjY6NDQuMTMwNTIzNDE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY3NTQ2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OTQ0Y2MwMGQ0YzFiZjJjZWI3ODYzNDdmYzg5NGEyMjc2ZDg2N2QyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDExOjI2OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcXG5pbmRleCBjOWUwMDJkOTYzMTkwLi5kZjIyNDhiN2IwMjY1IDEwMDY0NFxcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXFxuKysrIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcXG5AQCAtODk4LDggKzg5OCwxNSBAQCBzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuIFxcdFxcdCAgICAgY29uLVxcdTAwM2V2MS5wZWVyX2dsb2JhbF9zZXEsXFxuIFxcdFxcdCAgICAgbGUzMl90b19jcHUoY29uLVxcdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSksXFxuIFxcdFxcdCAgICAgY29uLVxcdTAwM2V2MS5jb25uZWN0X3NlcSk7XFxuLVxcdFxcdFdBUk5fT04oY29uLVxcdTAwM2V2MS5jb25uZWN0X3NlcSAhPVxcbi1cXHRcXHRcXHRsZTMyX3RvX2NwdShjb24tXFx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7XFxuK1xcdFxcdGlmIChjb24tXFx1MDAzZXYxLmNvbm5lY3Rfc2VxICE9IGxlMzJfdG9fY3B1KGNvbi1cXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiJXMlbGxkICVzIGNvbm5lY3Rfc2VxIG1pc21hdGNoLCBleHBlY3RlZCAldSwgZ290ICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgRU5USVRZX05BTUUoY29uLVxcdTAwM2VwZWVyX25hbWUpLFxcbitcXHRcXHRcXHQgICAgICAgY2VwaF9wcl9hZGRyKFxcdTAwMjZjb24tXFx1MDAzZXBlZXJfYWRkciksXFxuK1xcdFxcdFxcdCAgICAgICBjb24tXFx1MDAzZXYxLmNvbm5lY3Rfc2VxLFxcbitcXHRcXHRcXHQgICAgICAgbGUzMl90b19jcHUoY29uLVxcdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpO1xcbitcXHRcXHRcXHRjb24tXFx1MDAzZWVycm9yX21zZyA9IFxcXCJjb25uZWN0X3NlcSBtaXNtYXRjaFxcXCI7XFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGNvbi1cXHUwMDNldjEuaW5fcmVwbHkuZmxhZ3MgXFx1MDAyNiBDRVBIX01TR19DT05ORUNUX0xPU1NZKVxcbiBcXHRcXHRcXHRjZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7XFxuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcXG5pbmRleCAwNWY2ZWVhMjk5ZmMwLi5kNzA2Y2RiZTBlZDJkIDEwMDY0NFxcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXFxuKysrIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcXG5AQCAtMjUyOSwxNCArMjUyOSwzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcXG4gXFx0Y29uLVxcdTAwM2VwZWVyX25hbWUubnVtID0gY3B1X3RvX2xlNjQoZ2xvYmFsX2lkKTtcXG4gXFx0Y29uLVxcdTAwM2V2Mi5wZWVyX2dsb2JhbF9zZXEgPSBnbG9iYWxfc2VxO1xcbiBcXHRjb24tXFx1MDAzZXBlZXJfZmVhdHVyZXMgPSBmZWF0dXJlcztcXG4tXFx0V0FSTl9PTihyZXF1aXJlZF9mZWF0dXJlcyBcXHUwMDI2IH5jbGllbnQtXFx1MDAzZXN1cHBvcnRlZF9mZWF0dXJlcyk7XFxuK1xcdGlmIChyZXF1aXJlZF9mZWF0dXJlcyBcXHUwMDI2IH5jbGllbnQtXFx1MDAzZXN1cHBvcnRlZF9mZWF0dXJlcykge1xcbitcXHRcXHRwcl9lcnIoXFxcIiVzJWxsZCAlcyBtaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzLCBteSBzdXBwb3J0ZWQgMHglbGx4LCBzZXJ2ZXIncyByZXF1aXJlZCAweCVsbHhcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXFx1MDAzZXBlZXJfbmFtZSksXFxuK1xcdFxcdCAgICAgICBjZXBoX3ByX2FkZHIoXFx1MDAyNmNvbi1cXHUwMDNlcGVlcl9hZGRyKSxcXG4rXFx0XFx0ICAgICAgIGNsaWVudC1cXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzLCByZXF1aXJlZF9mZWF0dXJlcyk7XFxuK1xcdFxcdGNvbi1cXHUwMDNlZXJyb3JfbXNnID0gXFxcIm1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXNcXFwiO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXHRjb24tXFx1MDAzZXYyLnNlcnZlcl9jb29raWUgPSBjb29raWU7XFxuIFxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBDRVBIX01TR19DT05ORUNUX0xPU1NZKSB7XFxuIFxcdFxcdGNlcGhfY29uX2ZsYWdfc2V0KGNvbiwgQ0VQSF9DT05fRl9MT1NTWVRYKTtcXG4tXFx0XFx0V0FSTl9PTihjb24tXFx1MDAzZXYyLnNlcnZlcl9jb29raWUpO1xcbitcXHRcXHRpZiAoY29uLVxcdTAwM2V2Mi5zZXJ2ZXJfY29va2llKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiJXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgc2V0IGZvciBsb3NzeSBjb25uZWN0aW9uXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgRU5USVRZX05BTUUoY29uLVxcdTAwM2VwZWVyX25hbWUpLFxcbitcXHRcXHRcXHQgICAgICAgY2VwaF9wcl9hZGRyKFxcdTAwMjZjb24tXFx1MDAzZXBlZXJfYWRkcikpO1xcbitcXHRcXHRcXHRjb24tXFx1MDAzZWVycm9yX21zZyA9IFxcXCJzZXJ2ZXJfY29va2llIGlzIHNldCBmb3IgbG9zc3kgY29ubmVjdGlvblxcXCI7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdFdBUk5fT04oIWNvbi1cXHUwMDNldjIuc2VydmVyX2Nvb2tpZSk7XFxuK1xcdFxcdGlmICghY29uLVxcdTAwM2V2Mi5zZXJ2ZXJfY29va2llKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiJXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cXHUwMDNlcGVlcl9uYW1lKSxcXG4rXFx0XFx0XFx0ICAgICAgIGNlcGhfcHJfYWRkcihcXHUwMDI2Y29uLVxcdTAwM2VwZWVyX2FkZHIpKTtcXG4rXFx0XFx0XFx0Y29uLVxcdTAwM2VlcnJvcl9tc2cgPSBcXFwic2VydmVyX2Nvb2tpZSBpcyBub3Qgc2V0IGZvciBsb3NzbGVzcyBjb25uZWN0aW9uXFxcIjtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0Y2xlYXJfaW5fc2lnbl9rdmVjcyhjb24pO1xcbkBAIC0yNjE4LDcgKzI2MzcsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnkoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxcbiBcXHRjZXBoX2RlY29kZV82NF9zYWZlKFxcdTAwMjZwLCBlbmQsIGNvbm5lY3Rfc2VxLCBiYWQpO1xcbiBcXG4gXFx0ZG91dChcXFwiJXMgY29uICVwIGNvbm5lY3Rfc2VxICVsbHVcXFxcblxcXCIsIF9fZnVuY19fLCBjb24sIGNvbm5lY3Rfc2VxKTtcXG4tXFx0V0FSTl9PTihjb25uZWN0X3NlcSBcXHUwMDNjPSBjb24tXFx1MDAzZXYyLmNvbm5lY3Rfc2VxKTtcXG4rXFx0aWYgKGNvbm5lY3Rfc2VxIFxcdTAwM2M9IGNvbi1cXHUwMDNldjIuY29ubmVjdF9zZXEpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCIlcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFxcdTAwM2UgJWxsdSwgZ290ICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXFx1MDAzZXBlZXJfbmFtZSksXFxuK1xcdFxcdCAgICAgICBjZXBoX3ByX2FkZHIoXFx1MDAyNmNvbi1cXHUwMDNlcGVlcl9hZGRyKSxcXG4rXFx0XFx0ICAgICAgIGNvbi1cXHUwMDNldjIuY29ubmVjdF9zZXEsIGNvbm5lY3Rfc2VxKTtcXG4rXFx0XFx0Y29uLVxcdTAwM2VlcnJvcl9tc2cgPSBcXFwiY29ubmVjdF9zZXEgbWlzbWF0Y2hcXFwiO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXHRjb24tXFx1MDAzZXYyLmNvbm5lY3Rfc2VxID0gY29ubmVjdF9zZXEgKyAxO1xcbiBcXG4gXFx0ZnJlZV9jb25uX2J1ZnMoY29uKTtcXG5AQCAtMjY1MSw3ICsyNjc3LDE0IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXFxuIFxcdGNlcGhfZGVjb2RlXzY0X3NhZmUoXFx1MDAyNnAsIGVuZCwgZ2xvYmFsX3NlcSwgYmFkKTtcXG4gXFxuIFxcdGRvdXQoXFxcIiVzIGNvbiAlcCBnbG9iYWxfc2VxICVsbHVcXFxcblxcXCIsIF9fZnVuY19fLCBjb24sIGdsb2JhbF9zZXEpO1xcbi1cXHRXQVJOX09OKGdsb2JhbF9zZXEgXFx1MDAzYz0gY29uLVxcdTAwM2V2Mi5nbG9iYWxfc2VxKTtcXG4rXFx0aWYgKGdsb2JhbF9zZXEgXFx1MDAzYz0gY29uLVxcdTAwM2V2Mi5nbG9iYWxfc2VxKSB7XFxuK1xcdFxcdHByX2VycihcXFwiJXMlbGxkICVzIGdsb2JhbF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFxcdTAwM2UgJWxsdSwgZ290ICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXFx1MDAzZXBlZXJfbmFtZSksXFxuK1xcdFxcdCAgICAgICBjZXBoX3ByX2FkZHIoXFx1MDAyNmNvbi1cXHUwMDNlcGVlcl9hZGRyKSxcXG4rXFx0XFx0ICAgICAgIGNvbi1cXHUwMDNldjIuZ2xvYmFsX3NlcSwgZ2xvYmFsX3NlcSk7XFxuK1xcdFxcdGNvbi1cXHUwMDNlZXJyb3JfbXNnID0gXFxcImdsb2JhbF9zZXEgbWlzbWF0Y2hcXFwiO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXHRjb24tXFx1MDAzZXYyLmdsb2JhbF9zZXEgPSBjZXBoX2dldF9nbG9iYWxfc2VxKGNvbi1cXHUwMDNlbXNnciwgZ2xvYmFsX3NlcSk7XFxuIFxcbiBcXHRmcmVlX2Nvbm5fYnVmcyhjb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNjo0NC43NDgzNDkxNTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5ODExOTExMzg4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRVBIX0xJQlwiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiQkxLX0RFVl9SQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZXBoX2Nvbl92MV90cnlfcmVhZFwiLFxuICAgIFwiY2VwaF9jb25fdjJfdHJ5X3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBXQVJOX09OIHdpdGggcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXR1cm5zIGluIHRoZSBDZXBoIG5ldHdvcmsgcHJvdG9jb2wgcGFyc2luZyBsb2dpYyAobWVzc2VuZ2VyIHYxIGFuZCB2MikuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIHByb3RvY29sIGNvZGUgdGhhdCBwcmV2ZW50cyBmYWxzZS1wb3NpdGl2ZSBjcmFzaCByZXBvcnRzIGFuZCBjb3JyZWN0bHkgaGFuZGxlcyBpbnZhbGlkIHByb3RvY29sIHN0YXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzk0NGNjMDBkNGMxYmYyY2ViNzg2MzQ3ZmM4OTRhMjI3NmQ4NjdkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDExOjI2OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuaW5kZXggYzllMDAyZDk2MzE5MC4uZGYyMjQ4YjdiMDI2NSAxMDA2NDRcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXG4rKysgYi9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuY1xuQEAgLTg5OCw4ICs4OTgsMTUgQEAgc3RhdGljIGludCBwcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuIFx0XHQgICAgIGNvbi1cdTAwM2V2MS5wZWVyX2dsb2JhbF9zZXEsXG4gXHRcdCAgICAgbGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSxcbiBcdFx0ICAgICBjb24tXHUwMDNldjEuY29ubmVjdF9zZXEpO1xuLVx0XHRXQVJOX09OKGNvbi1cdTAwM2V2MS5jb25uZWN0X3NlcSAhPVxuLVx0XHRcdGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpO1xuK1x0XHRpZiAoY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxICE9IGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpIHtcbitcdFx0XHRwcl9lcnIoXCIlcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkICV1LCBnb3QgJXVcXG5cIixcbitcdFx0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdFx0ICAgICAgIGNlcGhfcHJfYWRkcihcdTAwMjZjb24tXHUwMDNlcGVlcl9hZGRyKSxcbitcdFx0XHQgICAgICAgY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxLFxuK1x0XHRcdCAgICAgICBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcbitcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJjb25uZWN0X3NlcSBtaXNtYXRjaFwiO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuIFxuIFx0XHRpZiAoY29uLVx1MDAzZXYxLmluX3JlcGx5LmZsYWdzIFx1MDAyNiBDRVBIX01TR19DT05ORUNUX0xPU1NZKVxuIFx0XHRcdGNlcGhfY29uX2ZsYWdfc2V0KGNvbiwgQ0VQSF9DT05fRl9MT1NTWVRYKTtcbmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXG5pbmRleCAwNWY2ZWVhMjk5ZmMwLi5kNzA2Y2RiZTBlZDJkIDEwMDY0NFxuLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcbisrKyBiL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXG5AQCAtMjUyOSwxNCArMjUyOSwzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNvbi1cdTAwM2VwZWVyX25hbWUubnVtID0gY3B1X3RvX2xlNjQoZ2xvYmFsX2lkKTtcbiBcdGNvbi1cdTAwM2V2Mi5wZWVyX2dsb2JhbF9zZXEgPSBnbG9iYWxfc2VxO1xuIFx0Y29uLVx1MDAzZXBlZXJfZmVhdHVyZXMgPSBmZWF0dXJlcztcbi1cdFdBUk5fT04ocmVxdWlyZWRfZmVhdHVyZXMgXHUwMDI2IH5jbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzKTtcbitcdGlmIChyZXF1aXJlZF9mZWF0dXJlcyBcdTAwMjYgfmNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMpIHtcbitcdFx0cHJfZXJyKFwiJXMlbGxkICVzIG1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMsIG15IHN1cHBvcnRlZCAweCVsbHgsIHNlcnZlcidzIHJlcXVpcmVkIDB4JWxseFxcblwiLFxuK1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdCAgICAgICBjbGllbnQtXHUwMDNlc3VwcG9ydGVkX2ZlYXR1cmVzLCByZXF1aXJlZF9mZWF0dXJlcyk7XG4rXHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcIm1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXNcIjtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXHRjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSA9IGNvb2tpZTtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgQ0VQSF9NU0dfQ09OTkVDVF9MT1NTWSkge1xuIFx0XHRjZXBoX2Nvbl9mbGFnX3NldChjb24sIENFUEhfQ09OX0ZfTE9TU1lUWCk7XG4tXHRcdFdBUk5fT04oY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpO1xuK1x0XHRpZiAoY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpIHtcbitcdFx0XHRwcl9lcnIoXCIlcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cXG5cIixcbitcdFx0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdFx0ICAgICAgIGNlcGhfcHJfYWRkcihcdTAwMjZjb24tXHUwMDNlcGVlcl9hZGRyKSk7XG4rXHRcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwic2VydmVyX2Nvb2tpZSBpcyBzZXQgZm9yIGxvc3N5IGNvbm5lY3Rpb25cIjtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0V0FSTl9PTighY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpO1xuK1x0XHRpZiAoIWNvbi1cdTAwM2V2Mi5zZXJ2ZXJfY29va2llKSB7XG4rXHRcdFx0cHJfZXJyKFwiJXMlbGxkICVzIHNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblxcblwiLFxuK1x0XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbitcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpKTtcbitcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJzZXJ2ZXJfY29va2llIGlzIG5vdCBzZXQgZm9yIGxvc3NsZXNzIGNvbm5lY3Rpb25cIjtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuIFx0fVxuIFxuIFx0Y2xlYXJfaW5fc2lnbl9rdmVjcyhjb24pO1xuQEAgLTI2MTgsNyArMjYzNywxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXG4gXHRjZXBoX2RlY29kZV82NF9zYWZlKFx1MDAyNnAsIGVuZCwgY29ubmVjdF9zZXEsIGJhZCk7XG4gXG4gXHRkb3V0KFwiJXMgY29uICVwIGNvbm5lY3Rfc2VxICVsbHVcXG5cIiwgX19mdW5jX18sIGNvbiwgY29ubmVjdF9zZXEpO1xuLVx0V0FSTl9PTihjb25uZWN0X3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5jb25uZWN0X3NlcSk7XG4rXHRpZiAoY29ubmVjdF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuY29ubmVjdF9zZXEpIHtcbitcdFx0cHJfZXJyKFwiJXMlbGxkICVzIGNvbm5lY3Rfc2VxIG1pc21hdGNoLCBleHBlY3RlZCBcdTAwM2UgJWxsdSwgZ290ICVsbHVcXG5cIixcbitcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuK1x0XHQgICAgICAgY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxLCBjb25uZWN0X3NlcSk7XG4rXHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcImNvbm5lY3Rfc2VxIG1pc21hdGNoXCI7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFx0Y29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxID0gY29ubmVjdF9zZXEgKyAxO1xuIFxuIFx0ZnJlZV9jb25uX2J1ZnMoY29uKTtcbkBAIC0yNjUxLDcgKzI2NzcsMTQgQEAgc3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNlcGhfZGVjb2RlXzY0X3NhZmUoXHUwMDI2cCwgZW5kLCBnbG9iYWxfc2VxLCBiYWQpO1xuIFxuIFx0ZG91dChcIiVzIGNvbiAlcCBnbG9iYWxfc2VxICVsbHVcXG5cIiwgX19mdW5jX18sIGNvbiwgZ2xvYmFsX3NlcSk7XG4tXHRXQVJOX09OKGdsb2JhbF9zZXEgXHUwMDNjPSBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSk7XG4rXHRpZiAoZ2xvYmFsX3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5nbG9iYWxfc2VxKSB7XG4rXHRcdHByX2VycihcIiVzJWxsZCAlcyBnbG9iYWxfc2VxIG1pc21hdGNoLCBleHBlY3RlZCBcdTAwM2UgJWxsdSwgZ290ICVsbHVcXG5cIixcbitcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuK1x0XHQgICAgICAgY29uLVx1MDAzZXYyLmdsb2JhbF9zZXEsIGdsb2JhbF9zZXEpO1xuK1x0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJnbG9iYWxfc2VxIG1pc21hdGNoXCI7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFx0Y29uLVx1MDAzZXYyLmdsb2JhbF9zZXEgPSBjZXBoX2dldF9nbG9iYWxfc2VxKGNvbi1cdTAwM2Vtc2dyLCBnbG9iYWxfc2VxKTtcbiBcbiBcdGZyZWVfY29ubl9idWZzKGNvbik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNjo0NC43NDgzNTEzMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjEzMjE0NDYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDZXBoIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIGNsZWFuaW5nIHVwIHNvbWUgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIENlcGggbmV0d29yayBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgcmVwbGFjaW5nIGBXQVJOX09OYCB3aXRoIHByb3BlciBlcnJvciByZXR1cm5zIOKAkyBgLTFgLCBgLUVJTlZBTGAg4oCTIGFuZCBzZXR0aW5nIGBjb24tXHUwMDNlZXJyb3JfbXNnYCBpbiBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNgIGFuZCBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlP1wiIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY29kZSBwYXRocyBhcmUgZXZlbiAqcmVhY2hhYmxlKiBhbmQgaWYgdGhleSdyZSBjb21wbGV4IGVub3VnaCB0byB3YXJyYW50IGF0dGVudGlvbi5cblxuVGhlIHBhdGNoIHRvdWNoZXMgYHByb2Nlc3NfY29ubmVjdGAgaW4gdGhlIHYxIG1lc3NlbmdlciBhbmQgdGhlbiBgcHJvY2Vzc19zZXJ2ZXJfaWRlbnRgLCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5YCwgYW5kIGBwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsYCBpbiB0aGUgdjIgbWVzc2VuZ2VyLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGNsZWFybHkgY29yZSB0byB0aGUgQ2VwaCBwcm90b2NvbCwgc28gdGhleSdyZSBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgYXR0YWNrIHN1cmZhY2UuIENlcGgsIGJlaW5nIGEgZGlzdHJpYnV0ZWQgc3RvcmFnZSBzeXN0ZW0sIGlzIGRlZmluaXRlbHkgbmV0d29yay1mYWNpbmcuIEl0J3MgdXNlZCBhcyBhIG5ldHdvcmsgZmlsZXN5c3RlbSBhbmQgYmxvY2sgZGV2aWNlLCBzbyB0aGVyZSBpcyB0aGUgcG90ZW50aWFsIHRvIHRyaWdnZXIgaXNzdWVzIHJlbW90ZWx5LlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcywgXCJDYW4gSSBnZXQgdG8gdGhlc2UgYml0cyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQ/XCIgSWRlYWxseSwgc3l6a2FsbGVyIGNvdWxkIGJlIGxldmVyYWdlZC4gSWYgSSdtIGx1Y2t5LCB0aGVyZSBhcmUgYWxyZWFkeSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciBDZXBoLiBFdmVuIGlmIHRoZXJlJ3Mgbm8gbmF0aXZlIENlcGggc2VydmVyIHdpdGhpbiBzeXprYWxsZXIsIGl0J3MgdmVyeSBsaWtlbHkgSSBjYW4gY3JhZnQgbmV0d29yayBwYWNrZXRzIHRvIHBva2UgYXQgYSBDZXBoIGNsaWVudCBhbmQgZXhlcmNpc2UgdGhvc2UgY29kZSBwYXRocy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNldHRpbmcgdXAgYSBuZXR3b3JrIGNvbm5lY3Rpb24gb3IgaW5qZWN0aW5nIHBhY2tldHMgaW50byB0aGUgbmV0d29yayBpcyB1c3VhbGx5IGEgdmlhYmxlIHBhdGguIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgY2FzZSwgZmlyc3QsIHNvIGxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIENFUEggYW5kIHNlZSB3aGF0IHRoZSBvcHRpb25zIGxvb2sgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM3NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI2OjU2Ljg4MDQ5OTAyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3OTcxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENFUEhfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jZXBoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2NlcGgvS2NvbmZpZzoyOmNvbmZpZyBDRVBIX0xJQlxcbm5ldC9jZXBoL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ2VwaCBjb3JlIGxpYnJhcnlcXFwiXFxuLS1cXG5uZXQvY2VwaC9LY29uZmlnLTIyLVxcbm5ldC9jZXBoL0tjb25maWc6MjM6Y29uZmlnIENFUEhfTElCX1BSRVRUWURFQlVHXFxubmV0L2NlcGgvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJJbmNsdWRlIGZpbGU6bGluZSBpbiBjZXBoIGRlYnVnIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9jZXBoL0tjb25maWctMzQtXFxubmV0L2NlcGgvS2NvbmZpZzozNTpjb25maWcgQ0VQSF9MSUJfVVNFX0ROU19SRVNPTFZFUlxcbm5ldC9jZXBoL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiVXNlIGluLWtlcm5lbCBzdXBwb3J0IGZvciBETlMgbG9va3VwXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNjo1Ni45OTMzMDU2MzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQyNjY3NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENlcGggQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUgaXMgYENFUEhfTElCYC4gVGhhdCdzIG91ciBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgbm93IGlzIHRvIGRldGVybWluZSB3aGF0IG90aGVyIGVsZW1lbnRzIGFyZSBwb3RlbnRpYWxseSBjb3VwbGVkIHRvIGBDRVBIX0xJQmAuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYENFUEhfRlNgIG9yIGBCTEtfREVWX1JCRGAgYXJlIGZ1bmN0aW9uYWxseSAqcmVxdWlyZWQqIGluIHRoaXMgc2V0dXAsIG9yIGp1c3QgcG90ZW50aWFsbHkgKnVzZWQqLiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgc3RhbmRhcmQgQ2VwaCBmaWxlc3lzdGVtIGRlcGxveW1lbnQsIG9yIGFyZSB3ZSBtb3JlIGZvY3VzZWQgb24gUkJEIGJsb2NrIGRldmljZSBpbnRlcmFjdGlvbj8gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHRvIG9wdGltaXplIHRoZSBjb25maWd1cmF0aW9uLiBUaGlzIG1lYW5zIEkgd2FudCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgYXJlIHJlcXVpcmVkLCBvcHRpb25hbCwgb3IgbXV0dWFsbHkgZXhjbHVzaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjM5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MDAuMDM1OTc2NjcyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MzE3MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRVBIX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NlcGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NlcGgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2NlcGgvS2NvbmZpZzoyOmNvbmZpZyBDRVBIX0ZTXFxuZnMvY2VwaC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkNlcGggZGlzdHJpYnV0ZWQgZmlsZSBzeXN0ZW1cXFwiXFxuLS1cXG5mcy9jZXBoL0tjb25maWc9MTk9aWYgQ0VQSF9GU1xcbmZzL2NlcGgvS2NvbmZpZzoyMDpjb25maWcgQ0VQSF9GU0NBQ0hFXFxuZnMvY2VwaC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIkVuYWJsZSBDZXBoIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9jZXBoL0tjb25maWc9Mjc9ZW5kaWZcXG5mcy9jZXBoL0tjb25maWctMjgtXFxuZnMvY2VwaC9LY29uZmlnOjI5OmNvbmZpZyBDRVBIX0ZTX1BPU0lYX0FDTFxcbmZzL2NlcGgvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJDZXBoIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnLTM4LVxcbmZzL2NlcGgvS2NvbmZpZzozOTpjb25maWcgQ0VQSF9GU19TRUNVUklUWV9MQUJFTFxcbmZzL2NlcGgvS2NvbmZpZy00MC1cXHRib29sIFxcXCJDZXBoRlMgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzowMC4wOTMzMDE5ODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE5MzI0MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gQmxvY2sgRGV2aWNlIERldGFpbHMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlJ3MgcG9pbnRpbmcgbWUgdG93YXJkcyBgQkxLX0RFVl9SQkRgLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGFyZSBnZXR0aW5nIGludGVyZXN0aW5nLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIG9mIG91ciBzeXN0ZW0gd2l0aCB0aGUgUkJEIGJsb2NrIGRldmljZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgQ2VwaCBSQURPUyBCbG9jayBEZXZpY2UgZml0cyBpbiB3aXRoIHRoZSBrZXJuZWwncyBibG9jayBsYXllci4gT2theSwgc28gUkJELi4uIGxldCdzIGNoZWNrIGl0LiBMZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI3OjAzLjIxMjYyODI0NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTkxNjg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9SQkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTMwNz1jb25maWcgVklSVElPX0JMS1xcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMxNC1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzE1OmNvbmZpZyBCTEtfREVWX1JCRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMTYtXFx0dHJpc3RhdGUgXFxcIlJhZG9zIGJsb2NrIGRldmljZSAoUkJEKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MDMuMjY4NTUyNzY4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA1ODQyODg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQcm90b2NvbCBQYXJzaW5nIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIGBXQVJOX09OYCB0byBhY3R1YWwgZXJyb3IgcmV0dXJucyB3aXRoaW4gdGhlIHByb3RvY29sIHBhcnNpbmcuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpbnN0ZWFkIG9mIGp1c3QgbG9nZ2luZyBhIHdhcm5pbmcsIHdlJ3JlIG5vdyAqaGFuZGxpbmcqIHRoZSBlcnJvciBtb3JlIGdyYWNlZnVsbHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlRoaXMgbmVlZHMgZnV6emluZy5cIiBJdCdzIGNyaXRpY2FsIHRvIHZlcmlmeSB0aGVzZSBuZXcgZXJyb3IgcGF0aHMgYXJlIHJvYnVzdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbGVha2luZyByZXNvdXJjZXMgb3IgaW50cm9kdWNpbmcgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGFuZCB0aGF0IHdlIGNhbiByZWFjaCBtb3JlIHN0YXRlcyB0aHJvdWdoIHRoZXNlIHBhdGhzLlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLiBCYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2UgZnVuY3Rpb25zOiBgcHJvY2Vzc19jb25uZWN0YCwgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCwgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeWAsIGFuZCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbGAuXG5cbk5vdywgdGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciB0aGVzZSBhcmUgc3RhdGljLiBUaGUgY29udGV4dCBpcyBpbXBvcnRhbnQgaGVyZS4gSSBzZWUgdGhleSBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpYyBpbnQgLi4uYC4gSWYgdGhleSB3ZXJlIG5vbi1zdGF0aWMsIHRoZXkgbWlnaHQgZ2V0IGNhbGxlZCBmcm9tIG11bHRpcGxlIHBsYWNlcywgYnV0IGlmIHRoZXkgYXJlIHN0YXRpYyB0aGV5IGNvdWxkIGJlIGlubGluZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoLiBMZXQncyBkaWcgaW50byB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnZva2VkLiBUaGF0J2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvZGUgZmxvdyBhbmQgd2hlcmUgdGhlc2UgZXJyb3IgcGF0aHMgYXJlIG1vc3QgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5ODYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MDkuMzI2OTg3MDYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzEzMjM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9jZXNzX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM9Njk3PXN0YXRpYyBpbnQgcHJvY2Vzc19iYW5uZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzM5LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjc0MDpzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzQxLXtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTc0Ni1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzo3NDc6XFx0ZG91dChcXFwicHJvY2Vzc19jb25uZWN0IG9uICVwIHRhZyAlZFxcXFxuXFxcIiwgY29uLCBjb24tXFx1MDAzZXYxLmluX3RhZyk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtNzQ4LVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODAyLVxcdFxcdGNvbi1cXHUwMDNldjEuYXV0aF9yZXRyeSsrO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjgwMzpcXHRcXHRkb3V0KFxcXCJwcm9jZXNzX2Nvbm5lY3QgJXAgZ290IEJBREFVVEhPUklaRVIgYXR0ZW1wdCAlZFxcXFxuXFxcIiwgY29uLFxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTgwNC1cXHRcXHQgICAgIGNvbi1cXHUwMDNldjEuYXV0aF9yZXRyeSk7XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04MjMtXFx0XFx0ICovXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODI0OlxcdFxcdGRvdXQoXFxcInByb2Nlc3NfY29ubmVjdCBnb3QgUkVTRVQgcGVlciBzZXEgJXVcXFxcblxcXCIsXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODI1LVxcdFxcdCAgICAgbGUzMl90b19jcHUoY29uLVxcdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpO1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODQ5LVxcdFxcdCAqL1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjg1MDpcXHRcXHRkb3V0KFxcXCJwcm9jZXNzX2Nvbm5lY3QgZ290IFJFVFJZX1NFU1NJT04gbXkgc2VxICV1LCBwZWVyICV1XFxcXG5cXFwiLFxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTg1MS1cXHRcXHQgICAgIGxlMzJfdG9fY3B1KGNvbi1cXHUwMDNldjEub3V0X2Nvbm5lY3QuY29ubmVjdF9zZXEpLFxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODY1LVxcdFxcdCAqL1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjg2NjpcXHRcXHRkb3V0KFxcXCJwcm9jZXNzX2Nvbm5lY3QgZ290IFJFVFJZX0dMT0JBTCBteSAldSBwZWVyX2dzZXEgJXVcXFxcblxcXCIsXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODY3LVxcdFxcdCAgICAgY29uLVxcdTAwM2V2MS5wZWVyX2dsb2JhbF9zZXEsXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy04OTYtXFx0XFx0Y29uLVxcdTAwM2VwZWVyX2ZlYXR1cmVzID0gc2VydmVyX2ZlYXQ7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6ODk3OlxcdFxcdGRvdXQoXFxcInByb2Nlc3NfY29ubmVjdCBnb3QgUkVBRFkgZ3NlcSAlZCBjc2VxICVkICglZClcXFxcblxcXCIsXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtODk4LVxcdFxcdCAgICAgY29uLVxcdTAwM2V2MS5wZWVyX2dsb2JhbF9zZXEsXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYz0xMzI5PWludCBjZXBoX2Nvbl92MV90cnlfcmVhZChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xMzcyLVxcdFxcdFxcdGdvdG8gb3V0O1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjEzNzM6XFx0XFx0cmV0ID0gcHJvY2Vzc19jb25uZWN0KGNvbik7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtMTM3NC1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MDkuMzgwMTMxMDY3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNzk4NzM3MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgQ2VwaCBDb25uZWN0aW9uIEZsb3cqKlxuXG5BbHJpZ2h0LCBzbyBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIHRyaWdnZXJzIGEgY2FsbCB0byBgcHJvY2Vzc19jb25uZWN0YC4gVGhhdCdzIHdoZXJlIHRoZSBjb25uZWN0aW9uIGhhbmRzaGFrZSBoYXBwZW5zLiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzICphY3R1YWxseSogZ29pbmcgb24gaW5zaWRlIHRob3NlIGZ1bmN0aW9ucyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy4gU28sIEkgbmVlZCB0byBmb2N1cyBvbiBhIGZldyBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBjcml0aWNhbCB3aXRoaW4gdGhlIGBtZXNzZW5nZXJfdjIuY2AgZmlsZS4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCwgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeWAsIGFuZCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbGAuIFRoZXNlIHByb2JhYmx5IGhhbmRsZSB0aGUgY3J1Y2lhbCBzdGVwcyBvZiBpZGVudGlmeWluZyB0aGUgc2VydmVyLCBoYW5kbGluZyBhbnkgc2Vzc2lvbiByZXRyaWVzIHRoYXQgbWF5IGJlIG5lZWRlZCwgYW5kIHBlcmhhcHMgbWFuYWdpbmcgZ2xvYmFsIHJldHJ5IGF0dGVtcHRzIGlmIHRoZSBpbml0aWFsIGF0dGVtcHRzIGZhaWwuIEknbGwgbG9vayBpbnRvIGhvdyBlYWNoIG9mIHRoZXNlIGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gZmxvdyBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzcsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzoxNS40NjAwMDgyMTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDA4MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2Nlc3Nfc2VydmVyX2lkZW50fHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeXxwcm9jZXNzX3Nlc3Npb25fcmV0cnlfZ2xvYmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI0MjQ9c3RhdGljIGludCBwcm9jZXNzX2F1dGhfc2lnbmF0dXJlKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI0NzEtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjQ3MjpzdGF0aWMgaW50IHByb2Nlc3Nfc2VydmVyX2lkZW50KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yNDczLVxcdFxcdFxcdFxcdHZvaWQgKnAsIHZvaWQgKmVuZClcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI1OTc9c3RhdGljIGludCBwcm9jZXNzX3Nlc3Npb25fcmVjb25uZWN0X29rKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI2MjUtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjYyNjpzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjYyNy1cXHRcXHRcXHRcXHQgdm9pZCAqcCwgdm9pZCAqZW5kKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjY2NS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyNjY2OnN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjY2Ny1cXHRcXHRcXHRcXHRcXHR2b2lkICpwLCB2b2lkICplbmQpXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0yNzk0PXN0YXRpYyBpbnQgcHJvY2Vzc19jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgxNy1cXHRjYXNlIEZSQU1FX1RBR19TRVJWRVJfSURFTlQ6XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MjgxODpcXHRcXHRyZXQgPSBwcm9jZXNzX3NlcnZlcl9pZGVudChjb24sIHAsIGVuZCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgxOS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI4MjYtXFx0Y2FzZSBGUkFNRV9UQUdfU0VTU0lPTl9SRVRSWTpcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyODI3OlxcdFxcdHJldCA9IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeShjb24sIHAsIGVuZCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgyOC1cXHRcXHRicmVhaztcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yODI5LVxcdGNhc2UgRlJBTUVfVEFHX1NFU1NJT05fUkVUUllfR0xPQkFMOlxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI4MzA6XFx0XFx0cmV0ID0gcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbChjb24sIHAsIGVuZCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjgzMS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MTUuNTA4NDI5OTA0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTAwMDEzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGg6IGBwcm9jZXNzX2NvbnRyb2xgKipcblxuT2theSwgc28gSSdtIGludmVzdGlnYXRpbmcgaG93IHRoaXMgc3lzdGVtIG9wZXJhdGVzLiBNeSBmb2N1cyBoYXMgYmVlbiBkcmF3biB0byBgcHJvY2Vzc19jb250cm9sYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgcmVsYXRpb25zaGlwcy4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBpbnZva2VkIGZyb20/IEkgaW1tZWRpYXRlbHkgd2FudCB0byBkZXRlcm1pbmUgdGhlIGltbWVkaWF0ZSBjYWxsZXJzLCBhbmQgdGhlaXIgY2FsbGVycy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGlkZW50aWZ5aW5nIGRlcGVuZGVuY2llczsgaXQncyBhYm91dCByZWNvbnN0cnVjdGluZyB0aGUgY29udHJvbCBmbG93LiBTZWVpbmcgdGhlIGNoYWluIGZyb20gdGhlIGhpZ2hlc3QgbGV2ZWxzIHdpbGwgaGVscCBwYWludCB0aGUgcGljdHVyZSBvZiB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gZml0cyBpbi4gVGhpcyBzaG91bGQgcHJvdmlkZSBjb250ZXh0IGZvciB3aGF0IGBwcm9jZXNzX2NvbnRyb2xgIGlzIGRlc2lnbmVkIHRvIGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTc4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MTkuMjE4NDM0MTMxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU2Mjg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9jZXNzX2NvbnRyb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9Mjc3ND1zdGF0aWMgaW50IHByb2Nlc3NfYWNrKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjc5My1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyNzk0OnN0YXRpYyBpbnQgcHJvY2Vzc19jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcCwgdm9pZCAqZW5kKVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI3OTUte1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjkyOD1zdGF0aWMgaW50IF9faGFuZGxlX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLCB2b2lkICpwKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMjkzNC1cXHRpZiAoY29uLVxcdTAwM2V2Mi5pbl9kZXNjLmZkX3RhZyAhPSBGUkFNRV9UQUdfTUVTU0FHRSlcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzoyOTM1OlxcdFxcdHJldHVybiBwcm9jZXNzX2NvbnRyb2woY29uLCBwLCBlbmQpO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTI5MzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI3OjE5LjI2NzAxOTkyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTY1NjQxMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWJ1Z2dpbmcgdGhlIENvbnRyb2wgSGFuZGxlcioqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIGxvZ2ljIHNlZW1zIHRvIGJlIHRpZWQgdG8gdGhpcyBgX19oYW5kbGVfY29udHJvbGAgbWV0aG9kLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHBpZWNlcyBvZiBjb2RlIGFyZSBhY3R1YWxseSAqY2FsbGluZyogdGhpcyB0aGluZy4gSXQncyB0aGUgZXNzZW50aWFsIGVudHJ5IHBvaW50IGZvciBjb250cm9sIHNpZ25hbHMgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlciB3aWxsIHByb3ZpZGUgdml0YWwgY29udGV4dCB0byBmdXJ0aGVyIGV4YW1pbmUgd2hhdCBpcyBnb2luZyBvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgd2hlcmUgdGhlIGV4ZWN1dGlvbiBmbG93IGlzIG9yaWdpbmF0aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3RhdGUgYW5kIGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0gYXQgdGhlIHRpbWUgdGhpcyBoYW5kbGVyIGdldHMgaW52b2tlZC4gVGltZSB0byBnZXQgZG93biB0byB0cmFjaW5nIHRoZSBjYWxsIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjMyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MjguNDMyNjY0NzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTUzMDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faGFuZGxlX2NvbnRyb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MjkxMD1zdGF0aWMgaW50IHByb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yOTI3LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjI5Mjg6c3RhdGljIGludCBfX2hhbmRsZV9jb250cm9sKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcClcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0yOTI5LXtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTI5NzM9c3RhdGljIGludCBoYW5kbGVfcHJlYW1ibGUoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAwNS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMDA2OlxcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgQ1RSTF9CT0RZKGNvbi1cXHUwMDNldjIuaW5fYnVmKSk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAwNy19XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0zMDA5PXN0YXRpYyBpbnQgaGFuZGxlX2NvbnRyb2woc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAyOC1cXHRcXHRtZW1jcHkoYnVmLCBjb24tXFx1MDAzZXYyLmluX2t2ZWNzWzBdLmlvdl9iYXNlLCBjdHJsX2xlbik7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzAyOTpcXHRcXHRyZXR1cm4gX19oYW5kbGVfY29udHJvbChjb24sIGJ1Zik7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAzMC1cXHR9XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAzMS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMDMyOlxcdHJldHVybiBfX2hhbmRsZV9jb250cm9sKGNvbiwgY29uLVxcdTAwM2V2Mi5pbl9rdmVjc1swXS5pb3ZfYmFzZSk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzAzMy19XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0zMDM1PXN0YXRpYyBpbnQgaGFuZGxlX2NvbnRyb2xfcmVtYWluZGVyKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNDctXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzA0ODpcXHRyZXR1cm4gX19oYW5kbGVfY29udHJvbChjb24sIGNvbi1cXHUwMDNldjIuaW5fa3ZlY3NbMF0uaW92X2Jhc2UgLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMwNDktXFx0XFx0XFx0XFx0ICAgICBDRVBIX1BSRUFNQkxFX0lOTElORV9MRU4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzoyOC40ODU4MjU2NzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5NDQxNDMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBDb2RlJ3MgUHVycG9zZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgY29kZS4gRnJvbSB3aGF0IEkgY2FuIGdhdGhlciwgdGhlc2UgYXJlIGFsbCBpbnRlcm5hbCBzdGF0aWMgaGVscGVycy4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQgbWVhbnMgdGhleSdyZSBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBvciBjYWxsZWQgZXh0ZXJuYWxseSwgbGlrZWx5IHVzZWQgZm9yIHNwZWNpZmljIGludGVybmFsIHRhc2tzIHdpdGhpbiBhIGxhcmdlciBtb2R1bGUuXG5cblRoZSBtb3N0IGxpa2VseSBlbnRyeSBwb2ludCBpbnRvIHRoaXMgc2VjdGlvbiBvZiBjb2RlIGxvb2tzIGxpa2UgYGNlcGhfY29uX3YyX3RyeV9yZWFkYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGlzIHByZXR0eSBkZXNjcmlwdGl2ZTsgaXQgc3VnZ2VzdHMgdGhpcyBjb2RlIGlzIHJlc3BvbnNpYmxlIGZvciBhdHRlbXB0aW5nIHRvIHJlYWQgZGF0YSB1c2luZyB0aGUgQ2VwaCBwcm90b2NvbCwgc3BlY2lmaWNhbGx5IHZlcnNpb24gMiwgYW5kIFwidHJ5XCIgaW1wbGllcyBzb21lIHNvcnQgb2YgZXJyb3IgaGFuZGxpbmcgb3IgcG90ZW50aWFsIGZvciBwYXJ0aWFsIHJlYWRzLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBzdGFydCB0byBpbnZlc3RpZ2F0ZSB0aGUgaW5uZXIgd29ya2luZ3MuIEknbGwgZm9jdXMgb24gdGhhdCBmdW5jdGlvbidzIGNhbGwgc3RhY2sgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdy4gVW5kZXJzdGFuZGluZyBob3cgYW5kIHdoZW4gdGhpcyBcInRyeV9yZWFkXCIgZnVuY3Rpb24gZ2V0cyBpbnZva2VkIHdpbGwgYmUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzczLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MzEuOTgwMjQyMzgzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk1NDE0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZXBoX2Nvbl92Ml90cnlfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0zMTAwPXN0YXRpYyBpbnQgcG9wdWxhdGVfaW5faXRlcihzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTY4LVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMxNjk6aW50IGNlcGhfY29uX3YyX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMTcwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6MzIuMDI3MjEwMTI4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzUxNjA3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGNvbmNpc2Ugc3VtbWFyeSBmb3IgYW4gZXhwZXJ0OlxuXG4qKklkZW50aWZ5aW5nIFJlYWQgRW50cnkgUG9pbnRzIGluIHRoZSBDZXBoIENvbm5lY3Rpb24gTW9kdWxlKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgY2VudGVyZWQgYXJvdW5kIHBpbnBvaW50aW5nIHRoZSBrZXkgcmVhZCBlbnRyeSBwb2ludHMgd2l0aGluIHRoZSBDZXBoIGNvbm5lY3Rpb24gaGFuZGxpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgSSd2ZSBpZGVudGlmaWVkIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgYW5kIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAgYXMgcG90ZW50aWFsIGluaXRpYWwgY2FuZGlkYXRlcyBmb3IgaW52ZXN0aWdhdGluZyBob3cgaW5jb21pbmcgZGF0YSBpcyBwcm9jZXNzZWQuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gcGVyZm9ybSBhIHRob3JvdWdoIHNlYXJjaCBvZiB0aGUgY29kZSBiYXNlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHNlcnZlIGFzIGVudHJ5IHBvaW50cyBmb3IgcmVhZCBvcGVyYXRpb25zIGJleW9uZCB0aGUgdHdvIHRoYXQgSSd2ZSBhbHJlYWR5IGNvbWUgYWNyb3NzLiBJJ2xsIG5lZWQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgYWxsIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCByZWFkIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc2OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI3OjM2LjMwMjM3MzkzN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4NjY1MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2VwaF9jb25fdjFfdHJ5X3JlYWR8Y2VwaF9jb25fdjJfdHJ5X3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jZXBoL21lc3Nlbmdlci5jPTE1NDI9c3RhdGljIHZvaWQgY2VwaF9jb25fd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE1NzQtXFx0XFx0aWYgKGNlcGhfbXNncjIoZnJvbV9tc2dyKGNvbi1cXHUwMDNlbXNncikpKVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjE1NzU6XFx0XFx0XFx0cmV0ID0gY2VwaF9jb25fdjJfdHJ5X3JlYWQoY29uKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xNTc2LVxcdFxcdGVsc2VcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxNTc3OlxcdFxcdFxcdHJldCA9IGNlcGhfY29uX3YxX3RyeV9yZWFkKGNvbik7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTU3OC1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM9MTMxND1zdGF0aWMgaW50IHJlYWRfa2VlcGFsaXZlX2FjayhzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xMzI4LSAqL1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jOjEzMjk6aW50IGNlcGhfY29uX3YxX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xMzMwLXtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMxMDA9c3RhdGljIGludCBwb3B1bGF0ZV9pbl9pdGVyKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxNjgtXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM6MzE2OTppbnQgY2VwaF9jb25fdjJfdHJ5X3JlYWQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMxNzAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzozNi4zNDgyNDYxNTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0OTgxMTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ2VwaCBDb25uZWN0aW9uIFByb2Nlc3NpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgQ2VwaCBjb25uZWN0aW9ucyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgY2VwaF9jb25fd29ya2ZuYC4gVGhpcyBpcyB0aGUgY29yZSB3b3JrZXIgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcsIHNvIHRoZSByZWFsIGFjdGlvbiBtdXN0IGJlIGluIGVpdGhlciBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIG9yIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAuIFRob3NlIGFyZSB0aGUgcHJpbWUgc3VzcGVjdHMsIHRoYXQgaXMgd2hlcmUgdGhlIG1lYXQgaXMuIFNob3VsZCBJIGxvb2sgYXQgdGhlIGNhbGxlciwgYGNlcGhfY29uX3dvcmtmbmAsIG9yIHRoZSBjYWxsZWVzLCBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGFuZCBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgPyBJIHRoaW5rIHRoZSBjYWxsZWVzLiBUaGVzZSBgdHJ5X3JlYWRgIGZ1bmN0aW9ucyBhcmUgdGhlIGtleS4gV2FpdCwgaG9sZCBvbi4uLiB0aGV5ICphcmUqIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub24tc3RhdGljLiBOZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXkgYXJlIGV4cG9ydGVkOyBJIGNhbid0IGJlIHN1cmUgd2l0aG91dCB2ZXJpZnlpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6NDAuNjk4MDYwNzIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA1NTMyNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qY2VwaF9jb25fdjFfdHJ5X3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzo0MC43NDYxMjYxMzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MTkyMTc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCB3aXRoIHRoZSBib2xkZWQgaGVhZGVyIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBTeW1ib2wgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gdGhlIHN5bWJvbHMgaW4gcXVlc3Rpb24gYXJlbid0IGRlY2xhcmVkIGFzIGBleHRlcm5gLCB3aGljaCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBtZWFucyB0aGV5IGhhdmUgaW50ZXJuYWwgbGlua2FnZSBhbmQgcmVzaWRlIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIGNvbXBpbGF0aW9uIHVuaXRzLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZSBpbiB3ZWxsLXN0cnVjdHVyZWQgY29kZS4gQnV0LCB0aGV5J3JlIG5vdCBgc3RhdGljYCBlaXRoZXIsIG1lYW5pbmcgdGhleSdyZSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgZXhlY3V0YWJsZSwgdGhvdWdoIHBvdGVudGlhbGx5IHdpdGggaW50ZXJuYWwgdmlzaWJpbGl0eS4gU28sIGdpdmVuIHRoYXQgdGhleSBhcmUgaW4gZGlmZmVyZW50IGZpbGVzLCB0aGV5IGFyZSBkZWZpbml0ZWx5IGRpc3RpbmN0IHN5bWJvbHMsIGV2ZW4gaWYgb25seSB3aXRoaW4gdGhlIGxpbmtlZCBwcm9ncmFtLiBJdCdzIGEgbm9uLXN0YXRpYywgbG9jYWxseSB2aXNpYmxlIHN5bWJvbCBzaXR1YXRpb24g4oCTIGNvbW1vbiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSB1c2VkLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBjZXBoX2Nvbl93b3JrZm5gLiBJJ2xsIHRyYWNlIHRoYXQgZnVuY3Rpb24gdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3ltYm9scyBpbiBxdWVzdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZWlyIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3OTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzo0NC4xODgwNTA5MjNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTMxNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNlcGhfY29uX3dvcmtmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2VwaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTQ2PXN0YXRpYyB2b2lkIGNhbmNlbF9jb24oc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxNDc6c3RhdGljIHZvaWQgY2VwaF9jb25fd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xNDgtc3RhdGljIHZvaWQgY29uX2ZhdWx0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbik7XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXIuYz02MzI9dm9pZCBjZXBoX2Nvbl9pbml0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgdm9pZCAqcHJpdmF0ZSxcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTY0Ni1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y29uLVxcdTAwM2VvdXRfc2VudCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM6NjQ3OlxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZjb24tXFx1MDAzZXdvcmssIGNlcGhfY29uX3dvcmtmbik7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtNjQ4LVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTUyMD1zdGF0aWMgdm9pZCBjb25fZmF1bHRfZmluaXNoKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE1NDEtICovXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM6MTU0MjpzdGF0aWMgdm9pZCBjZXBoX2Nvbl93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE1NDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzo0NC4yMzE5ODY4NjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxMDAwNjA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGUgQ2VwaCBDb25uZWN0aW9uIFdvcmsgRnVuY3Rpb24gQ2hhbmdlKipcblxuT2theSwgc28gYGNlcGhfY29uX3dvcmtmbmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBhbmQgYGNlcGhfY29uX3YyX3RyeV9yZWFkYCBtb3JlIHNpZ25pZmljYW50IHBvaW50cyBvZiBpbnRlcmVzdCDigJMgdGhleSdyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHRoZSBub24tc3RhdGljIGNvZGUuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgYWZmZWN0IHRoZSBvdmVyYWxsIGZsb3cuXG5cbkxldCdzIGV4cGFuZCB0aGUgc2NvcGUuIEkgbmVlZCB0byBzZWUgd2hhdCBlbHNlIGhhcyBiZWVuIHRvdWNoZWQgaW4gdGhpcyBwYXRjaCBiZXlvbmQgdGhvc2UgaW5pdGlhbCByZWFkcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBsaXN0IGlzOiBgcHJvY2Vzc19jb25uZWN0YCAoc3RhdGljKSwgYHByb2Nlc3Nfc2VydmVyX2lkZW50YCAoc3RhdGljKSwgYHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeWAgKHN0YXRpYyksIGFuZCBgcHJvY2Vzc19zZXNzaW9uX3JldHJ5X2dsb2JhbGAgKHN0YXRpYykuIFRoZXNlIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggbWVhbnMgdGhlaXIgc2NvcGUgaXMgbGltaXRlZCBhbmQgc28gaXQgaXMgYW4gaW5kaWNhdGlvbiBvZiBmb2N1c2VkIGFuZCBsb2NhbGlzZWQgbW9kaWZpY2F0aW9uLlxuXG5Ob3cgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBlbGVtZW50cywgcHJpbWFyaWx5IGBDRVBIX0xJQmAsIGFyZSBjb3JyZWN0IGFuZCBjb21wbGV0ZS4gQXJlIHRoZXJlIGFueSBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0aGF0IGhhdmUgYmVlbiBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkPyBBIHF1aWNrIHNjYW4gb2YgYG5ldC9jZXBoL0tjb25maWdgIHNob3VsZCByZXZlYWwgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIGJ1aWxkIGZsYWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM1NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzo0OC45NDE5OTUwODJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NlcGgvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDRVBIX0xJQlxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkNlcGggY29yZSBsaWJyYXJ5XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NCQ1xcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19HQ01cXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fS1JCNVxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAxMjpcXHRcXHRzZWxlY3QgS0VZU1xcbiAgMTM6XFx0XFx0ZGVmYXVsdCBuXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIENob29zZSBZIG9yIE0gaGVyZSB0byBpbmNsdWRlIGNlcGhsaWIsIHdoaWNoIHByb3ZpZGVzIHRoZVxcbiAgMTY6XFx0XFx0ICBjb21tb24gZnVuY3Rpb25hbGl0eSB0byBib3RoIHRoZSBDZXBoIGZpbGVzeXN0ZW0gYW5kXFxuICAxNzpcXHRcXHQgIHRvIHRoZSByYWRvcyBibG9jayBkZXZpY2UgKHJiZCkuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgTW9yZSBpbmZvcm1hdGlvbiBhdCBodHRwczovL2NlcGguaW8vLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBDRVBIX0xJQl9QUkVUVFlERUJVR1xcbiAgMjQ6XFx0XFx0Ym9vbCBcXFwiSW5jbHVkZSBmaWxlOmxpbmUgaW4gY2VwaCBkZWJ1ZyBvdXRwdXRcXFwiXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIENFUEhfTElCXFxuICAyNjpcXHRcXHRkZWZhdWx0IG5cXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIGRlYnVnIG91dHB1dCB3aWxsIGluY2x1ZGUgYSBmaWxlbmFtZSBhbmRcXG4gIDI5OlxcdFxcdCAgbGluZSB0byBhaWQgZGVidWdnaW5nLiAgVGhpcyBpbmNyZWFzZXMga2VybmVsIHNpemUgYW5kIHNsb3dzXFxuICAzMDpcXHRcXHQgIGV4ZWN1dGlvbiBzbGlnaHRseSB3aGVuIGRlYnVnIGNhbGwgc2l0ZXMgYXJlIGVuYWJsZWQgKGUuZy4sXFxuICAzMTpcXHRcXHQgIHZpYSBDT05GSUdfRFlOQU1JQ19ERUJVRykuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIENFUEhfTElCX1VTRV9ETlNfUkVTT0xWRVJcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIlVzZSBpbi1rZXJuZWwgc3VwcG9ydCBmb3IgRE5TIGxvb2t1cFxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gQ0VQSF9MSUJcXG4gIDM4OlxcdFxcdHNlbGVjdCBETlNfUkVTT0xWRVJcXG4gIDM5OlxcdFxcdGRlZmF1bHQgblxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgaG9zdG5hbWVzIChlLmcuIG1vbml0b3IgYWRkcmVzc2VzKSB3aWxsXFxuICA0MjpcXHRcXHQgIGJlIHJlc29sdmVkIHVzaW5nIHRoZSBDT05GSUdfRE5TX1JFU09MVkVSIGZhY2lsaXR5LlxcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHQgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIENPTkZJR19ETlNfUkVTT0xWRVIgY29uc3VsdFxcbiAgNDU6XFx0XFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZG5zX3Jlc29sdmVyLnJzdFxcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI3OjQ4Ljk0MjA1ODQwMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE3ODkzMDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIEV4cGxvcmF0aW9uIGZvciBDZXBoIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgQ0VQSF9MSUJgIHNlZW1zIGxpa2UgdGhlIGtleSBzdGFydGluZyBwb2ludC4gSXQncyB0aGUgY29yZSBDZXBoIGxpYnJhcnksIGFuZCBqdXN0IHRoYXQgc2hvdWxkIHN1ZmZpY2UuIFdhaXQgYSBtaW51dGUuLi4gYENFUEhfTElCYCBpcyBhIHRyaXN0YXRlLCBtZWFuaW5nIGl0IGNhbiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZS4gUGVyZmVjdCEgSWYgd2UncmUgYWltaW5nIGZvciBmdXp6aW5nLCBlbmFibGluZyBgQ0VQSF9MSUJgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IG1vdmUuIEhvd2V2ZXIsIEkgdGhpbmsgaXQgbWlnaHQgbm90IGJlIGVub3VnaCBvbiBpdHMgb3duLiBgQ0VQSF9MSUJgIHByb3ZpZGVzIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnksIGJ1dCB0aGUgYWN0dWFsIGNvbm5lY3Rpb25zIGFyZSBpbml0aWF0ZWQgYnkgaGlnaGVyLWxldmVsIGNvbXBvbmVudHMgbGlrZSB0aGUgZmlsZXN5c3RlbSBvciB0aGUgYmxvY2sgZGV2aWNlLlxuXG5UaGVyZWZvcmUsIHRvIHJlYWxpc3RpY2FsbHkgdHJpZ2dlciBjb25uZWN0aW9ucyBhbmQgZXhwb3NlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIEkgc2hvdWxkIGVuYWJsZSBgQ0VQSF9GU2AgYW5kIGBCTEtfREVWX1JCRGAgYXMgd2VsbC4gVGhlc2UgYXJlIHRoZSBjb21wb25lbnRzIHRoYXQgYXJlIGxpa2VseSB0byBiZSByZXNwb25zaWJsZSBmb3IgdGhlIGNvbm5lY3Rpb24gaW5pdGlhdGlvbi4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYm90aC4gSSBzaG91bGQgaGF2ZSBhIGxvb2sgYXQgYGZzL2NlcGgvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb2YgdGhlc2UgdHdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM3OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI3OjUzLjI1OTk1NDI4NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9jZXBoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDRVBIX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ2VwaCBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDU6XFx0XFx0c2VsZWN0IENFUEhfTElCXFxuICAgNjpcXHRcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbiAgIDc6XFx0XFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuICAgODpcXHRcXHRkZWZhdWx0IG5cXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgQ2hvb3NlIFkgb3IgTSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgbW91bnRpbmcgdGhlXFxuICAxMTpcXHRcXHQgIGV4cGVyaW1lbnRhbCBDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtLiAgQ2VwaCBpcyBhbiBleHRyZW1lbHlcXG4gIDEyOlxcdFxcdCAgc2NhbGFibGUgZmlsZSBzeXN0ZW0gZGVzaWduZWQgdG8gcHJvdmlkZSBoaWdoIHBlcmZvcm1hbmNlLFxcbiAgMTM6XFx0XFx0ICByZWxpYWJsZSBhY2Nlc3MgdG8gcGV0YWJ5dGVzIG9mIHN0b3JhZ2UuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgTW9yZSBpbmZvcm1hdGlvbiBhdCBodHRwczovL2NlcGguaW8vLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIENFUEhfRlNcXG4gIDIwOlxcdGNvbmZpZyBDRVBIX0ZTQ0FDSEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6NTMuMjYwMDQzNDY2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDY3OTQ3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBgQ0VQSF9GU2AgaXMgY29uZmlndXJlZCB0byB1c2UgYENFUEhfTElCYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyB0aGUgZmlsZXN5c3RlbSBuZWVkaW5nIHRoZSBDZXBoIGxpYnJhcnkgdG8gZnVuY3Rpb24uIE5vdywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgYEJMS19ERVZfUkJEYCBpcyBlbmFibGVkIHdpdGhpbiB0aGUgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIEknbGwgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgdG8gY29uZmlybSBldmVyeXRoaW5nIGxvb2tzIGdvb2QgdGhlcmUuIEp1c3QgYSBxdWljayBkb3VibGUtY2hlY2sgdG8gZW5zdXJlIG5vIHVuZXhwZWN0ZWQgY29uZmxpY3RzIGV4aXN0IHdpdGggdGhlIGJsb2NrIGxheWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAyMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjc6NTYuOTY2ODQwODczWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0Y29uZmlnIEJMS19ERVZfUkJEXFxuIDMxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiUmFkb3MgYmxvY2sgZGV2aWNlIChSQkQpXFxcIlxcbiAzMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IEJMT0NLXFxuIDMxODpcXHRcXHRzZWxlY3QgQ0VQSF9MSUJcXG4gMzE5OlxcdFxcdGhlbHBcXG4gMzIwOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBpbmNsdWRlIHRoZSBSYWRvcyBibG9jayBkZXZpY2UsIHdoaWNoIHN0cmlwZXNcXG4gMzIxOlxcdFxcdCAgYSBibG9jayBkZXZpY2Ugb3ZlciBvYmplY3RzIHN0b3JlZCBpbiB0aGUgQ2VwaCBkaXN0cmlidXRlZCBvYmplY3RcXG4gMzIyOlxcdFxcdCAgc3RvcmUuXFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdCAgTW9yZSBpbmZvcm1hdGlvbiBhdCBodHRwOi8vY2VwaC5uZXdkcmVhbS5uZXQvLlxcbiAzMjU6XFx0XFxuIDMyNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDMyNzpcXHRcXG4gMzI4OlxcdGNvbmZpZyBCTEtfREVWX1VCTEtcXG4gMzI5OlxcdFxcdHRyaXN0YXRlIFxcXCJVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXFxcIlxcbiAzMzA6XFx0XFx0c2VsZWN0IElPX1VSSU5HXFxuIDMzMTpcXHRcXHRoZWxwXFxuIDMzMjpcXHRcXHQgIGlvX3VyaW5nIGJhc2VkIHVzZXJzcGFjZSBibG9jayBkcml2ZXIuIFRvZ2V0aGVyIHdpdGggdWJsayBzZXJ2ZXIsIHVibGtcXG4gMzMzOlxcdFxcdCAgaGFzIGJlZW4gd29ya2luZyB3ZWxsLCBidXQgaW50ZXJmYWNlIHdpdGggdXNlcnNwYWNlIG9yIGNvbW1hbmQgZGF0YVxcbiAzMzQ6XFx0XFx0ICBkZWZpbml0aW9uIGlzbid0IGZpbmFsaXplZCB5ZXQsIGFuZCBtaWdodCBjaGFuZ2UgYWNjb3JkaW5nIHRvIGZ1dHVyZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyNzo1Ni45NjY5MjY1ODNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxOTUzNTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ2VwaCBNZXNzZW5nZXIgUmVhZCBQYXRocyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ3ZlIGRlY2lkZWQgYENFUEhfRlNgIGFuZCBgQkxLX0RFVl9SQkRgIGFyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIHVzZWZ1bCBpbiB0aGlzIGludmVzdGlnYXRpb24sIHNvIHRoZXkncmUgZW5hYmxlZC4gTm93LCB0aGUga2V5IGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW50IHJlYWQgcGF0aHMgd2l0aGluIHRoZSBDZXBoIG1lc3NlbmdlciBjb2RlLCBzcGVjaWZpY2FsbHkgdmVyc2lvbiAxIGFuZCB2ZXJzaW9uIDIuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiB0aGUgc3ltYm9scyBpbnZvbHZlZCBpbiByZWFkaW5nIGRhdGEuIEknbSBhbHJlYWR5IGxvb2tpbmcgYXQgYGNlcGhfY29uX3YxX3RyeV9yZWFkYCBhbmQgYGNlcGhfY29uX3YyX3RyeV9yZWFkYC4gVGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoZSB2aWNpbml0eSBvZiB0aGUgbW9kaWZpZWQgY29kZSB0aGF0IEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBJIGhhdmUgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cbkluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjEuY2AsIGl0J3MgY2xlYXIgdGhhdCBgY2VwaF9jb25fdjFfdHJ5X3JlYWRgIGNhbGxzIGBwcm9jZXNzX2Nvbm5lY3RgLiBUaGF0J3MgdGhlIHYxIHBhdGguIEluIGBuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY2AsIHRoaW5ncyBnZXQgYSBsaXR0bGUgbW9yZSBpbnZvbHZlZC4gYGNlcGhfY29uX3YyX3RyeV9yZWFkYCBjYWxscyBgcG9wdWxhdGVfaW5faXRlcmAsIHdoaWNoIGhhbmRsZXMgdGhlIGFjdHVhbCByZWFkaW5nIG9mIHRoZSBkYXRhLCB0aGVuIGl0IGNhbGxzIGBwcm9jZXNzX2NvbnRyb2xgLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjYWxsIGNoYWluIHRoZXJlLiBTcGVjaWZpY2FsbHksIGBwcm9jZXNzX2NvbnRyb2xgIGlzIGNhbGxlZCBmcm9tIGBfX2hhbmRsZV9jb250cm9sYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGhhbmRsZV9jb250cm9sYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAuIFRoZSB2MiBwYXRoIGlzIG1vcmUgY29tcGxleCwgYW5kIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNgIHNwZWNpZmljYWxseSwgYW5kIHRob3JvdWdobHkgcmV2aWV3IHRoZSBjb2RlIHN1cnJvdW5kaW5nIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHJlYWQgcHJvY2VzcyBhbmQgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUzMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI4OjAyLjM4NjQ2NjQ0M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5NTE4NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2VwaF9jb25fdjJfdHJ5X3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmM9MzEwMD1zdGF0aWMgaW50IHBvcHVsYXRlX2luX2l0ZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzE2OC1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMTY5OmludCBjZXBoX2Nvbl92Ml90cnlfcmVhZChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzE3MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI4OjAyLjQzNjQyMjk5OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTE2Njg1NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgZnVuY3Rpb24sIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAsIGFzc3VtaW5nIEknbSB0aGUgZXhwZXJ0OlxuXG4qKkFuYWx5emluZyBgY2VwaF9jb25fdjJfdHJ5X3JlYWRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGNlcGhfY29uX3YyX3RyeV9yZWFkYCBmdW5jdGlvbi4gQmFzZWQgb24gdGhlIG5hbWUgYWxvbmUsIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNvcmUgcmVhZCBvcGVyYXRpb24sIHByb2JhYmx5IGRlYWxpbmcgd2l0aCB0aGUgQ2VwaCBwcm90b2NvbCB2ZXJzaW9uIDIuICBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIHBsYWNlIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrIOKAkyBpcyB0aGlzIGEgZGlyZWN0IHJlYWQgZnJvbSBhIHNvY2tldCwgb3IgaXMgaXQgYWJzdHJhY3RlZCBmdXJ0aGVyPyBXaGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgc2hvdWxkIEkgYW50aWNpcGF0ZT8gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkLCBhcyBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgY29ubmVjdGlvbiBpcyBhIHByaW1lIHN1c3BlY3QgZm9yIHJhY2UgY29uZGl0aW9ucy4gSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgb3ZlcmFsbCBkZXNpZ24uIElzIHRoaXMgYSBibG9ja2luZyByZWFkLCBvciBkb2VzIGl0IGluY29ycG9yYXRlIG5vbi1ibG9ja2luZyBJL08gd2l0aCBjYWxsYmFja3Mgb3IgcG9sbGluZz8gVGhlIGltcGxpY2F0aW9ucyBmb3IgdGhyZWFkIHVzYWdlIGFuZCBzY2FsYWJpbGl0eSBhcmUgdmVyeSBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHRoZSBhcHByb2FjaC4gRmluYWxseSwgZ2l2ZW4gaXQncyBhIFwidHJ5X3JlYWQsXCIgSSdtIGJyYWNpbmcgbXlzZWxmIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBwYXJ0aWFsIHJlYWRzIG9yIHBvdGVudGlhbCBFQUdBSU4gb3IgRVdPVUxEQkxPQ0sgY29uZGl0aW9ucy4gSG93IGRvZXMgaXQgc2lnbmFsIHRvIHRoZSBjYWxsZXIgdGhlIHJlc3VsdHMgb2YgdGhlIHJlYWQ/IElzIGl0IGEgcmV0dXJuIGNvZGUsIGV4Y2VwdGlvbiwgc29tZSBzb3J0IG9mIHN0YXR1cyBmbGFnPyBUaW1lIHRvIGdldCByZWFkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI4OjA2LjU1MzExMDc5M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjkyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE2OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzE2OTpcXHRpbnQgY2VwaF9jb25fdjJfdHJ5X3JlYWQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbjMxNzA6XFx0e1xcbjMxNzE6XFx0XFx0aW50IHJldDtcXG4zMTcyOlxcdFxcbjMxNzM6XFx0XFx0ZG91dChcXFwiJXMgY29uICVwIHN0YXRlICVkIG5lZWQgJXp1XFxcXG5cXFwiLCBfX2Z1bmNfXywgY29uLCBjb24tXFx1MDAzZXN0YXRlLFxcbjMxNzQ6XFx0XFx0ICAgICBpb3ZfaXRlcl9jb3VudChcXHUwMDI2Y29uLVxcdTAwM2V2Mi5pbl9pdGVyKSk7XFxuMzE3NTpcXHRcXG4zMTc2OlxcdFxcdGlmIChjb24tXFx1MDAzZXN0YXRlID09IENFUEhfQ09OX1NfUFJFT1BFTilcXG4zMTc3OlxcdFxcdFxcdHJldHVybiAwO1xcbjMxNzg6XFx0XFxuMzE3OTpcXHRcXHQvKlxcbjMxODA6XFx0XFx0ICogV2Ugc2hvdWxkIGFsd2F5cyBoYXZlIHNvbWV0aGluZyBwZW5kaW5nIGhlcmUuICBJZiBub3QsXFxuMzE4MTpcXHRcXHQgKiBhdm9pZCBjYWxsaW5nIHBvcHVsYXRlX2luX2l0ZXIoKSBhcyBpZiB3ZSByZWFkIHNvbWV0aGluZ1xcbjMxODI6XFx0XFx0ICogKGNlcGhfdGNwX3JlY3YoKSB3b3VsZCBpbW1lZGlhdGVseSByZXR1cm4gMSkuXFxuMzE4MzpcXHRcXHQgKi9cXG4zMTg0OlxcdFxcdGlmIChXQVJOX09OKCFpb3ZfaXRlcl9jb3VudChcXHUwMDI2Y29uLVxcdTAwM2V2Mi5pbl9pdGVyKSkpXFxuMzE4NTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuMzE4NjpcXHRcXG4zMTg3OlxcdFxcdGZvciAoOzspIHtcXG4zMTg4OlxcdFxcdFxcdHJldCA9IGNlcGhfdGNwX3JlY3YoY29uKTtcXG4zMTg5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4zMTkwOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzE5MTpcXHRcXG4zMTkyOlxcdFxcdFxcdHJldCA9IHBvcHVsYXRlX2luX2l0ZXIoY29uKTtcXG4zMTkzOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMCkge1xcbjMxOTQ6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiAhY29uLVxcdTAwM2VlcnJvcl9tc2cpXFxuMzE5NTpcXHRcXHRcXHRcXHRcXHRjb24tXFx1MDAzZWVycm9yX21zZyA9IFxcXCJyZWFkIHByb2Nlc3NpbmcgZXJyb3JcXFwiO1xcbjMxOTY6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zMTk3OlxcdFxcdFxcdH1cXG4zMTk4OlxcdFxcdH1cXG4zMTk5OlxcdH1cXG4zMjAwOlxcdFxcbjMyMDE6XFx0c3RhdGljIHZvaWQgcXVldWVfZGF0YShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24sIHN0cnVjdCBjZXBoX21zZyAqbXNnKVxcbjMyMDI6XFx0e1xcbjMyMDM6XFx0XFx0c3RydWN0IGJpb192ZWMgYnY7XFxuMzIwNDpcXHRcXG4zMjA1OlxcdFxcdGNvbi1cXHUwMDNldjIub3V0X2VwaWwuZGF0YV9jcmMgPSAtMTtcXG4zMjA2OlxcdFxcdGNlcGhfbXNnX2RhdGFfY3Vyc29yX2luaXQoXFx1MDAyNmNvbi1cXHUwMDNldjIub3V0X2N1cnNvciwgbXNnLFxcbjMyMDc6XFx0XFx0XFx0XFx0XFx0ICBkYXRhX2xlbihtc2cpKTtcXG4zMjA4OlxcdFxcbjMyMDk6XFx0XFx0Z2V0X2J2ZWNfYXQoXFx1MDAyNmNvbi1cXHUwMDNldjIub3V0X2N1cnNvciwgXFx1MDAyNmJ2KTtcXG4zMjEwOlxcdFxcdHNldF9vdXRfYnZlYyhjb24sIFxcdTAwMjZidiwgdHJ1ZSk7XFxuMzIxMTpcXHRcXHRjb24tXFx1MDAzZXYyLm91dF9zdGF0ZSA9IE9VVF9TX1FVRVVFX0RBVEFfQ09OVDtcXG4zMjEyOlxcdH1cXG4zMjEzOlxcdFxcbjMyMTQ6XFx0c3RhdGljIHZvaWQgcXVldWVfZGF0YV9jb250KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwgc3RydWN0IGNlcGhfbXNnICptc2cpXFxuMzIxNTpcXHR7XFxuMzIxNjpcXHRcXHRzdHJ1Y3QgYmlvX3ZlYyBidjtcXG4zMjE3OlxcdFxcbjMyMTg6XFx0XFx0Y29uLVxcdTAwM2V2Mi5vdXRfZXBpbC5kYXRhX2NyYyA9IGNlcGhfY3JjMzJjX3BhZ2UoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI4OjA2LjU1MzM0MjMzM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc4MzMxMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEhlYXJ0IG9mIHRoZSBNYXR0ZXIqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uLiBJIG5lZWQgdG8gYmFja3RyYWNrIGp1c3QgYSBiaXQuIEkgd2FzIHNraW1taW5nLCBidXQgbm93IGl0J3Mgc2lua2luZyBpbi4gSSBqdXN0IHJlYWxpemVkIHRoYXQgdGhlIGZ1bmN0aW9uIEkgd2FzIG92ZXJsb29raW5nLCBgcG9wdWxhdGVfaW5faXRlcmAsIHRoYXQncyAqYWN0dWFsbHkqIHdoZXJlIHRoZSBjb3JlIHByb2Nlc3Npbmcgb2YgdGhlIGRhdGEgdGFrZXMgcGxhY2UhIFRoYXQncyB0aGUga2V5LCB0aGUgZW5naW5lLiBJIG5lZWQgdG8gemVybyBpbiBvbiAqdGhhdCogZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIG1lY2hhbmljcy4gSSBoYWQgaW5pdGlhbGx5IHpvb21lZCBvdXQgdG9vIG11Y2guIE5vdywgdGhlIGRldGFpbHMgb2YgaG93IGl0IHdvcmtzIGFyZSBnb2luZyB0byBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBlbnRpcmUgc3lzdGVtLiBUaW1lIHRvIGRlbHZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQxNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjg6MDkuOTMxNjc3MDU0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTAwOlxcdHN0YXRpYyBpbnQgcG9wdWxhdGVfaW5faXRlcihzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuMzEwMTpcXHR7XFxuMzEwMjpcXHRcXHRpbnQgcmV0O1xcbjMxMDM6XFx0XFxuMzEwNDpcXHRcXHRkb3V0KFxcXCIlcyBjb24gJXAgc3RhdGUgJWQgaW5fc3RhdGUgJWRcXFxcblxcXCIsIF9fZnVuY19fLCBjb24sIGNvbi1cXHUwMDNlc3RhdGUsXFxuMzEwNTpcXHRcXHQgICAgIGNvbi1cXHUwMDNldjIuaW5fc3RhdGUpO1xcbjMxMDY6XFx0XFx0V0FSTl9PTihpb3ZfaXRlcl9jb3VudChcXHUwMDI2Y29uLVxcdTAwM2V2Mi5pbl9pdGVyKSk7XFxuMzEwNzpcXHRcXG4zMTA4OlxcdFxcdGlmIChjb24tXFx1MDAzZXN0YXRlID09IENFUEhfQ09OX1NfVjJfQkFOTkVSX1BSRUZJWCkge1xcbjMxMDk6XFx0XFx0XFx0cmV0ID0gcHJvY2Vzc19iYW5uZXJfcHJlZml4KGNvbik7XFxuMzExMDpcXHRcXHR9IGVsc2UgaWYgKGNvbi1cXHUwMDNlc3RhdGUgPT0gQ0VQSF9DT05fU19WMl9CQU5ORVJfUEFZTE9BRCkge1xcbjMxMTE6XFx0XFx0XFx0cmV0ID0gcHJvY2Vzc19iYW5uZXJfcGF5bG9hZChjb24pO1xcbjMxMTI6XFx0XFx0fSBlbHNlIGlmICgoY29uLVxcdTAwM2VzdGF0ZSBcXHUwMDNlPSBDRVBIX0NPTl9TX1YyX0hFTExPIFxcdTAwMjZcXHUwMDI2XFxuMzExMzpcXHRcXHRcXHQgICAgY29uLVxcdTAwM2VzdGF0ZSBcXHUwMDNjPSBDRVBIX0NPTl9TX1YyX1NFU1NJT05fUkVDT05ORUNUKSB8fFxcbjMxMTQ6XFx0XFx0XFx0ICAgY29uLVxcdTAwM2VzdGF0ZSA9PSBDRVBIX0NPTl9TX09QRU4pIHtcXG4zMTE1OlxcdFxcdFxcdHN3aXRjaCAoY29uLVxcdTAwM2V2Mi5pbl9zdGF0ZSkge1xcbjMxMTY6XFx0XFx0XFx0Y2FzZSBJTl9TX0hBTkRMRV9QUkVBTUJMRTpcXG4zMTE3OlxcdFxcdFxcdFxcdHJldCA9IGhhbmRsZV9wcmVhbWJsZShjb24pO1xcbjMxMTg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzExOTpcXHRcXHRcXHRjYXNlIElOX1NfSEFORExFX0NPTlRST0w6XFxuMzEyMDpcXHRcXHRcXHRcXHRyZXQgPSBoYW5kbGVfY29udHJvbChjb24pO1xcbjMxMjE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzEyMjpcXHRcXHRcXHRjYXNlIElOX1NfSEFORExFX0NPTlRST0xfUkVNQUlOREVSOlxcbjMxMjM6XFx0XFx0XFx0XFx0cmV0ID0gaGFuZGxlX2NvbnRyb2xfcmVtYWluZGVyKGNvbik7XFxuMzEyNDpcXHRcXHRcXHRcXHRicmVhaztcXG4zMTI1OlxcdFxcdFxcdGNhc2UgSU5fU19QUkVQQVJFX1JFQURfREFUQTpcXG4zMTI2OlxcdFxcdFxcdFxcdHJldCA9IHByZXBhcmVfcmVhZF9kYXRhKGNvbik7XFxuMzEyNzpcXHRcXHRcXHRcXHRicmVhaztcXG4zMTI4OlxcdFxcdFxcdGNhc2UgSU5fU19QUkVQQVJFX1JFQURfREFUQV9DT05UOlxcbjMxMjk6XFx0XFx0XFx0XFx0cHJlcGFyZV9yZWFkX2RhdGFfY29udChjb24pO1xcbjMxMzA6XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4zMTMxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMxMzI6XFx0XFx0XFx0Y2FzZSBJTl9TX1BSRVBBUkVfUkVBRF9FTkNfUEFHRTpcXG4zMTMzOlxcdFxcdFxcdFxcdHByZXBhcmVfcmVhZF9lbmNfcGFnZShjb24pO1xcbjMxMzQ6XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4zMTM1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMxMzY6XFx0XFx0XFx0Y2FzZSBJTl9TX1BSRVBBUkVfU1BBUlNFX0RBVEE6XFxuMzEzNzpcXHRcXHRcXHRcXHRyZXQgPSBwcmVwYXJlX3NwYXJzZV9yZWFkX2RhdGEoY29uKTtcXG4zMTM4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMxMzk6XFx0XFx0XFx0Y2FzZSBJTl9TX1BSRVBBUkVfU1BBUlNFX0RBVEFfQ09OVDpcXG4zMTQwOlxcdFxcdFxcdFxcdHJldCA9IHByZXBhcmVfc3BhcnNlX3JlYWRfY29udChjb24pO1xcbjMxNDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzE0MjpcXHRcXHRcXHRjYXNlIElOX1NfSEFORExFX0VQSUxPR1VFOlxcbjMxNDM6XFx0XFx0XFx0XFx0cmV0ID0gaGFuZGxlX2VwaWxvZ3VlKGNvbik7XFxuMzE0NDpcXHRcXHRcXHRcXHRicmVhaztcXG4zMTQ1OlxcdFxcdFxcdGNhc2UgSU5fU19GSU5JU0hfU0tJUDpcXG4zMTQ2OlxcdFxcdFxcdFxcdGZpbmlzaF9za2lwKGNvbik7XFxuMzE0NzpcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbjMxNDg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzE0OTpcXHRcXHRcXHRkZWZhdWx0OlxcbjMxNTA6XFx0XFx0XFx0XFx0V0FSTigxLCBcXFwiYmFkIGluX3N0YXRlICVkXFxcIiwgY29uLVxcdTAwM2V2Mi5pbl9zdGF0ZSk7XFxuMzE1MTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTUyOlxcdFxcdFxcdH1cXG4zMTUzOlxcdFxcdH0gZWxzZSB7XFxuMzE1NDpcXHRcXHRcXHRXQVJOKDEsIFxcXCJiYWQgc3RhdGUgJWRcXFwiLCBjb24tXFx1MDAzZXN0YXRlKTtcXG4zMTU1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMxNTY6XFx0XFx0fVxcbjMxNTc6XFx0XFx0aWYgKHJldCkge1xcbjMxNTg6XFx0XFx0XFx0ZG91dChcXFwiJXMgY29uICVwIGVycm9yICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgY29uLCByZXQpO1xcbjMxNTk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjg6MDkuOTMxODU5Njc0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzE5MjY2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBFbnRyeSBQb2ludHMgZm9yIENlcGggQ29ubmVjdGlvbiBWZXJzaW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gZHJpbGxpbmcgZG93biBpbnRvIHRoZSBjb25uZWN0aW9uIGhhbmRsaW5nIHdpdGhpbiBDZXBoLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB2ZXJzaW9uaW5nLiBJdCdzIGNsZWFyIHRoYXQgYGNlcGhfY29uX3YyX3RyeV9yZWFkYCBpcyB0aGUgZGVzaWduYXRlZCBlbnRyeSBwb2ludCBmb3IgdjIgY29ubmVjdGlvbnMg4oCTIG5vIHN1cnByaXNlcyB0aGVyZS4gVGhhdCdzIHByZWNpc2VseSB3aGVyZSBJJ2QgZXhwZWN0IHRoZSB2MiBuZWdvdGlhdGlvbiBhbmQgZGF0YSBwYXJzaW5nIHRvIGJlZ2luLlxuXG5CdXQgdGhlIHJlYWwgcXVlc3Rpb24gZ25hd2luZyBhdCBtZSBpcyBob3cgdjEgaXMgaGFuZGxlZC4gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGlzIGFyY2hpdGVjdHVyZT8gSXMgdGhlcmUgYSBzZXBhcmF0ZSwgZGVkaWNhdGVkIGZ1bmN0aW9uIGZvciB2MSBuZWdvdGlhdGlvbiwgb3IgaXMgdGhlcmUgYSB1bmlmaWVkIGVudHJ5IHBvaW50IHRoYXQgYnJhbmNoZXMgYmFzZWQgb24gdmVyc2lvbiBkdXJpbmcgdGhlIGluaXRpYWwgaGFuZHNoYWtlPyBLbm93aW5nIHRoZSBhbnN3ZXIgdG8gdGhhdCB3aWxsIGRldGVybWluZSBob3cgdG8gZGVidWcgYW4gZXhpc3RpbmcgaXNzdWUgb24gdGhlIG5ldHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjAzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyODoxNC4yMDM3ODg1ODNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMjksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMjk6XFx0aW50IGNlcGhfY29uX3YxX3RyeV9yZWFkKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbilcXG4xMzMwOlxcdHtcXG4xMzMxOlxcdFxcdGludCByZXQgPSAtMTtcXG4xMzMyOlxcdFxcbjEzMzM6XFx0bW9yZTpcXG4xMzM0OlxcdFxcdGRvdXQoXFxcInRyeV9yZWFkIHN0YXJ0ICVwIHN0YXRlICVkXFxcXG5cXFwiLCBjb24sIGNvbi1cXHUwMDNlc3RhdGUpO1xcbjEzMzU6XFx0XFx0aWYgKGNvbi1cXHUwMDNlc3RhdGUgIT0gQ0VQSF9DT05fU19WMV9CQU5ORVIgXFx1MDAyNlxcdTAwMjZcXG4xMzM2OlxcdFxcdCAgICBjb24tXFx1MDAzZXN0YXRlICE9IENFUEhfQ09OX1NfVjFfQ09OTkVDVF9NU0cgXFx1MDAyNlxcdTAwMjZcXG4xMzM3OlxcdFxcdCAgICBjb24tXFx1MDAzZXN0YXRlICE9IENFUEhfQ09OX1NfT1BFTilcXG4xMzM4OlxcdFxcdFxcdHJldHVybiAwO1xcbjEzMzk6XFx0XFxuMTM0MDpcXHRcXHRCVUdfT04oIWNvbi1cXHUwMDNlc29jayk7XFxuMTM0MTpcXHRcXG4xMzQyOlxcdFxcdGRvdXQoXFxcInRyeV9yZWFkIHRhZyAlZCBpbl9iYXNlX3BvcyAlZFxcXFxuXFxcIiwgY29uLVxcdTAwM2V2MS5pbl90YWcsXFxuMTM0MzpcXHRcXHQgICAgIGNvbi1cXHUwMDNldjEuaW5fYmFzZV9wb3MpO1xcbjEzNDQ6XFx0XFxuMTM0NTpcXHRcXHRpZiAoY29uLVxcdTAwM2VzdGF0ZSA9PSBDRVBIX0NPTl9TX1YxX0JBTk5FUikge1xcbjEzNDY6XFx0XFx0XFx0cmV0ID0gcmVhZF9wYXJ0aWFsX2Jhbm5lcihjb24pO1xcbjEzNDc6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbjEzNDg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTM0OTpcXHRcXHRcXHRyZXQgPSBwcm9jZXNzX2Jhbm5lcihjb24pO1xcbjEzNTA6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTM1MTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMzUyOlxcdFxcbjEzNTM6XFx0XFx0XFx0Y29uLVxcdTAwM2VzdGF0ZSA9IENFUEhfQ09OX1NfVjFfQ09OTkVDVF9NU0c7XFxuMTM1NDpcXHRcXG4xMzU1OlxcdFxcdFxcdC8qXFxuMTM1NjpcXHRcXHRcXHQgKiBSZWNlaXZlZCBiYW5uZXIgaXMgZ29vZCwgZXhjaGFuZ2UgY29ubmVjdGlvbiBpbmZvLlxcbjEzNTc6XFx0XFx0XFx0ICogRG8gbm90IHJlc2V0IG91dF9rdmVjLCBhcyBzZW5kaW5nIG91ciBiYW5uZXIgcmFjZWRcXG4xMzU4OlxcdFxcdFxcdCAqIHdpdGggcmVjZWl2aW5nIHBlZXIgYmFubmVyIGFmdGVyIGNvbm5lY3QgY29tcGxldGVkLlxcbjEzNTk6XFx0XFx0XFx0ICovXFxuMTM2MDpcXHRcXHRcXHRyZXQgPSBwcmVwYXJlX3dyaXRlX2Nvbm5lY3QoY29uKTtcXG4xMzYxOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEzNjI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTM2MzpcXHRcXHRcXHRwcmVwYXJlX3JlYWRfY29ubmVjdChjb24pO1xcbjEzNjQ6XFx0XFxuMTM2NTpcXHRcXHRcXHQvKiBTZW5kIGNvbm5lY3Rpb24gaW5mbyBiZWZvcmUgYXdhaXRpbmcgcmVzcG9uc2UgKi9cXG4xMzY2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEzNjc6XFx0XFx0fVxcbjEzNjg6XFx0XFxuMTM2OTpcXHRcXHRpZiAoY29uLVxcdTAwM2VzdGF0ZSA9PSBDRVBIX0NPTl9TX1YxX0NPTk5FQ1RfTVNHKSB7XFxuMTM3MDpcXHRcXHRcXHRyZXQgPSByZWFkX3BhcnRpYWxfY29ubmVjdChjb24pO1xcbjEzNzE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbjEzNzI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTM3MzpcXHRcXHRcXHRyZXQgPSBwcm9jZXNzX2Nvbm5lY3QoY29uKTtcXG4xMzc0OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEzNzU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTM3NjpcXHRcXHRcXHRnb3RvIG1vcmU7XFxuMTM3NzpcXHRcXHR9XFxuMTM3ODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjg6MTQuMjAzOTAxMzkzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NzkzMDA3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogQ2VwaCBOZXR3b3JrIFByb3RvY29sIFBhcnNpbmcqKlxuXG5Pa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgSSd2ZSBnb3QgYSBjbGVhciBkaXJlY3Rpb24uIEZvY3VzaW5nIG9uIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAgYW5kIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAgaXMgdGhlIHJpZ2h0IG1vdmUuIFRoZXkgYXJlIGtleSBiZWNhdXNlIHRoZXkgYXJlIG5vbi1zdGF0aWMgYW5kIG5vdCBpbmxpbmVkLCBhbmQgdGhleSBhcmUgY2FsbGVkIGZyb20gYW5vdGhlciBmaWxlLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoZXkncmUgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBDRVBIX0xJQmAgaXMgb2J2aW91c2x5IGVzc2VudGlhbCwgYW5kIGBDRVBIX0ZTYCBhbmQgYEJMS19ERVZfUkJEYCBhcmUgdGhlIGtleSB1c2VycyB0aGF0IHdpbGwgZXhlcmNpc2UgdGhlIGNvZGUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSB0aHJlZSBhcmUgZW5hYmxlZDogYENFUEhfTElCYCwgYENFUEhfRlNgLCBgQkxLX0RFVl9SQkRgLlxuXG5BaCwgdGhpcyBwYXRjaC4uLiBpdCdzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UhIFJlcGxhY2luZyBgV0FSTl9PTmAgd2l0aCBwcm9wZXIgZXJyb3IgcmV0dXJucyBpbiB0aGUgbmV0d29yayBwcm90b2NvbCBwYXJzaW5nIGlzIGdvbGQuIEEgYFdBUk5fT05gIGNhbiBiZSBhIGRlYXRoIGtuZWxsIGluIGZ1enppbmc6IGl0IGNhbiB0cmlnZ2VyIHN5emthbGxlciB0byB0cmVhdCBpdCBhcyBhIGNyYXNoIHdoZW4gaXQncyBqdXN0IGEgd2FybmluZy4gVGhpcyBwYXRjaCBpcyB0YWtpbmcgYSBwb3RlbnRpYWwgZmFsc2UtcG9zaXRpdmUgY3Jhc2ggYW5kIHR1cm5pbmcgaXQgaW50byBhIHJlYWwsIGZ1enphYmxlLCBlcnJvciBwYXRoLiBJdCdzIGhhbmRsaW5nIGludmFsaWQgcHJvdG9jb2wgc3RhdGVzIGdyYWNlZnVsbHksIGFsbG93aW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHRvIHJlYWN0LiBUaGF0IGlzICphYnNvbHV0ZWx5KiB3b3J0aCBmdXp6aW5nLiBJdCBvcGVucyB1cCBhIG5ldyBhdmVudWUgZm9yIGRpc2NvdmVyaW5nIHBvdGVudGlhbGx5IGhpZGRlbiBsb2dpYyBmbGF3cyB3aXRoaW4gdGhlIHByb3RvY29sJ3MgZXJyb3IgaGFuZGxpbmcuXG5cbkFscmlnaHQsIGxldCdzIHN1bW1hcml6ZSBteSBmaW5kaW5ncyB0byBlbnN1cmUgSSdtIGNsZWFyOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIFRoaXMgaXMgYSBoaWdoLXZhbHVlIHBhdGNoLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBjZXBoX2Nvbl92MV90cnlfcmVhZGAsIGBjZXBoX2Nvbl92Ml90cnlfcmVhZGAgLSBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMuXG4qICAgKipFbmFibGVDb25maWdzOioqIGBDRVBIX0xJQmAsIGBDRVBIX0ZTYCwgYEJMS19ERVZfUkJEYCAtIFJlcXVpcmVkIGZvciB0aGUgY29kZSB0byBiZSBleGVyY2lzZWQuXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoJ3MgY2hhbmdlIHRvIGVycm9yIGhhbmRsaW5nIGluIHRoZSBDZXBoIG5ldHdvcmsgcHJvdG9jb2wgcGFyc2luZyAobWVzc2VuZ2VyIHYxIGFuZCB2MikgaXMgdGhlIGNyaXRpY2FsIGVsZW1lbnQuIFRoaXMgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCB3aWxsIGV4cG9zZSBwb3RlbnRpYWwgYnVncyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBtaXNzZWQgZHVlIHRvIHRoZSBwcmV2aW91cyB3YXJuaW5nIGhhbmRsaW5nLCBhbmQgZW5hYmxlIGEgbW9yZSByb2J1c3QgYW5kIGNvbXBsZXRlIGZ1enppbmcgcnVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU3MSwiT3V0cHV0VG9rZW5zIjoxMzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyODoyMi43ODMyMDQyNzdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDI1NTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0VQSF9MSUJcIixcbiAgICBcIkNFUEhfRlNcIixcbiAgICBcIkJMS19ERVZfUkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2VwaF9jb25fdjFfdHJ5X3JlYWRcIixcbiAgICBcImNlcGhfY29uX3YyX3RyeV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgV0FSTl9PTiB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmV0dXJucyBpbiB0aGUgQ2VwaCBuZXR3b3JrIHByb3RvY29sIHBhcnNpbmcgbG9naWMgKG1lc3NlbmdlciB2MSBhbmQgdjIpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwcm90b2NvbCBjb2RlIHRoYXQgcHJldmVudHMgZmFsc2UtcG9zaXRpdmUgY3Jhc2ggcmVwb3J0cyBhbmQgY29ycmVjdGx5IGhhbmRsZXMgaW52YWxpZCBwcm90b2NvbCBzdGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0VQSF9MSUJcIixcbiAgICBcIkNFUEhfRlNcIixcbiAgICBcIkJMS19ERVZfUkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2VwaF9jb25fdjFfdHJ5X3JlYWRcIixcbiAgICBcImNlcGhfY29uX3YyX3RyeV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgV0FSTl9PTiB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmV0dXJucyBpbiB0aGUgQ2VwaCBuZXR3b3JrIHByb3RvY29sIHBhcnNpbmcgbG9naWMgKG1lc3NlbmdlciB2MSBhbmQgdjIpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwcm90b2NvbCBjb2RlIHRoYXQgcHJldmVudHMgZmFsc2UtcG9zaXRpdmUgY3Jhc2ggcmVwb3J0cyBhbmQgY29ycmVjdGx5IGhhbmRsZXMgaW52YWxpZCBwcm90b2NvbCBzdGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI4OjIyLjg2NzQ2ODA3OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NzYwOTIyNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMToyODoyMi44NjgxMjQ3NjhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA5NzU0MjAwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHNldmVyYWwgV0FSTl9PTigpIHN0YXRlbWVudHMgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGxvZ2dpbmcgaW4gdGhlIENlcGggbWVzc2VuZ2VyIHByb3RvY29sIChib3RoIHYxIGFuZCB2MikuIEl0IGNoZWNrcyBmb3IgaW52YWxpZCBzZXF1ZW5jZSBudW1iZXJzLCBtaXNzaW5nIHJlcXVpcmVkIHByb3RvY29sIGZlYXR1cmVzLCBhbmQgaW5jb3JyZWN0IHNlcnZlciBjb29raWVzLCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSB3YXJuaW5nLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgbm9yIGRvIHRoZXkgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OTQ0Y2MwMGQ0YzFiZjJjZWI3ODYzNDdmYzg5NGEyMjc2ZDg2N2QyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTE6MjY6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYyBiL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXG5pbmRleCBjOWUwMDJkOTYzMTkwLi5kZjIyNDhiN2IwMjY1IDEwMDY0NFxuLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmNcbisrKyBiL25ldC9jZXBoL21lc3Nlbmdlcl92MS5jXG5AQCAtODk4LDggKzg5OCwxNSBAQCBzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4gXHRcdCAgICAgY29uLVx1MDAzZXYxLnBlZXJfZ2xvYmFsX3NlcSxcbiBcdFx0ICAgICBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpLFxuIFx0XHQgICAgIGNvbi1cdTAwM2V2MS5jb25uZWN0X3NlcSk7XG4tXHRcdFdBUk5fT04oY29uLVx1MDAzZXYxLmNvbm5lY3Rfc2VxICE9XG4tXHRcdFx0bGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSk7XG4rXHRcdGlmIChjb24tXHUwMDNldjEuY29ubmVjdF9zZXEgIT0gbGUzMl90b19jcHUoY29uLVx1MDAzZXYxLmluX3JlcGx5LmNvbm5lY3Rfc2VxKSkge1xuK1x0XHRcdHByX2VycihcIiVzJWxsZCAlcyBjb25uZWN0X3NlcSBtaXNtYXRjaCwgZXhwZWN0ZWQgJXUsIGdvdCAldVxcblwiLFxuK1x0XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbitcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpLFxuK1x0XHRcdCAgICAgICBjb24tXHUwMDNldjEuY29ubmVjdF9zZXEsXG4rXHRcdFx0ICAgICAgIGxlMzJfdG9fY3B1KGNvbi1cdTAwM2V2MS5pbl9yZXBseS5jb25uZWN0X3NlcSkpO1xuK1x0XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcImNvbm5lY3Rfc2VxIG1pc21hdGNoXCI7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4gXG4gXHRcdGlmIChjb24tXHUwMDNldjEuaW5fcmVwbHkuZmxhZ3MgXHUwMDI2IENFUEhfTVNHX0NPTk5FQ1RfTE9TU1kpXG4gXHRcdFx0Y2VwaF9jb25fZmxhZ19zZXQoY29uLCBDRVBIX0NPTl9GX0xPU1NZVFgpO1xuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlcl92Mi5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcbmluZGV4IDA1ZjZlZWEyOTlmYzAuLmQ3MDZjZGJlMGVkMmQgMTAwNjQ0XG4tLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXJfdjIuY1xuKysrIGIvbmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmNcbkBAIC0yNTI5LDE0ICsyNTI5LDMzIEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXJ2ZXJfaWRlbnQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxuIFx0Y29uLVx1MDAzZXBlZXJfbmFtZS5udW0gPSBjcHVfdG9fbGU2NChnbG9iYWxfaWQpO1xuIFx0Y29uLVx1MDAzZXYyLnBlZXJfZ2xvYmFsX3NlcSA9IGdsb2JhbF9zZXE7XG4gXHRjb24tXHUwMDNlcGVlcl9mZWF0dXJlcyA9IGZlYXR1cmVzO1xuLVx0V0FSTl9PTihyZXF1aXJlZF9mZWF0dXJlcyBcdTAwMjYgfmNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMpO1xuK1x0aWYgKHJlcXVpcmVkX2ZlYXR1cmVzIFx1MDAyNiB+Y2xpZW50LVx1MDAzZXN1cHBvcnRlZF9mZWF0dXJlcykge1xuK1x0XHRwcl9lcnIoXCIlcyVsbGQgJXMgbWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcywgbXkgc3VwcG9ydGVkIDB4JWxseCwgc2VydmVyJ3MgcmVxdWlyZWQgMHglbGx4XFxuXCIsXG4rXHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbitcdFx0ICAgICAgIGNlcGhfcHJfYWRkcihcdTAwMjZjb24tXHUwMDNlcGVlcl9hZGRyKSxcbitcdFx0ICAgICAgIGNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMsIHJlcXVpcmVkX2ZlYXR1cmVzKTtcbitcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwibWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlc1wiO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiBcdGNvbi1cdTAwM2V2Mi5zZXJ2ZXJfY29va2llID0gY29va2llO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBDRVBIX01TR19DT05ORUNUX0xPU1NZKSB7XG4gXHRcdGNlcGhfY29uX2ZsYWdfc2V0KGNvbiwgQ0VQSF9DT05fRl9MT1NTWVRYKTtcbi1cdFx0V0FSTl9PTihjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSk7XG4rXHRcdGlmIChjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSkge1xuK1x0XHRcdHByX2VycihcIiVzJWxsZCAlcyBzZXJ2ZXJfY29va2llIGlzIHNldCBmb3IgbG9zc3kgY29ubmVjdGlvblxcblwiLFxuK1x0XHRcdCAgICAgICBFTlRJVFlfTkFNRShjb24tXHUwMDNlcGVlcl9uYW1lKSxcbitcdFx0XHQgICAgICAgY2VwaF9wcl9hZGRyKFx1MDAyNmNvbi1cdTAwM2VwZWVyX2FkZHIpKTtcbitcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJzZXJ2ZXJfY29va2llIGlzIHNldCBmb3IgbG9zc3kgY29ubmVjdGlvblwiO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRXQVJOX09OKCFjb24tXHUwMDNldjIuc2VydmVyX2Nvb2tpZSk7XG4rXHRcdGlmICghY29uLVx1MDAzZXYyLnNlcnZlcl9jb29raWUpIHtcbitcdFx0XHRwcl9lcnIoXCIlcyVsbGQgJXMgc2VydmVyX2Nvb2tpZSBpcyBub3Qgc2V0IGZvciBsb3NzbGVzcyBjb25uZWN0aW9uXFxuXCIsXG4rXHRcdFx0ICAgICAgIEVOVElUWV9OQU1FKGNvbi1cdTAwM2VwZWVyX25hbWUpLFxuK1x0XHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkcikpO1xuK1x0XHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcInNlcnZlcl9jb29raWUgaXMgbm90IHNldCBmb3IgbG9zc2xlc3MgY29ubmVjdGlvblwiO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRjbGVhcl9pbl9zaWduX2t2ZWNzKGNvbik7XG5AQCAtMjYxOCw3ICsyNjM3LDE0IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXNzaW9uX3JldHJ5KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbixcbiBcdGNlcGhfZGVjb2RlXzY0X3NhZmUoXHUwMDI2cCwgZW5kLCBjb25uZWN0X3NlcSwgYmFkKTtcbiBcbiBcdGRvdXQoXCIlcyBjb24gJXAgY29ubmVjdF9zZXEgJWxsdVxcblwiLCBfX2Z1bmNfXywgY29uLCBjb25uZWN0X3NlcSk7XG4tXHRXQVJOX09OKGNvbm5lY3Rfc2VxIFx1MDAzYz0gY29uLVx1MDAzZXYyLmNvbm5lY3Rfc2VxKTtcbitcdGlmIChjb25uZWN0X3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5jb25uZWN0X3NlcSkge1xuK1x0XHRwcl9lcnIoXCIlcyVsbGQgJXMgY29ubmVjdF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcblwiLFxuK1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdCAgICAgICBjb24tXHUwMDNldjIuY29ubmVjdF9zZXEsIGNvbm5lY3Rfc2VxKTtcbitcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwiY29ubmVjdF9zZXEgbWlzbWF0Y2hcIjtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXHRjb24tXHUwMDNldjIuY29ubmVjdF9zZXEgPSBjb25uZWN0X3NlcSArIDE7XG4gXG4gXHRmcmVlX2Nvbm5fYnVmcyhjb24pO1xuQEAgLTI2NTEsNyArMjY3NywxNCBAQCBzdGF0aWMgaW50IHByb2Nlc3Nfc2Vzc2lvbl9yZXRyeV9nbG9iYWwoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLFxuIFx0Y2VwaF9kZWNvZGVfNjRfc2FmZShcdTAwMjZwLCBlbmQsIGdsb2JhbF9zZXEsIGJhZCk7XG4gXG4gXHRkb3V0KFwiJXMgY29uICVwIGdsb2JhbF9zZXEgJWxsdVxcblwiLCBfX2Z1bmNfXywgY29uLCBnbG9iYWxfc2VxKTtcbi1cdFdBUk5fT04oZ2xvYmFsX3NlcSBcdTAwM2M9IGNvbi1cdTAwM2V2Mi5nbG9iYWxfc2VxKTtcbitcdGlmIChnbG9iYWxfc2VxIFx1MDAzYz0gY29uLVx1MDAzZXYyLmdsb2JhbF9zZXEpIHtcbitcdFx0cHJfZXJyKFwiJXMlbGxkICVzIGdsb2JhbF9zZXEgbWlzbWF0Y2gsIGV4cGVjdGVkIFx1MDAzZSAlbGx1LCBnb3QgJWxsdVxcblwiLFxuK1x0XHQgICAgICAgRU5USVRZX05BTUUoY29uLVx1MDAzZXBlZXJfbmFtZSksXG4rXHRcdCAgICAgICBjZXBoX3ByX2FkZHIoXHUwMDI2Y29uLVx1MDAzZXBlZXJfYWRkciksXG4rXHRcdCAgICAgICBjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSwgZ2xvYmFsX3NlcSk7XG4rXHRcdGNvbi1cdTAwM2VlcnJvcl9tc2cgPSBcImdsb2JhbF9zZXEgbWlzbWF0Y2hcIjtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXHRjb24tXHUwMDNldjIuZ2xvYmFsX3NlcSA9IGNlcGhfZ2V0X2dsb2JhbF9zZXEoY29uLVx1MDAzZW1zZ3IsIGdsb2JhbF9zZXEpO1xuIFxuIFx0ZnJlZV9jb25uX2J1ZnMoY29uKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjI4OjIyLjg2ODEyNjI2OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk3NTM3OTE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENlcGggTWVzc2VuZ2VyIFByb3RvY29sIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZXMgaW4gYG5ldC9jZXBoL21lc3Nlbmdlcl92MS5jYCBhbmQgYG5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jYC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBpZGVhIGlzIHRvIHJlcGxhY2UgYSBmZXcgYFdBUk5fT05gIHN0YXRlbWVudHMgd2l0aCBhY3R1YWwgZXJyb3IgaGFuZGxpbmcsIHJldHVybmluZyB0aGluZ3MgbGlrZSBgLTFgIG9yIGAtRUlOVkFMYCB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nLiBUaGlzIGlzIGFsbCBjZW50ZXJlZCBhcm91bmQgaG93IHRoZSBDZXBoIG1lc3NlbmdlciBwcm90b2NvbCBoYW5kbGVzIGNvbm5lY3Rpb24gc2VxdWVuY2UgbnVtYmVycywgdGhlIGZlYXR1cmVzIGl0IHN1cHBvcnRzLCBhbmQgc2VydmVyIGNvb2tpZXMuIEJhc2ljYWxseSwgaXQncyBhYm91dCBtYWtpbmcgdGhlIGNvZGUgbW9yZSByb2J1c3QgYWdhaW5zdCBiYWQgaW5wdXQgZnJvbSB0aGUgbmV0d29yay4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gY2F0Y2ggYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGEga2VybmVsIHBhbmljLCBvciB0byBqdXN0IHByb3Blcmx5IHJlamVjdCBpbnZhbGlkIG9yIHBvc3NpYmx5IG1hbGljaW91cyBkYXRhLlxuXG5JJ3ZlIGNoZWNrZWQgdGhlIGRpZmZzOyBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBhYm91dCB2YWxpZGF0aW5nIHRoZSByZWNlaXZlZCBkYXRhIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgaWYgaXQncyBub3Qgd2hhdCdzIGV4cGVjdGVkLiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgYW55IG9mIHRoYXQgamF6ei4gV2UncmUganVzdCBhZGRpbmcgY2hlY2tzIGFuZCBsb2dnaW5nIGZvciBpbnZhbGlkIHZhbHVlcy5cblxuTGV0J3MgbG9vayBhdCB0aGUgc3BlY2lmaWMgY29kZS4gSW4gYHByb2Nlc3NfY29ubmVjdGAgZnJvbSBgbWVzc2VuZ2VyX3YxLmNgLCB0aGUgcGF0Y2ggaXMgYWRkaW5nIHRoaXMgY2hlY2s6XG5cbmBgYGNcbi1cdFx0V0FSTl9PTihjb24tXHUwMDNldjEuY29ubmVjdF9zZXEgIT1cbi1cdFx0XHRsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKTtcbitcdFx0aWYgKGNvbi1cdTAwM2V2MS5jb25uZWN0X3NlcSAhPSBsZTMyX3RvX2NwdShjb24tXHUwMDNldjEuaW5fcmVwbHkuY29ubmVjdF9zZXEpKSB7XG4rXHRcdFx0cHJfZXJyKFwiJXMlbGxkICVzIGNvbm5lY3Rfc2VxIG1pc21hdGNoLCBleHBlY3RlZCAldSwgZ290ICV1XFxuXCIsXG4uLi5cbitcdFx0XHRjb24tXHUwMDNlZXJyb3JfbXNnID0gXCJjb25uZWN0X3NlcSBtaXNtYXRjaFwiO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuYGBgXG5cbkluc3RlYWQgb2YganVzdCB3YXJuaW5nLCB3ZSBub3cgaGF2ZSBhIHByb3BlciBlcnJvciBtZXNzYWdlIGFuZCBhbiBlcnJvciByZXR1cm4uIFRoZSBzYW1lIGtpbmQgb2YgY29udmVyc2lvbiBpcyBwcmVzZW50IGluIGBwcm9jZXNzX3NlcnZlcl9pZGVudGAgaW4gYG1lc3Nlbmdlcl92Mi5jYDpcblxuYGBgY1xuLVx0V0FSTl9PTihyZXF1aXJlZF9mZWF0dXJlcyBcdTAwMjYgfmNsaWVudC1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMpO1xuK1x0aWYgKHJlcXVpcmVkX2ZlYXR1cmVzIFx1MDAyNiB+Y2xpZW50LVx1MDAzZXN1cHBvcnRlZF9mZWF0dXJlcykge1xuLi4uXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuYGBgXG5cblRoZSByZXN0IG9mIHRoZSBwYXRjaCBzZWVtcyB0byBoYXZlIHRoZSBleGFjdCBzYW1lIGxvZ2ljIGZvciB0aGUgYHNlcnZlcl9jb29raWVgLCBgY29ubmVjdF9zZXFgIGFuZCBgZ2xvYmFsX3NlcWAgY2hlY2tzLlxuXG5TbywgYm90dG9tIGxpbmU6IHRoaXMgcGF0Y2ggaXMganVzdCBhYm91dCBtYWtpbmcgdGhlIGVycm9yIGhhbmRsaW5nIG1vcmUgZXhwbGljaXQsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBmb3Igcm9idXN0bmVzcyBhbmQgc2FmZXR5LCBhbmQgdGhpcyBkb2Vzbid0IHRvdWNoIGFueSBtZW1vcnkgdGhhdCBpcyB1bmluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gbmVlZCBmb3IgS01TQU4uIFRoZSBwYXRjaCBhZGRzIGNoZWNrcyBhbmQgcmV0dXJucyBlcnJvciBjb2RlcywgaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzEsIk91dHB1dFRva2VucyI6MTQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6Mjg6MzMuODQzNTEwNjM1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBzZXZlcmFsIFdBUk5fT04oKSBzdGF0ZW1lbnRzIHdpdGggcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIGluIHRoZSBDZXBoIG1lc3NlbmdlciBwcm90b2NvbCAoYm90aCB2MSBhbmQgdjIpLiBJdCBjaGVja3MgZm9yIGludmFsaWQgc2VxdWVuY2UgbnVtYmVycywgbWlzc2luZyByZXF1aXJlZCBwcm90b2NvbCBmZWF0dXJlcywgYW5kIGluY29ycmVjdCBzZXJ2ZXIgY29va2llcywgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgd2FybmluZy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIG5vciBkbyB0aGV5IGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgc2V2ZXJhbCBXQVJOX09OKCkgc3RhdGVtZW50cyB3aXRoIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgbG9nZ2luZyBpbiB0aGUgQ2VwaCBtZXNzZW5nZXIgcHJvdG9jb2wgKGJvdGggdjEgYW5kIHYyKS4gSXQgY2hlY2tzIGZvciBpbnZhbGlkIHNlcXVlbmNlIG51bWJlcnMsIG1pc3NpbmcgcmVxdWlyZWQgcHJvdG9jb2wgZmVhdHVyZXMsIGFuZCBpbmNvcnJlY3Qgc2VydmVyIGNvb2tpZXMsIHJldHVybmluZyBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHdhcm5pbmcuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBub3IgZG8gdGhleSBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj242c[1] Phase: Succeeded StartedAt: 2026-08-10 11:28:57 +0000 UTC FinishedAt: 2026-08-10 11:28:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 11:28:57 +0000 UTC FinishedAt: 2026-08-10 11:28:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2] Phase: Succeeded StartedAt: 2026-08-10 11:28:57 +0000 UTC FinishedAt: 2026-08-10 15:14:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 11:28:57 +0000 UTC FinishedAt: 2026-08-10 15:14:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 11:28:57 +0000 UTC FinishedAt: 2026-08-10 11:29:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 11:28:57 +0000 UTC FinishedAt: 2026-08-10 11:29:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj242c/series-workflowj242c-convert-artifact-3663120791/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 11:29:07 +0000 UTC FinishedAt: 2026-08-10 11:47:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 11:29:07 +0000 UTC FinishedAt: 2026-08-10 11:47:41 +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:*cf94ff6b-a432-4143-ac79-809aab7e6ce4,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-workflowj242c/series-workflowj242c-convert-artifact-3663120791/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": "f6a2f128-e980-486a-90f1-527a40a188a2", "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-workflowj242c/series-workflowj242c-build-action-2726921965/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 11:29:07 +0000 UTC FinishedAt: 2026-08-10 11:47:31 +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:*cf94ff6b-a432-4143-ac79-809aab7e6ce4,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-workflowj242c/series-workflowj242c-convert-artifact-3663120791/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": "f6a2f128-e980-486a-90f1-527a40a188a2", "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-workflowj242c/series-workflowj242c-build-action-2726921965/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 11:47:41 +0000 UTC FinishedAt: 2026-08-10 11:47:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 11:47:41 +0000 UTC FinishedAt: 2026-08-10 11:47:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 11:47:41 +0000 UTC FinishedAt: 2026-08-10 11:47:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 11:47:41 +0000 UTC FinishedAt: 2026-08-10 11:47:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj242c/series-workflowj242c-convert-artifact-3213975494/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 11:47:51 +0000 UTC FinishedAt: 2026-08-10 11:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 11:47:51 +0000 UTC FinishedAt: 2026-08-10 11:49:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f6a2f128-e980-486a-90f1-527a40a188a2,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-workflowj242c/series-workflowj242c-build-action-2726921965/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-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 11:49:57 +0000 UTC FinishedAt: 2026-08-10 11:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 11:49:57 +0000 UTC FinishedAt: 2026-08-10 11:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 11:49:57 +0000 UTC FinishedAt: 2026-08-10 12:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 11:49:57 +0000 UTC FinishedAt: 2026-08-10 12:09:36 +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:*cf94ff6b-a432-4143-ac79-809aab7e6ce4,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-workflowj242c/series-workflowj242c-convert-artifact-3213975494/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": "ab8239a7-5fc8-4ff4-a267-52c01874f732", "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-workflowj242c/series-workflowj242c-build-action-4076725002/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 11:49:57 +0000 UTC FinishedAt: 2026-08-10 12:09:26 +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:*cf94ff6b-a432-4143-ac79-809aab7e6ce4,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-workflowj242c/series-workflowj242c-convert-artifact-3213975494/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": "ab8239a7-5fc8-4ff4-a267-52c01874f732", "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-workflowj242c/series-workflowj242c-build-action-4076725002/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 12:09:36 +0000 UTC FinishedAt: 2026-08-10 12:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 12:09:36 +0000 UTC FinishedAt: 2026-08-10 12:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 12:09:36 +0000 UTC FinishedAt: 2026-08-10 12:11:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 12:09:36 +0000 UTC FinishedAt: 2026-08-10 12:11:24 +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:*ab8239a7-5fc8-4ff4-a267-52c01874f732,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-workflowj242c/series-workflowj242c-build-action-4076725002/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-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 12:11:34 +0000 UTC FinishedAt: 2026-08-10 15:14:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 12:11:34 +0000 UTC FinishedAt: 2026-08-10 15:14:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"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:*f6a2f128-e980-486a-90f1-527a40a188a2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ab8239a7-5fc8-4ff4-a267-52c01874f732,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-workflowj242c/series-workflowj242c-build-action-2726921965/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-workflowj242c/series-workflowj242c-build-action-4076725002/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 12:11:34 +0000 UTC FinishedAt: 2026-08-10 12:12:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 12:11:34 +0000 UTC FinishedAt: 2026-08-10 12:12:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"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-workflowj242c/series-workflowj242c-convert-artifact-4150875019/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 12:11:34 +0000 UTC FinishedAt: 2026-08-10 12:11:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 12:11:34 +0000 UTC FinishedAt: 2026-08-10 12:11:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 12:11:34 +0000 UTC FinishedAt: 2026-08-10 12:11:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 12:12:12 +0000 UTC FinishedAt: 2026-08-10 15:14:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj242c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ceph_con_v1_try_read","ceph_con_v2_try_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CEPH_LIB","CEPH_FS","BLK_DEV_RBD"],"series_id":"439478fb-64a4-4ac8-bc97-9f310589fdd1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 12:12:12 +0000 UTC FinishedAt: 2026-08-10 15:14:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f6a2f128-e980-486a-90f1-527a40a188a2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ab8239a7-5fc8-4ff4-a267-52c01874f732,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-workflowj242c/series-workflowj242c-build-action-2726921965/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-workflowj242c/series-workflowj242c-build-action-4076725002/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-workflowj242c/series-workflowj242c-convert-artifact-4150875019/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,}