Name: series-workflowm89bb Phase: Succeeded StartedAt: 2026-09-10 14:57:38 +0000 UTC FinishedAt: 2026-09-10 19:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[0] Phase: Succeeded StartedAt: 2026-09-10 14:57:38 +0000 UTC FinishedAt: 2026-09-10 15:49:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 14:57:38 +0000 UTC FinishedAt: 2026-09-10 15:49:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "596ad3e3-6b18-4391-809e-ef1d6d7430b5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "icmp_route_lookup", "__icmp_send" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpY21wX3JvdXRlX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtfX2ljbXBfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpY21wX3JvdXRlX2xvb2t1cCgpYCBpbiBgbmV0L2lwdjQvaWNtcC5jYCB0byByZWplY3QgYFJUTl9VTlJFQUNIQUJMRWAgcm91dGVzIGluIGFkZGl0aW9uIHRvIGBSVE5fTE9DQUxgIHJvdXRlcywgcHJldmVudGluZyB0aGUgdXNlIG9mIHJvdXRlcyB3aXRoIGBkc3Qub3V0cHV0ID0gaXBfcnRfYnVnYCB3aGVuIHRyYW5zbWl0dGluZyBJQ01QIG1lc3NhZ2VzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSByb3V0aW5nIGFuZCBlcnJvci1oYW5kbGluZyBsb2dpYyBmaXguIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMuIEFueSBidWdzIHJlbGF0ZWQgdG8gZXhlY3V0aW5nIGludmFsaWQgcm91dGUgb3V0cHV0IGZ1bmN0aW9ucyBvciByZWZlcmVuY2UgY291bnRpbmcvbWVtb3J5IHNhZmV0eSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByb3V0ZSBsb29rdXAgbG9naWMgZm9yIElDTVAgc2VuZGluZyBpbiBpY21wX3JvdXRlX2xvb2t1cCgpIHRvIHByb3Blcmx5IHJlamVjdCByb3V0ZXMgb2YgdHlwZSBSVE5fVU5SRUFDSEFCTEUgaW4gYWRkaXRpb24gdG8gUlROX0xPQ0FMLiBUaGlzIHRvdWNoZXMgY29yZSBJUHY0IElDTVAgdHJhbnNtaXNzaW9uIGxvZ2ljIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhZDBhYTU1YjUxYTNkZDNiZDIzMmRmNjNlZjZmNjZjNWVlMDJlYzRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTU6NDc6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWNtcC5jIGIvbmV0L2lwdjQvaWNtcC5jXG5pbmRleCAwY2FlZGZjN2NhOTJmLi45MGMwZTIyYzI5YmVhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaWNtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pY21wLmNcbkBAIC01ODEsMTYgJiM0Mzs1ODEsMTkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKmljbXBfcm91dGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxuIFx0XHRza2JfZHN0cmVmX3Jlc3RvcmUoc2tiX2luLCBvcmVmZHN0KTtcbiBcbiBcdFx0Lypcbi1cdFx0ICogQXQgdGhpcyBwb2ludCwgZmw0X2RlYy5kYWRkciBzaG91bGQgTk9UIGJlIGxvY2FsICh3ZVxuLVx0XHQgKiBjaGVja2VkIGZsNF9kZWMuc2FkZHIgYWJvdmUpLiBIb3dldmVyLCBhIHJhY2UgY29uZGl0aW9uXG4tXHRcdCAqIG1heSBvY2N1ciBpZiB0aGUgYWRkcmVzcyBpcyBhZGRlZCB0byB0aGUgaW50ZXJmYWNlXG4tXHRcdCAqIGNvbmN1cnJlbnRseS4gSW4gdGhhdCBjYXNlLCBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYVxuLVx0XHQgKiBMT0NBTCByb3V0ZSB3aXRoIGRzdC5vdXRwdXQ9aXBfcnRfYnVnLCB3aGljaCBtdXN0IG5vdFxuLVx0XHQgKiBiZSB1c2VkIGZvciBvdXRwdXQuXG4mIzQzO1x0XHQgKiBmbDRfZGVjLmRhZGRyIGlzIG5vdCBleHBlY3RlZCB0byBiZSBsb2NhbCBoZXJlLCBidXQgaXQgY2FuIGJlXG4mIzQzO1x0XHQgKiBhZGRlZCB0byBhbiBpbnRlcmZhY2UgY29uY3VycmVudGx5LCBpbiB3aGljaCBjYXNlXG4mIzQzO1x0XHQgKiBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYSBMT0NBTCByb3V0ZS4gSXQgY2FuIGFsc28gZmFpbCB0b1xuJiM0MztcdFx0ICogYnVpbGQgYSBmb3J3YXJkaW5nIHJvdXRlIHRvd2FyZHMgZmw0X2RlYy5kYWRkciwgZm9yIGV4YW1wbGUsXG4mIzQzO1x0XHQgKiB3aGVuIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQsIGFuZCByZXR1cm4gYW4gVU5SRUFDSEFCTEUgcm91dGUuXG4mIzQzO1x0XHQgKiBCb3RoIGNhc2VzIHdpbGwgcmVzdWx0IGluIGEgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1ZyxcbiYjNDM7XHRcdCAqIHdoaWNoIG11c3Qgbm90IGJlIHVzZWQgZm9yIG91dHB1dC5cbiBcdFx0ICovXG4tXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBydDIgXHUwMDI2XHUwMDI2IHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9MT0NBTCkge1xuJiM0MztcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJ0MiBcdTAwMjZcdTAwMjYgcnQyLVx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMKVxuIFx0XHRcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2RldGVjdGVkIGxvY2FsIHJvdXRlIGZvciAlcEk0IGR1cmluZyBJQ01QIHNlbmRpbmcsIHNyYyAlcEk0XFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICAgIFx1MDAyNmZsNF9kZWMuZGFkZHIsIFx1MDAyNmZsNF9kZWMuc2FkZHIpO1xuJiM0MztcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJ0MiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAocnQyLVx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMIHx8IHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9VTlJFQUNIQUJMRSkpIHtcbiBcdFx0XHRkc3RfcmVsZWFzZShcdTAwMjZydDItXHUwMDNlZHN0KTtcbiBcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ljbXBfcm91dGVfbG9va3VwJiMzNDssCiAgICAmIzM0O19faWNtcF9zZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByb3V0ZSBsb29rdXAgbG9naWMgZm9yIElDTVAgc2VuZGluZyBpbiBpY21wX3JvdXRlX2xvb2t1cCgpIHRvIHByb3Blcmx5IHJlamVjdCByb3V0ZXMgb2YgdHlwZSBSVE5fVU5SRUFDSEFCTEUgaW4gYWRkaXRpb24gdG8gUlROX0xPQ0FMLiBUaGlzIHRvdWNoZXMgY29yZSBJUHY0IElDTVAgdHJhbnNtaXNzaW9uIGxvZ2ljIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZDBhYTU1YjUxYTNkZDNiZDIzMmRmNjNlZjZmNjZjNWVlMDJlYzRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTU6NDc6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggMGNhZWRmYzdjYTkyZi4uOTBjMGUyMmMyOWJlYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtNTgxLDE2ICYjNDM7NTgxLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJc2tiX2RzdHJlZl9yZXN0b3JlKHNrYl9pbiwgb3JlZmRzdCk7CiAKIAkJLyoKLQkJICogQXQgdGhpcyBwb2ludCwgZmw0X2RlYy5kYWRkciBzaG91bGQgTk9UIGJlIGxvY2FsICh3ZQotCQkgKiBjaGVja2VkIGZsNF9kZWMuc2FkZHIgYWJvdmUpLiBIb3dldmVyLCBhIHJhY2UgY29uZGl0aW9uCi0JCSAqIG1heSBvY2N1ciBpZiB0aGUgYWRkcmVzcyBpcyBhZGRlZCB0byB0aGUgaW50ZXJmYWNlCi0JCSAqIGNvbmN1cnJlbnRseS4gSW4gdGhhdCBjYXNlLCBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYQotCQkgKiBMT0NBTCByb3V0ZSB3aXRoIGRzdC5vdXRwdXQ9aXBfcnRfYnVnLCB3aGljaCBtdXN0IG5vdAotCQkgKiBiZSB1c2VkIGZvciBvdXRwdXQuCiYjNDM7CQkgKiBmbDRfZGVjLmRhZGRyIGlzIG5vdCBleHBlY3RlZCB0byBiZSBsb2NhbCBoZXJlLCBidXQgaXQgY2FuIGJlCiYjNDM7CQkgKiBhZGRlZCB0byBhbiBpbnRlcmZhY2UgY29uY3VycmVudGx5LCBpbiB3aGljaCBjYXNlCiYjNDM7CQkgKiBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYSBMT0NBTCByb3V0ZS4gSXQgY2FuIGFsc28gZmFpbCB0bwomIzQzOwkJICogYnVpbGQgYSBmb3J3YXJkaW5nIHJvdXRlIHRvd2FyZHMgZmw0X2RlYy5kYWRkciwgZm9yIGV4YW1wbGUsCiYjNDM7CQkgKiB3aGVuIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQsIGFuZCByZXR1cm4gYW4gVU5SRUFDSEFCTEUgcm91dGUuCiYjNDM7CQkgKiBCb3RoIGNhc2VzIHdpbGwgcmVzdWx0IGluIGEgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1ZywKJiM0MzsJCSAqIHdoaWNoIG11c3Qgbm90IGJlIHVzZWQgZm9yIG91dHB1dC4KIAkJICovCi0JCWlmICghZXJyICZhbXA7JmFtcDsgcnQyICZhbXA7JmFtcDsgcnQyLSZndDtydF90eXBlID09IFJUTl9MT0NBTCkgewomIzQzOwkJaWYgKCFlcnIgJmFtcDsmYW1wOyBydDIgJmFtcDsmYW1wOyBydDItJmd0O3J0X3R5cGUgPT0gUlROX0xPQ0FMKQogCQkJbmV0X3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtkZXRlY3RlZCBsb2NhbCByb3V0ZSBmb3IgJXBJNCBkdXJpbmcgSUNNUCBzZW5kaW5nLCBzcmMgJXBJNFxuJiMzNDssCiAJCQkJCSAgICAgJmFtcDtmbDRfZGVjLmRhZGRyLCAmYW1wO2ZsNF9kZWMuc2FkZHIpOwomIzQzOwkJaWYgKCFlcnIgJmFtcDsmYW1wOyBydDIgJmFtcDsmYW1wOwomIzQzOwkJICAgIChydDItJmd0O3J0X3R5cGUgPT0gUlROX0xPQ0FMIHx8IHJ0Mi0mZ3Q7cnRfdHlwZSA9PSBSVE5fVU5SRUFDSEFCTEUpKSB7CiAJCQlkc3RfcmVsZWFzZSgmYW1wO3J0Mi0mZ3Q7ZHN0KTsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIwMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpczoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIElDTVAgUGF0Y2gqKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgZm9jdXMgaXMgb24gdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBuZXQvaXB2NC9pY21wLmNgIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBpY21wX3JvdXRlX2xvb2t1cCgpYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGZpcnN0IGluc3RpbmN0LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMsIGlzIHRvIGdyYWIgdGhlIG1vZGlmaWVkIGZpbGUsIGBuZXQvaXB2NC9pY21wLmNgLiBTaW5jZSBJIGhhdmUgaXQgbG9jYWxseSwgSSYjMzk7bGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCAtICBwcm9iYWJseSB0aGUgbGF0dGVyIHRvIGdldCBhIGNsZWFuIHZpZXcgb2YgdGhlIGNvZGUuIFRoaXMgZ2l2ZXMgYSBjbGVhcmVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljcyBvZiAqaG93KiBgaWNtcF9yb3V0ZV9sb29rdXAoKWAgaXMgYmVpbmcgbW9kaWZpZWQuIEFyZSB0aGV5IGFkZGluZyBuZXcgbG9naWMsIGNoYW5naW5nIGV4aXN0aW5nIGNvbmRpdGlvbnMsIG9yIGNvbXBsZXRlbHkgcmV3cml0aW5nIGl0PyBUaGUgZGlmZiBpdHNlbGYgd2lsbCBiZSBjcnVjaWFsIGluIGhpZ2hsaWdodGluZyB0aGUgYWZmZWN0ZWQgYXJlYXMuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBvZiB0aGVzZSBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIElDTVAgaW1wbGVtZW50YXRpb24uIFRoaXMgbGV0cyBtZSB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2ggYWNyb3NzIHRoZSBicm9hZGVyIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2ljbXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTYwOlx0XHRcdFx0c3dhcChmbDRfMi5mbDRfc3BvcnQsIGZsNF8yLmZsNF9kcG9ydCk7XG4gNTYxOlx0XHRcdFx0YnJlYWs7XG4gNTYyOlx0XHRcdH1cbiA1NjM6XHRcbiA1NjQ6XHRcdFx0Zmw0XzIuZmxvd2k0X29pZiA9IGwzbWRldl9tYXN0ZXJfaWZpbmRleChyb3V0ZV9sb29rdXBfZGV2KTtcbiA1NjU6XHRcdFx0Zmw0XzIuZmxvd2k0X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xuIDU2NjpcdFxuIDU2NzpcdFx0XHRydDIgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcdTAwMjZmbDRfMik7XG4gNTY4Olx0XHRcdGlmIChJU19FUlIocnQyKSkge1xuIDU2OTpcdFx0XHRcdGVyciA9IFBUUl9FUlIocnQyKTtcbiA1NzA6XHRcdFx0XHRnb3RvIHJlbG9va3VwX2ZhaWxlZDtcbiA1NzE6XHRcdFx0fVxuIDU3MjpcdFx0XHQvKiBVZ2ghICovXG4gNTczOlx0XHRcdG9yZWZkc3QgPSBza2JfZHN0cmVmX3N0ZWFsKHNrYl9pbik7XG4gNTc0Olx0XHRcdGVyciA9IGlwX3JvdXRlX2lucHV0KHNrYl9pbiwgZmw0X2RlYy5kYWRkciwgZmw0X2RlYy5zYWRkcixcbiA1NzU6XHRcdFx0XHRcdCAgICAgZHNjcCwgcnQyLVx1MDAzZWRzdC5kZXYpID8gLUVJTlZBTCA6IDA7XG4gNTc2Olx0XG4gNTc3Olx0XHRcdGRzdF9yZWxlYXNlKFx1MDAyNnJ0Mi1cdTAwM2Vkc3QpO1xuIDU3ODpcdFx0XHRydDIgPSBza2JfcnRhYmxlKHNrYl9pbik7XG4gNTc5Olx0XHRcdC8qIHN0ZWFsIGRzdCBlbnRyeSBmcm9tIHNrYl9pbiwgZG9uJiMzOTt0IGRyb3AgcmVmY250ICovXG4gNTgwOlx0XHRcdHNrYl9kc3RyZWZfc3RlYWwoc2tiX2luKTtcbiA1ODE6XHRcdFx0c2tiX2RzdHJlZl9yZXN0b3JlKHNrYl9pbiwgb3JlZmRzdCk7XG4gNTgyOlx0XG4gNTgzOlx0XHRcdC8qXG4gNTg0Olx0XHRcdCAqIGZsNF9kZWMuZGFkZHIgaXMgbm90IGV4cGVjdGVkIHRvIGJlIGxvY2FsIGhlcmUsIGJ1dCBpdCBjYW4gYmVcbiA1ODU6XHRcdFx0ICogYWRkZWQgdG8gYW4gaW50ZXJmYWNlIGNvbmN1cnJlbnRseSwgaW4gd2hpY2ggY2FzZVxuIDU4NjpcdFx0XHQgKiBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYSBMT0NBTCByb3V0ZS4gSXQgY2FuIGFsc28gZmFpbCB0b1xuIDU4NzpcdFx0XHQgKiBidWlsZCBhIGZvcndhcmRpbmcgcm91dGUgdG93YXJkcyBmbDRfZGVjLmRhZGRyLCBmb3IgZXhhbXBsZSxcbiA1ODg6XHRcdFx0ICogd2hlbiBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCBhbmQgcmV0dXJuIGFuIFVOUkVBQ0hBQkxFIHJvdXRlLlxuIDU4OTpcdFx0XHQgKiBCb3RoIGNhc2VzIHdpbGwgcmVzdWx0IGluIGEgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1ZyxcbiA1OTA6XHRcdFx0ICogd2hpY2ggbXVzdCBub3QgYmUgdXNlZCBmb3Igb3V0cHV0LlxuIDU5MTpcdFx0XHQgKi9cbiA1OTI6XHRcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJ0MiBcdTAwMjZcdTAwMjYgcnQyLVx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMKVxuIDU5MzpcdFx0XHRcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2RldGVjdGVkIGxvY2FsIHJvdXRlIGZvciAlcEk0IGR1cmluZyBJQ01QIHNlbmRpbmcsIHNyYyAlcEk0XFxuXCYjMzQ7LFxuIDU5NDpcdFx0XHRcdFx0XHQgICAgIFx1MDAyNmZsNF9kZWMuZGFkZHIsIFx1MDAyNmZsNF9kZWMuc2FkZHIpO1xuIDU5NTpcdFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcnQyIFx1MDAyNlx1MDAyNlxuIDU5NjpcdFx0XHQgICAgKHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9MT0NBTCB8fCBydDItXHUwMDNlcnRfdHlwZSA9PSBSVE5fVU5SRUFDSEFCTEUpKSB7XG4gNTk3Olx0XHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2cnQyLVx1MDAzZWRzdCk7XG4gNTk4Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiA1OTk6XHRcdFx0fVxuIDYwMDpcdFx0fVxuIDYwMTpcdFxuIDYwMjpcdFx0aWYgKGVycilcbiA2MDM6XHRcdFx0Z290byByZWxvb2t1cF9mYWlsZWQ7XG4gNjA0Olx0XG4gNjA1Olx0XHRkc3QyID0geGZybV9sb29rdXAobmV0LCBcdTAwMjZydDItXHUwMDNlZHN0LCBmbG93aTRfdG9fZmxvd2koXHUwMDI2Zmw0X2RlYyksIE5VTEwsXG4gNjA2Olx0XHRcdFx0ICAgWEZSTV9MT09LVVBfSUNNUCk7XG4gNjA3Olx0XHRydDIgPSBkc3RfcnRhYmxlKGRzdDIpO1xuIDYwODpcdFx0aWYgKCFJU19FUlIoZHN0MikpIHtcbiA2MDk6XHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDY0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBkaXZpbmcgaW50byB0aGlzIElDTVAgcm91dGluZyBsb2dpYzoKCioqSW52ZXN0aWdhdGluZyBJQ01QIFJvdXRlIExvb2t1cCBhbmQgU2VuZGluZyoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gYGljbXBfcm91dGVfbG9va3VwYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgSUNNUCBzZW5kaW5nIHByb2Nlc3MuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgaW50byB0aGUgZW50aXJlIHdvcmtmbG93IG9mIGdlbmVyYXRpbmcgYW5kIHRyYW5zbWl0dGluZyBJQ01QIHBhY2tldHM/IEkgbmVlZCB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMuIEkgbmVlZCB0byBpZGVudGlmeSBleGFjdGx5IHdoaWNoIHBhcnRzIG9mIHRoZSBzeXN0ZW0gY2FsbCBgaWNtcF9yb3V0ZV9sb29rdXBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgSUNNUCByb3V0ZXMgYXJlIGFjdHVhbGx5IGJlaW5nIHJlc29sdmVkIHVzaW5nIHRoaXMgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlcnMgd2lsbCBiZSBrZXkgdG8gZ3Jhc3BpbmcgaXRzIHB1cnBvc2UgYW5kIHRoZSBvdmVyYWxsIHJvdXRpbmcgc3RyYXRlZ3kuIEkgbmVlZCB0byBtYXAgdGhlIGRlcGVuZGVuY2llcyBjbGVhcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljbXBfcm91dGVfbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ljbXAuYz00ODM9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppY21wX2dldF9yb3V0ZV9sb29rdXBfZGV2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaWNtcC5jLTQ5My1cbm5ldC9pcHY0L2ljbXAuYzo0OTQ6c3RhdGljIHN0cnVjdCBydGFibGUgKmljbXBfcm91dGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxubmV0L2lwdjQvaWNtcC5jLTQ5NS1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9pbixcbi0tXG5uZXQvaXB2NC9pY21wLmM9ODE3PXZvaWQgX19pY21wX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IHR5cGUsIGludCBjb2RlLCBfX2JlMzIgaW5mbyxcbi0tXG5uZXQvaXB2NC9pY21wLmMtOTcyLVxubmV0L2lwdjQvaWNtcC5jOjk3MzpcdHJ0ID0gaWNtcF9yb3V0ZV9sb29rdXAobmV0LCBcdTAwMjZmbDQsIHNrYl9pbiwgaXBoLCBzYWRkcixcbm5ldC9pcHY0L2ljbXAuYy05NzQtXHRcdFx0ICAgICAgIGluZXRfZHNmaWVsZF90b19kc2NwKHRvcyksIG1hcmssIHR5cGUsIGNvZGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIGBpY21wX3JvdXRlX2xvb2t1cGAgLSBBIFByb21pc2luZyBUYXJnZXQqKgoKT2theSwgc28gYGljbXBfcm91dGVfbG9va3VwYCBpcyBjYWxsZWQgYnkgYF9faWNtcF9zZW5kYCB3aXRoaW4gYG5ldC9pcHY0L2ljbXAuY2AuIFRoYXQmIzM5O3MgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIElQdjQgbmV0d29ya2luZywgc3BlY2lmaWNhbGx5IElDTVAgZXJyb3IgZ2VuZXJhdGlvbi4gVGhlIGtleSBxdWVzdGlvbiBpcyBhbHdheXMsICppcyogdGhpcyBjb2RlIHJlYWNoYWJsZT8gQWJzb2x1dGVseSwgZ2l2ZW4gaG93IGZ1bmRhbWVudGFsIElDTVAgaXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG5ldHdvcmsgc29ja2V0cywgdHVuL3RhcCBpbnRlcmZhY2VzLCBsb29wYmFjaywgcGFja2V0IHNvY2tldHMg4oCTIGl0JiMzOTtzIGFsbCB1c2luZyB0aGlzIGZ1bmN0aW9uYWxpdHkuICBgX19pY21wX3NlbmRgIGFuZCBgaWNtcF9zZW5kYCBhcmUgcHJldHR5IG11Y2ggdWJpcXVpdG91cy4KClJpZ2h0LCBzbywgaXMgaXQgd29ydGggZnV6emluZz8gIExldCYjMzk7cyBzZWUuIFRoaXMgcGF0Y2ggZGlyZWN0bHkgdG91Y2hlcyBjb3JlIHN1YnN5c3RlbXM6IElQdjQgSUNNUCByb3V0ZSBoYW5kbGluZy4gSXQmIzM5O3MgZm9jdXNlZCBvbiBhbHRlcmluZyBob3cgYFJUTl9VTlJFQUNIQUJMRWAgcm91dGVzIGFyZSBoYW5kbGVkIHdpdGhpbiBgaWNtcF9yb3V0ZV9sb29rdXAoKWAuIFRoZSBjaGFuZ2UgcHJldmVudHMgdGhvc2UgdW5yZWFjaGFibGUgcm91dGVzIGZyb20gYmVpbmcgdXNlZCB3aGVuIHNlbmRpbmcgSUNNUCBtZXNzYWdlcy4gUHJldmlvdXNseSwgaXQgbG9va3MgbGlrZSBgZHN0Lm91dHB1dD1pcF9ydF9idWdgIHdhcyBwb3NzaWJsZSwgd2hpY2ggY291bGQgaGF2ZSBsZWQgdG8ga2VybmVsIGJ1Z3Mgb3IgY3Jhc2hlcywgZXNwZWNpYWxseSBpZiBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCBvciB3ZSB3ZXJlIGRlYWxpbmcgd2l0aCBhbiB1bnJlYWNoYWJsZSByb3V0ZS4gSXQgc291bmRzIGxpa2UgdGhpcyBjb3VsZCBhYnNvbHV0ZWx5IGxlYWQgdG8gYSBidWcsIGFuZCBiZSBhIGdyZWF0IHBsYWNlIHRvIGV4ZXJjaXNlIG15IGZ1enppbmcgc2tpbGxzZXQuCgpTbywgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGtlcm5lbCBjb2RlIGFuZCB3b3J0aCBhIHNob3QuCgpPa2F5LCBuZXh0IHN0ZXAg4oCTIGNvbmZpZ3VyYXRpb24uICBJcyB0aGUgYmFyZSBtaW5pbXVtIGBJTkVUYCBvciBgSVBgIGVuYWJsZWQ/IExldCYjMzk7cyBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2Agb3IgYG5ldC9pcHY0L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNtcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xMy1cdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTQ6XHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQ5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBLZXJuZWwgTW9kdWxlIERlcGVuZGVuY3kqKgoKT2theSwgc28gYGljbXAub2AgaXMgY2xlYXJseSBkZWZpbmVkIHdpdGhpbiB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB1bmRlciB0aGUgYG9iai15YCBhc3NpZ25tZW50LiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIGEgYnVpbHQtaW4gbW9kdWxlIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSwgaWYgYSBiaXQgb2YgYW4gb2xkZXIgc3R5bGUgb2YgbWFrZWZpbGUuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBgQ09ORklHX0lORVRgIGd1YXJkLiBUaGF0IGluZGljYXRlcyBpdHMgY29tcGlsYXRpb24gYW5kIGluY2x1c2lvbiBhcmUgY29uZGl0aW9uYWwsIGRlcGVuZGVudCBvbiB0aGUgYElORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGJlaW5nIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBidWlsZC4KCk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoaXMgYElORVRgIHZhcmlhYmxlLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBkbyB0aGF0IGlzIGBuZXQvS2NvbmZpZ2AsIHdoaWNoIGlzIHdoZXJlIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG5ldHdvcmtpbmcgYXJlIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgdG8gdW5kZXJzdGFuZCB3aGF0IGBDT05GSUdfSU5FVGAgYWN0dWFsbHkgKm1lYW5zKiBpbiB0aGUgYnJvYWRlciBjb250ZXh0LiBJcyBpdCBhIGJhc2Ugb3B0aW9uIGZvciBJUHY0IHN1cHBvcnQ/IElzIGl0IG1vcmUgZ3JhbnVsYXIgdGhhbiB0aGF0PyBLbm93aW5nIGl0cyBkZWZpbml0aW9uIGlzIGtleSB0byBkZXRlcm1pbmluZyB3aGVuIGBpY21wLm9gIHdpbGwgYWN0dWFsbHkgYmUgcHJlc2VudCBpbiB0aGUgZmluYWwga2VybmVsIGltYWdlLiBUaGlzIGxvb2tzIGxpa2UgYSBmYWlybHkgdHlwaWNhbCBkZXBlbmRlbmN5IGNoYWluOiBhIG1vZHVsZSYjMzk7cyBidWlsZCBydWxlIHRoYXQmIzM5O3MgY29uZGl0aW9uYWwgdXBvbiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3cgaXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1Rcbi0tXG5uZXQvS2NvbmZpZy0xMTMtXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcbm5ldC9LY29uZmlnLTExNS1cdGJvb2wgXCYjMzQ7VENQL0lQIG5ldHdvcmtpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE2MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSUNNUCBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgUmVzb2x1dGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBJTkVUYCBjb25maWd1cmF0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGlzIHJlYWxseSBjZW50ZXJlZCBhcm91bmQgSUNNUC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgY3JpdGljYWwgc3ltYm9scyBhcmUgaGVyZS4gSW1tZWRpYXRlbHksIGBpY21wX3JvdXRlX2xvb2t1cGAganVtcHMgb3V0LCBidXQgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBpY21wLmNgLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bDsgSSBrbm93IHN0YXRpYyBmdW5jdGlvbnMgYXJlIGdlbmVyYWxseSBpbnRlcm5hbCwgYnV0IHRoZXkgKmRvKiBoYXZlIHN5bWJvbHMgaW4gYHZtbGludXhgIHVubGVzcyB0aGV5JiMzOTtyZSBpbmxpbmVkIGF3YXkgYnkgdGhlIGNvbXBpbGVyLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayBgaWNtcF9yb3V0ZV9sb29rdXBgIGRpcmVjdGx5LiBZZXAsIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cCguLi4pYCwgd2hpY2ggY29uZmlybXMgaXRzIHN0YXRpYyBuYXR1cmUuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiBJIHRhcmdldCAqanVzdCogYGljbXBfcm91dGVfbG9va3VwYCwgb3Igc2hvdWxkIEkgYmUgbW9yZSBjb21wcmVoZW5zaXZlIGFuZCBpbmNsdWRlIHRoZSByZWxhdGVkIGBfX2ljbXBfc2VuZGAgYW5kIGBpY21wX3NlbmRgIGFzIHdlbGw/IEkgY2FuJiMzOTt0IGJlIHN1cmUgaWYgYGljbXBfcm91dGVfbG9va3VwYCBpcyBpbmxpbmVkIGF3YXksIG9yIGNhbGxlZCBmcm9tIGFuIGBfX2ljbXBfc2VuZGAgY2FsbC4KCkkgd2FudCB0byBiZSB0aG9yb3VnaCwgc28gdG8gZW5zdXJlIEkgaGF2ZSBmdWxsIGNvdmVyYWdlLCBJIHNob3VsZCBwcm9iYWJseSBnbyBhaGVhZCBhbmQgaW5jbHVkZSBib3RoIGBfX2ljbXBfc2VuZGAgYW5kIGBpY21wX3NlbmRgIGluIG15IHRhcmdldCBsaXN0LiBUaGF0IHdheSwgZXZlbiBpZiBgaWNtcF9yb3V0ZV9sb29rdXBgIGlzIGlubGluZWQgb3IgY2FsbGVkIHZpYSB0aG9zZSBvdGhlciBmdW5jdGlvbnMsIEkmIzM5O2xsIHN0aWxsIGNhcHR1cmUgdGhlIGJlaGF2aW9yLgoKTm93LCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBsYW5kc2NhcGUgZnVsbHksIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB3aGV0aGVyIGBpY21wX3JvdXRlX2xvb2t1cGAgKmlzKiBhY3R1YWxseSBpbmxpbmVkIG9yIG5vdC4gTGV0IG1lIGp1c3QgY29uZmlybSBhZ2FpbjogYHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cCguLi4pYC4gT2theSwgaXQgbG9va3Mgc3RhdGljIG5vbi1pbmxpbmVkLgoKQWxyaWdodCwgSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBpbiBgbmV0L2lwdjQvaWNtcC5jYCB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiBhcm91bmQgaXQuIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSB1c2VmdWwgY29udGV4dCBmb3IgbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljbXBfc2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9jaXBzb19pcHY0LmM9MTcxNT12b2lkIGNpcHNvX3Y0X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnJvciwgdTMyIGdhdGV3YXkpXG4tLVxubmV0L2lwdjQvY2lwc29faXB2NC5jLTE3MjQtXHQgKiBXZSBtaWdodCBiZSBjYWxsZWQgYWJvdmUgdGhlIElQIGxheWVyLFxubmV0L2lwdjQvY2lwc29faXB2NC5jOjE3MjU6XHQgKiBzbyB3ZSBjYW4gbm90IHVzZSBpY21wX3NlbmQgYW5kIElQQ0IgaGVyZS5cbm5ldC9pcHY0L2NpcHNvX2lwdjQuYy0xNzI2LVx0ICovXG4tLVxubmV0L2lwdjQvY2lwc29faXB2NC5jLTE3MzctXHRpZiAoZ2F0ZXdheSlcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYzoxNzM4Olx0XHRfX2ljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX05FVF9BTk8sIDAsIFx1MDAyNnBhcm0pO1xubmV0L2lwdjQvY2lwc29faXB2NC5jLTE3MzktXHRlbHNlXG5uZXQvaXB2NC9jaXBzb19pcHY0LmM6MTc0MDpcdFx0X19pY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9IT1NUX0FOTywgMCwgXHUwMDI2cGFybSk7XG5uZXQvaXB2NC9jaXBzb19pcHY0LmMtMTc0MS19XG4tLVxubmV0L2lwdjQvaWNtcC5jLTQ2LSAqXHRcdFx0XHRcdHRoZSByYXRlcyBzeXNjdGwgY29uZmlndXJhYmxlLlxubmV0L2lwdjQvaWNtcC5jOjQ3OiAqXHRcdFl1IFRpYW5saVx0Olx0Rml4ZWQgdHdvIHVnbHkgYnVncyBpbiBpY21wX3NlbmRcbm5ldC9pcHY0L2ljbXAuYy00OC0gKlx0XHRcdFx0XHQtIElQIG9wdGlvbiBsZW5ndGggd2FzIGFjY291bnRlZCB3cm9uZ2x5XG4tLVxubmV0L2lwdjQvaWNtcC5jPTc0Mj1pY21wX2V4dF9hcHBlbmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBzdHJ1Y3QgaWNtcGhkciAqaWNtcGgsXG4tLVxubmV0L2lwdjQvaWNtcC5jLTgxNi1cbm5ldC9pcHY0L2ljbXAuYzo4MTc6dm9pZCBfX2ljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvLFxubmV0L2lwdjQvaWNtcC5jLTgxOC1cdFx0IGNvbnN0IHN0cnVjdCBpbmV0X3NrYl9wYXJtICpwYXJtKVxuLS1cbm5ldC9pcHY0L2ljbXAuYy04NDgtXHQgKlx0RmluZCB0aGUgb3JpZ2luYWwgaGVhZGVyLiBJdCBpcyBleHBlY3RlZCB0byBiZSB2YWxpZCwgb2YgY291cnNlLlxubmV0L2lwdjQvaWNtcC5jOjg0OTpcdCAqXHRDaGVjayB0aGlzLCBpY21wX3NlbmQgaXMgY2FsbGVkIGZyb20gdGhlIG1vc3Qgb2JzY3VyZSBkZXZpY2VzXG5uZXQvaXB2NC9pY21wLmMtODUwLVx0ICpcdHNvbWV0aW1lcy5cbi0tXG5uZXQvaXB2NC9pY21wLmMtMTAxNS1cbm5ldC9pcHY0L2ljbXAuYzoxMDE2Olx0dHJhY2VfaWNtcF9zZW5kKHNrYl9pbiwgdHlwZSwgY29kZSk7XG5uZXQvaXB2NC9pY21wLmMtMTAxNy1cbi0tXG5uZXQvaXB2NC9pY21wLmMtMTAzMC19XG5uZXQvaXB2NC9pY21wLmM6MTAzMTpFWFBPUlRfU1lNQk9MKF9faWNtcF9zZW5kKTtcbm5ldC9pcHY0L2ljbXAuYy0xMDMyLVxuLS1cbm5ldC9pcHY0L2ljbXAuYz0xMDM1PXZvaWQgaWNtcF9uZG9fc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvKVxuLS1cbm5ldC9pcHY0L2ljbXAuYy0xMDQ2LVx0aWYgKCFjdCB8fCAhKFJFQURfT05DRShjdC1cdTAwM2VzdGF0dXMpIFx1MDAyNiBJUFNfTkFUX01BU0spKSB7XG5uZXQvaXB2NC9pY21wLmM6MTA0NzpcdFx0X19pY21wX3NlbmQoc2tiX2luLCB0eXBlLCBjb2RlLCBpbmZvLCBcdTAwMjZwYXJtKTtcbm5ldC9pcHY0L2ljbXAuYy0xMDQ4LVx0XHRyZXR1cm47XG4tLVxubmV0L2lwdjQvaWNtcC5jLTEwNjItXHRpcF9oZHIoc2tiX2luKS1cdTAwM2VzYWRkciA9IGN0LVx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51My5pcDtcbm5ldC9pcHY0L2ljbXAuYzoxMDYzOlx0X19pY21wX3NlbmQoc2tiX2luLCB0eXBlLCBjb2RlLCBpbmZvLCBcdTAwMjZwYXJtKTtcbm5ldC9pcHY0L2ljbXAuYy0xMDY0LVx0aXBfaGRyKHNrYl9pbiktXHUwMDNlc2FkZHIgPSBvcmlnX2lwO1xuLS1cbm5ldC9pcHY0L2lwX2ZvcndhcmQuYz04Mz1pbnQgaXBfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2lwX2ZvcndhcmQuYy0xMzYtXHRcdElQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7XG5uZXQvaXB2NC9pcF9mb3J3YXJkLmM6MTM3Olx0XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9GUkFHX05FRURFRCxcbm5ldC9pcHY0L2lwX2ZvcndhcmQuYy0xMzgtXHRcdFx0ICBodG9ubChtdHUpKTtcbi0tXG5uZXQvaXB2NC9pcF9mb3J3YXJkLmMtMTY5LVx0ICovXG5uZXQvaXB2NC9pcF9mb3J3YXJkLmM6MTcwOlx0IGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1NSX0ZBSUxFRCwgMCk7XG5uZXQvaXB2NC9pcF9mb3J3YXJkLmMtMTcxLVx0IGdvdG8gZHJvcDtcbi0tXG5uZXQvaXB2NC9pcF9mb3J3YXJkLmMtMTc1LVx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG5uZXQvaXB2NC9pcF9mb3J3YXJkLmM6MTc2Olx0aWNtcF9zZW5kKHNrYiwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19UVEwsIDApO1xubmV0L2lwdjQvaXBfZm9yd2FyZC5jLTE3Ny1cdFNLQl9EUl9TRVQocmVhc29uLCBJUF9JTkhEUik7XG4tLVxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYz0xMjM9c3RhdGljIHZvaWQgaXBfZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtMTg0LVx0c3Bpbl91bmxvY2soXHUwMDI2cXAtXHUwMDNlcS5sb2NrKTtcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM6MTg1Olx0aWNtcF9zZW5kKGhlYWQsIElDTVBfVElNRV9FWENFRURFRCwgSUNNUF9FWENfRlJBR1RJTUUsIDApO1xubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy0xODYtXHRnb3RvIG91dF9yY3VfdW5sb2NrO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTQ0MD1zdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy00Njgtb3V0OlxubmV0L2lwdjQvaXBfZ3JlLmM6NDY5Olx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTQ3MC1kcm9wOlxuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmM9MTg5PXZvaWQgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG9jb2wpXG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMTctXHRcdFx0XHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOVU5LTk9XTlBST1RPUyk7XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjIxODpcdFx0XHRcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMTktXHRcdFx0XHRcdCAgSUNNUF9QUk9UX1VOUkVBQ0gsIDApO1xuLS1cbm5ldC9pcHY0L2lwX29wdGlvbnMuYz00NjU9aW50IGlwX29wdGlvbnNfY29tcGlsZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjQvaXBfb3B0aW9ucy5jLTQ3Mi1cdGlmIChyZXQgIT0gMCBcdTAwMjZcdTAwMjYgc2tiKVxubmV0L2lwdjQvaXBfb3B0aW9ucy5jOjQ3MzpcdFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9QQVJBTUVURVJQUk9CLCAwLCBpbmZvKTtcbm5ldC9pcHY0L2lwX29wdGlvbnMuYy00NzQtXHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9pcHY0L2lwX29wdGlvbnMuYz01ODk9aW50IGlwX29wdGlvbnNfcmN2X3NycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX29wdGlvbnMuYy02MDgtXHRcdFx0cmV0dXJuIDA7XG5uZXQvaXB2NC9pcF9vcHRpb25zLmM6NjA5Olx0XHRpY21wX3NlbmQoc2tiLCBJQ01QX1BBUkFNRVRFUlBST0IsIDAsIGh0b25sKDE2XHUwMDNjXHUwMDNjMjQpKTtcbm5ldC9pcHY0L2lwX29wdGlvbnMuYy02MTAtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pcHY0L2lwX29wdGlvbnMuYy02MTYtXHRcdGlmIChzcnJwdHIgJiM0MzsgMyBcdTAwM2Ugc3Jyc3BhY2UpIHtcbm5ldC9pcHY0L2lwX29wdGlvbnMuYzo2MTc6XHRcdFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9QQVJBTUVURVJQUk9CLCAwLCBodG9ubCgob3B0LVx1MDAzZXNyciYjNDM7MilcdTAwM2NcdTAwM2MyNCkpO1xubmV0L2lwdjQvaXBfb3B0aW9ucy5jLTYxOC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz01NzU9c3RhdGljIGludCBpcF9mcmFnbWVudChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy01ODctXHRcdElQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzo1ODg6XHRcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0ZSQUdfTkVFREVELFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtNTg5LVx0XHRcdCAgaHRvbmwobXR1KSk7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MzQ4PXZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaylcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNjEtXHQgICAgIW5mX3JlamVjdF92ZXJpZnlfY3N1bShza2JfaW4sIGRhdGFvZmYsIHByb3RvKSkge1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM6MzYyOlx0XHRpY21wX3NlbmQoc2tiX2luLCBJQ01QX0RFU1RfVU5SRUFDSCwgY29kZSwgMCk7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNjMtXHRcdHJldHVybjtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNjYtXHRpZiAobmZfaXBfY2hlY2tzdW0oc2tiX2luLCBob29rLCBkYXRhb2ZmLCBwcm90bykgPT0gMClcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjM2NzpcdFx0aWNtcF9zZW5kKHNrYl9pbiwgSUNNUF9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzY4LX1cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTkwMj12b2lkIGlwX3J0X3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTk1My1cbm5ldC9pcHY0L3JvdXRlLmM6OTU0Olx0XHRpY21wX3NlbmQoc2tiLCBJQ01QX1JFRElSRUNULCBJQ01QX1JFRElSX0hPU1QsIGd3KTtcbm5ldC9pcHY0L3JvdXRlLmMtOTU1LVx0XHRwZWVyLVx1MDAzZXJhdGVfbGFzdCA9IGppZmZpZXM7XG4tLVxubmV0L2lwdjQvcm91dGUuYz05Njc9c3RhdGljIGludCBpcF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTA0MS1cdGlmIChzZW5kKVxubmV0L2lwdjQvcm91dGUuYzoxMDQyOlx0XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgY29kZSwgMCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTEwNDMtXG4tLVxubmV0L2lwdjQvcm91dGUuYz0xMjU1PXN0YXRpYyB2b2lkIGlwdjRfc2VuZF9kZXN0X3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTEyODEtXHR9XG5uZXQvaXB2NC9yb3V0ZS5jOjEyODI6XHRfX2ljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0hPU1RfVU5SRUFDSCwgMCwgXHUwMDI2cGFybSk7XG5uZXQvaXB2NC9yb3V0ZS5jLTEyODMtfVxuLS1cbm5ldC9pcHY0L3R1bm5lbDQuYz05NT1zdGF0aWMgaW50IHR1bm5lbDRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdHVubmVsNC5jLTEwNS1cbm5ldC9pcHY0L3R1bm5lbDQuYzoxMDY6XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xubmV0L2lwdjQvdHVubmVsNC5jLTEwNy1cbi0tXG5uZXQvaXB2NC90dW5uZWw0LmM9MTQxPXN0YXRpYyBpbnQgdHVubmVsNjRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdHVubmVsNC5jLTE1MS1cbm5ldC9pcHY0L3R1bm5lbDQuYzoxNTI6XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xubmV0L2lwdjQvdHVubmVsNC5jLTE1My1cbi0tXG5uZXQvaXB2NC90dW5uZWw0LmM9MTYxPXN0YXRpYyBpbnQgdHVubmVsbXBsczRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdHVubmVsNC5jLTE3MS1cbm5ldC9pcHY0L3R1bm5lbDQuYzoxNzI6XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xubmV0L2lwdjQvdHVubmVsNC5jLTE3My1cbi0tXG5uZXQvaXB2NC91ZHAuYz0yNjAzPWludCB1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdWRwLmMtMjY3Ny1cdF9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfTk9QT1JUUyk7XG5uZXQvaXB2NC91ZHAuYzoyNjc4Olx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTtcbm5ldC9pcHY0L3VkcC5jLTI2NzktXG4tLVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYz02MT1pbnQgeGZybTRfcmN2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLFxuLS1cbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmMtODctb3V0OlxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYzo4ODpcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7XG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTg5LVxuLS1cbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmM9OTY9c3RhdGljIGludCB4ZnJtNF9lc3BfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0xMDYtXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jOjEwNzpcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7XG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTEwOC1cbi0tXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jPTEyND1zdGF0aWMgaW50IHhmcm00X2FoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmMtMTM0LVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYzoxMzU6XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0xMzYtXG4tLVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYz0xNTI9c3RhdGljIGludCB4ZnJtNF9pcGNvbXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0xNjItXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jOjE2MzpcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7XG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTE2NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1ODgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSUNNUCBSb3V0aW5nIGFuZCBUcmFuc21pc3Npb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgaWNtcF9yb3V0ZV9sb29rdXBgIGFuZCBgX19pY21wX3NlbmRgLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhvc2UgdHdvIGZ1bmN0aW9ucywgb3IgcG9zc2libHkgdGhyZWUgaWYgYGljbXBfc2VuZGAgaXMgYWxzbyByZWxldmFudC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRob3NlIGFyZSB0aGUga2V5IGFyZWFzIEkgd2FudCB0byB1bmRlcnN0YW5kLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3J1Y2lhbC4gSXMgYGljbXBfcm91dGVfbG9va3VwYCBleHBvcnRlZCwgb3IgaXMgaXQgaGlkZGVuIGFzIGEgc3RhdGljIGZ1bmN0aW9uPyBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQmIzM5O3MgZGVjbGFyZWQgYXMgYHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cCguLi4pYCwgd2hpY2ggdGVsbHMgbWUgaXQmIzM5O3MgaW50ZXJuYWwgdG8gaXRzIG1vZHVsZS4gYF9faWNtcF9zZW5kYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIGV4cG9ydGVkIHZpYSBgRVhQT1JUX1NZTUJPTChfX2ljbXBfc2VuZClgLCBzbyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQgZm9yIGhvdyB0aGUga2VybmVsJiMzOTtzIElDTVAgaW1wbGVtZW50YXRpb24gaXMgc3RydWN0dXJlZC4KCkZpbmFsbHksIEkgbmVlZCB0byBrbm93IHdoYXQgYGljbXBfc2VuZGAgaXMuIElzIGl0IGFuIGlubGluZSBmdW5jdGlvbiBvciBhIG1hY3JvIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L2ljbXAuaGA/IFRoYXQgd2lsbCB0ZWxsIG1lIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSwgYW5kIHdoZXRoZXIgaXTigJlzIGEgc2ltcGxlIGhlbHBlciBvciBhIG1vcmUgaW52b2x2ZWQgcGFydCBvZiB0aGUgSUNNUCBzZW5kaW5nIG1lY2hhbmlzbS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgaGVhZGVyIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpY21wX3NlbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pY21wLmg9Mzc9c3RydWN0IG5ldDtcbmluY2x1ZGUvbmV0L2ljbXAuaC0zOC1cbmluY2x1ZGUvbmV0L2ljbXAuaDozOTp2b2lkIF9faWNtcF9zZW5kKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCB0eXBlLCBpbnQgY29kZSwgX19iZTMyIGluZm8sXG5pbmNsdWRlL25ldC9pY21wLmgtNDAtXHRcdCBjb25zdCBzdHJ1Y3QgaW5ldF9za2JfcGFybSAqcGFybSk7XG5pbmNsdWRlL25ldC9pY21wLmg6NDE6c3RhdGljIGlubGluZSB2b2lkIGljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvKVxuaW5jbHVkZS9uZXQvaWNtcC5oLTQyLXtcbmluY2x1ZGUvbmV0L2ljbXAuaDo0MzpcdF9faWNtcF9zZW5kKHNrYl9pbiwgdHlwZSwgY29kZSwgaW5mbywgSVBDQihza2JfaW4pKTtcbmluY2x1ZGUvbmV0L2ljbXAuaC00NC19XG4tLVxuaW5jbHVkZS9uZXQvaWNtcC5oPTQ5PXN0YXRpYyBpbmxpbmUgdm9pZCBpY21wX25kb19zZW5kKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCB0eXBlLCBpbnQgY29kZSwgX19iZTMyIGluZm8pXG4tLVxuaW5jbHVkZS9uZXQvaWNtcC5oLTUzLVx0bWVtc2V0KFx1MDAyNnBhcm0sIDAsIHNpemVvZihwYXJtKSk7XG5pbmNsdWRlL25ldC9pY21wLmg6NTQ6XHRfX2ljbXBfc2VuZChza2JfaW4sIHR5cGUsIGNvZGUsIGluZm8sIFx1MDAyNnBhcm0pO1xuaW5jbHVkZS9uZXQvaWNtcC5oLTU1LX1cbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTExNTY9c3RydWN0IG5ldG5zX2lwdnMge1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTI2My1cdGludFx0XHRcdHN5c2N0bF9zeW5jX3JldHJpZXM7XG5pbmNsdWRlL25ldC9pcF92cy5oOjEyNjQ6XHRpbnRcdFx0XHRzeXNjdGxfbmF0X2ljbXBfc2VuZDtcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTI2NS1cdGludFx0XHRcdHN5c2N0bF9wbXR1X2Rpc2M7XG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvaWNtcC5oLTEwLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvaWNtcC5oOjExOlRSQUNFX0VWRU5UKGljbXBfc2VuZCxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ljbXAuaC0xMi1cbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9pY21wLmgtNTktXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9pY21wLmg6NjA6XHRcdFRQX3ByaW50ayhcJiMzNDtpY21wX3NlbmQ6IHR5cGU9JWQsIGNvZGU9JWQuIEZyb20gJXBJNDoldSB0byAlcEk0OiV1IHVsZW49JWQgc2tiYWRkcj0lcFwmIzM0OyxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ljbXAuaC02MS1cdFx0XHRfX2VudHJ5LVx1MDAzZXR5cGUsIF9fZW50cnktXHUwMDNlY29kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MTAKCQkJCQkJCW91dHB1dDogMTA1CgkJCQkJCQl0aG91Z2h0czogMjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIElDTVAgUm91dGluZyBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIElDTVAgY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHJvdXRpbmcuIEkgc2VlIHRoYXQgYGljbXBfc2VuZGAgaXMgaW5saW5lZCwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgcGVyZm9ybWFuY2UsIGJ1dCB0aGUgYWN0dWFsLCBub24tc3RhdGljIGZ1bmN0aW9uIGV4cG9zZWQgaXMgYF9faWNtcF9zZW5kYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZSByZWFsIHdvcmssIHRoZSByb3V0aW5nIGxvb2t1cCBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGlzIGhhbmRsZWQgYnkgYGljbXBfcm91dGVfbG9va3VwYCwgYW5kIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBuZXQvaXB2NC9pY21wLmNgLgoKTm93LCBiZWZvcmUgSSBkaWcgZGVlcGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBBaCwgYENPTkZJR19JTkVUYCBsb29rcyBsaWtlIHRoZSBwcmltYXJ5IGVuYWJsZXIgZm9yIHRoYXQgZW50aXJlIGBuZXQvaXB2NC9pY21wLmNgIGZpbGUuIEdvdCBpdC4KCkxldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGUgc2V0dXAgZm9yIHRoaXMuICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgaXMgdHJ1ZSwgd2hpY2ggaXMgZ29vZCDigJMgYWx3YXlzIGEgZ29vZCBzaWduIHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmtpbmcgY29kZS4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGZpeGluZyBhIHJvdXRpbmcgYnVnIHdoZXJlIHVucmVhY2hhYmxlIHJvdXRlcyAoYFJUTl9VTlJFQUNIQUJMRWApIHdlcmVuJiMzOTt0IGJlaW5nIHByb3Blcmx5IGRpc2NhcmRlZCB3aGVuIHNlbmRpbmcgSUNNUCBlcnJvciBtZXNzYWdlcywgcGFydGljdWxhcmx5IHByZXZlbnRpbmcgdGhlIHVzZSBvZiBpbnZhbGlkIHJvdXRlcyB3aXRoIGBkc3Qub3V0cHV0ID0gaXBfcnRfYnVnYC4gSXQmIzM5O3MgYSBjb3JlIElQdjQgbmV0d29ya2luZyBjaGFuZ2UsIGFuZCBpdCYjMzk7cyBkaXJlY3RseSByZWFjaGFibGUuIFBlcmZlY3QuCgpUaGUgZm9jdXMgc3ltYm9scyBhcmUsIGFzIGV4cGVjdGVkLCBgaWNtcF9yb3V0ZV9sb29rdXBgIGFuZCBgX19pY21wX3NlbmRgLiBTbywgSSYjMzk7bGwgYmUgdGFyZ2V0aW5nIHRob3NlIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHkuIEFuZCwgb2YgY291cnNlLCBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfSU5FVGAgaXMgZW5hYmxlZC4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhpcyBpbmZvLiBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpY21wX3JvdXRlX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtfX2ljbXBfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcm91dGUgbG9va3VwIGxvZ2ljIGZvciBJQ01QIHNlbmRpbmcgaW4gaWNtcF9yb3V0ZV9sb29rdXAoKSB0byBwcm9wZXJseSByZWplY3Qgcm91dGVzIG9mIHR5cGUgUlROX1VOUkVBQ0hBQkxFIGluIGFkZGl0aW9uIHRvIFJUTl9MT0NBTC4gVGhpcyB0b3VjaGVzIGNvcmUgSVB2NCBJQ01QIHRyYW5zbWlzc2lvbiBsb2dpYyB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWNtcF9yb3V0ZV9sb29rdXAmIzM0OywKICAgICYjMzQ7X19pY21wX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJvdXRlIGxvb2t1cCBsb2dpYyBmb3IgSUNNUCBzZW5kaW5nIGluIGljbXBfcm91dGVfbG9va3VwKCkgdG8gcHJvcGVybHkgcmVqZWN0IHJvdXRlcyBvZiB0eXBlIFJUTl9VTlJFQUNIQUJMRSBpbiBhZGRpdGlvbiB0byBSVE5fTE9DQUwuIFRoaXMgdG91Y2hlcyBjb3JlIElQdjQgSUNNUCB0cmFuc21pc3Npb24gbG9naWMgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNTo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpY21wX3JvdXRlX2xvb2t1cCgpYCBpbiBgbmV0L2lwdjQvaWNtcC5jYCB0byByZWplY3QgYFJUTl9VTlJFQUNIQUJMRWAgcm91dGVzIGluIGFkZGl0aW9uIHRvIGBSVE5fTE9DQUxgIHJvdXRlcywgcHJldmVudGluZyB0aGUgdXNlIG9mIHJvdXRlcyB3aXRoIGBkc3Qub3V0cHV0ID0gaXBfcnRfYnVnYCB3aGVuIHRyYW5zbWl0dGluZyBJQ01QIG1lc3NhZ2VzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSByb3V0aW5nIGFuZCBlcnJvci1oYW5kbGluZyBsb2dpYyBmaXguIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMuIEFueSBidWdzIHJlbGF0ZWQgdG8gZXhlY3V0aW5nIGludmFsaWQgcm91dGUgb3V0cHV0IGZ1bmN0aW9ucyBvciByZWZlcmVuY2UgY291bnRpbmcvbWVtb3J5IHNhZmV0eSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZDBhYTU1YjUxYTNkZDNiZDIzMmRmNjNlZjZmNjZjNWVlMDJlYzRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTU6NDc6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggMGNhZWRmYzdjYTkyZi4uOTBjMGUyMmMyOWJlYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtNTgxLDE2ICYjNDM7NTgxLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJc2tiX2RzdHJlZl9yZXN0b3JlKHNrYl9pbiwgb3JlZmRzdCk7CiAKIAkJLyoKLQkJICogQXQgdGhpcyBwb2ludCwgZmw0X2RlYy5kYWRkciBzaG91bGQgTk9UIGJlIGxvY2FsICh3ZQotCQkgKiBjaGVja2VkIGZsNF9kZWMuc2FkZHIgYWJvdmUpLiBIb3dldmVyLCBhIHJhY2UgY29uZGl0aW9uCi0JCSAqIG1heSBvY2N1ciBpZiB0aGUgYWRkcmVzcyBpcyBhZGRlZCB0byB0aGUgaW50ZXJmYWNlCi0JCSAqIGNvbmN1cnJlbnRseS4gSW4gdGhhdCBjYXNlLCBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYQotCQkgKiBMT0NBTCByb3V0ZSB3aXRoIGRzdC5vdXRwdXQ9aXBfcnRfYnVnLCB3aGljaCBtdXN0IG5vdAotCQkgKiBiZSB1c2VkIGZvciBvdXRwdXQuCiYjNDM7CQkgKiBmbDRfZGVjLmRhZGRyIGlzIG5vdCBleHBlY3RlZCB0byBiZSBsb2NhbCBoZXJlLCBidXQgaXQgY2FuIGJlCiYjNDM7CQkgKiBhZGRlZCB0byBhbiBpbnRlcmZhY2UgY29uY3VycmVudGx5LCBpbiB3aGljaCBjYXNlCiYjNDM7CQkgKiBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYSBMT0NBTCByb3V0ZS4gSXQgY2FuIGFsc28gZmFpbCB0bwomIzQzOwkJICogYnVpbGQgYSBmb3J3YXJkaW5nIHJvdXRlIHRvd2FyZHMgZmw0X2RlYy5kYWRkciwgZm9yIGV4YW1wbGUsCiYjNDM7CQkgKiB3aGVuIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQsIGFuZCByZXR1cm4gYW4gVU5SRUFDSEFCTEUgcm91dGUuCiYjNDM7CQkgKiBCb3RoIGNhc2VzIHdpbGwgcmVzdWx0IGluIGEgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1ZywKJiM0MzsJCSAqIHdoaWNoIG11c3Qgbm90IGJlIHVzZWQgZm9yIG91dHB1dC4KIAkJICovCi0JCWlmICghZXJyICZhbXA7JmFtcDsgcnQyICZhbXA7JmFtcDsgcnQyLSZndDtydF90eXBlID09IFJUTl9MT0NBTCkgewomIzQzOwkJaWYgKCFlcnIgJmFtcDsmYW1wOyBydDIgJmFtcDsmYW1wOyBydDItJmd0O3J0X3R5cGUgPT0gUlROX0xPQ0FMKQogCQkJbmV0X3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtkZXRlY3RlZCBsb2NhbCByb3V0ZSBmb3IgJXBJNCBkdXJpbmcgSUNNUCBzZW5kaW5nLCBzcmMgJXBJNFxuJiMzNDssCiAJCQkJCSAgICAgJmFtcDtmbDRfZGVjLmRhZGRyLCAmYW1wO2ZsNF9kZWMuc2FkZHIpOwomIzQzOwkJaWYgKCFlcnIgJmFtcDsmYW1wOyBydDIgJmFtcDsmYW1wOwomIzQzOwkJICAgIChydDItJmd0O3J0X3R5cGUgPT0gUlROX0xPQ0FMIHx8IHJ0Mi0mZ3Q7cnRfdHlwZSA9PSBSVE5fVU5SRUFDSEFCTEUpKSB7CiAJCQlkc3RfcmVsZWFzZSgmYW1wO3J0Mi0mZ3Q7ZHN0KTsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gSUNNUCBSb3V0aW5nIExvZ2ljKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgYGljbXBfcm91dGVfbG9va3VwYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY0L2ljbXAuY2AuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byBob3cgSUNNUCBwYWNrZXRzIGFyZSByb3V0ZWQgaW4gdGhlIElQdjQgc3RhY2suIE15IGltbWVkaWF0ZSBpbmNsaW5hdGlvbiBpcyB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBtb2RpZmljYXRpb24uIFdoYXQgc3BlY2lmaWMgSUNNUCByb3V0aW5nIGJlaGF2aW9yIGlzIGJlaW5nIHRhcmdldGVkPyBJcyB0aGlzIGFib3V0IGhhbmRsaW5nIHJlZGlyZWN0cywgcmF0ZSBsaW1pdGluZywgZXJyb3IgcmVwb3J0aW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KClRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgYGljbXBfcm91dGVfbG9va3VwYCB3aXRoaW4gYG5ldC9pcHY0L2ljbXAuY2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzOiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBpY21wX3JvdXRlX2xvb2t1cGA/IFdoYXQgdmFyaWFibGVzIGFyZSBwYXNzZWQgdG8gaXQgYW5kIHdoYXQgYXJlIHRoZWlyIG1lYW5pbmdzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlPyBIb3cgaXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgaWNtcF9yb3V0ZV9sb29rdXBgIGJlaW5nIHVzZWQ/IEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgdGhpcyBmdW5jdGlvbiB0byBmdWxseSBncmFzcCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4gVGhpcyBkZWVwIGRpdmUgaW50byB0aGUgY29kZSB3aWxsIHJldmVhbCB0aGUgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY2hhbmdlcyBhbmQgYWxsb3cgbWUgdG8gZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhIG1pbm9yIHR3ZWFrLCBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQsIG9yIHNvbWV0aGluZyBpbiBiZXR3ZWVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2ljbXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTUwOlx0XHR9IGVsc2Uge1xuIDU1MTpcdFx0XHRzdHJ1Y3QgZmxvd2k0IGZsNF8yID0gZmw0X2RlYztcbiA1NTI6XHRcdFx0dW5zaWduZWQgbG9uZyBvcmVmZHN0O1xuIDU1MzpcdFxuIDU1NDpcdFx0XHRzd2FwKGZsNF8yLmRhZGRyLCBmbDRfMi5zYWRkcik7XG4gNTU1Olx0XHRcdHN3aXRjaCAoZmw0XzIuZmxvd2k0X3Byb3RvKSB7XG4gNTU2Olx0XHRcdGNhc2UgSVBQUk9UT19UQ1A6XG4gNTU3Olx0XHRcdGNhc2UgSVBQUk9UT19VRFA6XG4gNTU4Olx0XHRcdGNhc2UgSVBQUk9UT19TQ1RQOlxuIDU1OTpcdFx0XHRjYXNlIElQUFJPVE9fRENDUDpcbiA1NjA6XHRcdFx0XHRzd2FwKGZsNF8yLmZsNF9zcG9ydCwgZmw0XzIuZmw0X2Rwb3J0KTtcbiA1NjE6XHRcdFx0XHRicmVhaztcbiA1NjI6XHRcdFx0fVxuIDU2MzpcdFxuIDU2NDpcdFx0XHRmbDRfMi5mbG93aTRfb2lmID0gbDNtZGV2X21hc3Rlcl9pZmluZGV4KHJvdXRlX2xvb2t1cF9kZXYpO1xuIDU2NTpcdFx0XHRmbDRfMi5mbG93aTRfZmxhZ3MgfD0gRkxPV0lfRkxBR19BTllTUkM7XG4gNTY2Olx0XG4gNTY3Olx0XHRcdHJ0MiA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFx1MDAyNmZsNF8yKTtcbiA1Njg6XHRcdFx0aWYgKElTX0VSUihydDIpKSB7XG4gNTY5Olx0XHRcdFx0ZXJyID0gUFRSX0VSUihydDIpO1xuIDU3MDpcdFx0XHRcdGdvdG8gcmVsb29rdXBfZmFpbGVkO1xuIDU3MTpcdFx0XHR9XG4gNTcyOlx0XHRcdC8qIFVnaCEgKi9cbiA1NzM6XHRcdFx0b3JlZmRzdCA9IHNrYl9kc3RyZWZfc3RlYWwoc2tiX2luKTtcbiA1NzQ6XHRcdFx0ZXJyID0gaXBfcm91dGVfaW5wdXQoc2tiX2luLCBmbDRfZGVjLmRhZGRyLCBmbDRfZGVjLnNhZGRyLFxuIDU3NTpcdFx0XHRcdFx0ICAgICBkc2NwLCBydDItXHUwMDNlZHN0LmRldikgPyAtRUlOVkFMIDogMDtcbiA1NzY6XHRcbiA1Nzc6XHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2cnQyLVx1MDAzZWRzdCk7XG4gNTc4Olx0XHRcdHJ0MiA9IHNrYl9ydGFibGUoc2tiX2luKTtcbiA1Nzk6XHRcdFx0Lyogc3RlYWwgZHN0IGVudHJ5IGZyb20gc2tiX2luLCBkb24mIzM5O3QgZHJvcCByZWZjbnQgKi9cbiA1ODA6XHRcdFx0c2tiX2RzdHJlZl9zdGVhbChza2JfaW4pO1xuIDU4MTpcdFx0XHRza2JfZHN0cmVmX3Jlc3RvcmUoc2tiX2luLCBvcmVmZHN0KTtcbiA1ODI6XHRcbiA1ODM6XHRcdFx0LypcbiA1ODQ6XHRcdFx0ICogZmw0X2RlYy5kYWRkciBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgbG9jYWwgaGVyZSwgYnV0IGl0IGNhbiBiZVxuIDU4NTpcdFx0XHQgKiBhZGRlZCB0byBhbiBpbnRlcmZhY2UgY29uY3VycmVudGx5LCBpbiB3aGljaCBjYXNlXG4gNTg2Olx0XHRcdCAqIGlwX3JvdXRlX2lucHV0KCkgcmV0dXJucyBhIExPQ0FMIHJvdXRlLiBJdCBjYW4gYWxzbyBmYWlsIHRvXG4gNTg3Olx0XHRcdCAqIGJ1aWxkIGEgZm9yd2FyZGluZyByb3V0ZSB0b3dhcmRzIGZsNF9kZWMuZGFkZHIsIGZvciBleGFtcGxlLFxuIDU4ODpcdFx0XHQgKiB3aGVuIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQsIGFuZCByZXR1cm4gYW4gVU5SRUFDSEFCTEUgcm91dGUuXG4gNTg5Olx0XHRcdCAqIEJvdGggY2FzZXMgd2lsbCByZXN1bHQgaW4gYSByb3V0ZSB3aXRoIGRzdC5vdXRwdXQ9aXBfcnRfYnVnLFxuIDU5MDpcdFx0XHQgKiB3aGljaCBtdXN0IG5vdCBiZSB1c2VkIGZvciBvdXRwdXQuXG4gNTkxOlx0XHRcdCAqL1xuIDU5MjpcdFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcnQyIFx1MDAyNlx1MDAyNiBydDItXHUwMDNlcnRfdHlwZSA9PSBSVE5fTE9DQUwpXG4gNTkzOlx0XHRcdFx0bmV0X3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7ZGV0ZWN0ZWQgbG9jYWwgcm91dGUgZm9yICVwSTQgZHVyaW5nIElDTVAgc2VuZGluZywgc3JjICVwSTRcXG5cJiMzNDssXG4gNTk0Olx0XHRcdFx0XHRcdCAgICAgXHUwMDI2Zmw0X2RlYy5kYWRkciwgXHUwMDI2Zmw0X2RlYy5zYWRkcik7XG4gNTk1Olx0XHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBydDIgXHUwMDI2XHUwMDI2XG4gNTk2Olx0XHRcdCAgICAocnQyLVx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMIHx8IHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9VTlJFQUNIQUJMRSkpIHtcbiA1OTc6XHRcdFx0XHRkc3RfcmVsZWFzZShcdTAwMjZydDItXHUwMDNlZHN0KTtcbiA1OTg6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDU5OTpcdFx0XHR9XG4gNjAwOlx0XHR9XG4gNjAxOlx0XG4gNjAyOlx0XHRpZiAoZXJyKVxuIDYwMzpcdFx0XHRnb3RvIHJlbG9va3VwX2ZhaWxlZDtcbiA2MDQ6XHRcbiA2MDU6XHRcdGRzdDIgPSB4ZnJtX2xvb2t1cChuZXQsIFx1MDAyNnJ0Mi1cdTAwM2Vkc3QsIGZsb3dpNF90b19mbG93aShcdTAwMjZmbDRfZGVjKSwgTlVMTCxcbiA2MDY6XHRcdFx0XHQgICBYRlJNX0xPT0tVUF9JQ01QKTtcbiA2MDc6XHRcdHJ0MiA9IGRzdF9ydGFibGUoZHN0Mik7XG4gNjA4Olx0XHRpZiAoIUlTX0VSUihkc3QyKSkge1xuIDYwOTpcdFx0XHRkc3RfcmVsZWFzZShcdTAwMjZydC1cdTAwM2Vkc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODY0CgkJCQkJCQlvdXRwdXQ6IDE3NwoJCQkJCQkJdGhvdWdodHM6IDM2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElDTVAgUm91dGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaC4gSXQgYXBwZWFycyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIGluIGBpY21wX3JvdXRlX2xvb2t1cCgpYCB3aGVyZSwgd2hlbiB0aGUgcm91dGluZyBsb29rdXAgZm9yIElDTVAgc2VuZGluZyBmYWlscyBhbmQgcmV0dXJucyBhbiB1bnJlYWNoYWJsZSByb3V0ZSAoc3BlY2lmaWNhbGx5IGBSVE5fVU5SRUFDSEFCTEVgKSwgdGhlIGNvZGUgaW5jb3JyZWN0bHkgc2V0cyBgZHN0Lm91dHB1dGAgdG8gYGlwX3J0X2J1Z2AuIFRoaXMgY2FuIGxlYWQgdG8gY3Jhc2hlcyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHRyaWdnZXIgd2FybmluZ3Mgb3IgYnVncyB3aGVuIHRoZSBrZXJuZWwgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgaW52YWxpZCBvdXRwdXQuIFRoaXMgaXMgYSBjbGFzc2ljIGVycm9yIGNvbmRpdGlvbiwgYW5kIGl0IG5lZWRzIHRvIGJlIGFkZHJlc3NlZC4KClRoZSBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGFkZGluZyBhIGNoZWNrOiBgfHwgcnQyLSZndDtydF90eXBlID09IFJUTl9VTlJFQUNIQUJMRWAgdG8gdGhlIGNvbmRpdGlvbiB0aGF0IHJlbGVhc2VzIGBydDItJmd0O2RzdGAgYW5kIHNldHMgYGVyciA9IC1FSU5WQUxgLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgZXhwbGljaXRseSBoYW5kbGluZyB0aGUgYFJUTl9VTlJFQUNIQUJMRWAgY2FzZSB0byBwcmV2ZW50IHRoZSBiYWQgYGlwX3J0X2J1Z2AgYXNzaWdubWVudC4KCk5vdywgSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBpc3N1ZXMuIE15IHByaW1hcnkgY29uY2VybiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIHNlZToKCiogICBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zPyBHb29kLgoqICAgTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IEV4Y2VsbGVudC4KKiAgIE5vIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2U/IFJlYXNzdXJpbmcuCiogICBObyBzdHJ1Y3R1cmUgY29waWVzIGFjcm9zcyBib3VuZGFyaWVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24/IEZpbmUuCgpUaGUgcGF0Y2ggaXMgb25seSBkZWFsaW5nIHdpdGggYW4gZXhpc3RpbmcsIGluaXRpYWxpemVkIHJvdXRpbmcgdGFibGUgc3RydWN0LCByZWxlYXNpbmcgdGhlIGBkc3RgLCBhbmQgc2V0dGluZyBhbiBlcnJvciBjb2RlLiBGcm9tIGEgbWVtb3J5IHNhZmV0eSBzdGFuZHBvaW50LCBpdCYjMzk7cyBsb29raW5nIGNsZWFuLgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIEtNU0FOLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGlzIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgS01TQU4tcmVsYXRlZCBpc3N1ZXMuIEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIGFuZCBwb3RlbnRpYWwgaW5mbyBsZWFrcywgcmlnaHQ/IFdlbGwsIGFsbCB0aGUgdmFyaWFibGVzIGludm9sdmVkIChgZXJyYCwgYHJ0MmAsIGV0Yy4pIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgbWFuYWdlZCB0aHJvdWdob3V0IHRoZSBleGVjdXRpb24gb2YgdGhpcyBzZWN0aW9uIG9mIGNvZGUuIFRoaXMgcGF0Y2ggaXMgc2ltcGx5IGZpeGluZyBhIGxvZ2ljYWwgZXJyb3IsIGFuIGVycm9yIGNvbmRpdGlvbiB3aGVyZSB0aGUgYFJUTl9VTlJFQUNIQUJMRWAgcm91dGUgd2FzIGxlYWRpbmcgdG8gdGhlIGV4ZWN1dGlvbiBvZiBgaXBfcnRfYnVnYCwgd2hpY2ggd291bGQgdHJpZ2dlciBrZXJuZWwgd2FybmluZ3MgYW5kIGJ1Z3MsIG9yIHBvdGVudGlhbGx5IGNhdXNlIHJvdXRpbmcgbG9naWMgaXNzdWVzIHRoYXQgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOL3N0YW5kYXJkIHNhbml0aXplcnMgb3IgdHJpZ2dlciBhIGtlcm5lbCBwYW5pYy4gSW4gZmFjdCwgaWYgbm90IGZvciB0aGUgZml4LCB3ZSBtaWdodCBzZWUgS0FTQU4gb3IgYW5vdGhlciBzYW5pdGl6ZXIgZmxhZ2dpbmcgdGhpcyBpc3N1ZS4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGlzIHB1cmVseSBhIGxvZ2ljIGVycm9yIGZpeCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayB2dWxuZXJhYmlsaXRpZXMsICYjMzQ7TmVlZHNLTVNBTiYjMzQ7IHNob3VsZCBkZWZpbml0aXZlbHkgYmUgYGZhbHNlYC4gVGhlIGNvcmUgb2YgdGhlIGJ1ZyB3ZSBhcmUgZml4aW5nIGlzIGEgbG9naWMgZXJyb3IgdGhhdCBjYXVzZXMgaW52YWxpZCByb3V0aW5nIG91dHB1dCwgd2hpY2ggd291bGQgdHJpZ2dlciBrZXJuZWwgd2FybmluZ3MgLyBidWdzIG9yIHJvdXRpbmcgbG9naWMgaXNzdWVzIGNhdWdodCBieSBLQVNBTiAvIHN0YW5kYXJkIHNhbml0aXplcnMgLyBwYW5pYy4gS01TQU4gd291bGQgbm90IGJlIHVzZWZ1bCBoZXJlLiBLTVNBTiYjMzk7cyBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gY2F0Y2ggdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiB3aWxsIGxpa2VseSBjYXRjaCB0aGUgYnVnIHRoYXQgaXMgcHJlc2VudCB3aXRob3V0IHRoZSBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpY21wX3JvdXRlX2xvb2t1cCgpYCBpbiBgbmV0L2lwdjQvaWNtcC5jYCB0byByZWplY3QgYFJUTl9VTlJFQUNIQUJMRWAgcm91dGVzIGluIGFkZGl0aW9uIHRvIGBSVE5fTE9DQUxgIHJvdXRlcywgcHJldmVudGluZyB0aGUgdXNlIG9mIHJvdXRlcyB3aXRoIGBkc3Qub3V0cHV0ID0gaXBfcnRfYnVnYCB3aGVuIHRyYW5zbWl0dGluZyBJQ01QIG1lc3NhZ2VzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSByb3V0aW5nIGFuZCBlcnJvci1oYW5kbGluZyBsb2dpYyBmaXguIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMuIEFueSBidWdzIHJlbGF0ZWQgdG8gZXhlY3V0aW5nIGludmFsaWQgcm91dGUgb3V0cHV0IGZ1bmN0aW9ucyBvciByZWZlcmVuY2UgY291bnRpbmcvbWVtb3J5IHNhZmV0eSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaWNtcF9yb3V0ZV9sb29rdXAoKWAgaW4gYG5ldC9pcHY0L2ljbXAuY2AgdG8gcmVqZWN0IGBSVE5fVU5SRUFDSEFCTEVgIHJvdXRlcyBpbiBhZGRpdGlvbiB0byBgUlROX0xPQ0FMYCByb3V0ZXMsIHByZXZlbnRpbmcgdGhlIHVzZSBvZiByb3V0ZXMgd2l0aCBgZHN0Lm91dHB1dCA9IGlwX3J0X2J1Z2Agd2hlbiB0cmFuc21pdHRpbmcgSUNNUCBtZXNzYWdlcy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgcm91dGluZyBhbmQgZXJyb3ItaGFuZGxpbmcgbG9naWMgZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciBvcGVyYXRpb25zIG9uIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9idWZmZXJzLiBBbnkgYnVncyByZWxhdGVkIHRvIGV4ZWN1dGluZyBpbnZhbGlkIHJvdXRlIG91dHB1dCBmdW5jdGlvbnMgb3IgcmVmZXJlbmNlIGNvdW50aW5nL21lbW9yeSBzYWZldHkgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0Nzo0OC4wMjY0MDgwOTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzAyNDE4ODA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWNtcF9yb3V0ZV9sb29rdXBcIixcbiAgICBcIl9faWNtcF9zZW5kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaWNtcF9yb3V0ZV9sb29rdXAoKWAgaW4gYG5ldC9pcHY0L2ljbXAuY2AgdG8gcmVqZWN0IGBSVE5fVU5SRUFDSEFCTEVgIHJvdXRlcyBpbiBhZGRpdGlvbiB0byBgUlROX0xPQ0FMYCByb3V0ZXMsIHByZXZlbnRpbmcgdGhlIHVzZSBvZiByb3V0ZXMgd2l0aCBgZHN0Lm91dHB1dCA9IGlwX3J0X2J1Z2Agd2hlbiB0cmFuc21pdHRpbmcgSUNNUCBtZXNzYWdlcy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSByb3V0aW5nIGFuZCBlcnJvci1oYW5kbGluZyBsb2dpYyBmaXguIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMuIEFueSBidWdzIHJlbGF0ZWQgdG8gZXhlY3V0aW5nIGludmFsaWQgcm91dGUgb3V0cHV0IGZ1bmN0aW9ucyBvciByZWZlcmVuY2UgY291bnRpbmcvbWVtb3J5IHNhZmV0eSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJvdXRlIGxvb2t1cCBsb2dpYyBmb3IgSUNNUCBzZW5kaW5nIGluIGljbXBfcm91dGVfbG9va3VwKCkgdG8gcHJvcGVybHkgcmVqZWN0IHJvdXRlcyBvZiB0eXBlIFJUTl9VTlJFQUNIQUJMRSBpbiBhZGRpdGlvbiB0byBSVE5fTE9DQUwuIFRoaXMgdG91Y2hlcyBjb3JlIElQdjQgSUNNUCB0cmFuc21pc3Npb24gbG9naWMgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDc6NDguMDI2NDEzNzY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkwNzMwNTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWQwYWE1NWI1MWEzZGQzYmQyMzJkZjYzZWY2ZjY2YzVlZTAyZWM0YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNTo0Nzo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmNcXG5pbmRleCAwY2FlZGZjN2NhOTJmLi45MGMwZTIyYzI5YmVhIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2ljbXAuY1xcbisrKyBiL25ldC9pcHY0L2ljbXAuY1xcbkBAIC01ODEsMTYgKzU4MSwxOSBAQCBzdGF0aWMgc3RydWN0IHJ0YWJsZSAqaWNtcF9yb3V0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuIFxcdFxcdHNrYl9kc3RyZWZfcmVzdG9yZShza2JfaW4sIG9yZWZkc3QpO1xcbiBcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogQXQgdGhpcyBwb2ludCwgZmw0X2RlYy5kYWRkciBzaG91bGQgTk9UIGJlIGxvY2FsICh3ZVxcbi1cXHRcXHQgKiBjaGVja2VkIGZsNF9kZWMuc2FkZHIgYWJvdmUpLiBIb3dldmVyLCBhIHJhY2UgY29uZGl0aW9uXFxuLVxcdFxcdCAqIG1heSBvY2N1ciBpZiB0aGUgYWRkcmVzcyBpcyBhZGRlZCB0byB0aGUgaW50ZXJmYWNlXFxuLVxcdFxcdCAqIGNvbmN1cnJlbnRseS4gSW4gdGhhdCBjYXNlLCBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYVxcbi1cXHRcXHQgKiBMT0NBTCByb3V0ZSB3aXRoIGRzdC5vdXRwdXQ9aXBfcnRfYnVnLCB3aGljaCBtdXN0IG5vdFxcbi1cXHRcXHQgKiBiZSB1c2VkIGZvciBvdXRwdXQuXFxuK1xcdFxcdCAqIGZsNF9kZWMuZGFkZHIgaXMgbm90IGV4cGVjdGVkIHRvIGJlIGxvY2FsIGhlcmUsIGJ1dCBpdCBjYW4gYmVcXG4rXFx0XFx0ICogYWRkZWQgdG8gYW4gaW50ZXJmYWNlIGNvbmN1cnJlbnRseSwgaW4gd2hpY2ggY2FzZVxcbitcXHRcXHQgKiBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYSBMT0NBTCByb3V0ZS4gSXQgY2FuIGFsc28gZmFpbCB0b1xcbitcXHRcXHQgKiBidWlsZCBhIGZvcndhcmRpbmcgcm91dGUgdG93YXJkcyBmbDRfZGVjLmRhZGRyLCBmb3IgZXhhbXBsZSxcXG4rXFx0XFx0ICogd2hlbiBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCBhbmQgcmV0dXJuIGFuIFVOUkVBQ0hBQkxFIHJvdXRlLlxcbitcXHRcXHQgKiBCb3RoIGNhc2VzIHdpbGwgcmVzdWx0IGluIGEgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1ZyxcXG4rXFx0XFx0ICogd2hpY2ggbXVzdCBub3QgYmUgdXNlZCBmb3Igb3V0cHV0LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgcnQyIFxcdTAwMjZcXHUwMDI2IHJ0Mi1cXHUwMDNlcnRfdHlwZSA9PSBSVE5fTE9DQUwpIHtcXG4rXFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgcnQyIFxcdTAwMjZcXHUwMDI2IHJ0Mi1cXHUwMDNlcnRfdHlwZSA9PSBSVE5fTE9DQUwpXFxuIFxcdFxcdFxcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFxcXCJkZXRlY3RlZCBsb2NhbCByb3V0ZSBmb3IgJXBJNCBkdXJpbmcgSUNNUCBzZW5kaW5nLCBzcmMgJXBJNFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Zmw0X2RlYy5kYWRkciwgXFx1MDAyNmZsNF9kZWMuc2FkZHIpO1xcbitcXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBydDIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChydDItXFx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMIHx8IHJ0Mi1cXHUwMDNlcnRfdHlwZSA9PSBSVE5fVU5SRUFDSEFCTEUpKSB7XFxuIFxcdFxcdFxcdGRzdF9yZWxlYXNlKFxcdTAwMjZydDItXFx1MDAzZWRzdCk7XFxuIFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDc6NDkuNjE3OTM3MDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ3ODAyNjgzMjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpY21wX3JvdXRlX2xvb2t1cFwiLFxuICAgIFwiX19pY21wX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcm91dGUgbG9va3VwIGxvZ2ljIGZvciBJQ01QIHNlbmRpbmcgaW4gaWNtcF9yb3V0ZV9sb29rdXAoKSB0byBwcm9wZXJseSByZWplY3Qgcm91dGVzIG9mIHR5cGUgUlROX1VOUkVBQ0hBQkxFIGluIGFkZGl0aW9uIHRvIFJUTl9MT0NBTC4gVGhpcyB0b3VjaGVzIGNvcmUgSVB2NCBJQ01QIHRyYW5zbWlzc2lvbiBsb2dpYyB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFkMGFhNTViNTFhM2RkM2JkMjMyZGY2M2VmNmY2NmM1ZWUwMmVjNGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNTo0Nzo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ljbXAuYyBiL25ldC9pcHY0L2ljbXAuY1xuaW5kZXggMGNhZWRmYzdjYTkyZi4uOTBjMGUyMmMyOWJlYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2ljbXAuY1xuKysrIGIvbmV0L2lwdjQvaWNtcC5jXG5AQCAtNTgxLDE2ICs1ODEsMTkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKmljbXBfcm91dGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxuIFx0XHRza2JfZHN0cmVmX3Jlc3RvcmUoc2tiX2luLCBvcmVmZHN0KTtcbiBcbiBcdFx0Lypcbi1cdFx0ICogQXQgdGhpcyBwb2ludCwgZmw0X2RlYy5kYWRkciBzaG91bGQgTk9UIGJlIGxvY2FsICh3ZVxuLVx0XHQgKiBjaGVja2VkIGZsNF9kZWMuc2FkZHIgYWJvdmUpLiBIb3dldmVyLCBhIHJhY2UgY29uZGl0aW9uXG4tXHRcdCAqIG1heSBvY2N1ciBpZiB0aGUgYWRkcmVzcyBpcyBhZGRlZCB0byB0aGUgaW50ZXJmYWNlXG4tXHRcdCAqIGNvbmN1cnJlbnRseS4gSW4gdGhhdCBjYXNlLCBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYVxuLVx0XHQgKiBMT0NBTCByb3V0ZSB3aXRoIGRzdC5vdXRwdXQ9aXBfcnRfYnVnLCB3aGljaCBtdXN0IG5vdFxuLVx0XHQgKiBiZSB1c2VkIGZvciBvdXRwdXQuXG4rXHRcdCAqIGZsNF9kZWMuZGFkZHIgaXMgbm90IGV4cGVjdGVkIHRvIGJlIGxvY2FsIGhlcmUsIGJ1dCBpdCBjYW4gYmVcbitcdFx0ICogYWRkZWQgdG8gYW4gaW50ZXJmYWNlIGNvbmN1cnJlbnRseSwgaW4gd2hpY2ggY2FzZVxuK1x0XHQgKiBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYSBMT0NBTCByb3V0ZS4gSXQgY2FuIGFsc28gZmFpbCB0b1xuK1x0XHQgKiBidWlsZCBhIGZvcndhcmRpbmcgcm91dGUgdG93YXJkcyBmbDRfZGVjLmRhZGRyLCBmb3IgZXhhbXBsZSxcbitcdFx0ICogd2hlbiBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCBhbmQgcmV0dXJuIGFuIFVOUkVBQ0hBQkxFIHJvdXRlLlxuK1x0XHQgKiBCb3RoIGNhc2VzIHdpbGwgcmVzdWx0IGluIGEgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1ZyxcbitcdFx0ICogd2hpY2ggbXVzdCBub3QgYmUgdXNlZCBmb3Igb3V0cHV0LlxuIFx0XHQgKi9cbi1cdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJ0MiBcdTAwMjZcdTAwMjYgcnQyLVx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMKSB7XG4rXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBydDIgXHUwMDI2XHUwMDI2IHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9MT0NBTClcbiBcdFx0XHRuZXRfd2Fybl9yYXRlbGltaXRlZChcImRldGVjdGVkIGxvY2FsIHJvdXRlIGZvciAlcEk0IGR1cmluZyBJQ01QIHNlbmRpbmcsIHNyYyAlcEk0XFxuXCIsXG4gXHRcdFx0XHRcdCAgICAgXHUwMDI2Zmw0X2RlYy5kYWRkciwgXHUwMDI2Zmw0X2RlYy5zYWRkcik7XG4rXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBydDIgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAocnQyLVx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMIHx8IHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9VTlJFQUNIQUJMRSkpIHtcbiBcdFx0XHRkc3RfcmVsZWFzZShcdTAwMjZydDItXHUwMDNlZHN0KTtcbiBcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0Nzo0OS42MTc5MzkxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkyODc1MDQyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIGFuYWx5c2lzOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBJQ01QIFBhdGNoKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgZm9jdXMgaXMgb24gdGhpcyBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYG5ldC9pcHY0L2ljbXAuY2AgYW5kIHNwZWNpZmljYWxseSB0aGUgYGljbXBfcm91dGVfbG9va3VwKClgIGZ1bmN0aW9uLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBmaXJzdCBpbnN0aW5jdCwgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLCBpcyB0byBncmFiIHRoZSBtb2RpZmllZCBmaWxlLCBgbmV0L2lwdjQvaWNtcC5jYC4gU2luY2UgSSBoYXZlIGl0IGxvY2FsbHksIEknbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCAtICBwcm9iYWJseSB0aGUgbGF0dGVyIHRvIGdldCBhIGNsZWFuIHZpZXcgb2YgdGhlIGNvZGUuIFRoaXMgZ2l2ZXMgYSBjbGVhcmVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWNzIG9mICpob3cqIGBpY21wX3JvdXRlX2xvb2t1cCgpYCBpcyBiZWluZyBtb2RpZmllZC4gQXJlIHRoZXkgYWRkaW5nIG5ldyBsb2dpYywgY2hhbmdpbmcgZXhpc3RpbmcgY29uZGl0aW9ucywgb3IgY29tcGxldGVseSByZXdyaXRpbmcgaXQ/IFRoZSBkaWZmIGl0c2VsZiB3aWxsIGJlIGNydWNpYWwgaW4gaGlnaGxpZ2h0aW5nIHRoZSBhZmZlY3RlZCBhcmVhcy4gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIGxhcmdlciBJQ01QIGltcGxlbWVudGF0aW9uLiBUaGlzIGxldHMgbWUgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoIGFjcm9zcyB0aGUgYnJvYWRlciBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjQ3OjU4LjkwNTQ0NjkzNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pY21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTYwOlxcdFxcdFxcdFxcdHN3YXAoZmw0XzIuZmw0X3Nwb3J0LCBmbDRfMi5mbDRfZHBvcnQpO1xcbiA1NjE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU2MjpcXHRcXHRcXHR9XFxuIDU2MzpcXHRcXG4gNTY0OlxcdFxcdFxcdGZsNF8yLmZsb3dpNF9vaWYgPSBsM21kZXZfbWFzdGVyX2lmaW5kZXgocm91dGVfbG9va3VwX2Rldik7XFxuIDU2NTpcXHRcXHRcXHRmbDRfMi5mbG93aTRfZmxhZ3MgfD0gRkxPV0lfRkxBR19BTllTUkM7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdFxcdHJ0MiA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFxcdTAwMjZmbDRfMik7XFxuIDU2ODpcXHRcXHRcXHRpZiAoSVNfRVJSKHJ0MikpIHtcXG4gNTY5OlxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIocnQyKTtcXG4gNTcwOlxcdFxcdFxcdFxcdGdvdG8gcmVsb29rdXBfZmFpbGVkO1xcbiA1NzE6XFx0XFx0XFx0fVxcbiA1NzI6XFx0XFx0XFx0LyogVWdoISAqL1xcbiA1NzM6XFx0XFx0XFx0b3JlZmRzdCA9IHNrYl9kc3RyZWZfc3RlYWwoc2tiX2luKTtcXG4gNTc0OlxcdFxcdFxcdGVyciA9IGlwX3JvdXRlX2lucHV0KHNrYl9pbiwgZmw0X2RlYy5kYWRkciwgZmw0X2RlYy5zYWRkcixcXG4gNTc1OlxcdFxcdFxcdFxcdFxcdCAgICAgZHNjcCwgcnQyLVxcdTAwM2Vkc3QuZGV2KSA/IC1FSU5WQUwgOiAwO1xcbiA1NzY6XFx0XFxuIDU3NzpcXHRcXHRcXHRkc3RfcmVsZWFzZShcXHUwMDI2cnQyLVxcdTAwM2Vkc3QpO1xcbiA1Nzg6XFx0XFx0XFx0cnQyID0gc2tiX3J0YWJsZShza2JfaW4pO1xcbiA1Nzk6XFx0XFx0XFx0Lyogc3RlYWwgZHN0IGVudHJ5IGZyb20gc2tiX2luLCBkb24ndCBkcm9wIHJlZmNudCAqL1xcbiA1ODA6XFx0XFx0XFx0c2tiX2RzdHJlZl9zdGVhbChza2JfaW4pO1xcbiA1ODE6XFx0XFx0XFx0c2tiX2RzdHJlZl9yZXN0b3JlKHNrYl9pbiwgb3JlZmRzdCk7XFxuIDU4MjpcXHRcXG4gNTgzOlxcdFxcdFxcdC8qXFxuIDU4NDpcXHRcXHRcXHQgKiBmbDRfZGVjLmRhZGRyIGlzIG5vdCBleHBlY3RlZCB0byBiZSBsb2NhbCBoZXJlLCBidXQgaXQgY2FuIGJlXFxuIDU4NTpcXHRcXHRcXHQgKiBhZGRlZCB0byBhbiBpbnRlcmZhY2UgY29uY3VycmVudGx5LCBpbiB3aGljaCBjYXNlXFxuIDU4NjpcXHRcXHRcXHQgKiBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYSBMT0NBTCByb3V0ZS4gSXQgY2FuIGFsc28gZmFpbCB0b1xcbiA1ODc6XFx0XFx0XFx0ICogYnVpbGQgYSBmb3J3YXJkaW5nIHJvdXRlIHRvd2FyZHMgZmw0X2RlYy5kYWRkciwgZm9yIGV4YW1wbGUsXFxuIDU4ODpcXHRcXHRcXHQgKiB3aGVuIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQsIGFuZCByZXR1cm4gYW4gVU5SRUFDSEFCTEUgcm91dGUuXFxuIDU4OTpcXHRcXHRcXHQgKiBCb3RoIGNhc2VzIHdpbGwgcmVzdWx0IGluIGEgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1ZyxcXG4gNTkwOlxcdFxcdFxcdCAqIHdoaWNoIG11c3Qgbm90IGJlIHVzZWQgZm9yIG91dHB1dC5cXG4gNTkxOlxcdFxcdFxcdCAqL1xcbiA1OTI6XFx0XFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgcnQyIFxcdTAwMjZcXHUwMDI2IHJ0Mi1cXHUwMDNlcnRfdHlwZSA9PSBSVE5fTE9DQUwpXFxuIDU5MzpcXHRcXHRcXHRcXHRuZXRfd2Fybl9yYXRlbGltaXRlZChcXFwiZGV0ZWN0ZWQgbG9jYWwgcm91dGUgZm9yICVwSTQgZHVyaW5nIElDTVAgc2VuZGluZywgc3JjICVwSTRcXFxcblxcXCIsXFxuIDU5NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZmbDRfZGVjLmRhZGRyLCBcXHUwMDI2Zmw0X2RlYy5zYWRkcik7XFxuIDU5NTpcXHRcXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBydDIgXFx1MDAyNlxcdTAwMjZcXG4gNTk2OlxcdFxcdFxcdCAgICAocnQyLVxcdTAwM2VydF90eXBlID09IFJUTl9MT0NBTCB8fCBydDItXFx1MDAzZXJ0X3R5cGUgPT0gUlROX1VOUkVBQ0hBQkxFKSkge1xcbiA1OTc6XFx0XFx0XFx0XFx0ZHN0X3JlbGVhc2UoXFx1MDAyNnJ0Mi1cXHUwMDNlZHN0KTtcXG4gNTk4OlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDU5OTpcXHRcXHRcXHR9XFxuIDYwMDpcXHRcXHR9XFxuIDYwMTpcXHRcXG4gNjAyOlxcdFxcdGlmIChlcnIpXFxuIDYwMzpcXHRcXHRcXHRnb3RvIHJlbG9va3VwX2ZhaWxlZDtcXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0ZHN0MiA9IHhmcm1fbG9va3VwKG5ldCwgXFx1MDAyNnJ0Mi1cXHUwMDNlZHN0LCBmbG93aTRfdG9fZmxvd2koXFx1MDAyNmZsNF9kZWMpLCBOVUxMLFxcbiA2MDY6XFx0XFx0XFx0XFx0ICAgWEZSTV9MT09LVVBfSUNNUCk7XFxuIDYwNzpcXHRcXHRydDIgPSBkc3RfcnRhYmxlKGRzdDIpO1xcbiA2MDg6XFx0XFx0aWYgKCFJU19FUlIoZHN0MikpIHtcXG4gNjA5OlxcdFxcdFxcdGRzdF9yZWxlYXNlKFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDc6NTguOTA1NjQxMjU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQzMTM1NDIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZGl2aW5nIGludG8gdGhpcyBJQ01QIHJvdXRpbmcgbG9naWM6XG5cbioqSW52ZXN0aWdhdGluZyBJQ01QIFJvdXRlIExvb2t1cCBhbmQgU2VuZGluZyoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGFuZGxlIG9uIGBpY21wX3JvdXRlX2xvb2t1cGAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIElDTVAgc2VuZGluZyBwcm9jZXNzLiBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgaW50byB0aGUgZW50aXJlIHdvcmtmbG93IG9mIGdlbmVyYXRpbmcgYW5kIHRyYW5zbWl0dGluZyBJQ01QIHBhY2tldHM/IEkgbmVlZCB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUuXG5cbk15IG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocy4gSSBuZWVkIHRvIGlkZW50aWZ5IGV4YWN0bHkgd2hpY2ggcGFydHMgb2YgdGhlIHN5c3RlbSBjYWxsIGBpY21wX3JvdXRlX2xvb2t1cGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBJQ01QIHJvdXRlcyBhcmUgYWN0dWFsbHkgYmVpbmcgcmVzb2x2ZWQgdXNpbmcgdGhpcyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyB3aWxsIGJlIGtleSB0byBncmFzcGluZyBpdHMgcHVycG9zZSBhbmQgdGhlIG92ZXJhbGwgcm91dGluZyBzdHJhdGVneS4gSSBuZWVkIHRvIG1hcCB0aGUgZGVwZW5kZW5jaWVzIGNsZWFybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjQ4OjAyLjMzNjk5ODIxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTA4MDQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNtcF9yb3V0ZV9sb29rdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ljbXAuYz00ODM9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppY21wX2dldF9yb3V0ZV9sb29rdXBfZGV2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9pY21wLmMtNDkzLVxcbm5ldC9pcHY0L2ljbXAuYzo0OTQ6c3RhdGljIHN0cnVjdCBydGFibGUgKmljbXBfcm91dGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxcbm5ldC9pcHY0L2ljbXAuYy00OTUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9pbixcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYz04MTc9dm9pZCBfX2ljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvLFxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTk3Mi1cXG5uZXQvaXB2NC9pY21wLmM6OTczOlxcdHJ0ID0gaWNtcF9yb3V0ZV9sb29rdXAobmV0LCBcXHUwMDI2Zmw0LCBza2JfaW4sIGlwaCwgc2FkZHIsXFxubmV0L2lwdjQvaWNtcC5jLTk3NC1cXHRcXHRcXHQgICAgICAgaW5ldF9kc2ZpZWxkX3RvX2RzY3AodG9zKSwgbWFyaywgdHlwZSwgY29kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDg6MDMuMzI3ODExNDIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njk0MjUwOTUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIGBpY21wX3JvdXRlX2xvb2t1cGAgLSBBIFByb21pc2luZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBgaWNtcF9yb3V0ZV9sb29rdXBgIGlzIGNhbGxlZCBieSBgX19pY21wX3NlbmRgIHdpdGhpbiBgbmV0L2lwdjQvaWNtcC5jYC4gVGhhdCdzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBJUHY0IG5ldHdvcmtpbmcsIHNwZWNpZmljYWxseSBJQ01QIGVycm9yIGdlbmVyYXRpb24uIFRoZSBrZXkgcXVlc3Rpb24gaXMgYWx3YXlzLCAqaXMqIHRoaXMgY29kZSByZWFjaGFibGU/IEFic29sdXRlbHksIGdpdmVuIGhvdyBmdW5kYW1lbnRhbCBJQ01QIGlzLiBXZSdyZSB0YWxraW5nIGFib3V0IG5ldHdvcmsgc29ja2V0cywgdHVuL3RhcCBpbnRlcmZhY2VzLCBsb29wYmFjaywgcGFja2V0IHNvY2tldHMg4oCTIGl0J3MgYWxsIHVzaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gIGBfX2ljbXBfc2VuZGAgYW5kIGBpY21wX3NlbmRgIGFyZSBwcmV0dHkgbXVjaCB1YmlxdWl0b3VzLlxuXG5SaWdodCwgc28sIGlzIGl0IHdvcnRoIGZ1enppbmc/ICBMZXQncyBzZWUuIFRoaXMgcGF0Y2ggZGlyZWN0bHkgdG91Y2hlcyBjb3JlIHN1YnN5c3RlbXM6IElQdjQgSUNNUCByb3V0ZSBoYW5kbGluZy4gSXQncyBmb2N1c2VkIG9uIGFsdGVyaW5nIGhvdyBgUlROX1VOUkVBQ0hBQkxFYCByb3V0ZXMgYXJlIGhhbmRsZWQgd2l0aGluIGBpY21wX3JvdXRlX2xvb2t1cCgpYC4gVGhlIGNoYW5nZSBwcmV2ZW50cyB0aG9zZSB1bnJlYWNoYWJsZSByb3V0ZXMgZnJvbSBiZWluZyB1c2VkIHdoZW4gc2VuZGluZyBJQ01QIG1lc3NhZ2VzLiBQcmV2aW91c2x5LCBpdCBsb29rcyBsaWtlIGBkc3Qub3V0cHV0PWlwX3J0X2J1Z2Agd2FzIHBvc3NpYmxlLCB3aGljaCBjb3VsZCBoYXZlIGxlZCB0byBrZXJuZWwgYnVncyBvciBjcmFzaGVzLCBlc3BlY2lhbGx5IGlmIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQsIG9yIHdlIHdlcmUgZGVhbGluZyB3aXRoIGFuIHVucmVhY2hhYmxlIHJvdXRlLiBJdCBzb3VuZHMgbGlrZSB0aGlzIGNvdWxkIGFic29sdXRlbHkgbGVhZCB0byBhIGJ1ZywgYW5kIGJlIGEgZ3JlYXQgcGxhY2UgdG8gZXhlcmNpc2UgbXkgZnV6emluZyBza2lsbHNldC5cblxuU28sIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZXhlY3V0YWJsZSBrZXJuZWwgY29kZSBhbmQgd29ydGggYSBzaG90LlxuXG5Pa2F5LCBuZXh0IHN0ZXAg4oCTIGNvbmZpZ3VyYXRpb24uICBJcyB0aGUgYmFyZSBtaW5pbXVtIGBJTkVUYCBvciBgSVBgIGVuYWJsZWQ/IExldCdzIGNoZWNrIGBuZXQvaXB2NC9LY29uZmlnYCBvciBgbmV0L2lwdjQvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0ODoxMC4yNzAzMjMzNDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYzMTUxNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljbXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlLTEzLVxcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTQ6XFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTUtXFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjQ4OjExLjAzMzQ4MDUwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg1NzYyMDA2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgS2VybmVsIE1vZHVsZSBEZXBlbmRlbmN5KipcblxuT2theSwgc28gYGljbXAub2AgaXMgY2xlYXJseSBkZWZpbmVkIHdpdGhpbiB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB1bmRlciB0aGUgYG9iai15YCBhc3NpZ25tZW50LiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0J3MgYSBidWlsdC1pbiBtb2R1bGUgd2l0aGluIHRoYXQgZGlyZWN0b3J5LCBpZiBhIGJpdCBvZiBhbiBvbGRlciBzdHlsZSBvZiBtYWtlZmlsZS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGBDT05GSUdfSU5FVGAgZ3VhcmQuIFRoYXQgaW5kaWNhdGVzIGl0cyBjb21waWxhdGlvbiBhbmQgaW5jbHVzaW9uIGFyZSBjb25kaXRpb25hbCwgZGVwZW5kZW50IG9uIHRoZSBgSU5FVGAgY29uZmlndXJhdGlvbiBvcHRpb24gYmVpbmcgZW5hYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSBzdGVwIGlzIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGlzIGBJTkVUYCB2YXJpYWJsZS4gVGhlIG5hdHVyYWwgcGxhY2UgdG8gZG8gdGhhdCBpcyBgbmV0L0tjb25maWdgLCB3aGljaCBpcyB3aGVyZSBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JraW5nIGFyZSBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgdG8gdW5kZXJzdGFuZCB3aGF0IGBDT05GSUdfSU5FVGAgYWN0dWFsbHkgKm1lYW5zKiBpbiB0aGUgYnJvYWRlciBjb250ZXh0LiBJcyBpdCBhIGJhc2Ugb3B0aW9uIGZvciBJUHY0IHN1cHBvcnQ/IElzIGl0IG1vcmUgZ3JhbnVsYXIgdGhhbiB0aGF0PyBLbm93aW5nIGl0cyBkZWZpbml0aW9uIGlzIGtleSB0byBkZXRlcm1pbmluZyB3aGVuIGBpY21wLm9gIHdpbGwgYWN0dWFsbHkgYmUgcHJlc2VudCBpbiB0aGUgZmluYWwga2VybmVsIGltYWdlLiBUaGlzIGxvb2tzIGxpa2UgYSBmYWlybHkgdHlwaWNhbCBkZXBlbmRlbmN5IGNoYWluOiBhIG1vZHVsZSdzIGJ1aWxkIHJ1bGUgdGhhdCdzIGNvbmRpdGlvbmFsIHVwb24gYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93IGl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc0OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjQ4OjE5LjYwOTY4NTAzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzNTU0MzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz05OT1jb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXFxuLS1cXG5uZXQvS2NvbmZpZy0xMTMtXFxubmV0L0tjb25maWc6MTE0OmNvbmZpZyBJTkVUXFxubmV0L0tjb25maWctMTE1LVxcdGJvb2wgXFxcIlRDUC9JUCBuZXR3b3JraW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0ODoxOS44NTMyNDYyMDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI3NTkzODc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSUNNUCBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgUmVzb2x1dGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgSU5FVGAgY29uZmlndXJhdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGtleSBpcyByZWFsbHkgY2VudGVyZWQgYXJvdW5kIElDTVAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIGNyaXRpY2FsIHN5bWJvbHMgYXJlIGhlcmUuIEltbWVkaWF0ZWx5LCBgaWNtcF9yb3V0ZV9sb29rdXBgIGp1bXBzIG91dCwgYnV0IGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBpY21wLmNgLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bDsgSSBrbm93IHN0YXRpYyBmdW5jdGlvbnMgYXJlIGdlbmVyYWxseSBpbnRlcm5hbCwgYnV0IHRoZXkgKmRvKiBoYXZlIHN5bWJvbHMgaW4gYHZtbGludXhgIHVubGVzcyB0aGV5J3JlIGlubGluZWQgYXdheSBieSB0aGUgY29tcGlsZXIuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgYGljbXBfcm91dGVfbG9va3VwYCBkaXJlY3RseS4gWWVwLCBpdCdzIGRlZmluZWQgYXMgYHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cCguLi4pYCwgd2hpY2ggY29uZmlybXMgaXRzIHN0YXRpYyBuYXR1cmUuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiBJIHRhcmdldCAqanVzdCogYGljbXBfcm91dGVfbG9va3VwYCwgb3Igc2hvdWxkIEkgYmUgbW9yZSBjb21wcmVoZW5zaXZlIGFuZCBpbmNsdWRlIHRoZSByZWxhdGVkIGBfX2ljbXBfc2VuZGAgYW5kIGBpY21wX3NlbmRgIGFzIHdlbGw/IEkgY2FuJ3QgYmUgc3VyZSBpZiBgaWNtcF9yb3V0ZV9sb29rdXBgIGlzIGlubGluZWQgYXdheSwgb3IgY2FsbGVkIGZyb20gYW4gYF9faWNtcF9zZW5kYCBjYWxsLlxuXG5JIHdhbnQgdG8gYmUgdGhvcm91Z2gsIHNvIHRvIGVuc3VyZSBJIGhhdmUgZnVsbCBjb3ZlcmFnZSwgSSBzaG91bGQgcHJvYmFibHkgZ28gYWhlYWQgYW5kIGluY2x1ZGUgYm90aCBgX19pY21wX3NlbmRgIGFuZCBgaWNtcF9zZW5kYCBpbiBteSB0YXJnZXQgbGlzdC4gVGhhdCB3YXksIGV2ZW4gaWYgYGljbXBfcm91dGVfbG9va3VwYCBpcyBpbmxpbmVkIG9yIGNhbGxlZCB2aWEgdGhvc2Ugb3RoZXIgZnVuY3Rpb25zLCBJJ2xsIHN0aWxsIGNhcHR1cmUgdGhlIGJlaGF2aW9yLlxuXG5Ob3csIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSBmdWxseSwgSSdsbCBkb3VibGUtY2hlY2sgd2hldGhlciBgaWNtcF9yb3V0ZV9sb29rdXBgICppcyogYWN0dWFsbHkgaW5saW5lZCBvciBub3QuIExldCBtZSBqdXN0IGNvbmZpcm0gYWdhaW46IGBzdGF0aWMgc3RydWN0IHJ0YWJsZSAqaWNtcF9yb3V0ZV9sb29rdXAoLi4uKWAuIE9rYXksIGl0IGxvb2tzIHN0YXRpYyBub24taW5saW5lZC5cblxuQWxyaWdodCwgSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIGluIGBuZXQvaXB2NC9pY21wLmNgIHRvIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24gYXJvdW5kIGl0LiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgdXNlZnVsIGNvbnRleHQgZm9yIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTYzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjQ4OjI2LjEyOTE4NzgwM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMTU3NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljbXBfc2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvY2lwc29faXB2NC5jPTE3MTU9dm9pZCBjaXBzb192NF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyb3IsIHUzMiBnYXRld2F5KVxcbi0tXFxubmV0L2lwdjQvY2lwc29faXB2NC5jLTE3MjQtXFx0ICogV2UgbWlnaHQgYmUgY2FsbGVkIGFib3ZlIHRoZSBJUCBsYXllcixcXG5uZXQvaXB2NC9jaXBzb19pcHY0LmM6MTcyNTpcXHQgKiBzbyB3ZSBjYW4gbm90IHVzZSBpY21wX3NlbmQgYW5kIElQQ0IgaGVyZS5cXG5uZXQvaXB2NC9jaXBzb19pcHY0LmMtMTcyNi1cXHQgKi9cXG4tLVxcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYy0xNzM3LVxcdGlmIChnYXRld2F5KVxcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYzoxNzM4OlxcdFxcdF9faWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfTkVUX0FOTywgMCwgXFx1MDAyNnBhcm0pO1xcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYy0xNzM5LVxcdGVsc2VcXG5uZXQvaXB2NC9jaXBzb19pcHY0LmM6MTc0MDpcXHRcXHRfX2ljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0hPU1RfQU5PLCAwLCBcXHUwMDI2cGFybSk7XFxubmV0L2lwdjQvY2lwc29faXB2NC5jLTE3NDEtfVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTQ2LSAqXFx0XFx0XFx0XFx0XFx0dGhlIHJhdGVzIHN5c2N0bCBjb25maWd1cmFibGUuXFxubmV0L2lwdjQvaWNtcC5jOjQ3OiAqXFx0XFx0WXUgVGlhbmxpXFx0OlxcdEZpeGVkIHR3byB1Z2x5IGJ1Z3MgaW4gaWNtcF9zZW5kXFxubmV0L2lwdjQvaWNtcC5jLTQ4LSAqXFx0XFx0XFx0XFx0XFx0LSBJUCBvcHRpb24gbGVuZ3RoIHdhcyBhY2NvdW50ZWQgd3JvbmdseVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jPTc0Mj1pY21wX2V4dF9hcHBlbmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBzdHJ1Y3QgaWNtcGhkciAqaWNtcGgsXFxuLS1cXG5uZXQvaXB2NC9pY21wLmMtODE2LVxcbm5ldC9pcHY0L2ljbXAuYzo4MTc6dm9pZCBfX2ljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvLFxcbm5ldC9pcHY0L2ljbXAuYy04MTgtXFx0XFx0IGNvbnN0IHN0cnVjdCBpbmV0X3NrYl9wYXJtICpwYXJtKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTg0OC1cXHQgKlxcdEZpbmQgdGhlIG9yaWdpbmFsIGhlYWRlci4gSXQgaXMgZXhwZWN0ZWQgdG8gYmUgdmFsaWQsIG9mIGNvdXJzZS5cXG5uZXQvaXB2NC9pY21wLmM6ODQ5OlxcdCAqXFx0Q2hlY2sgdGhpcywgaWNtcF9zZW5kIGlzIGNhbGxlZCBmcm9tIHRoZSBtb3N0IG9ic2N1cmUgZGV2aWNlc1xcbm5ldC9pcHY0L2ljbXAuYy04NTAtXFx0ICpcXHRzb21ldGltZXMuXFxuLS1cXG5uZXQvaXB2NC9pY21wLmMtMTAxNS1cXG5uZXQvaXB2NC9pY21wLmM6MTAxNjpcXHR0cmFjZV9pY21wX3NlbmQoc2tiX2luLCB0eXBlLCBjb2RlKTtcXG5uZXQvaXB2NC9pY21wLmMtMTAxNy1cXG4tLVxcbm5ldC9pcHY0L2ljbXAuYy0xMDMwLX1cXG5uZXQvaXB2NC9pY21wLmM6MTAzMTpFWFBPUlRfU1lNQk9MKF9faWNtcF9zZW5kKTtcXG5uZXQvaXB2NC9pY21wLmMtMTAzMi1cXG4tLVxcbm5ldC9pcHY0L2ljbXAuYz0xMDM1PXZvaWQgaWNtcF9uZG9fc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTEwNDYtXFx0aWYgKCFjdCB8fCAhKFJFQURfT05DRShjdC1cXHUwMDNlc3RhdHVzKSBcXHUwMDI2IElQU19OQVRfTUFTSykpIHtcXG5uZXQvaXB2NC9pY21wLmM6MTA0NzpcXHRcXHRfX2ljbXBfc2VuZChza2JfaW4sIHR5cGUsIGNvZGUsIGluZm8sIFxcdTAwMjZwYXJtKTtcXG5uZXQvaXB2NC9pY21wLmMtMTA0OC1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXB2NC9pY21wLmMtMTA2Mi1cXHRpcF9oZHIoc2tiX2luKS1cXHUwMDNlc2FkZHIgPSBjdC1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLmlwO1xcbm5ldC9pcHY0L2ljbXAuYzoxMDYzOlxcdF9faWNtcF9zZW5kKHNrYl9pbiwgdHlwZSwgY29kZSwgaW5mbywgXFx1MDAyNnBhcm0pO1xcbm5ldC9pcHY0L2ljbXAuYy0xMDY0LVxcdGlwX2hkcihza2JfaW4pLVxcdTAwM2VzYWRkciA9IG9yaWdfaXA7XFxuLS1cXG5uZXQvaXB2NC9pcF9mb3J3YXJkLmM9ODM9aW50IGlwX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2ZvcndhcmQuYy0xMzYtXFx0XFx0SVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfRlJBR0ZBSUxTKTtcXG5uZXQvaXB2NC9pcF9mb3J3YXJkLmM6MTM3OlxcdFxcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0ZSQUdfTkVFREVELFxcbm5ldC9pcHY0L2lwX2ZvcndhcmQuYy0xMzgtXFx0XFx0XFx0ICBodG9ubChtdHUpKTtcXG4tLVxcbm5ldC9pcHY0L2lwX2ZvcndhcmQuYy0xNjktXFx0ICovXFxubmV0L2lwdjQvaXBfZm9yd2FyZC5jOjE3MDpcXHQgaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfU1JfRkFJTEVELCAwKTtcXG5uZXQvaXB2NC9pcF9mb3J3YXJkLmMtMTcxLVxcdCBnb3RvIGRyb3A7XFxuLS1cXG5uZXQvaXB2NC9pcF9mb3J3YXJkLmMtMTc1LVxcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbm5ldC9pcHY0L2lwX2ZvcndhcmQuYzoxNzY6XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19UVEwsIDApO1xcbm5ldC9pcHY0L2lwX2ZvcndhcmQuYy0xNzctXFx0U0tCX0RSX1NFVChyZWFzb24sIElQX0lOSERSKTtcXG4tLVxcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM9MTIzPXN0YXRpYyB2b2lkIGlwX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtMTg0LVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZxcC1cXHUwMDNlcS5sb2NrKTtcXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jOjE4NTpcXHRpY21wX3NlbmQoaGVhZCwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19GUkFHVElNRSwgMCk7XFxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy0xODYtXFx0Z290byBvdXRfcmN1X3VubG9jaztcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTQ0MD1zdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ2OC1vdXQ6XFxubmV0L2lwdjQvaXBfZ3JlLmM6NDY5OlxcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNDcwLWRyb3A6XFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTE4OT12b2lkIGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvY29sKVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMTctXFx0XFx0XFx0XFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTlVOS05PV05QUk9UT1MpO1xcbm5ldC9pcHY0L2lwX2lucHV0LmM6MjE4OlxcdFxcdFxcdFxcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILFxcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjE5LVxcdFxcdFxcdFxcdFxcdCAgSUNNUF9QUk9UX1VOUkVBQ0gsIDApO1xcbi0tXFxubmV0L2lwdjQvaXBfb3B0aW9ucy5jPTQ2NT1pbnQgaXBfb3B0aW9uc19jb21waWxlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L2lwX29wdGlvbnMuYy00NzItXFx0aWYgKHJldCAhPSAwIFxcdTAwMjZcXHUwMDI2IHNrYilcXG5uZXQvaXB2NC9pcF9vcHRpb25zLmM6NDczOlxcdFxcdGljbXBfc2VuZChza2IsIElDTVBfUEFSQU1FVEVSUFJPQiwgMCwgaW5mbyk7XFxubmV0L2lwdjQvaXBfb3B0aW9ucy5jLTQ3NC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2lwdjQvaXBfb3B0aW9ucy5jPTU4OT1pbnQgaXBfb3B0aW9uc19yY3Zfc3JyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF9vcHRpb25zLmMtNjA4LVxcdFxcdFxcdHJldHVybiAwO1xcbm5ldC9pcHY0L2lwX29wdGlvbnMuYzo2MDk6XFx0XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9QQVJBTUVURVJQUk9CLCAwLCBodG9ubCgxNlxcdTAwM2NcXHUwMDNjMjQpKTtcXG5uZXQvaXB2NC9pcF9vcHRpb25zLmMtNjEwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjQvaXBfb3B0aW9ucy5jLTYxNi1cXHRcXHRpZiAoc3JycHRyICsgMyBcXHUwMDNlIHNycnNwYWNlKSB7XFxubmV0L2lwdjQvaXBfb3B0aW9ucy5jOjYxNzpcXHRcXHRcXHRpY21wX3NlbmQoc2tiLCBJQ01QX1BBUkFNRVRFUlBST0IsIDAsIGh0b25sKChvcHQtXFx1MDAzZXNycisyKVxcdTAwM2NcXHUwMDNjMjQpKTtcXG5uZXQvaXB2NC9pcF9vcHRpb25zLmMtNjE4LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9NTc1PXN0YXRpYyBpbnQgaXBfZnJhZ21lbnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy01ODctXFx0XFx0SVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfRlJBR0ZBSUxTKTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzo1ODg6XFx0XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfRlJBR19ORUVERUQsXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtNTg5LVxcdFxcdFxcdCAgaHRvbmwobXR1KSk7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYz0zNDg9dm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzYxLVxcdCAgICAhbmZfcmVqZWN0X3ZlcmlmeV9jc3VtKHNrYl9pbiwgZGF0YW9mZiwgcHJvdG8pKSB7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM6MzYyOlxcdFxcdGljbXBfc2VuZChza2JfaW4sIElDTVBfREVTVF9VTlJFQUNILCBjb2RlLCAwKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNjMtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzY2LVxcdGlmIChuZl9pcF9jaGVja3N1bShza2JfaW4sIGhvb2ssIGRhdGFvZmYsIHByb3RvKSA9PSAwKVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjM2NzpcXHRcXHRpY21wX3NlbmQoc2tiX2luLCBJQ01QX0RFU1RfVU5SRUFDSCwgY29kZSwgMCk7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzY4LX1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9OTAyPXZvaWQgaXBfcnRfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy05NTMtXFxubmV0L2lwdjQvcm91dGUuYzo5NTQ6XFx0XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9SRURJUkVDVCwgSUNNUF9SRURJUl9IT1NULCBndyk7XFxubmV0L2lwdjQvcm91dGUuYy05NTUtXFx0XFx0cGVlci1cXHUwMDNlcmF0ZV9sYXN0ID0gamlmZmllcztcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9OTY3PXN0YXRpYyBpbnQgaXBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTA0MS1cXHRpZiAoc2VuZClcXG5uZXQvaXB2NC9yb3V0ZS5jOjEwNDI6XFx0XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTA0My1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTI1NT1zdGF0aWMgdm9pZCBpcHY0X3NlbmRfZGVzdF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTEyODEtXFx0fVxcbm5ldC9pcHY0L3JvdXRlLmM6MTI4MjpcXHRfX2ljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0hPU1RfVU5SRUFDSCwgMCwgXFx1MDAyNnBhcm0pO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTI4My19XFxuLS1cXG5uZXQvaXB2NC90dW5uZWw0LmM9OTU9c3RhdGljIGludCB0dW5uZWw0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdHVubmVsNC5jLTEwNS1cXG5uZXQvaXB2NC90dW5uZWw0LmM6MTA2OlxcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7XFxubmV0L2lwdjQvdHVubmVsNC5jLTEwNy1cXG4tLVxcbm5ldC9pcHY0L3R1bm5lbDQuYz0xNDE9c3RhdGljIGludCB0dW5uZWw2NF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3R1bm5lbDQuYy0xNTEtXFxubmV0L2lwdjQvdHVubmVsNC5jOjE1MjpcXHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xcbm5ldC9pcHY0L3R1bm5lbDQuYy0xNTMtXFxuLS1cXG5uZXQvaXB2NC90dW5uZWw0LmM9MTYxPXN0YXRpYyBpbnQgdHVubmVsbXBsczRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90dW5uZWw0LmMtMTcxLVxcbm5ldC9pcHY0L3R1bm5lbDQuYzoxNzI6XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTtcXG5uZXQvaXB2NC90dW5uZWw0LmMtMTczLVxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MjYwMz1pbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjY3Ny1cXHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX05PUE9SVFMpO1xcbm5ldC9pcHY0L3VkcC5jOjI2Nzg6XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTtcXG5uZXQvaXB2NC91ZHAuYy0yNjc5LVxcbi0tXFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYz02MT1pbnQgeGZybTRfcmN2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLFxcbi0tXFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy04Ny1vdXQ6XFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYzo4ODpcXHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmMtODktXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jPTk2PXN0YXRpYyBpbnQgeGZybTRfZXNwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0xMDYtXFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYzoxMDc6XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTtcXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTEwOC1cXG4tLVxcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmM9MTI0PXN0YXRpYyBpbnQgeGZybTRfYWhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTEzNC1cXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jOjEzNTpcXHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmMtMTM2LVxcbi0tXFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYz0xNTI9c3RhdGljIGludCB4ZnJtNF9pcGNvbXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTE2Mi1cXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jOjE2MzpcXHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmMtMTY0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0ODoyNi4yNTAzNTIwNTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg5MTQxNjg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBJQ01QIFJvdXRpbmcgYW5kIFRyYW5zbWlzc2lvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgaWNtcF9yb3V0ZV9sb29rdXBgIGFuZCBgX19pY21wX3NlbmRgLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aG9zZSB0d28gZnVuY3Rpb25zLCBvciBwb3NzaWJseSB0aHJlZSBpZiBgaWNtcF9zZW5kYCBpcyBhbHNvIHJlbGV2YW50LiBHaXZlbiB0aGUgY29udGV4dCwgdGhvc2UgYXJlIHRoZSBrZXkgYXJlYXMgSSB3YW50IHRvIHVuZGVyc3RhbmQuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGNydWNpYWwuIElzIGBpY21wX3JvdXRlX2xvb2t1cGAgZXhwb3J0ZWQsIG9yIGlzIGl0IGhpZGRlbiBhcyBhIHN0YXRpYyBmdW5jdGlvbj8gQSBxdWljayBjaGVjayByZXZlYWxzIGl0J3MgZGVjbGFyZWQgYXMgYHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cCguLi4pYCwgd2hpY2ggdGVsbHMgbWUgaXQncyBpbnRlcm5hbCB0byBpdHMgbW9kdWxlLiBgX19pY21wX3NlbmRgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgZXhwb3J0ZWQgdmlhIGBFWFBPUlRfU1lNQk9MKF9faWNtcF9zZW5kKWAsIHNvIGl0J3MgZGVzaWduZWQgdG8gYmUgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudCBjb250ZXh0IGZvciBob3cgdGhlIGtlcm5lbCdzIElDTVAgaW1wbGVtZW50YXRpb24gaXMgc3RydWN0dXJlZC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGtub3cgd2hhdCBgaWNtcF9zZW5kYCBpcy4gSXMgaXQgYW4gaW5saW5lIGZ1bmN0aW9uIG9yIGEgbWFjcm8gZGVmaW5lZCBpbiBgaW5jbHVkZS9uZXQvaWNtcC5oYD8gVGhhdCB3aWxsIHRlbGwgbWUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLCBhbmQgd2hldGhlciBpdOKAmXMgYSBzaW1wbGUgaGVscGVyIG9yIGEgbW9yZSBpbnZvbHZlZCBwYXJ0IG9mIHRoZSBJQ01QIHNlbmRpbmcgbWVjaGFuaXNtLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGhlYWRlciBmaWxlIHRvIHVuZGVyc3RhbmQgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1ODgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDg6MzEuMTQxNzcxODY2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzA0NTA5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNtcF9zZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2ljbXAuaD0zNz1zdHJ1Y3QgbmV0O1xcbmluY2x1ZGUvbmV0L2ljbXAuaC0zOC1cXG5pbmNsdWRlL25ldC9pY21wLmg6Mzk6dm9pZCBfX2ljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvLFxcbmluY2x1ZGUvbmV0L2ljbXAuaC00MC1cXHRcXHQgY29uc3Qgc3RydWN0IGluZXRfc2tiX3Bhcm0gKnBhcm0pO1xcbmluY2x1ZGUvbmV0L2ljbXAuaDo0MTpzdGF0aWMgaW5saW5lIHZvaWQgaWNtcF9zZW5kKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCB0eXBlLCBpbnQgY29kZSwgX19iZTMyIGluZm8pXFxuaW5jbHVkZS9uZXQvaWNtcC5oLTQyLXtcXG5pbmNsdWRlL25ldC9pY21wLmg6NDM6XFx0X19pY21wX3NlbmQoc2tiX2luLCB0eXBlLCBjb2RlLCBpbmZvLCBJUENCKHNrYl9pbikpO1xcbmluY2x1ZGUvbmV0L2ljbXAuaC00NC19XFxuLS1cXG5pbmNsdWRlL25ldC9pY21wLmg9NDk9c3RhdGljIGlubGluZSB2b2lkIGljbXBfbmRvX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IHR5cGUsIGludCBjb2RlLCBfX2JlMzIgaW5mbylcXG4tLVxcbmluY2x1ZGUvbmV0L2ljbXAuaC01My1cXHRtZW1zZXQoXFx1MDAyNnBhcm0sIDAsIHNpemVvZihwYXJtKSk7XFxuaW5jbHVkZS9uZXQvaWNtcC5oOjU0OlxcdF9faWNtcF9zZW5kKHNrYl9pbiwgdHlwZSwgY29kZSwgaW5mbywgXFx1MDAyNnBhcm0pO1xcbmluY2x1ZGUvbmV0L2ljbXAuaC01NS19XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTExNTY9c3RydWN0IG5ldG5zX2lwdnMge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xMjYzLVxcdGludFxcdFxcdFxcdHN5c2N0bF9zeW5jX3JldHJpZXM7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxMjY0OlxcdGludFxcdFxcdFxcdHN5c2N0bF9uYXRfaWNtcF9zZW5kO1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTI2NS1cXHRpbnRcXHRcXHRcXHRzeXNjdGxfcG10dV9kaXNjO1xcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvaWNtcC5oLTEwLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ljbXAuaDoxMTpUUkFDRV9FVkVOVChpY21wX3NlbmQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvaWNtcC5oLTEyLVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvaWNtcC5oLTU5LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ljbXAuaDo2MDpcXHRcXHRUUF9wcmludGsoXFxcImljbXBfc2VuZDogdHlwZT0lZCwgY29kZT0lZC4gRnJvbSAlcEk0OiV1IHRvICVwSTQ6JXUgdWxlbj0lZCBza2JhZGRyPSVwXFxcIixcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9pY21wLmgtNjEtXFx0XFx0XFx0X19lbnRyeS1cXHUwMDNldHlwZSwgX19lbnRyeS1cXHUwMDNlY29kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDg6MzEuNTEyMjI4NTA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MDM4Njg3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSUNNUCBSb3V0aW5nIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIElDTVAgY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHJvdXRpbmcuIEkgc2VlIHRoYXQgYGljbXBfc2VuZGAgaXMgaW5saW5lZCwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgcGVyZm9ybWFuY2UsIGJ1dCB0aGUgYWN0dWFsLCBub24tc3RhdGljIGZ1bmN0aW9uIGV4cG9zZWQgaXMgYF9faWNtcF9zZW5kYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZSByZWFsIHdvcmssIHRoZSByb3V0aW5nIGxvb2t1cCBJJ20gaW50ZXJlc3RlZCBpbiwgaXMgaGFuZGxlZCBieSBgaWNtcF9yb3V0ZV9sb29rdXBgLCBhbmQgdGhhdCdzIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2lwdjQvaWNtcC5jYC5cblxuTm93LCBiZWZvcmUgSSBkaWcgZGVlcGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEFoLCBgQ09ORklHX0lORVRgIGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgZW5hYmxlciBmb3IgdGhhdCBlbnRpcmUgYG5ldC9pcHY0L2ljbXAuY2AgZmlsZS4gR290IGl0LlxuXG5MZXQncyBxdWlja2x5IHJldmlldyB0aGUgc2V0dXAgZm9yIHRoaXMuIFwiV29ydGhGdXp6aW5nXCIgaXMgdHJ1ZSwgd2hpY2ggaXMgZ29vZCDigJMgYWx3YXlzIGEgZ29vZCBzaWduIHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmtpbmcgY29kZS4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGZpeGluZyBhIHJvdXRpbmcgYnVnIHdoZXJlIHVucmVhY2hhYmxlIHJvdXRlcyAoYFJUTl9VTlJFQUNIQUJMRWApIHdlcmVuJ3QgYmVpbmcgcHJvcGVybHkgZGlzY2FyZGVkIHdoZW4gc2VuZGluZyBJQ01QIGVycm9yIG1lc3NhZ2VzLCBwYXJ0aWN1bGFybHkgcHJldmVudGluZyB0aGUgdXNlIG9mIGludmFsaWQgcm91dGVzIHdpdGggYGRzdC5vdXRwdXQgPSBpcF9ydF9idWdgLiBJdCdzIGEgY29yZSBJUHY0IG5ldHdvcmtpbmcgY2hhbmdlLCBhbmQgaXQncyBkaXJlY3RseSByZWFjaGFibGUuIFBlcmZlY3QuXG5cblRoZSBmb2N1cyBzeW1ib2xzIGFyZSwgYXMgZXhwZWN0ZWQsIGBpY21wX3JvdXRlX2xvb2t1cGAgYW5kIGBfX2ljbXBfc2VuZGAuIFNvLCBJJ2xsIGJlIHRhcmdldGluZyB0aG9zZSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5LiBBbmQsIG9mIGNvdXJzZSwgSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfSU5FVGAgaXMgZW5hYmxlZC5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGlzIGluZm8uIEknbSByZWFkeSB0byBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjEwLCJPdXRwdXRUb2tlbnMiOjEwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0ODozNy4yMTYwOTk5OTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ1MTQ5OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpY21wX3JvdXRlX2xvb2t1cFwiLFxuICAgIFwiX19pY21wX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcm91dGUgbG9va3VwIGxvZ2ljIGZvciBJQ01QIHNlbmRpbmcgaW4gaWNtcF9yb3V0ZV9sb29rdXAoKSB0byBwcm9wZXJseSByZWplY3Qgcm91dGVzIG9mIHR5cGUgUlROX1VOUkVBQ0hBQkxFIGluIGFkZGl0aW9uIHRvIFJUTl9MT0NBTC4gVGhpcyB0b3VjaGVzIGNvcmUgSVB2NCBJQ01QIHRyYW5zbWlzc2lvbiBsb2dpYyB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpY21wX3JvdXRlX2xvb2t1cFwiLFxuICAgIFwiX19pY21wX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcm91dGUgbG9va3VwIGxvZ2ljIGZvciBJQ01QIHNlbmRpbmcgaW4gaWNtcF9yb3V0ZV9sb29rdXAoKSB0byBwcm9wZXJseSByZWplY3Qgcm91dGVzIG9mIHR5cGUgUlROX1VOUkVBQ0hBQkxFIGluIGFkZGl0aW9uIHRvIFJUTl9MT0NBTC4gVGhpcyB0b3VjaGVzIGNvcmUgSVB2NCBJQ01QIHRyYW5zbWlzc2lvbiBsb2dpYyB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0ODozNy40MjA2MjU0NTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjI5OTU3NjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDg6MzcuNDIyNTU2NjE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTc2MjgwMjA5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpY21wX3JvdXRlX2xvb2t1cCgpYCBpbiBgbmV0L2lwdjQvaWNtcC5jYCB0byByZWplY3QgYFJUTl9VTlJFQUNIQUJMRWAgcm91dGVzIGluIGFkZGl0aW9uIHRvIGBSVE5fTE9DQUxgIHJvdXRlcywgcHJldmVudGluZyB0aGUgdXNlIG9mIHJvdXRlcyB3aXRoIGBkc3Qub3V0cHV0ID0gaXBfcnRfYnVnYCB3aGVuIHRyYW5zbWl0dGluZyBJQ01QIG1lc3NhZ2VzLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHJvdXRpbmcgYW5kIGVycm9yLWhhbmRsaW5nIGxvZ2ljIGZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3Igb3BlcmF0aW9ucyBvbiB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvYnVmZmVycy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBleGVjdXRpbmcgaW52YWxpZCByb3V0ZSBvdXRwdXQgZnVuY3Rpb25zIG9yIHJlZmVyZW5jZSBjb3VudGluZy9tZW1vcnkgc2FmZXR5IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZDBhYTU1YjUxYTNkZDNiZDIzMmRmNjNlZjZmNjZjNWVlMDJlYzRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTU6NDc6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmNcbmluZGV4IDBjYWVkZmM3Y2E5MmYuLjkwYzBlMjJjMjliZWEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pY21wLmNcbisrKyBiL25ldC9pcHY0L2ljbXAuY1xuQEAgLTU4MSwxNiArNTgxLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZsNCxcbiBcdFx0c2tiX2RzdHJlZl9yZXN0b3JlKHNrYl9pbiwgb3JlZmRzdCk7XG4gXG4gXHRcdC8qXG4tXHRcdCAqIEF0IHRoaXMgcG9pbnQsIGZsNF9kZWMuZGFkZHIgc2hvdWxkIE5PVCBiZSBsb2NhbCAod2Vcbi1cdFx0ICogY2hlY2tlZCBmbDRfZGVjLnNhZGRyIGFib3ZlKS4gSG93ZXZlciwgYSByYWNlIGNvbmRpdGlvblxuLVx0XHQgKiBtYXkgb2NjdXIgaWYgdGhlIGFkZHJlc3MgaXMgYWRkZWQgdG8gdGhlIGludGVyZmFjZVxuLVx0XHQgKiBjb25jdXJyZW50bHkuIEluIHRoYXQgY2FzZSwgaXBfcm91dGVfaW5wdXQoKSByZXR1cm5zIGFcbi1cdFx0ICogTE9DQUwgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1Zywgd2hpY2ggbXVzdCBub3Rcbi1cdFx0ICogYmUgdXNlZCBmb3Igb3V0cHV0LlxuK1x0XHQgKiBmbDRfZGVjLmRhZGRyIGlzIG5vdCBleHBlY3RlZCB0byBiZSBsb2NhbCBoZXJlLCBidXQgaXQgY2FuIGJlXG4rXHRcdCAqIGFkZGVkIHRvIGFuIGludGVyZmFjZSBjb25jdXJyZW50bHksIGluIHdoaWNoIGNhc2VcbitcdFx0ICogaXBfcm91dGVfaW5wdXQoKSByZXR1cm5zIGEgTE9DQUwgcm91dGUuIEl0IGNhbiBhbHNvIGZhaWwgdG9cbitcdFx0ICogYnVpbGQgYSBmb3J3YXJkaW5nIHJvdXRlIHRvd2FyZHMgZmw0X2RlYy5kYWRkciwgZm9yIGV4YW1wbGUsXG4rXHRcdCAqIHdoZW4gZm9yd2FyZGluZyBpcyBkaXNhYmxlZCwgYW5kIHJldHVybiBhbiBVTlJFQUNIQUJMRSByb3V0ZS5cbitcdFx0ICogQm90aCBjYXNlcyB3aWxsIHJlc3VsdCBpbiBhIHJvdXRlIHdpdGggZHN0Lm91dHB1dD1pcF9ydF9idWcsXG4rXHRcdCAqIHdoaWNoIG11c3Qgbm90IGJlIHVzZWQgZm9yIG91dHB1dC5cbiBcdFx0ICovXG4tXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBydDIgXHUwMDI2XHUwMDI2IHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9MT0NBTCkge1xuK1x0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcnQyIFx1MDAyNlx1MDAyNiBydDItXHUwMDNlcnRfdHlwZSA9PSBSVE5fTE9DQUwpXG4gXHRcdFx0bmV0X3dhcm5fcmF0ZWxpbWl0ZWQoXCJkZXRlY3RlZCBsb2NhbCByb3V0ZSBmb3IgJXBJNCBkdXJpbmcgSUNNUCBzZW5kaW5nLCBzcmMgJXBJNFxcblwiLFxuIFx0XHRcdFx0XHQgICAgIFx1MDAyNmZsNF9kZWMuZGFkZHIsIFx1MDAyNmZsNF9kZWMuc2FkZHIpO1xuK1x0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcnQyIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9MT0NBTCB8fCBydDItXHUwMDNlcnRfdHlwZSA9PSBSVE5fVU5SRUFDSEFCTEUpKSB7XG4gXHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2cnQyLVx1MDAzZWRzdCk7XG4gXHRcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDg6MzcuNDIyNTU4NjQ1WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNDg4OTYxMTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gSUNNUCBSb3V0aW5nIExvZ2ljKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIHRoZSBgaWNtcF9yb3V0ZV9sb29rdXBgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2lwdjQvaWNtcC5jYC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIGhvdyBJQ01QIHBhY2tldHMgYXJlIHJvdXRlZCBpbiB0aGUgSVB2NCBzdGFjay4gTXkgaW1tZWRpYXRlIGluY2xpbmF0aW9uIGlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbi4gV2hhdCBzcGVjaWZpYyBJQ01QIHJvdXRpbmcgYmVoYXZpb3IgaXMgYmVpbmcgdGFyZ2V0ZWQ/IElzIHRoaXMgYWJvdXQgaGFuZGxpbmcgcmVkaXJlY3RzLCByYXRlIGxpbWl0aW5nLCBlcnJvciByZXBvcnRpbmcsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5P1xuXG5UbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIHpvb20gaW4gb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSBjb250ZXh0IG9mIGBpY21wX3JvdXRlX2xvb2t1cGAgd2l0aGluIGBuZXQvaXB2NC9pY21wLmNgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzOiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBpY21wX3JvdXRlX2xvb2t1cGA/IFdoYXQgdmFyaWFibGVzIGFyZSBwYXNzZWQgdG8gaXQgYW5kIHdoYXQgYXJlIHRoZWlyIG1lYW5pbmdzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlPyBIb3cgaXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgaWNtcF9yb3V0ZV9sb29rdXBgIGJlaW5nIHVzZWQ/IEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgdGhpcyBmdW5jdGlvbiB0byBmdWxseSBncmFzcCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4gVGhpcyBkZWVwIGRpdmUgaW50byB0aGUgY29kZSB3aWxsIHJldmVhbCB0aGUgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY2hhbmdlcyBhbmQgYWxsb3cgbWUgdG8gZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhIG1pbm9yIHR3ZWFrLCBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQsIG9yIHNvbWV0aGluZyBpbiBiZXR3ZWVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0ODo0OC45MTE1MjQzMTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2ljbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTA6XFx0XFx0fSBlbHNlIHtcXG4gNTUxOlxcdFxcdFxcdHN0cnVjdCBmbG93aTQgZmw0XzIgPSBmbDRfZGVjO1xcbiA1NTI6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBvcmVmZHN0O1xcbiA1NTM6XFx0XFxuIDU1NDpcXHRcXHRcXHRzd2FwKGZsNF8yLmRhZGRyLCBmbDRfMi5zYWRkcik7XFxuIDU1NTpcXHRcXHRcXHRzd2l0Y2ggKGZsNF8yLmZsb3dpNF9wcm90bykge1xcbiA1NTY6XFx0XFx0XFx0Y2FzZSBJUFBST1RPX1RDUDpcXG4gNTU3OlxcdFxcdFxcdGNhc2UgSVBQUk9UT19VRFA6XFxuIDU1ODpcXHRcXHRcXHRjYXNlIElQUFJPVE9fU0NUUDpcXG4gNTU5OlxcdFxcdFxcdGNhc2UgSVBQUk9UT19EQ0NQOlxcbiA1NjA6XFx0XFx0XFx0XFx0c3dhcChmbDRfMi5mbDRfc3BvcnQsIGZsNF8yLmZsNF9kcG9ydCk7XFxuIDU2MTpcXHRcXHRcXHRcXHRicmVhaztcXG4gNTYyOlxcdFxcdFxcdH1cXG4gNTYzOlxcdFxcbiA1NjQ6XFx0XFx0XFx0Zmw0XzIuZmxvd2k0X29pZiA9IGwzbWRldl9tYXN0ZXJfaWZpbmRleChyb3V0ZV9sb29rdXBfZGV2KTtcXG4gNTY1OlxcdFxcdFxcdGZsNF8yLmZsb3dpNF9mbGFncyB8PSBGTE9XSV9GTEFHX0FOWVNSQztcXG4gNTY2OlxcdFxcbiA1Njc6XFx0XFx0XFx0cnQyID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNF8yKTtcXG4gNTY4OlxcdFxcdFxcdGlmIChJU19FUlIocnQyKSkge1xcbiA1Njk6XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihydDIpO1xcbiA1NzA6XFx0XFx0XFx0XFx0Z290byByZWxvb2t1cF9mYWlsZWQ7XFxuIDU3MTpcXHRcXHRcXHR9XFxuIDU3MjpcXHRcXHRcXHQvKiBVZ2ghICovXFxuIDU3MzpcXHRcXHRcXHRvcmVmZHN0ID0gc2tiX2RzdHJlZl9zdGVhbChza2JfaW4pO1xcbiA1NzQ6XFx0XFx0XFx0ZXJyID0gaXBfcm91dGVfaW5wdXQoc2tiX2luLCBmbDRfZGVjLmRhZGRyLCBmbDRfZGVjLnNhZGRyLFxcbiA1NzU6XFx0XFx0XFx0XFx0XFx0ICAgICBkc2NwLCBydDItXFx1MDAzZWRzdC5kZXYpID8gLUVJTlZBTCA6IDA7XFxuIDU3NjpcXHRcXG4gNTc3OlxcdFxcdFxcdGRzdF9yZWxlYXNlKFxcdTAwMjZydDItXFx1MDAzZWRzdCk7XFxuIDU3ODpcXHRcXHRcXHRydDIgPSBza2JfcnRhYmxlKHNrYl9pbik7XFxuIDU3OTpcXHRcXHRcXHQvKiBzdGVhbCBkc3QgZW50cnkgZnJvbSBza2JfaW4sIGRvbid0IGRyb3AgcmVmY250ICovXFxuIDU4MDpcXHRcXHRcXHRza2JfZHN0cmVmX3N0ZWFsKHNrYl9pbik7XFxuIDU4MTpcXHRcXHRcXHRza2JfZHN0cmVmX3Jlc3RvcmUoc2tiX2luLCBvcmVmZHN0KTtcXG4gNTgyOlxcdFxcbiA1ODM6XFx0XFx0XFx0LypcXG4gNTg0OlxcdFxcdFxcdCAqIGZsNF9kZWMuZGFkZHIgaXMgbm90IGV4cGVjdGVkIHRvIGJlIGxvY2FsIGhlcmUsIGJ1dCBpdCBjYW4gYmVcXG4gNTg1OlxcdFxcdFxcdCAqIGFkZGVkIHRvIGFuIGludGVyZmFjZSBjb25jdXJyZW50bHksIGluIHdoaWNoIGNhc2VcXG4gNTg2OlxcdFxcdFxcdCAqIGlwX3JvdXRlX2lucHV0KCkgcmV0dXJucyBhIExPQ0FMIHJvdXRlLiBJdCBjYW4gYWxzbyBmYWlsIHRvXFxuIDU4NzpcXHRcXHRcXHQgKiBidWlsZCBhIGZvcndhcmRpbmcgcm91dGUgdG93YXJkcyBmbDRfZGVjLmRhZGRyLCBmb3IgZXhhbXBsZSxcXG4gNTg4OlxcdFxcdFxcdCAqIHdoZW4gZm9yd2FyZGluZyBpcyBkaXNhYmxlZCwgYW5kIHJldHVybiBhbiBVTlJFQUNIQUJMRSByb3V0ZS5cXG4gNTg5OlxcdFxcdFxcdCAqIEJvdGggY2FzZXMgd2lsbCByZXN1bHQgaW4gYSByb3V0ZSB3aXRoIGRzdC5vdXRwdXQ9aXBfcnRfYnVnLFxcbiA1OTA6XFx0XFx0XFx0ICogd2hpY2ggbXVzdCBub3QgYmUgdXNlZCBmb3Igb3V0cHV0LlxcbiA1OTE6XFx0XFx0XFx0ICovXFxuIDU5MjpcXHRcXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBydDIgXFx1MDAyNlxcdTAwMjYgcnQyLVxcdTAwM2VydF90eXBlID09IFJUTl9MT0NBTClcXG4gNTkzOlxcdFxcdFxcdFxcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFxcXCJkZXRlY3RlZCBsb2NhbCByb3V0ZSBmb3IgJXBJNCBkdXJpbmcgSUNNUCBzZW5kaW5nLCBzcmMgJXBJNFxcXFxuXFxcIixcXG4gNTk0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmZsNF9kZWMuZGFkZHIsIFxcdTAwMjZmbDRfZGVjLnNhZGRyKTtcXG4gNTk1OlxcdFxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHJ0MiBcXHUwMDI2XFx1MDAyNlxcbiA1OTY6XFx0XFx0XFx0ICAgIChydDItXFx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMIHx8IHJ0Mi1cXHUwMDNlcnRfdHlwZSA9PSBSVE5fVU5SRUFDSEFCTEUpKSB7XFxuIDU5NzpcXHRcXHRcXHRcXHRkc3RfcmVsZWFzZShcXHUwMDI2cnQyLVxcdTAwM2Vkc3QpO1xcbiA1OTg6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gNTk5OlxcdFxcdFxcdH1cXG4gNjAwOlxcdFxcdH1cXG4gNjAxOlxcdFxcbiA2MDI6XFx0XFx0aWYgKGVycilcXG4gNjAzOlxcdFxcdFxcdGdvdG8gcmVsb29rdXBfZmFpbGVkO1xcbiA2MDQ6XFx0XFxuIDYwNTpcXHRcXHRkc3QyID0geGZybV9sb29rdXAobmV0LCBcXHUwMDI2cnQyLVxcdTAwM2Vkc3QsIGZsb3dpNF90b19mbG93aShcXHUwMDI2Zmw0X2RlYyksIE5VTEwsXFxuIDYwNjpcXHRcXHRcXHRcXHQgICBYRlJNX0xPT0tVUF9JQ01QKTtcXG4gNjA3OlxcdFxcdHJ0MiA9IGRzdF9ydGFibGUoZHN0Mik7XFxuIDYwODpcXHRcXHRpZiAoIUlTX0VSUihkc3QyKSkge1xcbiA2MDk6XFx0XFx0XFx0ZHN0X3JlbGVhc2UoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0ODo0OC45MTE2ODU1NTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEzODg2NjYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElDTVAgUm91dGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgd2UncmUgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIGluIGBpY21wX3JvdXRlX2xvb2t1cCgpYCB3aGVyZSwgd2hlbiB0aGUgcm91dGluZyBsb29rdXAgZm9yIElDTVAgc2VuZGluZyBmYWlscyBhbmQgcmV0dXJucyBhbiB1bnJlYWNoYWJsZSByb3V0ZSAoc3BlY2lmaWNhbGx5IGBSVE5fVU5SRUFDSEFCTEVgKSwgdGhlIGNvZGUgaW5jb3JyZWN0bHkgc2V0cyBgZHN0Lm91dHB1dGAgdG8gYGlwX3J0X2J1Z2AuIFRoaXMgY2FuIGxlYWQgdG8gY3Jhc2hlcyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHRyaWdnZXIgd2FybmluZ3Mgb3IgYnVncyB3aGVuIHRoZSBrZXJuZWwgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgaW52YWxpZCBvdXRwdXQuIFRoaXMgaXMgYSBjbGFzc2ljIGVycm9yIGNvbmRpdGlvbiwgYW5kIGl0IG5lZWRzIHRvIGJlIGFkZHJlc3NlZC5cblxuVGhlIHBhdGNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBhZGRpbmcgYSBjaGVjazogYHx8IHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9VTlJFQUNIQUJMRWAgdG8gdGhlIGNvbmRpdGlvbiB0aGF0IHJlbGVhc2VzIGBydDItXHUwMDNlZHN0YCBhbmQgc2V0cyBgZXJyID0gLUVJTlZBTGAuIEVzc2VudGlhbGx5LCBpdCdzIGV4cGxpY2l0bHkgaGFuZGxpbmcgdGhlIGBSVE5fVU5SRUFDSEFCTEVgIGNhc2UgdG8gcHJldmVudCB0aGUgYmFkIGBpcF9ydF9idWdgIGFzc2lnbm1lbnQuXG5cbk5vdywgSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGlzc3Vlcy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBzZWU6XG5cbiogICBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zPyBHb29kLlxuKiAgIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBFeGNlbGxlbnQuXG4qICAgTm8gaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZT8gUmVhc3N1cmluZy5cbiogICBObyBzdHJ1Y3R1cmUgY29waWVzIGFjcm9zcyBib3VuZGFyaWVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24/IEZpbmUuXG5cblRoZSBwYXRjaCBpcyBvbmx5IGRlYWxpbmcgd2l0aCBhbiBleGlzdGluZywgaW5pdGlhbGl6ZWQgcm91dGluZyB0YWJsZSBzdHJ1Y3QsIHJlbGVhc2luZyB0aGUgYGRzdGAsIGFuZCBzZXR0aW5nIGFuIGVycm9yIGNvZGUuIEZyb20gYSBtZW1vcnkgc2FmZXR5IHN0YW5kcG9pbnQsIGl0J3MgbG9va2luZyBjbGVhbi5cblxuTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gS01TQU4uIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoaXMgZG9lc24ndCBjcmVhdGUgYW55IEtNU0FOLXJlbGF0ZWQgaXNzdWVzLiBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBhbmQgcG90ZW50aWFsIGluZm8gbGVha3MsIHJpZ2h0PyBXZWxsLCBhbGwgdGhlIHZhcmlhYmxlcyBpbnZvbHZlZCAoYGVycmAsIGBydDJgLCBldGMuKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQgdGhyb3VnaG91dCB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBUaGlzIHBhdGNoIGlzIHNpbXBseSBmaXhpbmcgYSBsb2dpY2FsIGVycm9yLCBhbiBlcnJvciBjb25kaXRpb24gd2hlcmUgdGhlIGBSVE5fVU5SRUFDSEFCTEVgIHJvdXRlIHdhcyBsZWFkaW5nIHRvIHRoZSBleGVjdXRpb24gb2YgYGlwX3J0X2J1Z2AsIHdoaWNoIHdvdWxkIHRyaWdnZXIga2VybmVsIHdhcm5pbmdzIGFuZCBidWdzLCBvciBwb3RlbnRpYWxseSBjYXVzZSByb3V0aW5nIGxvZ2ljIGlzc3VlcyB0aGF0IHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi9zdGFuZGFyZCBzYW5pdGl6ZXJzIG9yIHRyaWdnZXIgYSBrZXJuZWwgcGFuaWMuIEluIGZhY3QsIGlmIG5vdCBmb3IgdGhlIGZpeCwgd2UgbWlnaHQgc2VlIEtBU0FOIG9yIGFub3RoZXIgc2FuaXRpemVyIGZsYWdnaW5nIHRoaXMgaXNzdWUuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGlzIHB1cmVseSBhIGxvZ2ljIGVycm9yIGZpeCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrIHZ1bG5lcmFiaWxpdGllcywgXCJOZWVkc0tNU0FOXCIgc2hvdWxkIGRlZmluaXRpdmVseSBiZSBgZmFsc2VgLiBUaGUgY29yZSBvZiB0aGUgYnVnIHdlIGFyZSBmaXhpbmcgaXMgYSBsb2dpYyBlcnJvciB0aGF0IGNhdXNlcyBpbnZhbGlkIHJvdXRpbmcgb3V0cHV0LCB3aGljaCB3b3VsZCB0cmlnZ2VyIGtlcm5lbCB3YXJuaW5ncyAvIGJ1Z3Mgb3Igcm91dGluZyBsb2dpYyBpc3N1ZXMgY2F1Z2h0IGJ5IEtBU0FOIC8gc3RhbmRhcmQgc2FuaXRpemVycyAvIHBhbmljLiBLTVNBTiB3b3VsZCBub3QgYmUgdXNlZnVsIGhlcmUuIEtNU0FOJ3MgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIGNhdGNoIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gd2lsbCBsaWtlbHkgY2F0Y2ggdGhlIGJ1ZyB0aGF0IGlzIHByZXNlbnQgd2l0aG91dCB0aGUgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODY0LCJPdXRwdXRUb2tlbnMiOjE3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjQ4OjU1LjA1MDU1NTI2OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGljbXBfcm91dGVfbG9va3VwKClgIGluIGBuZXQvaXB2NC9pY21wLmNgIHRvIHJlamVjdCBgUlROX1VOUkVBQ0hBQkxFYCByb3V0ZXMgaW4gYWRkaXRpb24gdG8gYFJUTl9MT0NBTGAgcm91dGVzLCBwcmV2ZW50aW5nIHRoZSB1c2Ugb2Ygcm91dGVzIHdpdGggYGRzdC5vdXRwdXQgPSBpcF9ydF9idWdgIHdoZW4gdHJhbnNtaXR0aW5nIElDTVAgbWVzc2FnZXMuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgcm91dGluZyBhbmQgZXJyb3ItaGFuZGxpbmcgbG9naWMgZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciBvcGVyYXRpb25zIG9uIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9idWZmZXJzLiBBbnkgYnVncyByZWxhdGVkIHRvIGV4ZWN1dGluZyBpbnZhbGlkIHJvdXRlIG91dHB1dCBmdW5jdGlvbnMgb3IgcmVmZXJlbmNlIGNvdW50aW5nL21lbW9yeSBzYWZldHkgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpY21wX3JvdXRlX2xvb2t1cCgpYCBpbiBgbmV0L2lwdjQvaWNtcC5jYCB0byByZWplY3QgYFJUTl9VTlJFQUNIQUJMRWAgcm91dGVzIGluIGFkZGl0aW9uIHRvIGBSVE5fTE9DQUxgIHJvdXRlcywgcHJldmVudGluZyB0aGUgdXNlIG9mIHJvdXRlcyB3aXRoIGBkc3Qub3V0cHV0ID0gaXBfcnRfYnVnYCB3aGVuIHRyYW5zbWl0dGluZyBJQ01QIG1lc3NhZ2VzLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHJvdXRpbmcgYW5kIGVycm9yLWhhbmRsaW5nIGxvZ2ljIGZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3Igb3BlcmF0aW9ucyBvbiB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvYnVmZmVycy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBleGVjdXRpbmcgaW52YWxpZCByb3V0ZSBvdXRwdXQgZnVuY3Rpb25zIG9yIHJlZmVyZW5jZSBjb3VudGluZy9tZW1vcnkgc2FmZXR5IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm89bb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 14:57:38 +0000 UTC FinishedAt: 2026-09-10 15:48:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "596ad3e3-6b18-4391-809e-ef1d6d7430b5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "icmp_route_lookup", "__icmp_send" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpY21wX3JvdXRlX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtfX2ljbXBfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpY21wX3JvdXRlX2xvb2t1cCgpYCBpbiBgbmV0L2lwdjQvaWNtcC5jYCB0byByZWplY3QgYFJUTl9VTlJFQUNIQUJMRWAgcm91dGVzIGluIGFkZGl0aW9uIHRvIGBSVE5fTE9DQUxgIHJvdXRlcywgcHJldmVudGluZyB0aGUgdXNlIG9mIHJvdXRlcyB3aXRoIGBkc3Qub3V0cHV0ID0gaXBfcnRfYnVnYCB3aGVuIHRyYW5zbWl0dGluZyBJQ01QIG1lc3NhZ2VzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSByb3V0aW5nIGFuZCBlcnJvci1oYW5kbGluZyBsb2dpYyBmaXguIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMuIEFueSBidWdzIHJlbGF0ZWQgdG8gZXhlY3V0aW5nIGludmFsaWQgcm91dGUgb3V0cHV0IGZ1bmN0aW9ucyBvciByZWZlcmVuY2UgY291bnRpbmcvbWVtb3J5IHNhZmV0eSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByb3V0ZSBsb29rdXAgbG9naWMgZm9yIElDTVAgc2VuZGluZyBpbiBpY21wX3JvdXRlX2xvb2t1cCgpIHRvIHByb3Blcmx5IHJlamVjdCByb3V0ZXMgb2YgdHlwZSBSVE5fVU5SRUFDSEFCTEUgaW4gYWRkaXRpb24gdG8gUlROX0xPQ0FMLiBUaGlzIHRvdWNoZXMgY29yZSBJUHY0IElDTVAgdHJhbnNtaXNzaW9uIGxvZ2ljIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhZDBhYTU1YjUxYTNkZDNiZDIzMmRmNjNlZjZmNjZjNWVlMDJlYzRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTU6NDc6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWNtcC5jIGIvbmV0L2lwdjQvaWNtcC5jXG5pbmRleCAwY2FlZGZjN2NhOTJmLi45MGMwZTIyYzI5YmVhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaWNtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pY21wLmNcbkBAIC01ODEsMTYgJiM0Mzs1ODEsMTkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKmljbXBfcm91dGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxuIFx0XHRza2JfZHN0cmVmX3Jlc3RvcmUoc2tiX2luLCBvcmVmZHN0KTtcbiBcbiBcdFx0Lypcbi1cdFx0ICogQXQgdGhpcyBwb2ludCwgZmw0X2RlYy5kYWRkciBzaG91bGQgTk9UIGJlIGxvY2FsICh3ZVxuLVx0XHQgKiBjaGVja2VkIGZsNF9kZWMuc2FkZHIgYWJvdmUpLiBIb3dldmVyLCBhIHJhY2UgY29uZGl0aW9uXG4tXHRcdCAqIG1heSBvY2N1ciBpZiB0aGUgYWRkcmVzcyBpcyBhZGRlZCB0byB0aGUgaW50ZXJmYWNlXG4tXHRcdCAqIGNvbmN1cnJlbnRseS4gSW4gdGhhdCBjYXNlLCBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYVxuLVx0XHQgKiBMT0NBTCByb3V0ZSB3aXRoIGRzdC5vdXRwdXQ9aXBfcnRfYnVnLCB3aGljaCBtdXN0IG5vdFxuLVx0XHQgKiBiZSB1c2VkIGZvciBvdXRwdXQuXG4mIzQzO1x0XHQgKiBmbDRfZGVjLmRhZGRyIGlzIG5vdCBleHBlY3RlZCB0byBiZSBsb2NhbCBoZXJlLCBidXQgaXQgY2FuIGJlXG4mIzQzO1x0XHQgKiBhZGRlZCB0byBhbiBpbnRlcmZhY2UgY29uY3VycmVudGx5LCBpbiB3aGljaCBjYXNlXG4mIzQzO1x0XHQgKiBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYSBMT0NBTCByb3V0ZS4gSXQgY2FuIGFsc28gZmFpbCB0b1xuJiM0MztcdFx0ICogYnVpbGQgYSBmb3J3YXJkaW5nIHJvdXRlIHRvd2FyZHMgZmw0X2RlYy5kYWRkciwgZm9yIGV4YW1wbGUsXG4mIzQzO1x0XHQgKiB3aGVuIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQsIGFuZCByZXR1cm4gYW4gVU5SRUFDSEFCTEUgcm91dGUuXG4mIzQzO1x0XHQgKiBCb3RoIGNhc2VzIHdpbGwgcmVzdWx0IGluIGEgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1ZyxcbiYjNDM7XHRcdCAqIHdoaWNoIG11c3Qgbm90IGJlIHVzZWQgZm9yIG91dHB1dC5cbiBcdFx0ICovXG4tXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBydDIgXHUwMDI2XHUwMDI2IHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9MT0NBTCkge1xuJiM0MztcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJ0MiBcdTAwMjZcdTAwMjYgcnQyLVx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMKVxuIFx0XHRcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2RldGVjdGVkIGxvY2FsIHJvdXRlIGZvciAlcEk0IGR1cmluZyBJQ01QIHNlbmRpbmcsIHNyYyAlcEk0XFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICAgIFx1MDAyNmZsNF9kZWMuZGFkZHIsIFx1MDAyNmZsNF9kZWMuc2FkZHIpO1xuJiM0MztcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJ0MiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAocnQyLVx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMIHx8IHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9VTlJFQUNIQUJMRSkpIHtcbiBcdFx0XHRkc3RfcmVsZWFzZShcdTAwMjZydDItXHUwMDNlZHN0KTtcbiBcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ljbXBfcm91dGVfbG9va3VwJiMzNDssCiAgICAmIzM0O19faWNtcF9zZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByb3V0ZSBsb29rdXAgbG9naWMgZm9yIElDTVAgc2VuZGluZyBpbiBpY21wX3JvdXRlX2xvb2t1cCgpIHRvIHByb3Blcmx5IHJlamVjdCByb3V0ZXMgb2YgdHlwZSBSVE5fVU5SRUFDSEFCTEUgaW4gYWRkaXRpb24gdG8gUlROX0xPQ0FMLiBUaGlzIHRvdWNoZXMgY29yZSBJUHY0IElDTVAgdHJhbnNtaXNzaW9uIGxvZ2ljIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZDBhYTU1YjUxYTNkZDNiZDIzMmRmNjNlZjZmNjZjNWVlMDJlYzRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTU6NDc6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggMGNhZWRmYzdjYTkyZi4uOTBjMGUyMmMyOWJlYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtNTgxLDE2ICYjNDM7NTgxLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJc2tiX2RzdHJlZl9yZXN0b3JlKHNrYl9pbiwgb3JlZmRzdCk7CiAKIAkJLyoKLQkJICogQXQgdGhpcyBwb2ludCwgZmw0X2RlYy5kYWRkciBzaG91bGQgTk9UIGJlIGxvY2FsICh3ZQotCQkgKiBjaGVja2VkIGZsNF9kZWMuc2FkZHIgYWJvdmUpLiBIb3dldmVyLCBhIHJhY2UgY29uZGl0aW9uCi0JCSAqIG1heSBvY2N1ciBpZiB0aGUgYWRkcmVzcyBpcyBhZGRlZCB0byB0aGUgaW50ZXJmYWNlCi0JCSAqIGNvbmN1cnJlbnRseS4gSW4gdGhhdCBjYXNlLCBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYQotCQkgKiBMT0NBTCByb3V0ZSB3aXRoIGRzdC5vdXRwdXQ9aXBfcnRfYnVnLCB3aGljaCBtdXN0IG5vdAotCQkgKiBiZSB1c2VkIGZvciBvdXRwdXQuCiYjNDM7CQkgKiBmbDRfZGVjLmRhZGRyIGlzIG5vdCBleHBlY3RlZCB0byBiZSBsb2NhbCBoZXJlLCBidXQgaXQgY2FuIGJlCiYjNDM7CQkgKiBhZGRlZCB0byBhbiBpbnRlcmZhY2UgY29uY3VycmVudGx5LCBpbiB3aGljaCBjYXNlCiYjNDM7CQkgKiBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYSBMT0NBTCByb3V0ZS4gSXQgY2FuIGFsc28gZmFpbCB0bwomIzQzOwkJICogYnVpbGQgYSBmb3J3YXJkaW5nIHJvdXRlIHRvd2FyZHMgZmw0X2RlYy5kYWRkciwgZm9yIGV4YW1wbGUsCiYjNDM7CQkgKiB3aGVuIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQsIGFuZCByZXR1cm4gYW4gVU5SRUFDSEFCTEUgcm91dGUuCiYjNDM7CQkgKiBCb3RoIGNhc2VzIHdpbGwgcmVzdWx0IGluIGEgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1ZywKJiM0MzsJCSAqIHdoaWNoIG11c3Qgbm90IGJlIHVzZWQgZm9yIG91dHB1dC4KIAkJICovCi0JCWlmICghZXJyICZhbXA7JmFtcDsgcnQyICZhbXA7JmFtcDsgcnQyLSZndDtydF90eXBlID09IFJUTl9MT0NBTCkgewomIzQzOwkJaWYgKCFlcnIgJmFtcDsmYW1wOyBydDIgJmFtcDsmYW1wOyBydDItJmd0O3J0X3R5cGUgPT0gUlROX0xPQ0FMKQogCQkJbmV0X3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtkZXRlY3RlZCBsb2NhbCByb3V0ZSBmb3IgJXBJNCBkdXJpbmcgSUNNUCBzZW5kaW5nLCBzcmMgJXBJNFxuJiMzNDssCiAJCQkJCSAgICAgJmFtcDtmbDRfZGVjLmRhZGRyLCAmYW1wO2ZsNF9kZWMuc2FkZHIpOwomIzQzOwkJaWYgKCFlcnIgJmFtcDsmYW1wOyBydDIgJmFtcDsmYW1wOwomIzQzOwkJICAgIChydDItJmd0O3J0X3R5cGUgPT0gUlROX0xPQ0FMIHx8IHJ0Mi0mZ3Q7cnRfdHlwZSA9PSBSVE5fVU5SRUFDSEFCTEUpKSB7CiAJCQlkc3RfcmVsZWFzZSgmYW1wO3J0Mi0mZ3Q7ZHN0KTsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIwMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpczoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIElDTVAgUGF0Y2gqKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgZm9jdXMgaXMgb24gdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBuZXQvaXB2NC9pY21wLmNgIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBpY21wX3JvdXRlX2xvb2t1cCgpYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGZpcnN0IGluc3RpbmN0LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMsIGlzIHRvIGdyYWIgdGhlIG1vZGlmaWVkIGZpbGUsIGBuZXQvaXB2NC9pY21wLmNgLiBTaW5jZSBJIGhhdmUgaXQgbG9jYWxseSwgSSYjMzk7bGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCAtICBwcm9iYWJseSB0aGUgbGF0dGVyIHRvIGdldCBhIGNsZWFuIHZpZXcgb2YgdGhlIGNvZGUuIFRoaXMgZ2l2ZXMgYSBjbGVhcmVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljcyBvZiAqaG93KiBgaWNtcF9yb3V0ZV9sb29rdXAoKWAgaXMgYmVpbmcgbW9kaWZpZWQuIEFyZSB0aGV5IGFkZGluZyBuZXcgbG9naWMsIGNoYW5naW5nIGV4aXN0aW5nIGNvbmRpdGlvbnMsIG9yIGNvbXBsZXRlbHkgcmV3cml0aW5nIGl0PyBUaGUgZGlmZiBpdHNlbGYgd2lsbCBiZSBjcnVjaWFsIGluIGhpZ2hsaWdodGluZyB0aGUgYWZmZWN0ZWQgYXJlYXMuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBvZiB0aGVzZSBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIElDTVAgaW1wbGVtZW50YXRpb24uIFRoaXMgbGV0cyBtZSB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2ggYWNyb3NzIHRoZSBicm9hZGVyIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2ljbXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTYwOlx0XHRcdFx0c3dhcChmbDRfMi5mbDRfc3BvcnQsIGZsNF8yLmZsNF9kcG9ydCk7XG4gNTYxOlx0XHRcdFx0YnJlYWs7XG4gNTYyOlx0XHRcdH1cbiA1NjM6XHRcbiA1NjQ6XHRcdFx0Zmw0XzIuZmxvd2k0X29pZiA9IGwzbWRldl9tYXN0ZXJfaWZpbmRleChyb3V0ZV9sb29rdXBfZGV2KTtcbiA1NjU6XHRcdFx0Zmw0XzIuZmxvd2k0X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xuIDU2NjpcdFxuIDU2NzpcdFx0XHRydDIgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcdTAwMjZmbDRfMik7XG4gNTY4Olx0XHRcdGlmIChJU19FUlIocnQyKSkge1xuIDU2OTpcdFx0XHRcdGVyciA9IFBUUl9FUlIocnQyKTtcbiA1NzA6XHRcdFx0XHRnb3RvIHJlbG9va3VwX2ZhaWxlZDtcbiA1NzE6XHRcdFx0fVxuIDU3MjpcdFx0XHQvKiBVZ2ghICovXG4gNTczOlx0XHRcdG9yZWZkc3QgPSBza2JfZHN0cmVmX3N0ZWFsKHNrYl9pbik7XG4gNTc0Olx0XHRcdGVyciA9IGlwX3JvdXRlX2lucHV0KHNrYl9pbiwgZmw0X2RlYy5kYWRkciwgZmw0X2RlYy5zYWRkcixcbiA1NzU6XHRcdFx0XHRcdCAgICAgZHNjcCwgcnQyLVx1MDAzZWRzdC5kZXYpID8gLUVJTlZBTCA6IDA7XG4gNTc2Olx0XG4gNTc3Olx0XHRcdGRzdF9yZWxlYXNlKFx1MDAyNnJ0Mi1cdTAwM2Vkc3QpO1xuIDU3ODpcdFx0XHRydDIgPSBza2JfcnRhYmxlKHNrYl9pbik7XG4gNTc5Olx0XHRcdC8qIHN0ZWFsIGRzdCBlbnRyeSBmcm9tIHNrYl9pbiwgZG9uJiMzOTt0IGRyb3AgcmVmY250ICovXG4gNTgwOlx0XHRcdHNrYl9kc3RyZWZfc3RlYWwoc2tiX2luKTtcbiA1ODE6XHRcdFx0c2tiX2RzdHJlZl9yZXN0b3JlKHNrYl9pbiwgb3JlZmRzdCk7XG4gNTgyOlx0XG4gNTgzOlx0XHRcdC8qXG4gNTg0Olx0XHRcdCAqIGZsNF9kZWMuZGFkZHIgaXMgbm90IGV4cGVjdGVkIHRvIGJlIGxvY2FsIGhlcmUsIGJ1dCBpdCBjYW4gYmVcbiA1ODU6XHRcdFx0ICogYWRkZWQgdG8gYW4gaW50ZXJmYWNlIGNvbmN1cnJlbnRseSwgaW4gd2hpY2ggY2FzZVxuIDU4NjpcdFx0XHQgKiBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYSBMT0NBTCByb3V0ZS4gSXQgY2FuIGFsc28gZmFpbCB0b1xuIDU4NzpcdFx0XHQgKiBidWlsZCBhIGZvcndhcmRpbmcgcm91dGUgdG93YXJkcyBmbDRfZGVjLmRhZGRyLCBmb3IgZXhhbXBsZSxcbiA1ODg6XHRcdFx0ICogd2hlbiBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCBhbmQgcmV0dXJuIGFuIFVOUkVBQ0hBQkxFIHJvdXRlLlxuIDU4OTpcdFx0XHQgKiBCb3RoIGNhc2VzIHdpbGwgcmVzdWx0IGluIGEgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1ZyxcbiA1OTA6XHRcdFx0ICogd2hpY2ggbXVzdCBub3QgYmUgdXNlZCBmb3Igb3V0cHV0LlxuIDU5MTpcdFx0XHQgKi9cbiA1OTI6XHRcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJ0MiBcdTAwMjZcdTAwMjYgcnQyLVx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMKVxuIDU5MzpcdFx0XHRcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2RldGVjdGVkIGxvY2FsIHJvdXRlIGZvciAlcEk0IGR1cmluZyBJQ01QIHNlbmRpbmcsIHNyYyAlcEk0XFxuXCYjMzQ7LFxuIDU5NDpcdFx0XHRcdFx0XHQgICAgIFx1MDAyNmZsNF9kZWMuZGFkZHIsIFx1MDAyNmZsNF9kZWMuc2FkZHIpO1xuIDU5NTpcdFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcnQyIFx1MDAyNlx1MDAyNlxuIDU5NjpcdFx0XHQgICAgKHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9MT0NBTCB8fCBydDItXHUwMDNlcnRfdHlwZSA9PSBSVE5fVU5SRUFDSEFCTEUpKSB7XG4gNTk3Olx0XHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2cnQyLVx1MDAzZWRzdCk7XG4gNTk4Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiA1OTk6XHRcdFx0fVxuIDYwMDpcdFx0fVxuIDYwMTpcdFxuIDYwMjpcdFx0aWYgKGVycilcbiA2MDM6XHRcdFx0Z290byByZWxvb2t1cF9mYWlsZWQ7XG4gNjA0Olx0XG4gNjA1Olx0XHRkc3QyID0geGZybV9sb29rdXAobmV0LCBcdTAwMjZydDItXHUwMDNlZHN0LCBmbG93aTRfdG9fZmxvd2koXHUwMDI2Zmw0X2RlYyksIE5VTEwsXG4gNjA2Olx0XHRcdFx0ICAgWEZSTV9MT09LVVBfSUNNUCk7XG4gNjA3Olx0XHRydDIgPSBkc3RfcnRhYmxlKGRzdDIpO1xuIDYwODpcdFx0aWYgKCFJU19FUlIoZHN0MikpIHtcbiA2MDk6XHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDY0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBkaXZpbmcgaW50byB0aGlzIElDTVAgcm91dGluZyBsb2dpYzoKCioqSW52ZXN0aWdhdGluZyBJQ01QIFJvdXRlIExvb2t1cCBhbmQgU2VuZGluZyoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gYGljbXBfcm91dGVfbG9va3VwYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgSUNNUCBzZW5kaW5nIHByb2Nlc3MuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgaW50byB0aGUgZW50aXJlIHdvcmtmbG93IG9mIGdlbmVyYXRpbmcgYW5kIHRyYW5zbWl0dGluZyBJQ01QIHBhY2tldHM/IEkgbmVlZCB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMuIEkgbmVlZCB0byBpZGVudGlmeSBleGFjdGx5IHdoaWNoIHBhcnRzIG9mIHRoZSBzeXN0ZW0gY2FsbCBgaWNtcF9yb3V0ZV9sb29rdXBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgSUNNUCByb3V0ZXMgYXJlIGFjdHVhbGx5IGJlaW5nIHJlc29sdmVkIHVzaW5nIHRoaXMgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlcnMgd2lsbCBiZSBrZXkgdG8gZ3Jhc3BpbmcgaXRzIHB1cnBvc2UgYW5kIHRoZSBvdmVyYWxsIHJvdXRpbmcgc3RyYXRlZ3kuIEkgbmVlZCB0byBtYXAgdGhlIGRlcGVuZGVuY2llcyBjbGVhcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljbXBfcm91dGVfbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ljbXAuYz00ODM9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppY21wX2dldF9yb3V0ZV9sb29rdXBfZGV2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaWNtcC5jLTQ5My1cbm5ldC9pcHY0L2ljbXAuYzo0OTQ6c3RhdGljIHN0cnVjdCBydGFibGUgKmljbXBfcm91dGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxubmV0L2lwdjQvaWNtcC5jLTQ5NS1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9pbixcbi0tXG5uZXQvaXB2NC9pY21wLmM9ODE3PXZvaWQgX19pY21wX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IHR5cGUsIGludCBjb2RlLCBfX2JlMzIgaW5mbyxcbi0tXG5uZXQvaXB2NC9pY21wLmMtOTcyLVxubmV0L2lwdjQvaWNtcC5jOjk3MzpcdHJ0ID0gaWNtcF9yb3V0ZV9sb29rdXAobmV0LCBcdTAwMjZmbDQsIHNrYl9pbiwgaXBoLCBzYWRkcixcbm5ldC9pcHY0L2ljbXAuYy05NzQtXHRcdFx0ICAgICAgIGluZXRfZHNmaWVsZF90b19kc2NwKHRvcyksIG1hcmssIHR5cGUsIGNvZGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIGBpY21wX3JvdXRlX2xvb2t1cGAgLSBBIFByb21pc2luZyBUYXJnZXQqKgoKT2theSwgc28gYGljbXBfcm91dGVfbG9va3VwYCBpcyBjYWxsZWQgYnkgYF9faWNtcF9zZW5kYCB3aXRoaW4gYG5ldC9pcHY0L2ljbXAuY2AuIFRoYXQmIzM5O3MgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIElQdjQgbmV0d29ya2luZywgc3BlY2lmaWNhbGx5IElDTVAgZXJyb3IgZ2VuZXJhdGlvbi4gVGhlIGtleSBxdWVzdGlvbiBpcyBhbHdheXMsICppcyogdGhpcyBjb2RlIHJlYWNoYWJsZT8gQWJzb2x1dGVseSwgZ2l2ZW4gaG93IGZ1bmRhbWVudGFsIElDTVAgaXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG5ldHdvcmsgc29ja2V0cywgdHVuL3RhcCBpbnRlcmZhY2VzLCBsb29wYmFjaywgcGFja2V0IHNvY2tldHMg4oCTIGl0JiMzOTtzIGFsbCB1c2luZyB0aGlzIGZ1bmN0aW9uYWxpdHkuICBgX19pY21wX3NlbmRgIGFuZCBgaWNtcF9zZW5kYCBhcmUgcHJldHR5IG11Y2ggdWJpcXVpdG91cy4KClJpZ2h0LCBzbywgaXMgaXQgd29ydGggZnV6emluZz8gIExldCYjMzk7cyBzZWUuIFRoaXMgcGF0Y2ggZGlyZWN0bHkgdG91Y2hlcyBjb3JlIHN1YnN5c3RlbXM6IElQdjQgSUNNUCByb3V0ZSBoYW5kbGluZy4gSXQmIzM5O3MgZm9jdXNlZCBvbiBhbHRlcmluZyBob3cgYFJUTl9VTlJFQUNIQUJMRWAgcm91dGVzIGFyZSBoYW5kbGVkIHdpdGhpbiBgaWNtcF9yb3V0ZV9sb29rdXAoKWAuIFRoZSBjaGFuZ2UgcHJldmVudHMgdGhvc2UgdW5yZWFjaGFibGUgcm91dGVzIGZyb20gYmVpbmcgdXNlZCB3aGVuIHNlbmRpbmcgSUNNUCBtZXNzYWdlcy4gUHJldmlvdXNseSwgaXQgbG9va3MgbGlrZSBgZHN0Lm91dHB1dD1pcF9ydF9idWdgIHdhcyBwb3NzaWJsZSwgd2hpY2ggY291bGQgaGF2ZSBsZWQgdG8ga2VybmVsIGJ1Z3Mgb3IgY3Jhc2hlcywgZXNwZWNpYWxseSBpZiBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCBvciB3ZSB3ZXJlIGRlYWxpbmcgd2l0aCBhbiB1bnJlYWNoYWJsZSByb3V0ZS4gSXQgc291bmRzIGxpa2UgdGhpcyBjb3VsZCBhYnNvbHV0ZWx5IGxlYWQgdG8gYSBidWcsIGFuZCBiZSBhIGdyZWF0IHBsYWNlIHRvIGV4ZXJjaXNlIG15IGZ1enppbmcgc2tpbGxzZXQuCgpTbywgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGtlcm5lbCBjb2RlIGFuZCB3b3J0aCBhIHNob3QuCgpPa2F5LCBuZXh0IHN0ZXAg4oCTIGNvbmZpZ3VyYXRpb24uICBJcyB0aGUgYmFyZSBtaW5pbXVtIGBJTkVUYCBvciBgSVBgIGVuYWJsZWQ/IExldCYjMzk7cyBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2Agb3IgYG5ldC9pcHY0L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNtcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xMy1cdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTQ6XHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQ5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBLZXJuZWwgTW9kdWxlIERlcGVuZGVuY3kqKgoKT2theSwgc28gYGljbXAub2AgaXMgY2xlYXJseSBkZWZpbmVkIHdpdGhpbiB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB1bmRlciB0aGUgYG9iai15YCBhc3NpZ25tZW50LiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIGEgYnVpbHQtaW4gbW9kdWxlIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSwgaWYgYSBiaXQgb2YgYW4gb2xkZXIgc3R5bGUgb2YgbWFrZWZpbGUuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBgQ09ORklHX0lORVRgIGd1YXJkLiBUaGF0IGluZGljYXRlcyBpdHMgY29tcGlsYXRpb24gYW5kIGluY2x1c2lvbiBhcmUgY29uZGl0aW9uYWwsIGRlcGVuZGVudCBvbiB0aGUgYElORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGJlaW5nIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBidWlsZC4KCk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoaXMgYElORVRgIHZhcmlhYmxlLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBkbyB0aGF0IGlzIGBuZXQvS2NvbmZpZ2AsIHdoaWNoIGlzIHdoZXJlIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG5ldHdvcmtpbmcgYXJlIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgdG8gdW5kZXJzdGFuZCB3aGF0IGBDT05GSUdfSU5FVGAgYWN0dWFsbHkgKm1lYW5zKiBpbiB0aGUgYnJvYWRlciBjb250ZXh0LiBJcyBpdCBhIGJhc2Ugb3B0aW9uIGZvciBJUHY0IHN1cHBvcnQ/IElzIGl0IG1vcmUgZ3JhbnVsYXIgdGhhbiB0aGF0PyBLbm93aW5nIGl0cyBkZWZpbml0aW9uIGlzIGtleSB0byBkZXRlcm1pbmluZyB3aGVuIGBpY21wLm9gIHdpbGwgYWN0dWFsbHkgYmUgcHJlc2VudCBpbiB0aGUgZmluYWwga2VybmVsIGltYWdlLiBUaGlzIGxvb2tzIGxpa2UgYSBmYWlybHkgdHlwaWNhbCBkZXBlbmRlbmN5IGNoYWluOiBhIG1vZHVsZSYjMzk7cyBidWlsZCBydWxlIHRoYXQmIzM5O3MgY29uZGl0aW9uYWwgdXBvbiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3cgaXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1Rcbi0tXG5uZXQvS2NvbmZpZy0xMTMtXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcbm5ldC9LY29uZmlnLTExNS1cdGJvb2wgXCYjMzQ7VENQL0lQIG5ldHdvcmtpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE2MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSUNNUCBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgUmVzb2x1dGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBJTkVUYCBjb25maWd1cmF0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGlzIHJlYWxseSBjZW50ZXJlZCBhcm91bmQgSUNNUC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgY3JpdGljYWwgc3ltYm9scyBhcmUgaGVyZS4gSW1tZWRpYXRlbHksIGBpY21wX3JvdXRlX2xvb2t1cGAganVtcHMgb3V0LCBidXQgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBpY21wLmNgLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bDsgSSBrbm93IHN0YXRpYyBmdW5jdGlvbnMgYXJlIGdlbmVyYWxseSBpbnRlcm5hbCwgYnV0IHRoZXkgKmRvKiBoYXZlIHN5bWJvbHMgaW4gYHZtbGludXhgIHVubGVzcyB0aGV5JiMzOTtyZSBpbmxpbmVkIGF3YXkgYnkgdGhlIGNvbXBpbGVyLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayBgaWNtcF9yb3V0ZV9sb29rdXBgIGRpcmVjdGx5LiBZZXAsIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cCguLi4pYCwgd2hpY2ggY29uZmlybXMgaXRzIHN0YXRpYyBuYXR1cmUuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiBJIHRhcmdldCAqanVzdCogYGljbXBfcm91dGVfbG9va3VwYCwgb3Igc2hvdWxkIEkgYmUgbW9yZSBjb21wcmVoZW5zaXZlIGFuZCBpbmNsdWRlIHRoZSByZWxhdGVkIGBfX2ljbXBfc2VuZGAgYW5kIGBpY21wX3NlbmRgIGFzIHdlbGw/IEkgY2FuJiMzOTt0IGJlIHN1cmUgaWYgYGljbXBfcm91dGVfbG9va3VwYCBpcyBpbmxpbmVkIGF3YXksIG9yIGNhbGxlZCBmcm9tIGFuIGBfX2ljbXBfc2VuZGAgY2FsbC4KCkkgd2FudCB0byBiZSB0aG9yb3VnaCwgc28gdG8gZW5zdXJlIEkgaGF2ZSBmdWxsIGNvdmVyYWdlLCBJIHNob3VsZCBwcm9iYWJseSBnbyBhaGVhZCBhbmQgaW5jbHVkZSBib3RoIGBfX2ljbXBfc2VuZGAgYW5kIGBpY21wX3NlbmRgIGluIG15IHRhcmdldCBsaXN0LiBUaGF0IHdheSwgZXZlbiBpZiBgaWNtcF9yb3V0ZV9sb29rdXBgIGlzIGlubGluZWQgb3IgY2FsbGVkIHZpYSB0aG9zZSBvdGhlciBmdW5jdGlvbnMsIEkmIzM5O2xsIHN0aWxsIGNhcHR1cmUgdGhlIGJlaGF2aW9yLgoKTm93LCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBsYW5kc2NhcGUgZnVsbHksIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB3aGV0aGVyIGBpY21wX3JvdXRlX2xvb2t1cGAgKmlzKiBhY3R1YWxseSBpbmxpbmVkIG9yIG5vdC4gTGV0IG1lIGp1c3QgY29uZmlybSBhZ2FpbjogYHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cCguLi4pYC4gT2theSwgaXQgbG9va3Mgc3RhdGljIG5vbi1pbmxpbmVkLgoKQWxyaWdodCwgSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBpbiBgbmV0L2lwdjQvaWNtcC5jYCB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiBhcm91bmQgaXQuIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSB1c2VmdWwgY29udGV4dCBmb3IgbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljbXBfc2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9jaXBzb19pcHY0LmM9MTcxNT12b2lkIGNpcHNvX3Y0X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnJvciwgdTMyIGdhdGV3YXkpXG4tLVxubmV0L2lwdjQvY2lwc29faXB2NC5jLTE3MjQtXHQgKiBXZSBtaWdodCBiZSBjYWxsZWQgYWJvdmUgdGhlIElQIGxheWVyLFxubmV0L2lwdjQvY2lwc29faXB2NC5jOjE3MjU6XHQgKiBzbyB3ZSBjYW4gbm90IHVzZSBpY21wX3NlbmQgYW5kIElQQ0IgaGVyZS5cbm5ldC9pcHY0L2NpcHNvX2lwdjQuYy0xNzI2LVx0ICovXG4tLVxubmV0L2lwdjQvY2lwc29faXB2NC5jLTE3MzctXHRpZiAoZ2F0ZXdheSlcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYzoxNzM4Olx0XHRfX2ljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX05FVF9BTk8sIDAsIFx1MDAyNnBhcm0pO1xubmV0L2lwdjQvY2lwc29faXB2NC5jLTE3MzktXHRlbHNlXG5uZXQvaXB2NC9jaXBzb19pcHY0LmM6MTc0MDpcdFx0X19pY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9IT1NUX0FOTywgMCwgXHUwMDI2cGFybSk7XG5uZXQvaXB2NC9jaXBzb19pcHY0LmMtMTc0MS19XG4tLVxubmV0L2lwdjQvaWNtcC5jLTQ2LSAqXHRcdFx0XHRcdHRoZSByYXRlcyBzeXNjdGwgY29uZmlndXJhYmxlLlxubmV0L2lwdjQvaWNtcC5jOjQ3OiAqXHRcdFl1IFRpYW5saVx0Olx0Rml4ZWQgdHdvIHVnbHkgYnVncyBpbiBpY21wX3NlbmRcbm5ldC9pcHY0L2ljbXAuYy00OC0gKlx0XHRcdFx0XHQtIElQIG9wdGlvbiBsZW5ndGggd2FzIGFjY291bnRlZCB3cm9uZ2x5XG4tLVxubmV0L2lwdjQvaWNtcC5jPTc0Mj1pY21wX2V4dF9hcHBlbmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBzdHJ1Y3QgaWNtcGhkciAqaWNtcGgsXG4tLVxubmV0L2lwdjQvaWNtcC5jLTgxNi1cbm5ldC9pcHY0L2ljbXAuYzo4MTc6dm9pZCBfX2ljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvLFxubmV0L2lwdjQvaWNtcC5jLTgxOC1cdFx0IGNvbnN0IHN0cnVjdCBpbmV0X3NrYl9wYXJtICpwYXJtKVxuLS1cbm5ldC9pcHY0L2ljbXAuYy04NDgtXHQgKlx0RmluZCB0aGUgb3JpZ2luYWwgaGVhZGVyLiBJdCBpcyBleHBlY3RlZCB0byBiZSB2YWxpZCwgb2YgY291cnNlLlxubmV0L2lwdjQvaWNtcC5jOjg0OTpcdCAqXHRDaGVjayB0aGlzLCBpY21wX3NlbmQgaXMgY2FsbGVkIGZyb20gdGhlIG1vc3Qgb2JzY3VyZSBkZXZpY2VzXG5uZXQvaXB2NC9pY21wLmMtODUwLVx0ICpcdHNvbWV0aW1lcy5cbi0tXG5uZXQvaXB2NC9pY21wLmMtMTAxNS1cbm5ldC9pcHY0L2ljbXAuYzoxMDE2Olx0dHJhY2VfaWNtcF9zZW5kKHNrYl9pbiwgdHlwZSwgY29kZSk7XG5uZXQvaXB2NC9pY21wLmMtMTAxNy1cbi0tXG5uZXQvaXB2NC9pY21wLmMtMTAzMC19XG5uZXQvaXB2NC9pY21wLmM6MTAzMTpFWFBPUlRfU1lNQk9MKF9faWNtcF9zZW5kKTtcbm5ldC9pcHY0L2ljbXAuYy0xMDMyLVxuLS1cbm5ldC9pcHY0L2ljbXAuYz0xMDM1PXZvaWQgaWNtcF9uZG9fc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvKVxuLS1cbm5ldC9pcHY0L2ljbXAuYy0xMDQ2LVx0aWYgKCFjdCB8fCAhKFJFQURfT05DRShjdC1cdTAwM2VzdGF0dXMpIFx1MDAyNiBJUFNfTkFUX01BU0spKSB7XG5uZXQvaXB2NC9pY21wLmM6MTA0NzpcdFx0X19pY21wX3NlbmQoc2tiX2luLCB0eXBlLCBjb2RlLCBpbmZvLCBcdTAwMjZwYXJtKTtcbm5ldC9pcHY0L2ljbXAuYy0xMDQ4LVx0XHRyZXR1cm47XG4tLVxubmV0L2lwdjQvaWNtcC5jLTEwNjItXHRpcF9oZHIoc2tiX2luKS1cdTAwM2VzYWRkciA9IGN0LVx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51My5pcDtcbm5ldC9pcHY0L2ljbXAuYzoxMDYzOlx0X19pY21wX3NlbmQoc2tiX2luLCB0eXBlLCBjb2RlLCBpbmZvLCBcdTAwMjZwYXJtKTtcbm5ldC9pcHY0L2ljbXAuYy0xMDY0LVx0aXBfaGRyKHNrYl9pbiktXHUwMDNlc2FkZHIgPSBvcmlnX2lwO1xuLS1cbm5ldC9pcHY0L2lwX2ZvcndhcmQuYz04Mz1pbnQgaXBfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2lwX2ZvcndhcmQuYy0xMzYtXHRcdElQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7XG5uZXQvaXB2NC9pcF9mb3J3YXJkLmM6MTM3Olx0XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9GUkFHX05FRURFRCxcbm5ldC9pcHY0L2lwX2ZvcndhcmQuYy0xMzgtXHRcdFx0ICBodG9ubChtdHUpKTtcbi0tXG5uZXQvaXB2NC9pcF9mb3J3YXJkLmMtMTY5LVx0ICovXG5uZXQvaXB2NC9pcF9mb3J3YXJkLmM6MTcwOlx0IGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1NSX0ZBSUxFRCwgMCk7XG5uZXQvaXB2NC9pcF9mb3J3YXJkLmMtMTcxLVx0IGdvdG8gZHJvcDtcbi0tXG5uZXQvaXB2NC9pcF9mb3J3YXJkLmMtMTc1LVx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG5uZXQvaXB2NC9pcF9mb3J3YXJkLmM6MTc2Olx0aWNtcF9zZW5kKHNrYiwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19UVEwsIDApO1xubmV0L2lwdjQvaXBfZm9yd2FyZC5jLTE3Ny1cdFNLQl9EUl9TRVQocmVhc29uLCBJUF9JTkhEUik7XG4tLVxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYz0xMjM9c3RhdGljIHZvaWQgaXBfZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtMTg0LVx0c3Bpbl91bmxvY2soXHUwMDI2cXAtXHUwMDNlcS5sb2NrKTtcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM6MTg1Olx0aWNtcF9zZW5kKGhlYWQsIElDTVBfVElNRV9FWENFRURFRCwgSUNNUF9FWENfRlJBR1RJTUUsIDApO1xubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy0xODYtXHRnb3RvIG91dF9yY3VfdW5sb2NrO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTQ0MD1zdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy00Njgtb3V0OlxubmV0L2lwdjQvaXBfZ3JlLmM6NDY5Olx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTQ3MC1kcm9wOlxuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmM9MTg5PXZvaWQgaXBfcHJvdG9jb2xfZGVsaXZlcl9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG9jb2wpXG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMTctXHRcdFx0XHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOVU5LTk9XTlBST1RPUyk7XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjIxODpcdFx0XHRcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMTktXHRcdFx0XHRcdCAgSUNNUF9QUk9UX1VOUkVBQ0gsIDApO1xuLS1cbm5ldC9pcHY0L2lwX29wdGlvbnMuYz00NjU9aW50IGlwX29wdGlvbnNfY29tcGlsZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjQvaXBfb3B0aW9ucy5jLTQ3Mi1cdGlmIChyZXQgIT0gMCBcdTAwMjZcdTAwMjYgc2tiKVxubmV0L2lwdjQvaXBfb3B0aW9ucy5jOjQ3MzpcdFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9QQVJBTUVURVJQUk9CLCAwLCBpbmZvKTtcbm5ldC9pcHY0L2lwX29wdGlvbnMuYy00NzQtXHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9pcHY0L2lwX29wdGlvbnMuYz01ODk9aW50IGlwX29wdGlvbnNfcmN2X3NycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX29wdGlvbnMuYy02MDgtXHRcdFx0cmV0dXJuIDA7XG5uZXQvaXB2NC9pcF9vcHRpb25zLmM6NjA5Olx0XHRpY21wX3NlbmQoc2tiLCBJQ01QX1BBUkFNRVRFUlBST0IsIDAsIGh0b25sKDE2XHUwMDNjXHUwMDNjMjQpKTtcbm5ldC9pcHY0L2lwX29wdGlvbnMuYy02MTAtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pcHY0L2lwX29wdGlvbnMuYy02MTYtXHRcdGlmIChzcnJwdHIgJiM0MzsgMyBcdTAwM2Ugc3Jyc3BhY2UpIHtcbm5ldC9pcHY0L2lwX29wdGlvbnMuYzo2MTc6XHRcdFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9QQVJBTUVURVJQUk9CLCAwLCBodG9ubCgob3B0LVx1MDAzZXNyciYjNDM7MilcdTAwM2NcdTAwM2MyNCkpO1xubmV0L2lwdjQvaXBfb3B0aW9ucy5jLTYxOC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz01NzU9c3RhdGljIGludCBpcF9mcmFnbWVudChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy01ODctXHRcdElQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzo1ODg6XHRcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0ZSQUdfTkVFREVELFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtNTg5LVx0XHRcdCAgaHRvbmwobXR1KSk7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MzQ4PXZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaylcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNjEtXHQgICAgIW5mX3JlamVjdF92ZXJpZnlfY3N1bShza2JfaW4sIGRhdGFvZmYsIHByb3RvKSkge1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM6MzYyOlx0XHRpY21wX3NlbmQoc2tiX2luLCBJQ01QX0RFU1RfVU5SRUFDSCwgY29kZSwgMCk7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNjMtXHRcdHJldHVybjtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNjYtXHRpZiAobmZfaXBfY2hlY2tzdW0oc2tiX2luLCBob29rLCBkYXRhb2ZmLCBwcm90bykgPT0gMClcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjM2NzpcdFx0aWNtcF9zZW5kKHNrYl9pbiwgSUNNUF9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzY4LX1cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTkwMj12b2lkIGlwX3J0X3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTk1My1cbm5ldC9pcHY0L3JvdXRlLmM6OTU0Olx0XHRpY21wX3NlbmQoc2tiLCBJQ01QX1JFRElSRUNULCBJQ01QX1JFRElSX0hPU1QsIGd3KTtcbm5ldC9pcHY0L3JvdXRlLmMtOTU1LVx0XHRwZWVyLVx1MDAzZXJhdGVfbGFzdCA9IGppZmZpZXM7XG4tLVxubmV0L2lwdjQvcm91dGUuYz05Njc9c3RhdGljIGludCBpcF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTA0MS1cdGlmIChzZW5kKVxubmV0L2lwdjQvcm91dGUuYzoxMDQyOlx0XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgY29kZSwgMCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTEwNDMtXG4tLVxubmV0L2lwdjQvcm91dGUuYz0xMjU1PXN0YXRpYyB2b2lkIGlwdjRfc2VuZF9kZXN0X3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTEyODEtXHR9XG5uZXQvaXB2NC9yb3V0ZS5jOjEyODI6XHRfX2ljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0hPU1RfVU5SRUFDSCwgMCwgXHUwMDI2cGFybSk7XG5uZXQvaXB2NC9yb3V0ZS5jLTEyODMtfVxuLS1cbm5ldC9pcHY0L3R1bm5lbDQuYz05NT1zdGF0aWMgaW50IHR1bm5lbDRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdHVubmVsNC5jLTEwNS1cbm5ldC9pcHY0L3R1bm5lbDQuYzoxMDY6XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xubmV0L2lwdjQvdHVubmVsNC5jLTEwNy1cbi0tXG5uZXQvaXB2NC90dW5uZWw0LmM9MTQxPXN0YXRpYyBpbnQgdHVubmVsNjRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdHVubmVsNC5jLTE1MS1cbm5ldC9pcHY0L3R1bm5lbDQuYzoxNTI6XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xubmV0L2lwdjQvdHVubmVsNC5jLTE1My1cbi0tXG5uZXQvaXB2NC90dW5uZWw0LmM9MTYxPXN0YXRpYyBpbnQgdHVubmVsbXBsczRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdHVubmVsNC5jLTE3MS1cbm5ldC9pcHY0L3R1bm5lbDQuYzoxNzI6XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xubmV0L2lwdjQvdHVubmVsNC5jLTE3My1cbi0tXG5uZXQvaXB2NC91ZHAuYz0yNjAzPWludCB1ZHBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdWRwLmMtMjY3Ny1cdF9fVURQX0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfTk9QT1JUUyk7XG5uZXQvaXB2NC91ZHAuYzoyNjc4Olx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTtcbm5ldC9pcHY0L3VkcC5jLTI2NzktXG4tLVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYz02MT1pbnQgeGZybTRfcmN2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLFxuLS1cbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmMtODctb3V0OlxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYzo4ODpcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7XG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTg5LVxuLS1cbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmM9OTY9c3RhdGljIGludCB4ZnJtNF9lc3BfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0xMDYtXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jOjEwNzpcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7XG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTEwOC1cbi0tXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jPTEyND1zdGF0aWMgaW50IHhmcm00X2FoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmMtMTM0LVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYzoxMzU6XHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0xMzYtXG4tLVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYz0xNTI9c3RhdGljIGludCB4ZnJtNF9pcGNvbXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0xNjItXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jOjE2MzpcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7XG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTE2NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1ODgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSUNNUCBSb3V0aW5nIGFuZCBUcmFuc21pc3Npb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgaWNtcF9yb3V0ZV9sb29rdXBgIGFuZCBgX19pY21wX3NlbmRgLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhvc2UgdHdvIGZ1bmN0aW9ucywgb3IgcG9zc2libHkgdGhyZWUgaWYgYGljbXBfc2VuZGAgaXMgYWxzbyByZWxldmFudC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRob3NlIGFyZSB0aGUga2V5IGFyZWFzIEkgd2FudCB0byB1bmRlcnN0YW5kLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3J1Y2lhbC4gSXMgYGljbXBfcm91dGVfbG9va3VwYCBleHBvcnRlZCwgb3IgaXMgaXQgaGlkZGVuIGFzIGEgc3RhdGljIGZ1bmN0aW9uPyBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQmIzM5O3MgZGVjbGFyZWQgYXMgYHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cCguLi4pYCwgd2hpY2ggdGVsbHMgbWUgaXQmIzM5O3MgaW50ZXJuYWwgdG8gaXRzIG1vZHVsZS4gYF9faWNtcF9zZW5kYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIGV4cG9ydGVkIHZpYSBgRVhQT1JUX1NZTUJPTChfX2ljbXBfc2VuZClgLCBzbyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQgZm9yIGhvdyB0aGUga2VybmVsJiMzOTtzIElDTVAgaW1wbGVtZW50YXRpb24gaXMgc3RydWN0dXJlZC4KCkZpbmFsbHksIEkgbmVlZCB0byBrbm93IHdoYXQgYGljbXBfc2VuZGAgaXMuIElzIGl0IGFuIGlubGluZSBmdW5jdGlvbiBvciBhIG1hY3JvIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L2ljbXAuaGA/IFRoYXQgd2lsbCB0ZWxsIG1lIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSwgYW5kIHdoZXRoZXIgaXTigJlzIGEgc2ltcGxlIGhlbHBlciBvciBhIG1vcmUgaW52b2x2ZWQgcGFydCBvZiB0aGUgSUNNUCBzZW5kaW5nIG1lY2hhbmlzbS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgaGVhZGVyIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpY21wX3NlbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pY21wLmg9Mzc9c3RydWN0IG5ldDtcbmluY2x1ZGUvbmV0L2ljbXAuaC0zOC1cbmluY2x1ZGUvbmV0L2ljbXAuaDozOTp2b2lkIF9faWNtcF9zZW5kKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCB0eXBlLCBpbnQgY29kZSwgX19iZTMyIGluZm8sXG5pbmNsdWRlL25ldC9pY21wLmgtNDAtXHRcdCBjb25zdCBzdHJ1Y3QgaW5ldF9za2JfcGFybSAqcGFybSk7XG5pbmNsdWRlL25ldC9pY21wLmg6NDE6c3RhdGljIGlubGluZSB2b2lkIGljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvKVxuaW5jbHVkZS9uZXQvaWNtcC5oLTQyLXtcbmluY2x1ZGUvbmV0L2ljbXAuaDo0MzpcdF9faWNtcF9zZW5kKHNrYl9pbiwgdHlwZSwgY29kZSwgaW5mbywgSVBDQihza2JfaW4pKTtcbmluY2x1ZGUvbmV0L2ljbXAuaC00NC19XG4tLVxuaW5jbHVkZS9uZXQvaWNtcC5oPTQ5PXN0YXRpYyBpbmxpbmUgdm9pZCBpY21wX25kb19zZW5kKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCB0eXBlLCBpbnQgY29kZSwgX19iZTMyIGluZm8pXG4tLVxuaW5jbHVkZS9uZXQvaWNtcC5oLTUzLVx0bWVtc2V0KFx1MDAyNnBhcm0sIDAsIHNpemVvZihwYXJtKSk7XG5pbmNsdWRlL25ldC9pY21wLmg6NTQ6XHRfX2ljbXBfc2VuZChza2JfaW4sIHR5cGUsIGNvZGUsIGluZm8sIFx1MDAyNnBhcm0pO1xuaW5jbHVkZS9uZXQvaWNtcC5oLTU1LX1cbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTExNTY9c3RydWN0IG5ldG5zX2lwdnMge1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTI2My1cdGludFx0XHRcdHN5c2N0bF9zeW5jX3JldHJpZXM7XG5pbmNsdWRlL25ldC9pcF92cy5oOjEyNjQ6XHRpbnRcdFx0XHRzeXNjdGxfbmF0X2ljbXBfc2VuZDtcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTI2NS1cdGludFx0XHRcdHN5c2N0bF9wbXR1X2Rpc2M7XG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvaWNtcC5oLTEwLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvaWNtcC5oOjExOlRSQUNFX0VWRU5UKGljbXBfc2VuZCxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ljbXAuaC0xMi1cbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9pY21wLmgtNTktXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9pY21wLmg6NjA6XHRcdFRQX3ByaW50ayhcJiMzNDtpY21wX3NlbmQ6IHR5cGU9JWQsIGNvZGU9JWQuIEZyb20gJXBJNDoldSB0byAlcEk0OiV1IHVsZW49JWQgc2tiYWRkcj0lcFwmIzM0OyxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ljbXAuaC02MS1cdFx0XHRfX2VudHJ5LVx1MDAzZXR5cGUsIF9fZW50cnktXHUwMDNlY29kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MTAKCQkJCQkJCW91dHB1dDogMTA1CgkJCQkJCQl0aG91Z2h0czogMjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIElDTVAgUm91dGluZyBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIElDTVAgY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHJvdXRpbmcuIEkgc2VlIHRoYXQgYGljbXBfc2VuZGAgaXMgaW5saW5lZCwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgcGVyZm9ybWFuY2UsIGJ1dCB0aGUgYWN0dWFsLCBub24tc3RhdGljIGZ1bmN0aW9uIGV4cG9zZWQgaXMgYF9faWNtcF9zZW5kYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZSByZWFsIHdvcmssIHRoZSByb3V0aW5nIGxvb2t1cCBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGlzIGhhbmRsZWQgYnkgYGljbXBfcm91dGVfbG9va3VwYCwgYW5kIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBuZXQvaXB2NC9pY21wLmNgLgoKTm93LCBiZWZvcmUgSSBkaWcgZGVlcGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBBaCwgYENPTkZJR19JTkVUYCBsb29rcyBsaWtlIHRoZSBwcmltYXJ5IGVuYWJsZXIgZm9yIHRoYXQgZW50aXJlIGBuZXQvaXB2NC9pY21wLmNgIGZpbGUuIEdvdCBpdC4KCkxldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGUgc2V0dXAgZm9yIHRoaXMuICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgaXMgdHJ1ZSwgd2hpY2ggaXMgZ29vZCDigJMgYWx3YXlzIGEgZ29vZCBzaWduIHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmtpbmcgY29kZS4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGZpeGluZyBhIHJvdXRpbmcgYnVnIHdoZXJlIHVucmVhY2hhYmxlIHJvdXRlcyAoYFJUTl9VTlJFQUNIQUJMRWApIHdlcmVuJiMzOTt0IGJlaW5nIHByb3Blcmx5IGRpc2NhcmRlZCB3aGVuIHNlbmRpbmcgSUNNUCBlcnJvciBtZXNzYWdlcywgcGFydGljdWxhcmx5IHByZXZlbnRpbmcgdGhlIHVzZSBvZiBpbnZhbGlkIHJvdXRlcyB3aXRoIGBkc3Qub3V0cHV0ID0gaXBfcnRfYnVnYC4gSXQmIzM5O3MgYSBjb3JlIElQdjQgbmV0d29ya2luZyBjaGFuZ2UsIGFuZCBpdCYjMzk7cyBkaXJlY3RseSByZWFjaGFibGUuIFBlcmZlY3QuCgpUaGUgZm9jdXMgc3ltYm9scyBhcmUsIGFzIGV4cGVjdGVkLCBgaWNtcF9yb3V0ZV9sb29rdXBgIGFuZCBgX19pY21wX3NlbmRgLiBTbywgSSYjMzk7bGwgYmUgdGFyZ2V0aW5nIHRob3NlIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHkuIEFuZCwgb2YgY291cnNlLCBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfSU5FVGAgaXMgZW5hYmxlZC4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhpcyBpbmZvLiBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpY21wX3JvdXRlX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtfX2ljbXBfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcm91dGUgbG9va3VwIGxvZ2ljIGZvciBJQ01QIHNlbmRpbmcgaW4gaWNtcF9yb3V0ZV9sb29rdXAoKSB0byBwcm9wZXJseSByZWplY3Qgcm91dGVzIG9mIHR5cGUgUlROX1VOUkVBQ0hBQkxFIGluIGFkZGl0aW9uIHRvIFJUTl9MT0NBTC4gVGhpcyB0b3VjaGVzIGNvcmUgSVB2NCBJQ01QIHRyYW5zbWlzc2lvbiBsb2dpYyB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWNtcF9yb3V0ZV9sb29rdXAmIzM0OywKICAgICYjMzQ7X19pY21wX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJvdXRlIGxvb2t1cCBsb2dpYyBmb3IgSUNNUCBzZW5kaW5nIGluIGljbXBfcm91dGVfbG9va3VwKCkgdG8gcHJvcGVybHkgcmVqZWN0IHJvdXRlcyBvZiB0eXBlIFJUTl9VTlJFQUNIQUJMRSBpbiBhZGRpdGlvbiB0byBSVE5fTE9DQUwuIFRoaXMgdG91Y2hlcyBjb3JlIElQdjQgSUNNUCB0cmFuc21pc3Npb24gbG9naWMgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTU6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNTo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpY21wX3JvdXRlX2xvb2t1cCgpYCBpbiBgbmV0L2lwdjQvaWNtcC5jYCB0byByZWplY3QgYFJUTl9VTlJFQUNIQUJMRWAgcm91dGVzIGluIGFkZGl0aW9uIHRvIGBSVE5fTE9DQUxgIHJvdXRlcywgcHJldmVudGluZyB0aGUgdXNlIG9mIHJvdXRlcyB3aXRoIGBkc3Qub3V0cHV0ID0gaXBfcnRfYnVnYCB3aGVuIHRyYW5zbWl0dGluZyBJQ01QIG1lc3NhZ2VzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSByb3V0aW5nIGFuZCBlcnJvci1oYW5kbGluZyBsb2dpYyBmaXguIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMuIEFueSBidWdzIHJlbGF0ZWQgdG8gZXhlY3V0aW5nIGludmFsaWQgcm91dGUgb3V0cHV0IGZ1bmN0aW9ucyBvciByZWZlcmVuY2UgY291bnRpbmcvbWVtb3J5IHNhZmV0eSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZDBhYTU1YjUxYTNkZDNiZDIzMmRmNjNlZjZmNjZjNWVlMDJlYzRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTU6NDc6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggMGNhZWRmYzdjYTkyZi4uOTBjMGUyMmMyOWJlYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtNTgxLDE2ICYjNDM7NTgxLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJc2tiX2RzdHJlZl9yZXN0b3JlKHNrYl9pbiwgb3JlZmRzdCk7CiAKIAkJLyoKLQkJICogQXQgdGhpcyBwb2ludCwgZmw0X2RlYy5kYWRkciBzaG91bGQgTk9UIGJlIGxvY2FsICh3ZQotCQkgKiBjaGVja2VkIGZsNF9kZWMuc2FkZHIgYWJvdmUpLiBIb3dldmVyLCBhIHJhY2UgY29uZGl0aW9uCi0JCSAqIG1heSBvY2N1ciBpZiB0aGUgYWRkcmVzcyBpcyBhZGRlZCB0byB0aGUgaW50ZXJmYWNlCi0JCSAqIGNvbmN1cnJlbnRseS4gSW4gdGhhdCBjYXNlLCBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYQotCQkgKiBMT0NBTCByb3V0ZSB3aXRoIGRzdC5vdXRwdXQ9aXBfcnRfYnVnLCB3aGljaCBtdXN0IG5vdAotCQkgKiBiZSB1c2VkIGZvciBvdXRwdXQuCiYjNDM7CQkgKiBmbDRfZGVjLmRhZGRyIGlzIG5vdCBleHBlY3RlZCB0byBiZSBsb2NhbCBoZXJlLCBidXQgaXQgY2FuIGJlCiYjNDM7CQkgKiBhZGRlZCB0byBhbiBpbnRlcmZhY2UgY29uY3VycmVudGx5LCBpbiB3aGljaCBjYXNlCiYjNDM7CQkgKiBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYSBMT0NBTCByb3V0ZS4gSXQgY2FuIGFsc28gZmFpbCB0bwomIzQzOwkJICogYnVpbGQgYSBmb3J3YXJkaW5nIHJvdXRlIHRvd2FyZHMgZmw0X2RlYy5kYWRkciwgZm9yIGV4YW1wbGUsCiYjNDM7CQkgKiB3aGVuIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQsIGFuZCByZXR1cm4gYW4gVU5SRUFDSEFCTEUgcm91dGUuCiYjNDM7CQkgKiBCb3RoIGNhc2VzIHdpbGwgcmVzdWx0IGluIGEgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1ZywKJiM0MzsJCSAqIHdoaWNoIG11c3Qgbm90IGJlIHVzZWQgZm9yIG91dHB1dC4KIAkJICovCi0JCWlmICghZXJyICZhbXA7JmFtcDsgcnQyICZhbXA7JmFtcDsgcnQyLSZndDtydF90eXBlID09IFJUTl9MT0NBTCkgewomIzQzOwkJaWYgKCFlcnIgJmFtcDsmYW1wOyBydDIgJmFtcDsmYW1wOyBydDItJmd0O3J0X3R5cGUgPT0gUlROX0xPQ0FMKQogCQkJbmV0X3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtkZXRlY3RlZCBsb2NhbCByb3V0ZSBmb3IgJXBJNCBkdXJpbmcgSUNNUCBzZW5kaW5nLCBzcmMgJXBJNFxuJiMzNDssCiAJCQkJCSAgICAgJmFtcDtmbDRfZGVjLmRhZGRyLCAmYW1wO2ZsNF9kZWMuc2FkZHIpOwomIzQzOwkJaWYgKCFlcnIgJmFtcDsmYW1wOyBydDIgJmFtcDsmYW1wOwomIzQzOwkJICAgIChydDItJmd0O3J0X3R5cGUgPT0gUlROX0xPQ0FMIHx8IHJ0Mi0mZ3Q7cnRfdHlwZSA9PSBSVE5fVU5SRUFDSEFCTEUpKSB7CiAJCQlkc3RfcmVsZWFzZSgmYW1wO3J0Mi0mZ3Q7ZHN0KTsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gSUNNUCBSb3V0aW5nIExvZ2ljKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgYGljbXBfcm91dGVfbG9va3VwYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY0L2ljbXAuY2AuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byBob3cgSUNNUCBwYWNrZXRzIGFyZSByb3V0ZWQgaW4gdGhlIElQdjQgc3RhY2suIE15IGltbWVkaWF0ZSBpbmNsaW5hdGlvbiBpcyB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBtb2RpZmljYXRpb24uIFdoYXQgc3BlY2lmaWMgSUNNUCByb3V0aW5nIGJlaGF2aW9yIGlzIGJlaW5nIHRhcmdldGVkPyBJcyB0aGlzIGFib3V0IGhhbmRsaW5nIHJlZGlyZWN0cywgcmF0ZSBsaW1pdGluZywgZXJyb3IgcmVwb3J0aW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KClRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgYGljbXBfcm91dGVfbG9va3VwYCB3aXRoaW4gYG5ldC9pcHY0L2ljbXAuY2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzOiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBpY21wX3JvdXRlX2xvb2t1cGA/IFdoYXQgdmFyaWFibGVzIGFyZSBwYXNzZWQgdG8gaXQgYW5kIHdoYXQgYXJlIHRoZWlyIG1lYW5pbmdzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlPyBIb3cgaXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgaWNtcF9yb3V0ZV9sb29rdXBgIGJlaW5nIHVzZWQ/IEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgdGhpcyBmdW5jdGlvbiB0byBmdWxseSBncmFzcCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4gVGhpcyBkZWVwIGRpdmUgaW50byB0aGUgY29kZSB3aWxsIHJldmVhbCB0aGUgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY2hhbmdlcyBhbmQgYWxsb3cgbWUgdG8gZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhIG1pbm9yIHR3ZWFrLCBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQsIG9yIHNvbWV0aGluZyBpbiBiZXR3ZWVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2ljbXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTUwOlx0XHR9IGVsc2Uge1xuIDU1MTpcdFx0XHRzdHJ1Y3QgZmxvd2k0IGZsNF8yID0gZmw0X2RlYztcbiA1NTI6XHRcdFx0dW5zaWduZWQgbG9uZyBvcmVmZHN0O1xuIDU1MzpcdFxuIDU1NDpcdFx0XHRzd2FwKGZsNF8yLmRhZGRyLCBmbDRfMi5zYWRkcik7XG4gNTU1Olx0XHRcdHN3aXRjaCAoZmw0XzIuZmxvd2k0X3Byb3RvKSB7XG4gNTU2Olx0XHRcdGNhc2UgSVBQUk9UT19UQ1A6XG4gNTU3Olx0XHRcdGNhc2UgSVBQUk9UT19VRFA6XG4gNTU4Olx0XHRcdGNhc2UgSVBQUk9UT19TQ1RQOlxuIDU1OTpcdFx0XHRjYXNlIElQUFJPVE9fRENDUDpcbiA1NjA6XHRcdFx0XHRzd2FwKGZsNF8yLmZsNF9zcG9ydCwgZmw0XzIuZmw0X2Rwb3J0KTtcbiA1NjE6XHRcdFx0XHRicmVhaztcbiA1NjI6XHRcdFx0fVxuIDU2MzpcdFxuIDU2NDpcdFx0XHRmbDRfMi5mbG93aTRfb2lmID0gbDNtZGV2X21hc3Rlcl9pZmluZGV4KHJvdXRlX2xvb2t1cF9kZXYpO1xuIDU2NTpcdFx0XHRmbDRfMi5mbG93aTRfZmxhZ3MgfD0gRkxPV0lfRkxBR19BTllTUkM7XG4gNTY2Olx0XG4gNTY3Olx0XHRcdHJ0MiA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFx1MDAyNmZsNF8yKTtcbiA1Njg6XHRcdFx0aWYgKElTX0VSUihydDIpKSB7XG4gNTY5Olx0XHRcdFx0ZXJyID0gUFRSX0VSUihydDIpO1xuIDU3MDpcdFx0XHRcdGdvdG8gcmVsb29rdXBfZmFpbGVkO1xuIDU3MTpcdFx0XHR9XG4gNTcyOlx0XHRcdC8qIFVnaCEgKi9cbiA1NzM6XHRcdFx0b3JlZmRzdCA9IHNrYl9kc3RyZWZfc3RlYWwoc2tiX2luKTtcbiA1NzQ6XHRcdFx0ZXJyID0gaXBfcm91dGVfaW5wdXQoc2tiX2luLCBmbDRfZGVjLmRhZGRyLCBmbDRfZGVjLnNhZGRyLFxuIDU3NTpcdFx0XHRcdFx0ICAgICBkc2NwLCBydDItXHUwMDNlZHN0LmRldikgPyAtRUlOVkFMIDogMDtcbiA1NzY6XHRcbiA1Nzc6XHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2cnQyLVx1MDAzZWRzdCk7XG4gNTc4Olx0XHRcdHJ0MiA9IHNrYl9ydGFibGUoc2tiX2luKTtcbiA1Nzk6XHRcdFx0Lyogc3RlYWwgZHN0IGVudHJ5IGZyb20gc2tiX2luLCBkb24mIzM5O3QgZHJvcCByZWZjbnQgKi9cbiA1ODA6XHRcdFx0c2tiX2RzdHJlZl9zdGVhbChza2JfaW4pO1xuIDU4MTpcdFx0XHRza2JfZHN0cmVmX3Jlc3RvcmUoc2tiX2luLCBvcmVmZHN0KTtcbiA1ODI6XHRcbiA1ODM6XHRcdFx0LypcbiA1ODQ6XHRcdFx0ICogZmw0X2RlYy5kYWRkciBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgbG9jYWwgaGVyZSwgYnV0IGl0IGNhbiBiZVxuIDU4NTpcdFx0XHQgKiBhZGRlZCB0byBhbiBpbnRlcmZhY2UgY29uY3VycmVudGx5LCBpbiB3aGljaCBjYXNlXG4gNTg2Olx0XHRcdCAqIGlwX3JvdXRlX2lucHV0KCkgcmV0dXJucyBhIExPQ0FMIHJvdXRlLiBJdCBjYW4gYWxzbyBmYWlsIHRvXG4gNTg3Olx0XHRcdCAqIGJ1aWxkIGEgZm9yd2FyZGluZyByb3V0ZSB0b3dhcmRzIGZsNF9kZWMuZGFkZHIsIGZvciBleGFtcGxlLFxuIDU4ODpcdFx0XHQgKiB3aGVuIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQsIGFuZCByZXR1cm4gYW4gVU5SRUFDSEFCTEUgcm91dGUuXG4gNTg5Olx0XHRcdCAqIEJvdGggY2FzZXMgd2lsbCByZXN1bHQgaW4gYSByb3V0ZSB3aXRoIGRzdC5vdXRwdXQ9aXBfcnRfYnVnLFxuIDU5MDpcdFx0XHQgKiB3aGljaCBtdXN0IG5vdCBiZSB1c2VkIGZvciBvdXRwdXQuXG4gNTkxOlx0XHRcdCAqL1xuIDU5MjpcdFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcnQyIFx1MDAyNlx1MDAyNiBydDItXHUwMDNlcnRfdHlwZSA9PSBSVE5fTE9DQUwpXG4gNTkzOlx0XHRcdFx0bmV0X3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7ZGV0ZWN0ZWQgbG9jYWwgcm91dGUgZm9yICVwSTQgZHVyaW5nIElDTVAgc2VuZGluZywgc3JjICVwSTRcXG5cJiMzNDssXG4gNTk0Olx0XHRcdFx0XHRcdCAgICAgXHUwMDI2Zmw0X2RlYy5kYWRkciwgXHUwMDI2Zmw0X2RlYy5zYWRkcik7XG4gNTk1Olx0XHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBydDIgXHUwMDI2XHUwMDI2XG4gNTk2Olx0XHRcdCAgICAocnQyLVx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMIHx8IHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9VTlJFQUNIQUJMRSkpIHtcbiA1OTc6XHRcdFx0XHRkc3RfcmVsZWFzZShcdTAwMjZydDItXHUwMDNlZHN0KTtcbiA1OTg6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDU5OTpcdFx0XHR9XG4gNjAwOlx0XHR9XG4gNjAxOlx0XG4gNjAyOlx0XHRpZiAoZXJyKVxuIDYwMzpcdFx0XHRnb3RvIHJlbG9va3VwX2ZhaWxlZDtcbiA2MDQ6XHRcbiA2MDU6XHRcdGRzdDIgPSB4ZnJtX2xvb2t1cChuZXQsIFx1MDAyNnJ0Mi1cdTAwM2Vkc3QsIGZsb3dpNF90b19mbG93aShcdTAwMjZmbDRfZGVjKSwgTlVMTCxcbiA2MDY6XHRcdFx0XHQgICBYRlJNX0xPT0tVUF9JQ01QKTtcbiA2MDc6XHRcdHJ0MiA9IGRzdF9ydGFibGUoZHN0Mik7XG4gNjA4Olx0XHRpZiAoIUlTX0VSUihkc3QyKSkge1xuIDYwOTpcdFx0XHRkc3RfcmVsZWFzZShcdTAwMjZydC1cdTAwM2Vkc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODY0CgkJCQkJCQlvdXRwdXQ6IDE3NwoJCQkJCQkJdGhvdWdodHM6IDM2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElDTVAgUm91dGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaC4gSXQgYXBwZWFycyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIGluIGBpY21wX3JvdXRlX2xvb2t1cCgpYCB3aGVyZSwgd2hlbiB0aGUgcm91dGluZyBsb29rdXAgZm9yIElDTVAgc2VuZGluZyBmYWlscyBhbmQgcmV0dXJucyBhbiB1bnJlYWNoYWJsZSByb3V0ZSAoc3BlY2lmaWNhbGx5IGBSVE5fVU5SRUFDSEFCTEVgKSwgdGhlIGNvZGUgaW5jb3JyZWN0bHkgc2V0cyBgZHN0Lm91dHB1dGAgdG8gYGlwX3J0X2J1Z2AuIFRoaXMgY2FuIGxlYWQgdG8gY3Jhc2hlcyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHRyaWdnZXIgd2FybmluZ3Mgb3IgYnVncyB3aGVuIHRoZSBrZXJuZWwgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgaW52YWxpZCBvdXRwdXQuIFRoaXMgaXMgYSBjbGFzc2ljIGVycm9yIGNvbmRpdGlvbiwgYW5kIGl0IG5lZWRzIHRvIGJlIGFkZHJlc3NlZC4KClRoZSBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGFkZGluZyBhIGNoZWNrOiBgfHwgcnQyLSZndDtydF90eXBlID09IFJUTl9VTlJFQUNIQUJMRWAgdG8gdGhlIGNvbmRpdGlvbiB0aGF0IHJlbGVhc2VzIGBydDItJmd0O2RzdGAgYW5kIHNldHMgYGVyciA9IC1FSU5WQUxgLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgZXhwbGljaXRseSBoYW5kbGluZyB0aGUgYFJUTl9VTlJFQUNIQUJMRWAgY2FzZSB0byBwcmV2ZW50IHRoZSBiYWQgYGlwX3J0X2J1Z2AgYXNzaWdubWVudC4KCk5vdywgSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBpc3N1ZXMuIE15IHByaW1hcnkgY29uY2VybiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIHNlZToKCiogICBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zPyBHb29kLgoqICAgTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IEV4Y2VsbGVudC4KKiAgIE5vIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2U/IFJlYXNzdXJpbmcuCiogICBObyBzdHJ1Y3R1cmUgY29waWVzIGFjcm9zcyBib3VuZGFyaWVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24/IEZpbmUuCgpUaGUgcGF0Y2ggaXMgb25seSBkZWFsaW5nIHdpdGggYW4gZXhpc3RpbmcsIGluaXRpYWxpemVkIHJvdXRpbmcgdGFibGUgc3RydWN0LCByZWxlYXNpbmcgdGhlIGBkc3RgLCBhbmQgc2V0dGluZyBhbiBlcnJvciBjb2RlLiBGcm9tIGEgbWVtb3J5IHNhZmV0eSBzdGFuZHBvaW50LCBpdCYjMzk7cyBsb29raW5nIGNsZWFuLgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIEtNU0FOLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGlzIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgS01TQU4tcmVsYXRlZCBpc3N1ZXMuIEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIGFuZCBwb3RlbnRpYWwgaW5mbyBsZWFrcywgcmlnaHQ/IFdlbGwsIGFsbCB0aGUgdmFyaWFibGVzIGludm9sdmVkIChgZXJyYCwgYHJ0MmAsIGV0Yy4pIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgbWFuYWdlZCB0aHJvdWdob3V0IHRoZSBleGVjdXRpb24gb2YgdGhpcyBzZWN0aW9uIG9mIGNvZGUuIFRoaXMgcGF0Y2ggaXMgc2ltcGx5IGZpeGluZyBhIGxvZ2ljYWwgZXJyb3IsIGFuIGVycm9yIGNvbmRpdGlvbiB3aGVyZSB0aGUgYFJUTl9VTlJFQUNIQUJMRWAgcm91dGUgd2FzIGxlYWRpbmcgdG8gdGhlIGV4ZWN1dGlvbiBvZiBgaXBfcnRfYnVnYCwgd2hpY2ggd291bGQgdHJpZ2dlciBrZXJuZWwgd2FybmluZ3MgYW5kIGJ1Z3MsIG9yIHBvdGVudGlhbGx5IGNhdXNlIHJvdXRpbmcgbG9naWMgaXNzdWVzIHRoYXQgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOL3N0YW5kYXJkIHNhbml0aXplcnMgb3IgdHJpZ2dlciBhIGtlcm5lbCBwYW5pYy4gSW4gZmFjdCwgaWYgbm90IGZvciB0aGUgZml4LCB3ZSBtaWdodCBzZWUgS0FTQU4gb3IgYW5vdGhlciBzYW5pdGl6ZXIgZmxhZ2dpbmcgdGhpcyBpc3N1ZS4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGlzIHB1cmVseSBhIGxvZ2ljIGVycm9yIGZpeCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayB2dWxuZXJhYmlsaXRpZXMsICYjMzQ7TmVlZHNLTVNBTiYjMzQ7IHNob3VsZCBkZWZpbml0aXZlbHkgYmUgYGZhbHNlYC4gVGhlIGNvcmUgb2YgdGhlIGJ1ZyB3ZSBhcmUgZml4aW5nIGlzIGEgbG9naWMgZXJyb3IgdGhhdCBjYXVzZXMgaW52YWxpZCByb3V0aW5nIG91dHB1dCwgd2hpY2ggd291bGQgdHJpZ2dlciBrZXJuZWwgd2FybmluZ3MgLyBidWdzIG9yIHJvdXRpbmcgbG9naWMgaXNzdWVzIGNhdWdodCBieSBLQVNBTiAvIHN0YW5kYXJkIHNhbml0aXplcnMgLyBwYW5pYy4gS01TQU4gd291bGQgbm90IGJlIHVzZWZ1bCBoZXJlLiBLTVNBTiYjMzk7cyBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gY2F0Y2ggdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiB3aWxsIGxpa2VseSBjYXRjaCB0aGUgYnVnIHRoYXQgaXMgcHJlc2VudCB3aXRob3V0IHRoZSBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpY21wX3JvdXRlX2xvb2t1cCgpYCBpbiBgbmV0L2lwdjQvaWNtcC5jYCB0byByZWplY3QgYFJUTl9VTlJFQUNIQUJMRWAgcm91dGVzIGluIGFkZGl0aW9uIHRvIGBSVE5fTE9DQUxgIHJvdXRlcywgcHJldmVudGluZyB0aGUgdXNlIG9mIHJvdXRlcyB3aXRoIGBkc3Qub3V0cHV0ID0gaXBfcnRfYnVnYCB3aGVuIHRyYW5zbWl0dGluZyBJQ01QIG1lc3NhZ2VzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSByb3V0aW5nIGFuZCBlcnJvci1oYW5kbGluZyBsb2dpYyBmaXguIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMuIEFueSBidWdzIHJlbGF0ZWQgdG8gZXhlY3V0aW5nIGludmFsaWQgcm91dGUgb3V0cHV0IGZ1bmN0aW9ucyBvciByZWZlcmVuY2UgY291bnRpbmcvbWVtb3J5IHNhZmV0eSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaWNtcF9yb3V0ZV9sb29rdXAoKWAgaW4gYG5ldC9pcHY0L2ljbXAuY2AgdG8gcmVqZWN0IGBSVE5fVU5SRUFDSEFCTEVgIHJvdXRlcyBpbiBhZGRpdGlvbiB0byBgUlROX0xPQ0FMYCByb3V0ZXMsIHByZXZlbnRpbmcgdGhlIHVzZSBvZiByb3V0ZXMgd2l0aCBgZHN0Lm91dHB1dCA9IGlwX3J0X2J1Z2Agd2hlbiB0cmFuc21pdHRpbmcgSUNNUCBtZXNzYWdlcy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgcm91dGluZyBhbmQgZXJyb3ItaGFuZGxpbmcgbG9naWMgZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciBvcGVyYXRpb25zIG9uIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9idWZmZXJzLiBBbnkgYnVncyByZWxhdGVkIHRvIGV4ZWN1dGluZyBpbnZhbGlkIHJvdXRlIG91dHB1dCBmdW5jdGlvbnMgb3IgcmVmZXJlbmNlIGNvdW50aW5nL21lbW9yeSBzYWZldHkgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0Nzo0OC4wMjY0MDgwOTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzAyNDE4ODA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWNtcF9yb3V0ZV9sb29rdXBcIixcbiAgICBcIl9faWNtcF9zZW5kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaWNtcF9yb3V0ZV9sb29rdXAoKWAgaW4gYG5ldC9pcHY0L2ljbXAuY2AgdG8gcmVqZWN0IGBSVE5fVU5SRUFDSEFCTEVgIHJvdXRlcyBpbiBhZGRpdGlvbiB0byBgUlROX0xPQ0FMYCByb3V0ZXMsIHByZXZlbnRpbmcgdGhlIHVzZSBvZiByb3V0ZXMgd2l0aCBgZHN0Lm91dHB1dCA9IGlwX3J0X2J1Z2Agd2hlbiB0cmFuc21pdHRpbmcgSUNNUCBtZXNzYWdlcy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSByb3V0aW5nIGFuZCBlcnJvci1oYW5kbGluZyBsb2dpYyBmaXguIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMuIEFueSBidWdzIHJlbGF0ZWQgdG8gZXhlY3V0aW5nIGludmFsaWQgcm91dGUgb3V0cHV0IGZ1bmN0aW9ucyBvciByZWZlcmVuY2UgY291bnRpbmcvbWVtb3J5IHNhZmV0eSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJvdXRlIGxvb2t1cCBsb2dpYyBmb3IgSUNNUCBzZW5kaW5nIGluIGljbXBfcm91dGVfbG9va3VwKCkgdG8gcHJvcGVybHkgcmVqZWN0IHJvdXRlcyBvZiB0eXBlIFJUTl9VTlJFQUNIQUJMRSBpbiBhZGRpdGlvbiB0byBSVE5fTE9DQUwuIFRoaXMgdG91Y2hlcyBjb3JlIElQdjQgSUNNUCB0cmFuc21pc3Npb24gbG9naWMgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDc6NDguMDI2NDEzNzY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkwNzMwNTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWQwYWE1NWI1MWEzZGQzYmQyMzJkZjYzZWY2ZjY2YzVlZTAyZWM0YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNTo0Nzo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmNcXG5pbmRleCAwY2FlZGZjN2NhOTJmLi45MGMwZTIyYzI5YmVhIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2ljbXAuY1xcbisrKyBiL25ldC9pcHY0L2ljbXAuY1xcbkBAIC01ODEsMTYgKzU4MSwxOSBAQCBzdGF0aWMgc3RydWN0IHJ0YWJsZSAqaWNtcF9yb3V0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuIFxcdFxcdHNrYl9kc3RyZWZfcmVzdG9yZShza2JfaW4sIG9yZWZkc3QpO1xcbiBcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogQXQgdGhpcyBwb2ludCwgZmw0X2RlYy5kYWRkciBzaG91bGQgTk9UIGJlIGxvY2FsICh3ZVxcbi1cXHRcXHQgKiBjaGVja2VkIGZsNF9kZWMuc2FkZHIgYWJvdmUpLiBIb3dldmVyLCBhIHJhY2UgY29uZGl0aW9uXFxuLVxcdFxcdCAqIG1heSBvY2N1ciBpZiB0aGUgYWRkcmVzcyBpcyBhZGRlZCB0byB0aGUgaW50ZXJmYWNlXFxuLVxcdFxcdCAqIGNvbmN1cnJlbnRseS4gSW4gdGhhdCBjYXNlLCBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYVxcbi1cXHRcXHQgKiBMT0NBTCByb3V0ZSB3aXRoIGRzdC5vdXRwdXQ9aXBfcnRfYnVnLCB3aGljaCBtdXN0IG5vdFxcbi1cXHRcXHQgKiBiZSB1c2VkIGZvciBvdXRwdXQuXFxuK1xcdFxcdCAqIGZsNF9kZWMuZGFkZHIgaXMgbm90IGV4cGVjdGVkIHRvIGJlIGxvY2FsIGhlcmUsIGJ1dCBpdCBjYW4gYmVcXG4rXFx0XFx0ICogYWRkZWQgdG8gYW4gaW50ZXJmYWNlIGNvbmN1cnJlbnRseSwgaW4gd2hpY2ggY2FzZVxcbitcXHRcXHQgKiBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYSBMT0NBTCByb3V0ZS4gSXQgY2FuIGFsc28gZmFpbCB0b1xcbitcXHRcXHQgKiBidWlsZCBhIGZvcndhcmRpbmcgcm91dGUgdG93YXJkcyBmbDRfZGVjLmRhZGRyLCBmb3IgZXhhbXBsZSxcXG4rXFx0XFx0ICogd2hlbiBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCBhbmQgcmV0dXJuIGFuIFVOUkVBQ0hBQkxFIHJvdXRlLlxcbitcXHRcXHQgKiBCb3RoIGNhc2VzIHdpbGwgcmVzdWx0IGluIGEgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1ZyxcXG4rXFx0XFx0ICogd2hpY2ggbXVzdCBub3QgYmUgdXNlZCBmb3Igb3V0cHV0LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgcnQyIFxcdTAwMjZcXHUwMDI2IHJ0Mi1cXHUwMDNlcnRfdHlwZSA9PSBSVE5fTE9DQUwpIHtcXG4rXFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgcnQyIFxcdTAwMjZcXHUwMDI2IHJ0Mi1cXHUwMDNlcnRfdHlwZSA9PSBSVE5fTE9DQUwpXFxuIFxcdFxcdFxcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFxcXCJkZXRlY3RlZCBsb2NhbCByb3V0ZSBmb3IgJXBJNCBkdXJpbmcgSUNNUCBzZW5kaW5nLCBzcmMgJXBJNFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Zmw0X2RlYy5kYWRkciwgXFx1MDAyNmZsNF9kZWMuc2FkZHIpO1xcbitcXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBydDIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChydDItXFx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMIHx8IHJ0Mi1cXHUwMDNlcnRfdHlwZSA9PSBSVE5fVU5SRUFDSEFCTEUpKSB7XFxuIFxcdFxcdFxcdGRzdF9yZWxlYXNlKFxcdTAwMjZydDItXFx1MDAzZWRzdCk7XFxuIFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDc6NDkuNjE3OTM3MDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ3ODAyNjgzMjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpY21wX3JvdXRlX2xvb2t1cFwiLFxuICAgIFwiX19pY21wX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcm91dGUgbG9va3VwIGxvZ2ljIGZvciBJQ01QIHNlbmRpbmcgaW4gaWNtcF9yb3V0ZV9sb29rdXAoKSB0byBwcm9wZXJseSByZWplY3Qgcm91dGVzIG9mIHR5cGUgUlROX1VOUkVBQ0hBQkxFIGluIGFkZGl0aW9uIHRvIFJUTl9MT0NBTC4gVGhpcyB0b3VjaGVzIGNvcmUgSVB2NCBJQ01QIHRyYW5zbWlzc2lvbiBsb2dpYyB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFkMGFhNTViNTFhM2RkM2JkMjMyZGY2M2VmNmY2NmM1ZWUwMmVjNGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxNTo0Nzo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ljbXAuYyBiL25ldC9pcHY0L2ljbXAuY1xuaW5kZXggMGNhZWRmYzdjYTkyZi4uOTBjMGUyMmMyOWJlYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2ljbXAuY1xuKysrIGIvbmV0L2lwdjQvaWNtcC5jXG5AQCAtNTgxLDE2ICs1ODEsMTkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKmljbXBfcm91dGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxuIFx0XHRza2JfZHN0cmVmX3Jlc3RvcmUoc2tiX2luLCBvcmVmZHN0KTtcbiBcbiBcdFx0Lypcbi1cdFx0ICogQXQgdGhpcyBwb2ludCwgZmw0X2RlYy5kYWRkciBzaG91bGQgTk9UIGJlIGxvY2FsICh3ZVxuLVx0XHQgKiBjaGVja2VkIGZsNF9kZWMuc2FkZHIgYWJvdmUpLiBIb3dldmVyLCBhIHJhY2UgY29uZGl0aW9uXG4tXHRcdCAqIG1heSBvY2N1ciBpZiB0aGUgYWRkcmVzcyBpcyBhZGRlZCB0byB0aGUgaW50ZXJmYWNlXG4tXHRcdCAqIGNvbmN1cnJlbnRseS4gSW4gdGhhdCBjYXNlLCBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYVxuLVx0XHQgKiBMT0NBTCByb3V0ZSB3aXRoIGRzdC5vdXRwdXQ9aXBfcnRfYnVnLCB3aGljaCBtdXN0IG5vdFxuLVx0XHQgKiBiZSB1c2VkIGZvciBvdXRwdXQuXG4rXHRcdCAqIGZsNF9kZWMuZGFkZHIgaXMgbm90IGV4cGVjdGVkIHRvIGJlIGxvY2FsIGhlcmUsIGJ1dCBpdCBjYW4gYmVcbitcdFx0ICogYWRkZWQgdG8gYW4gaW50ZXJmYWNlIGNvbmN1cnJlbnRseSwgaW4gd2hpY2ggY2FzZVxuK1x0XHQgKiBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYSBMT0NBTCByb3V0ZS4gSXQgY2FuIGFsc28gZmFpbCB0b1xuK1x0XHQgKiBidWlsZCBhIGZvcndhcmRpbmcgcm91dGUgdG93YXJkcyBmbDRfZGVjLmRhZGRyLCBmb3IgZXhhbXBsZSxcbitcdFx0ICogd2hlbiBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCBhbmQgcmV0dXJuIGFuIFVOUkVBQ0hBQkxFIHJvdXRlLlxuK1x0XHQgKiBCb3RoIGNhc2VzIHdpbGwgcmVzdWx0IGluIGEgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1ZyxcbitcdFx0ICogd2hpY2ggbXVzdCBub3QgYmUgdXNlZCBmb3Igb3V0cHV0LlxuIFx0XHQgKi9cbi1cdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJ0MiBcdTAwMjZcdTAwMjYgcnQyLVx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMKSB7XG4rXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBydDIgXHUwMDI2XHUwMDI2IHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9MT0NBTClcbiBcdFx0XHRuZXRfd2Fybl9yYXRlbGltaXRlZChcImRldGVjdGVkIGxvY2FsIHJvdXRlIGZvciAlcEk0IGR1cmluZyBJQ01QIHNlbmRpbmcsIHNyYyAlcEk0XFxuXCIsXG4gXHRcdFx0XHRcdCAgICAgXHUwMDI2Zmw0X2RlYy5kYWRkciwgXHUwMDI2Zmw0X2RlYy5zYWRkcik7XG4rXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBydDIgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAocnQyLVx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMIHx8IHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9VTlJFQUNIQUJMRSkpIHtcbiBcdFx0XHRkc3RfcmVsZWFzZShcdTAwMjZydDItXHUwMDNlZHN0KTtcbiBcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0Nzo0OS42MTc5MzkxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkyODc1MDQyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIGFuYWx5c2lzOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBJQ01QIFBhdGNoKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgZm9jdXMgaXMgb24gdGhpcyBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYG5ldC9pcHY0L2ljbXAuY2AgYW5kIHNwZWNpZmljYWxseSB0aGUgYGljbXBfcm91dGVfbG9va3VwKClgIGZ1bmN0aW9uLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBmaXJzdCBpbnN0aW5jdCwgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLCBpcyB0byBncmFiIHRoZSBtb2RpZmllZCBmaWxlLCBgbmV0L2lwdjQvaWNtcC5jYC4gU2luY2UgSSBoYXZlIGl0IGxvY2FsbHksIEknbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCAtICBwcm9iYWJseSB0aGUgbGF0dGVyIHRvIGdldCBhIGNsZWFuIHZpZXcgb2YgdGhlIGNvZGUuIFRoaXMgZ2l2ZXMgYSBjbGVhcmVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWNzIG9mICpob3cqIGBpY21wX3JvdXRlX2xvb2t1cCgpYCBpcyBiZWluZyBtb2RpZmllZC4gQXJlIHRoZXkgYWRkaW5nIG5ldyBsb2dpYywgY2hhbmdpbmcgZXhpc3RpbmcgY29uZGl0aW9ucywgb3IgY29tcGxldGVseSByZXdyaXRpbmcgaXQ/IFRoZSBkaWZmIGl0c2VsZiB3aWxsIGJlIGNydWNpYWwgaW4gaGlnaGxpZ2h0aW5nIHRoZSBhZmZlY3RlZCBhcmVhcy4gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIGxhcmdlciBJQ01QIGltcGxlbWVudGF0aW9uLiBUaGlzIGxldHMgbWUgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoIGFjcm9zcyB0aGUgYnJvYWRlciBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjQ3OjU4LjkwNTQ0NjkzNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pY21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTYwOlxcdFxcdFxcdFxcdHN3YXAoZmw0XzIuZmw0X3Nwb3J0LCBmbDRfMi5mbDRfZHBvcnQpO1xcbiA1NjE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU2MjpcXHRcXHRcXHR9XFxuIDU2MzpcXHRcXG4gNTY0OlxcdFxcdFxcdGZsNF8yLmZsb3dpNF9vaWYgPSBsM21kZXZfbWFzdGVyX2lmaW5kZXgocm91dGVfbG9va3VwX2Rldik7XFxuIDU2NTpcXHRcXHRcXHRmbDRfMi5mbG93aTRfZmxhZ3MgfD0gRkxPV0lfRkxBR19BTllTUkM7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdFxcdHJ0MiA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFxcdTAwMjZmbDRfMik7XFxuIDU2ODpcXHRcXHRcXHRpZiAoSVNfRVJSKHJ0MikpIHtcXG4gNTY5OlxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIocnQyKTtcXG4gNTcwOlxcdFxcdFxcdFxcdGdvdG8gcmVsb29rdXBfZmFpbGVkO1xcbiA1NzE6XFx0XFx0XFx0fVxcbiA1NzI6XFx0XFx0XFx0LyogVWdoISAqL1xcbiA1NzM6XFx0XFx0XFx0b3JlZmRzdCA9IHNrYl9kc3RyZWZfc3RlYWwoc2tiX2luKTtcXG4gNTc0OlxcdFxcdFxcdGVyciA9IGlwX3JvdXRlX2lucHV0KHNrYl9pbiwgZmw0X2RlYy5kYWRkciwgZmw0X2RlYy5zYWRkcixcXG4gNTc1OlxcdFxcdFxcdFxcdFxcdCAgICAgZHNjcCwgcnQyLVxcdTAwM2Vkc3QuZGV2KSA/IC1FSU5WQUwgOiAwO1xcbiA1NzY6XFx0XFxuIDU3NzpcXHRcXHRcXHRkc3RfcmVsZWFzZShcXHUwMDI2cnQyLVxcdTAwM2Vkc3QpO1xcbiA1Nzg6XFx0XFx0XFx0cnQyID0gc2tiX3J0YWJsZShza2JfaW4pO1xcbiA1Nzk6XFx0XFx0XFx0Lyogc3RlYWwgZHN0IGVudHJ5IGZyb20gc2tiX2luLCBkb24ndCBkcm9wIHJlZmNudCAqL1xcbiA1ODA6XFx0XFx0XFx0c2tiX2RzdHJlZl9zdGVhbChza2JfaW4pO1xcbiA1ODE6XFx0XFx0XFx0c2tiX2RzdHJlZl9yZXN0b3JlKHNrYl9pbiwgb3JlZmRzdCk7XFxuIDU4MjpcXHRcXG4gNTgzOlxcdFxcdFxcdC8qXFxuIDU4NDpcXHRcXHRcXHQgKiBmbDRfZGVjLmRhZGRyIGlzIG5vdCBleHBlY3RlZCB0byBiZSBsb2NhbCBoZXJlLCBidXQgaXQgY2FuIGJlXFxuIDU4NTpcXHRcXHRcXHQgKiBhZGRlZCB0byBhbiBpbnRlcmZhY2UgY29uY3VycmVudGx5LCBpbiB3aGljaCBjYXNlXFxuIDU4NjpcXHRcXHRcXHQgKiBpcF9yb3V0ZV9pbnB1dCgpIHJldHVybnMgYSBMT0NBTCByb3V0ZS4gSXQgY2FuIGFsc28gZmFpbCB0b1xcbiA1ODc6XFx0XFx0XFx0ICogYnVpbGQgYSBmb3J3YXJkaW5nIHJvdXRlIHRvd2FyZHMgZmw0X2RlYy5kYWRkciwgZm9yIGV4YW1wbGUsXFxuIDU4ODpcXHRcXHRcXHQgKiB3aGVuIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQsIGFuZCByZXR1cm4gYW4gVU5SRUFDSEFCTEUgcm91dGUuXFxuIDU4OTpcXHRcXHRcXHQgKiBCb3RoIGNhc2VzIHdpbGwgcmVzdWx0IGluIGEgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1ZyxcXG4gNTkwOlxcdFxcdFxcdCAqIHdoaWNoIG11c3Qgbm90IGJlIHVzZWQgZm9yIG91dHB1dC5cXG4gNTkxOlxcdFxcdFxcdCAqL1xcbiA1OTI6XFx0XFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgcnQyIFxcdTAwMjZcXHUwMDI2IHJ0Mi1cXHUwMDNlcnRfdHlwZSA9PSBSVE5fTE9DQUwpXFxuIDU5MzpcXHRcXHRcXHRcXHRuZXRfd2Fybl9yYXRlbGltaXRlZChcXFwiZGV0ZWN0ZWQgbG9jYWwgcm91dGUgZm9yICVwSTQgZHVyaW5nIElDTVAgc2VuZGluZywgc3JjICVwSTRcXFxcblxcXCIsXFxuIDU5NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZmbDRfZGVjLmRhZGRyLCBcXHUwMDI2Zmw0X2RlYy5zYWRkcik7XFxuIDU5NTpcXHRcXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBydDIgXFx1MDAyNlxcdTAwMjZcXG4gNTk2OlxcdFxcdFxcdCAgICAocnQyLVxcdTAwM2VydF90eXBlID09IFJUTl9MT0NBTCB8fCBydDItXFx1MDAzZXJ0X3R5cGUgPT0gUlROX1VOUkVBQ0hBQkxFKSkge1xcbiA1OTc6XFx0XFx0XFx0XFx0ZHN0X3JlbGVhc2UoXFx1MDAyNnJ0Mi1cXHUwMDNlZHN0KTtcXG4gNTk4OlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDU5OTpcXHRcXHRcXHR9XFxuIDYwMDpcXHRcXHR9XFxuIDYwMTpcXHRcXG4gNjAyOlxcdFxcdGlmIChlcnIpXFxuIDYwMzpcXHRcXHRcXHRnb3RvIHJlbG9va3VwX2ZhaWxlZDtcXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0ZHN0MiA9IHhmcm1fbG9va3VwKG5ldCwgXFx1MDAyNnJ0Mi1cXHUwMDNlZHN0LCBmbG93aTRfdG9fZmxvd2koXFx1MDAyNmZsNF9kZWMpLCBOVUxMLFxcbiA2MDY6XFx0XFx0XFx0XFx0ICAgWEZSTV9MT09LVVBfSUNNUCk7XFxuIDYwNzpcXHRcXHRydDIgPSBkc3RfcnRhYmxlKGRzdDIpO1xcbiA2MDg6XFx0XFx0aWYgKCFJU19FUlIoZHN0MikpIHtcXG4gNjA5OlxcdFxcdFxcdGRzdF9yZWxlYXNlKFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDc6NTguOTA1NjQxMjU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQzMTM1NDIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZGl2aW5nIGludG8gdGhpcyBJQ01QIHJvdXRpbmcgbG9naWM6XG5cbioqSW52ZXN0aWdhdGluZyBJQ01QIFJvdXRlIExvb2t1cCBhbmQgU2VuZGluZyoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGFuZGxlIG9uIGBpY21wX3JvdXRlX2xvb2t1cGAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIElDTVAgc2VuZGluZyBwcm9jZXNzLiBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgaW50byB0aGUgZW50aXJlIHdvcmtmbG93IG9mIGdlbmVyYXRpbmcgYW5kIHRyYW5zbWl0dGluZyBJQ01QIHBhY2tldHM/IEkgbmVlZCB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUuXG5cbk15IG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocy4gSSBuZWVkIHRvIGlkZW50aWZ5IGV4YWN0bHkgd2hpY2ggcGFydHMgb2YgdGhlIHN5c3RlbSBjYWxsIGBpY21wX3JvdXRlX2xvb2t1cGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBJQ01QIHJvdXRlcyBhcmUgYWN0dWFsbHkgYmVpbmcgcmVzb2x2ZWQgdXNpbmcgdGhpcyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyB3aWxsIGJlIGtleSB0byBncmFzcGluZyBpdHMgcHVycG9zZSBhbmQgdGhlIG92ZXJhbGwgcm91dGluZyBzdHJhdGVneS4gSSBuZWVkIHRvIG1hcCB0aGUgZGVwZW5kZW5jaWVzIGNsZWFybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjQ4OjAyLjMzNjk5ODIxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTA4MDQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNtcF9yb3V0ZV9sb29rdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ljbXAuYz00ODM9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppY21wX2dldF9yb3V0ZV9sb29rdXBfZGV2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9pY21wLmMtNDkzLVxcbm5ldC9pcHY0L2ljbXAuYzo0OTQ6c3RhdGljIHN0cnVjdCBydGFibGUgKmljbXBfcm91dGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxcbm5ldC9pcHY0L2ljbXAuYy00OTUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9pbixcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYz04MTc9dm9pZCBfX2ljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvLFxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTk3Mi1cXG5uZXQvaXB2NC9pY21wLmM6OTczOlxcdHJ0ID0gaWNtcF9yb3V0ZV9sb29rdXAobmV0LCBcXHUwMDI2Zmw0LCBza2JfaW4sIGlwaCwgc2FkZHIsXFxubmV0L2lwdjQvaWNtcC5jLTk3NC1cXHRcXHRcXHQgICAgICAgaW5ldF9kc2ZpZWxkX3RvX2RzY3AodG9zKSwgbWFyaywgdHlwZSwgY29kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDg6MDMuMzI3ODExNDIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njk0MjUwOTUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIGBpY21wX3JvdXRlX2xvb2t1cGAgLSBBIFByb21pc2luZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBgaWNtcF9yb3V0ZV9sb29rdXBgIGlzIGNhbGxlZCBieSBgX19pY21wX3NlbmRgIHdpdGhpbiBgbmV0L2lwdjQvaWNtcC5jYC4gVGhhdCdzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBJUHY0IG5ldHdvcmtpbmcsIHNwZWNpZmljYWxseSBJQ01QIGVycm9yIGdlbmVyYXRpb24uIFRoZSBrZXkgcXVlc3Rpb24gaXMgYWx3YXlzLCAqaXMqIHRoaXMgY29kZSByZWFjaGFibGU/IEFic29sdXRlbHksIGdpdmVuIGhvdyBmdW5kYW1lbnRhbCBJQ01QIGlzLiBXZSdyZSB0YWxraW5nIGFib3V0IG5ldHdvcmsgc29ja2V0cywgdHVuL3RhcCBpbnRlcmZhY2VzLCBsb29wYmFjaywgcGFja2V0IHNvY2tldHMg4oCTIGl0J3MgYWxsIHVzaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gIGBfX2ljbXBfc2VuZGAgYW5kIGBpY21wX3NlbmRgIGFyZSBwcmV0dHkgbXVjaCB1YmlxdWl0b3VzLlxuXG5SaWdodCwgc28sIGlzIGl0IHdvcnRoIGZ1enppbmc/ICBMZXQncyBzZWUuIFRoaXMgcGF0Y2ggZGlyZWN0bHkgdG91Y2hlcyBjb3JlIHN1YnN5c3RlbXM6IElQdjQgSUNNUCByb3V0ZSBoYW5kbGluZy4gSXQncyBmb2N1c2VkIG9uIGFsdGVyaW5nIGhvdyBgUlROX1VOUkVBQ0hBQkxFYCByb3V0ZXMgYXJlIGhhbmRsZWQgd2l0aGluIGBpY21wX3JvdXRlX2xvb2t1cCgpYC4gVGhlIGNoYW5nZSBwcmV2ZW50cyB0aG9zZSB1bnJlYWNoYWJsZSByb3V0ZXMgZnJvbSBiZWluZyB1c2VkIHdoZW4gc2VuZGluZyBJQ01QIG1lc3NhZ2VzLiBQcmV2aW91c2x5LCBpdCBsb29rcyBsaWtlIGBkc3Qub3V0cHV0PWlwX3J0X2J1Z2Agd2FzIHBvc3NpYmxlLCB3aGljaCBjb3VsZCBoYXZlIGxlZCB0byBrZXJuZWwgYnVncyBvciBjcmFzaGVzLCBlc3BlY2lhbGx5IGlmIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQsIG9yIHdlIHdlcmUgZGVhbGluZyB3aXRoIGFuIHVucmVhY2hhYmxlIHJvdXRlLiBJdCBzb3VuZHMgbGlrZSB0aGlzIGNvdWxkIGFic29sdXRlbHkgbGVhZCB0byBhIGJ1ZywgYW5kIGJlIGEgZ3JlYXQgcGxhY2UgdG8gZXhlcmNpc2UgbXkgZnV6emluZyBza2lsbHNldC5cblxuU28sIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZXhlY3V0YWJsZSBrZXJuZWwgY29kZSBhbmQgd29ydGggYSBzaG90LlxuXG5Pa2F5LCBuZXh0IHN0ZXAg4oCTIGNvbmZpZ3VyYXRpb24uICBJcyB0aGUgYmFyZSBtaW5pbXVtIGBJTkVUYCBvciBgSVBgIGVuYWJsZWQ/IExldCdzIGNoZWNrIGBuZXQvaXB2NC9LY29uZmlnYCBvciBgbmV0L2lwdjQvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0ODoxMC4yNzAzMjMzNDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYzMTUxNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljbXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlLTEzLVxcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTQ6XFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTUtXFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjQ4OjExLjAzMzQ4MDUwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg1NzYyMDA2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgS2VybmVsIE1vZHVsZSBEZXBlbmRlbmN5KipcblxuT2theSwgc28gYGljbXAub2AgaXMgY2xlYXJseSBkZWZpbmVkIHdpdGhpbiB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB1bmRlciB0aGUgYG9iai15YCBhc3NpZ25tZW50LiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0J3MgYSBidWlsdC1pbiBtb2R1bGUgd2l0aGluIHRoYXQgZGlyZWN0b3J5LCBpZiBhIGJpdCBvZiBhbiBvbGRlciBzdHlsZSBvZiBtYWtlZmlsZS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGBDT05GSUdfSU5FVGAgZ3VhcmQuIFRoYXQgaW5kaWNhdGVzIGl0cyBjb21waWxhdGlvbiBhbmQgaW5jbHVzaW9uIGFyZSBjb25kaXRpb25hbCwgZGVwZW5kZW50IG9uIHRoZSBgSU5FVGAgY29uZmlndXJhdGlvbiBvcHRpb24gYmVpbmcgZW5hYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSBzdGVwIGlzIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGlzIGBJTkVUYCB2YXJpYWJsZS4gVGhlIG5hdHVyYWwgcGxhY2UgdG8gZG8gdGhhdCBpcyBgbmV0L0tjb25maWdgLCB3aGljaCBpcyB3aGVyZSBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JraW5nIGFyZSBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgdG8gdW5kZXJzdGFuZCB3aGF0IGBDT05GSUdfSU5FVGAgYWN0dWFsbHkgKm1lYW5zKiBpbiB0aGUgYnJvYWRlciBjb250ZXh0LiBJcyBpdCBhIGJhc2Ugb3B0aW9uIGZvciBJUHY0IHN1cHBvcnQ/IElzIGl0IG1vcmUgZ3JhbnVsYXIgdGhhbiB0aGF0PyBLbm93aW5nIGl0cyBkZWZpbml0aW9uIGlzIGtleSB0byBkZXRlcm1pbmluZyB3aGVuIGBpY21wLm9gIHdpbGwgYWN0dWFsbHkgYmUgcHJlc2VudCBpbiB0aGUgZmluYWwga2VybmVsIGltYWdlLiBUaGlzIGxvb2tzIGxpa2UgYSBmYWlybHkgdHlwaWNhbCBkZXBlbmRlbmN5IGNoYWluOiBhIG1vZHVsZSdzIGJ1aWxkIHJ1bGUgdGhhdCdzIGNvbmRpdGlvbmFsIHVwb24gYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93IGl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc0OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjQ4OjE5LjYwOTY4NTAzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzNTU0MzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz05OT1jb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXFxuLS1cXG5uZXQvS2NvbmZpZy0xMTMtXFxubmV0L0tjb25maWc6MTE0OmNvbmZpZyBJTkVUXFxubmV0L0tjb25maWctMTE1LVxcdGJvb2wgXFxcIlRDUC9JUCBuZXR3b3JraW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0ODoxOS44NTMyNDYyMDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI3NTkzODc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSUNNUCBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgUmVzb2x1dGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgSU5FVGAgY29uZmlndXJhdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGtleSBpcyByZWFsbHkgY2VudGVyZWQgYXJvdW5kIElDTVAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIGNyaXRpY2FsIHN5bWJvbHMgYXJlIGhlcmUuIEltbWVkaWF0ZWx5LCBgaWNtcF9yb3V0ZV9sb29rdXBgIGp1bXBzIG91dCwgYnV0IGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBpY21wLmNgLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bDsgSSBrbm93IHN0YXRpYyBmdW5jdGlvbnMgYXJlIGdlbmVyYWxseSBpbnRlcm5hbCwgYnV0IHRoZXkgKmRvKiBoYXZlIHN5bWJvbHMgaW4gYHZtbGludXhgIHVubGVzcyB0aGV5J3JlIGlubGluZWQgYXdheSBieSB0aGUgY29tcGlsZXIuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgYGljbXBfcm91dGVfbG9va3VwYCBkaXJlY3RseS4gWWVwLCBpdCdzIGRlZmluZWQgYXMgYHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cCguLi4pYCwgd2hpY2ggY29uZmlybXMgaXRzIHN0YXRpYyBuYXR1cmUuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiBJIHRhcmdldCAqanVzdCogYGljbXBfcm91dGVfbG9va3VwYCwgb3Igc2hvdWxkIEkgYmUgbW9yZSBjb21wcmVoZW5zaXZlIGFuZCBpbmNsdWRlIHRoZSByZWxhdGVkIGBfX2ljbXBfc2VuZGAgYW5kIGBpY21wX3NlbmRgIGFzIHdlbGw/IEkgY2FuJ3QgYmUgc3VyZSBpZiBgaWNtcF9yb3V0ZV9sb29rdXBgIGlzIGlubGluZWQgYXdheSwgb3IgY2FsbGVkIGZyb20gYW4gYF9faWNtcF9zZW5kYCBjYWxsLlxuXG5JIHdhbnQgdG8gYmUgdGhvcm91Z2gsIHNvIHRvIGVuc3VyZSBJIGhhdmUgZnVsbCBjb3ZlcmFnZSwgSSBzaG91bGQgcHJvYmFibHkgZ28gYWhlYWQgYW5kIGluY2x1ZGUgYm90aCBgX19pY21wX3NlbmRgIGFuZCBgaWNtcF9zZW5kYCBpbiBteSB0YXJnZXQgbGlzdC4gVGhhdCB3YXksIGV2ZW4gaWYgYGljbXBfcm91dGVfbG9va3VwYCBpcyBpbmxpbmVkIG9yIGNhbGxlZCB2aWEgdGhvc2Ugb3RoZXIgZnVuY3Rpb25zLCBJJ2xsIHN0aWxsIGNhcHR1cmUgdGhlIGJlaGF2aW9yLlxuXG5Ob3csIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSBmdWxseSwgSSdsbCBkb3VibGUtY2hlY2sgd2hldGhlciBgaWNtcF9yb3V0ZV9sb29rdXBgICppcyogYWN0dWFsbHkgaW5saW5lZCBvciBub3QuIExldCBtZSBqdXN0IGNvbmZpcm0gYWdhaW46IGBzdGF0aWMgc3RydWN0IHJ0YWJsZSAqaWNtcF9yb3V0ZV9sb29rdXAoLi4uKWAuIE9rYXksIGl0IGxvb2tzIHN0YXRpYyBub24taW5saW5lZC5cblxuQWxyaWdodCwgSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIGluIGBuZXQvaXB2NC9pY21wLmNgIHRvIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24gYXJvdW5kIGl0LiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgdXNlZnVsIGNvbnRleHQgZm9yIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTYzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjQ4OjI2LjEyOTE4NzgwM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMTU3NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljbXBfc2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvY2lwc29faXB2NC5jPTE3MTU9dm9pZCBjaXBzb192NF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyb3IsIHUzMiBnYXRld2F5KVxcbi0tXFxubmV0L2lwdjQvY2lwc29faXB2NC5jLTE3MjQtXFx0ICogV2UgbWlnaHQgYmUgY2FsbGVkIGFib3ZlIHRoZSBJUCBsYXllcixcXG5uZXQvaXB2NC9jaXBzb19pcHY0LmM6MTcyNTpcXHQgKiBzbyB3ZSBjYW4gbm90IHVzZSBpY21wX3NlbmQgYW5kIElQQ0IgaGVyZS5cXG5uZXQvaXB2NC9jaXBzb19pcHY0LmMtMTcyNi1cXHQgKi9cXG4tLVxcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYy0xNzM3LVxcdGlmIChnYXRld2F5KVxcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYzoxNzM4OlxcdFxcdF9faWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfTkVUX0FOTywgMCwgXFx1MDAyNnBhcm0pO1xcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYy0xNzM5LVxcdGVsc2VcXG5uZXQvaXB2NC9jaXBzb19pcHY0LmM6MTc0MDpcXHRcXHRfX2ljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0hPU1RfQU5PLCAwLCBcXHUwMDI2cGFybSk7XFxubmV0L2lwdjQvY2lwc29faXB2NC5jLTE3NDEtfVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTQ2LSAqXFx0XFx0XFx0XFx0XFx0dGhlIHJhdGVzIHN5c2N0bCBjb25maWd1cmFibGUuXFxubmV0L2lwdjQvaWNtcC5jOjQ3OiAqXFx0XFx0WXUgVGlhbmxpXFx0OlxcdEZpeGVkIHR3byB1Z2x5IGJ1Z3MgaW4gaWNtcF9zZW5kXFxubmV0L2lwdjQvaWNtcC5jLTQ4LSAqXFx0XFx0XFx0XFx0XFx0LSBJUCBvcHRpb24gbGVuZ3RoIHdhcyBhY2NvdW50ZWQgd3JvbmdseVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jPTc0Mj1pY21wX2V4dF9hcHBlbmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBzdHJ1Y3QgaWNtcGhkciAqaWNtcGgsXFxuLS1cXG5uZXQvaXB2NC9pY21wLmMtODE2LVxcbm5ldC9pcHY0L2ljbXAuYzo4MTc6dm9pZCBfX2ljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvLFxcbm5ldC9pcHY0L2ljbXAuYy04MTgtXFx0XFx0IGNvbnN0IHN0cnVjdCBpbmV0X3NrYl9wYXJtICpwYXJtKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTg0OC1cXHQgKlxcdEZpbmQgdGhlIG9yaWdpbmFsIGhlYWRlci4gSXQgaXMgZXhwZWN0ZWQgdG8gYmUgdmFsaWQsIG9mIGNvdXJzZS5cXG5uZXQvaXB2NC9pY21wLmM6ODQ5OlxcdCAqXFx0Q2hlY2sgdGhpcywgaWNtcF9zZW5kIGlzIGNhbGxlZCBmcm9tIHRoZSBtb3N0IG9ic2N1cmUgZGV2aWNlc1xcbm5ldC9pcHY0L2ljbXAuYy04NTAtXFx0ICpcXHRzb21ldGltZXMuXFxuLS1cXG5uZXQvaXB2NC9pY21wLmMtMTAxNS1cXG5uZXQvaXB2NC9pY21wLmM6MTAxNjpcXHR0cmFjZV9pY21wX3NlbmQoc2tiX2luLCB0eXBlLCBjb2RlKTtcXG5uZXQvaXB2NC9pY21wLmMtMTAxNy1cXG4tLVxcbm5ldC9pcHY0L2ljbXAuYy0xMDMwLX1cXG5uZXQvaXB2NC9pY21wLmM6MTAzMTpFWFBPUlRfU1lNQk9MKF9faWNtcF9zZW5kKTtcXG5uZXQvaXB2NC9pY21wLmMtMTAzMi1cXG4tLVxcbm5ldC9pcHY0L2ljbXAuYz0xMDM1PXZvaWQgaWNtcF9uZG9fc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTEwNDYtXFx0aWYgKCFjdCB8fCAhKFJFQURfT05DRShjdC1cXHUwMDNlc3RhdHVzKSBcXHUwMDI2IElQU19OQVRfTUFTSykpIHtcXG5uZXQvaXB2NC9pY21wLmM6MTA0NzpcXHRcXHRfX2ljbXBfc2VuZChza2JfaW4sIHR5cGUsIGNvZGUsIGluZm8sIFxcdTAwMjZwYXJtKTtcXG5uZXQvaXB2NC9pY21wLmMtMTA0OC1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXB2NC9pY21wLmMtMTA2Mi1cXHRpcF9oZHIoc2tiX2luKS1cXHUwMDNlc2FkZHIgPSBjdC1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLmlwO1xcbm5ldC9pcHY0L2ljbXAuYzoxMDYzOlxcdF9faWNtcF9zZW5kKHNrYl9pbiwgdHlwZSwgY29kZSwgaW5mbywgXFx1MDAyNnBhcm0pO1xcbm5ldC9pcHY0L2ljbXAuYy0xMDY0LVxcdGlwX2hkcihza2JfaW4pLVxcdTAwM2VzYWRkciA9IG9yaWdfaXA7XFxuLS1cXG5uZXQvaXB2NC9pcF9mb3J3YXJkLmM9ODM9aW50IGlwX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2ZvcndhcmQuYy0xMzYtXFx0XFx0SVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfRlJBR0ZBSUxTKTtcXG5uZXQvaXB2NC9pcF9mb3J3YXJkLmM6MTM3OlxcdFxcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0ZSQUdfTkVFREVELFxcbm5ldC9pcHY0L2lwX2ZvcndhcmQuYy0xMzgtXFx0XFx0XFx0ICBodG9ubChtdHUpKTtcXG4tLVxcbm5ldC9pcHY0L2lwX2ZvcndhcmQuYy0xNjktXFx0ICovXFxubmV0L2lwdjQvaXBfZm9yd2FyZC5jOjE3MDpcXHQgaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfU1JfRkFJTEVELCAwKTtcXG5uZXQvaXB2NC9pcF9mb3J3YXJkLmMtMTcxLVxcdCBnb3RvIGRyb3A7XFxuLS1cXG5uZXQvaXB2NC9pcF9mb3J3YXJkLmMtMTc1LVxcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbm5ldC9pcHY0L2lwX2ZvcndhcmQuYzoxNzY6XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19UVEwsIDApO1xcbm5ldC9pcHY0L2lwX2ZvcndhcmQuYy0xNzctXFx0U0tCX0RSX1NFVChyZWFzb24sIElQX0lOSERSKTtcXG4tLVxcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmM9MTIzPXN0YXRpYyB2b2lkIGlwX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9pcHY0L2lwX2ZyYWdtZW50LmMtMTg0LVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZxcC1cXHUwMDNlcS5sb2NrKTtcXG5uZXQvaXB2NC9pcF9mcmFnbWVudC5jOjE4NTpcXHRpY21wX3NlbmQoaGVhZCwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19GUkFHVElNRSwgMCk7XFxubmV0L2lwdjQvaXBfZnJhZ21lbnQuYy0xODYtXFx0Z290byBvdXRfcmN1X3VubG9jaztcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTQ0MD1zdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ2OC1vdXQ6XFxubmV0L2lwdjQvaXBfZ3JlLmM6NDY5OlxcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNDcwLWRyb3A6XFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTE4OT12b2lkIGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvY29sKVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMTctXFx0XFx0XFx0XFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTlVOS05PV05QUk9UT1MpO1xcbm5ldC9pcHY0L2lwX2lucHV0LmM6MjE4OlxcdFxcdFxcdFxcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILFxcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjE5LVxcdFxcdFxcdFxcdFxcdCAgSUNNUF9QUk9UX1VOUkVBQ0gsIDApO1xcbi0tXFxubmV0L2lwdjQvaXBfb3B0aW9ucy5jPTQ2NT1pbnQgaXBfb3B0aW9uc19jb21waWxlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L2lwX29wdGlvbnMuYy00NzItXFx0aWYgKHJldCAhPSAwIFxcdTAwMjZcXHUwMDI2IHNrYilcXG5uZXQvaXB2NC9pcF9vcHRpb25zLmM6NDczOlxcdFxcdGljbXBfc2VuZChza2IsIElDTVBfUEFSQU1FVEVSUFJPQiwgMCwgaW5mbyk7XFxubmV0L2lwdjQvaXBfb3B0aW9ucy5jLTQ3NC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2lwdjQvaXBfb3B0aW9ucy5jPTU4OT1pbnQgaXBfb3B0aW9uc19yY3Zfc3JyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF9vcHRpb25zLmMtNjA4LVxcdFxcdFxcdHJldHVybiAwO1xcbm5ldC9pcHY0L2lwX29wdGlvbnMuYzo2MDk6XFx0XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9QQVJBTUVURVJQUk9CLCAwLCBodG9ubCgxNlxcdTAwM2NcXHUwMDNjMjQpKTtcXG5uZXQvaXB2NC9pcF9vcHRpb25zLmMtNjEwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjQvaXBfb3B0aW9ucy5jLTYxNi1cXHRcXHRpZiAoc3JycHRyICsgMyBcXHUwMDNlIHNycnNwYWNlKSB7XFxubmV0L2lwdjQvaXBfb3B0aW9ucy5jOjYxNzpcXHRcXHRcXHRpY21wX3NlbmQoc2tiLCBJQ01QX1BBUkFNRVRFUlBST0IsIDAsIGh0b25sKChvcHQtXFx1MDAzZXNycisyKVxcdTAwM2NcXHUwMDNjMjQpKTtcXG5uZXQvaXB2NC9pcF9vcHRpb25zLmMtNjE4LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9NTc1PXN0YXRpYyBpbnQgaXBfZnJhZ21lbnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy01ODctXFx0XFx0SVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfRlJBR0ZBSUxTKTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzo1ODg6XFx0XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfRlJBR19ORUVERUQsXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtNTg5LVxcdFxcdFxcdCAgaHRvbmwobXR1KSk7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYz0zNDg9dm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzYxLVxcdCAgICAhbmZfcmVqZWN0X3ZlcmlmeV9jc3VtKHNrYl9pbiwgZGF0YW9mZiwgcHJvdG8pKSB7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM6MzYyOlxcdFxcdGljbXBfc2VuZChza2JfaW4sIElDTVBfREVTVF9VTlJFQUNILCBjb2RlLCAwKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNjMtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzY2LVxcdGlmIChuZl9pcF9jaGVja3N1bShza2JfaW4sIGhvb2ssIGRhdGFvZmYsIHByb3RvKSA9PSAwKVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjM2NzpcXHRcXHRpY21wX3NlbmQoc2tiX2luLCBJQ01QX0RFU1RfVU5SRUFDSCwgY29kZSwgMCk7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzY4LX1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9OTAyPXZvaWQgaXBfcnRfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy05NTMtXFxubmV0L2lwdjQvcm91dGUuYzo5NTQ6XFx0XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9SRURJUkVDVCwgSUNNUF9SRURJUl9IT1NULCBndyk7XFxubmV0L2lwdjQvcm91dGUuYy05NTUtXFx0XFx0cGVlci1cXHUwMDNlcmF0ZV9sYXN0ID0gamlmZmllcztcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9OTY3PXN0YXRpYyBpbnQgaXBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTA0MS1cXHRpZiAoc2VuZClcXG5uZXQvaXB2NC9yb3V0ZS5jOjEwNDI6XFx0XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTA0My1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTI1NT1zdGF0aWMgdm9pZCBpcHY0X3NlbmRfZGVzdF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTEyODEtXFx0fVxcbm5ldC9pcHY0L3JvdXRlLmM6MTI4MjpcXHRfX2ljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0hPU1RfVU5SRUFDSCwgMCwgXFx1MDAyNnBhcm0pO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTI4My19XFxuLS1cXG5uZXQvaXB2NC90dW5uZWw0LmM9OTU9c3RhdGljIGludCB0dW5uZWw0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdHVubmVsNC5jLTEwNS1cXG5uZXQvaXB2NC90dW5uZWw0LmM6MTA2OlxcdGljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7XFxubmV0L2lwdjQvdHVubmVsNC5jLTEwNy1cXG4tLVxcbm5ldC9pcHY0L3R1bm5lbDQuYz0xNDE9c3RhdGljIGludCB0dW5uZWw2NF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3R1bm5lbDQuYy0xNTEtXFxubmV0L2lwdjQvdHVubmVsNC5jOjE1MjpcXHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xcbm5ldC9pcHY0L3R1bm5lbDQuYy0xNTMtXFxuLS1cXG5uZXQvaXB2NC90dW5uZWw0LmM9MTYxPXN0YXRpYyBpbnQgdHVubmVsbXBsczRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90dW5uZWw0LmMtMTcxLVxcbm5ldC9pcHY0L3R1bm5lbDQuYzoxNzI6XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTtcXG5uZXQvaXB2NC90dW5uZWw0LmMtMTczLVxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MjYwMz1pbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjY3Ny1cXHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX05PUE9SVFMpO1xcbm5ldC9pcHY0L3VkcC5jOjI2Nzg6XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTtcXG5uZXQvaXB2NC91ZHAuYy0yNjc5LVxcbi0tXFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYz02MT1pbnQgeGZybTRfcmN2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLFxcbi0tXFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy04Ny1vdXQ6XFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYzo4ODpcXHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmMtODktXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jPTk2PXN0YXRpYyBpbnQgeGZybTRfZXNwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYy0xMDYtXFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYzoxMDc6XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTtcXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTEwOC1cXG4tLVxcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmM9MTI0PXN0YXRpYyBpbnQgeGZybTRfYWhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTEzNC1cXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jOjEzNTpcXHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmMtMTM2LVxcbi0tXFxubmV0L2lwdjQveGZybTRfcHJvdG9jb2wuYz0xNTI9c3RhdGljIGludCB4ZnJtNF9pcGNvbXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jLTE2Mi1cXG5uZXQvaXB2NC94ZnJtNF9wcm90b2NvbC5jOjE2MzpcXHRpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9QT1JUX1VOUkVBQ0gsIDApO1xcbm5ldC9pcHY0L3hmcm00X3Byb3RvY29sLmMtMTY0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0ODoyNi4yNTAzNTIwNTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg5MTQxNjg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBJQ01QIFJvdXRpbmcgYW5kIFRyYW5zbWlzc2lvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgaWNtcF9yb3V0ZV9sb29rdXBgIGFuZCBgX19pY21wX3NlbmRgLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aG9zZSB0d28gZnVuY3Rpb25zLCBvciBwb3NzaWJseSB0aHJlZSBpZiBgaWNtcF9zZW5kYCBpcyBhbHNvIHJlbGV2YW50LiBHaXZlbiB0aGUgY29udGV4dCwgdGhvc2UgYXJlIHRoZSBrZXkgYXJlYXMgSSB3YW50IHRvIHVuZGVyc3RhbmQuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGNydWNpYWwuIElzIGBpY21wX3JvdXRlX2xvb2t1cGAgZXhwb3J0ZWQsIG9yIGlzIGl0IGhpZGRlbiBhcyBhIHN0YXRpYyBmdW5jdGlvbj8gQSBxdWljayBjaGVjayByZXZlYWxzIGl0J3MgZGVjbGFyZWQgYXMgYHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cCguLi4pYCwgd2hpY2ggdGVsbHMgbWUgaXQncyBpbnRlcm5hbCB0byBpdHMgbW9kdWxlLiBgX19pY21wX3NlbmRgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgZXhwb3J0ZWQgdmlhIGBFWFBPUlRfU1lNQk9MKF9faWNtcF9zZW5kKWAsIHNvIGl0J3MgZGVzaWduZWQgdG8gYmUgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudCBjb250ZXh0IGZvciBob3cgdGhlIGtlcm5lbCdzIElDTVAgaW1wbGVtZW50YXRpb24gaXMgc3RydWN0dXJlZC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGtub3cgd2hhdCBgaWNtcF9zZW5kYCBpcy4gSXMgaXQgYW4gaW5saW5lIGZ1bmN0aW9uIG9yIGEgbWFjcm8gZGVmaW5lZCBpbiBgaW5jbHVkZS9uZXQvaWNtcC5oYD8gVGhhdCB3aWxsIHRlbGwgbWUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLCBhbmQgd2hldGhlciBpdOKAmXMgYSBzaW1wbGUgaGVscGVyIG9yIGEgbW9yZSBpbnZvbHZlZCBwYXJ0IG9mIHRoZSBJQ01QIHNlbmRpbmcgbWVjaGFuaXNtLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGhlYWRlciBmaWxlIHRvIHVuZGVyc3RhbmQgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1ODgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDg6MzEuMTQxNzcxODY2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzA0NTA5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNtcF9zZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2ljbXAuaD0zNz1zdHJ1Y3QgbmV0O1xcbmluY2x1ZGUvbmV0L2ljbXAuaC0zOC1cXG5pbmNsdWRlL25ldC9pY21wLmg6Mzk6dm9pZCBfX2ljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvLFxcbmluY2x1ZGUvbmV0L2ljbXAuaC00MC1cXHRcXHQgY29uc3Qgc3RydWN0IGluZXRfc2tiX3Bhcm0gKnBhcm0pO1xcbmluY2x1ZGUvbmV0L2ljbXAuaDo0MTpzdGF0aWMgaW5saW5lIHZvaWQgaWNtcF9zZW5kKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCB0eXBlLCBpbnQgY29kZSwgX19iZTMyIGluZm8pXFxuaW5jbHVkZS9uZXQvaWNtcC5oLTQyLXtcXG5pbmNsdWRlL25ldC9pY21wLmg6NDM6XFx0X19pY21wX3NlbmQoc2tiX2luLCB0eXBlLCBjb2RlLCBpbmZvLCBJUENCKHNrYl9pbikpO1xcbmluY2x1ZGUvbmV0L2ljbXAuaC00NC19XFxuLS1cXG5pbmNsdWRlL25ldC9pY21wLmg9NDk9c3RhdGljIGlubGluZSB2b2lkIGljbXBfbmRvX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IHR5cGUsIGludCBjb2RlLCBfX2JlMzIgaW5mbylcXG4tLVxcbmluY2x1ZGUvbmV0L2ljbXAuaC01My1cXHRtZW1zZXQoXFx1MDAyNnBhcm0sIDAsIHNpemVvZihwYXJtKSk7XFxuaW5jbHVkZS9uZXQvaWNtcC5oOjU0OlxcdF9faWNtcF9zZW5kKHNrYl9pbiwgdHlwZSwgY29kZSwgaW5mbywgXFx1MDAyNnBhcm0pO1xcbmluY2x1ZGUvbmV0L2ljbXAuaC01NS19XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTExNTY9c3RydWN0IG5ldG5zX2lwdnMge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xMjYzLVxcdGludFxcdFxcdFxcdHN5c2N0bF9zeW5jX3JldHJpZXM7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxMjY0OlxcdGludFxcdFxcdFxcdHN5c2N0bF9uYXRfaWNtcF9zZW5kO1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTI2NS1cXHRpbnRcXHRcXHRcXHRzeXNjdGxfcG10dV9kaXNjO1xcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvaWNtcC5oLTEwLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ljbXAuaDoxMTpUUkFDRV9FVkVOVChpY21wX3NlbmQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvaWNtcC5oLTEyLVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvaWNtcC5oLTU5LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2ljbXAuaDo2MDpcXHRcXHRUUF9wcmludGsoXFxcImljbXBfc2VuZDogdHlwZT0lZCwgY29kZT0lZC4gRnJvbSAlcEk0OiV1IHRvICVwSTQ6JXUgdWxlbj0lZCBza2JhZGRyPSVwXFxcIixcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9pY21wLmgtNjEtXFx0XFx0XFx0X19lbnRyeS1cXHUwMDNldHlwZSwgX19lbnRyeS1cXHUwMDNlY29kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDg6MzEuNTEyMjI4NTA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MDM4Njg3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSUNNUCBSb3V0aW5nIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIElDTVAgY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHJvdXRpbmcuIEkgc2VlIHRoYXQgYGljbXBfc2VuZGAgaXMgaW5saW5lZCwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgcGVyZm9ybWFuY2UsIGJ1dCB0aGUgYWN0dWFsLCBub24tc3RhdGljIGZ1bmN0aW9uIGV4cG9zZWQgaXMgYF9faWNtcF9zZW5kYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZSByZWFsIHdvcmssIHRoZSByb3V0aW5nIGxvb2t1cCBJJ20gaW50ZXJlc3RlZCBpbiwgaXMgaGFuZGxlZCBieSBgaWNtcF9yb3V0ZV9sb29rdXBgLCBhbmQgdGhhdCdzIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2lwdjQvaWNtcC5jYC5cblxuTm93LCBiZWZvcmUgSSBkaWcgZGVlcGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEFoLCBgQ09ORklHX0lORVRgIGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgZW5hYmxlciBmb3IgdGhhdCBlbnRpcmUgYG5ldC9pcHY0L2ljbXAuY2AgZmlsZS4gR290IGl0LlxuXG5MZXQncyBxdWlja2x5IHJldmlldyB0aGUgc2V0dXAgZm9yIHRoaXMuIFwiV29ydGhGdXp6aW5nXCIgaXMgdHJ1ZSwgd2hpY2ggaXMgZ29vZCDigJMgYWx3YXlzIGEgZ29vZCBzaWduIHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmtpbmcgY29kZS4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGZpeGluZyBhIHJvdXRpbmcgYnVnIHdoZXJlIHVucmVhY2hhYmxlIHJvdXRlcyAoYFJUTl9VTlJFQUNIQUJMRWApIHdlcmVuJ3QgYmVpbmcgcHJvcGVybHkgZGlzY2FyZGVkIHdoZW4gc2VuZGluZyBJQ01QIGVycm9yIG1lc3NhZ2VzLCBwYXJ0aWN1bGFybHkgcHJldmVudGluZyB0aGUgdXNlIG9mIGludmFsaWQgcm91dGVzIHdpdGggYGRzdC5vdXRwdXQgPSBpcF9ydF9idWdgLiBJdCdzIGEgY29yZSBJUHY0IG5ldHdvcmtpbmcgY2hhbmdlLCBhbmQgaXQncyBkaXJlY3RseSByZWFjaGFibGUuIFBlcmZlY3QuXG5cblRoZSBmb2N1cyBzeW1ib2xzIGFyZSwgYXMgZXhwZWN0ZWQsIGBpY21wX3JvdXRlX2xvb2t1cGAgYW5kIGBfX2ljbXBfc2VuZGAuIFNvLCBJJ2xsIGJlIHRhcmdldGluZyB0aG9zZSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5LiBBbmQsIG9mIGNvdXJzZSwgSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfSU5FVGAgaXMgZW5hYmxlZC5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGlzIGluZm8uIEknbSByZWFkeSB0byBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjEwLCJPdXRwdXRUb2tlbnMiOjEwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0ODozNy4yMTYwOTk5OTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ1MTQ5OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpY21wX3JvdXRlX2xvb2t1cFwiLFxuICAgIFwiX19pY21wX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcm91dGUgbG9va3VwIGxvZ2ljIGZvciBJQ01QIHNlbmRpbmcgaW4gaWNtcF9yb3V0ZV9sb29rdXAoKSB0byBwcm9wZXJseSByZWplY3Qgcm91dGVzIG9mIHR5cGUgUlROX1VOUkVBQ0hBQkxFIGluIGFkZGl0aW9uIHRvIFJUTl9MT0NBTC4gVGhpcyB0b3VjaGVzIGNvcmUgSVB2NCBJQ01QIHRyYW5zbWlzc2lvbiBsb2dpYyB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpY21wX3JvdXRlX2xvb2t1cFwiLFxuICAgIFwiX19pY21wX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcm91dGUgbG9va3VwIGxvZ2ljIGZvciBJQ01QIHNlbmRpbmcgaW4gaWNtcF9yb3V0ZV9sb29rdXAoKSB0byBwcm9wZXJseSByZWplY3Qgcm91dGVzIG9mIHR5cGUgUlROX1VOUkVBQ0hBQkxFIGluIGFkZGl0aW9uIHRvIFJUTl9MT0NBTC4gVGhpcyB0b3VjaGVzIGNvcmUgSVB2NCBJQ01QIHRyYW5zbWlzc2lvbiBsb2dpYyB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0ODozNy40MjA2MjU0NTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjI5OTU3NjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDg6MzcuNDIyNTU2NjE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTc2MjgwMjA5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpY21wX3JvdXRlX2xvb2t1cCgpYCBpbiBgbmV0L2lwdjQvaWNtcC5jYCB0byByZWplY3QgYFJUTl9VTlJFQUNIQUJMRWAgcm91dGVzIGluIGFkZGl0aW9uIHRvIGBSVE5fTE9DQUxgIHJvdXRlcywgcHJldmVudGluZyB0aGUgdXNlIG9mIHJvdXRlcyB3aXRoIGBkc3Qub3V0cHV0ID0gaXBfcnRfYnVnYCB3aGVuIHRyYW5zbWl0dGluZyBJQ01QIG1lc3NhZ2VzLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHJvdXRpbmcgYW5kIGVycm9yLWhhbmRsaW5nIGxvZ2ljIGZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3Igb3BlcmF0aW9ucyBvbiB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvYnVmZmVycy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBleGVjdXRpbmcgaW52YWxpZCByb3V0ZSBvdXRwdXQgZnVuY3Rpb25zIG9yIHJlZmVyZW5jZSBjb3VudGluZy9tZW1vcnkgc2FmZXR5IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZDBhYTU1YjUxYTNkZDNiZDIzMmRmNjNlZjZmNjZjNWVlMDJlYzRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTU6NDc6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmNcbmluZGV4IDBjYWVkZmM3Y2E5MmYuLjkwYzBlMjJjMjliZWEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pY21wLmNcbisrKyBiL25ldC9pcHY0L2ljbXAuY1xuQEAgLTU4MSwxNiArNTgxLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZsNCxcbiBcdFx0c2tiX2RzdHJlZl9yZXN0b3JlKHNrYl9pbiwgb3JlZmRzdCk7XG4gXG4gXHRcdC8qXG4tXHRcdCAqIEF0IHRoaXMgcG9pbnQsIGZsNF9kZWMuZGFkZHIgc2hvdWxkIE5PVCBiZSBsb2NhbCAod2Vcbi1cdFx0ICogY2hlY2tlZCBmbDRfZGVjLnNhZGRyIGFib3ZlKS4gSG93ZXZlciwgYSByYWNlIGNvbmRpdGlvblxuLVx0XHQgKiBtYXkgb2NjdXIgaWYgdGhlIGFkZHJlc3MgaXMgYWRkZWQgdG8gdGhlIGludGVyZmFjZVxuLVx0XHQgKiBjb25jdXJyZW50bHkuIEluIHRoYXQgY2FzZSwgaXBfcm91dGVfaW5wdXQoKSByZXR1cm5zIGFcbi1cdFx0ICogTE9DQUwgcm91dGUgd2l0aCBkc3Qub3V0cHV0PWlwX3J0X2J1Zywgd2hpY2ggbXVzdCBub3Rcbi1cdFx0ICogYmUgdXNlZCBmb3Igb3V0cHV0LlxuK1x0XHQgKiBmbDRfZGVjLmRhZGRyIGlzIG5vdCBleHBlY3RlZCB0byBiZSBsb2NhbCBoZXJlLCBidXQgaXQgY2FuIGJlXG4rXHRcdCAqIGFkZGVkIHRvIGFuIGludGVyZmFjZSBjb25jdXJyZW50bHksIGluIHdoaWNoIGNhc2VcbitcdFx0ICogaXBfcm91dGVfaW5wdXQoKSByZXR1cm5zIGEgTE9DQUwgcm91dGUuIEl0IGNhbiBhbHNvIGZhaWwgdG9cbitcdFx0ICogYnVpbGQgYSBmb3J3YXJkaW5nIHJvdXRlIHRvd2FyZHMgZmw0X2RlYy5kYWRkciwgZm9yIGV4YW1wbGUsXG4rXHRcdCAqIHdoZW4gZm9yd2FyZGluZyBpcyBkaXNhYmxlZCwgYW5kIHJldHVybiBhbiBVTlJFQUNIQUJMRSByb3V0ZS5cbitcdFx0ICogQm90aCBjYXNlcyB3aWxsIHJlc3VsdCBpbiBhIHJvdXRlIHdpdGggZHN0Lm91dHB1dD1pcF9ydF9idWcsXG4rXHRcdCAqIHdoaWNoIG11c3Qgbm90IGJlIHVzZWQgZm9yIG91dHB1dC5cbiBcdFx0ICovXG4tXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBydDIgXHUwMDI2XHUwMDI2IHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9MT0NBTCkge1xuK1x0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcnQyIFx1MDAyNlx1MDAyNiBydDItXHUwMDNlcnRfdHlwZSA9PSBSVE5fTE9DQUwpXG4gXHRcdFx0bmV0X3dhcm5fcmF0ZWxpbWl0ZWQoXCJkZXRlY3RlZCBsb2NhbCByb3V0ZSBmb3IgJXBJNCBkdXJpbmcgSUNNUCBzZW5kaW5nLCBzcmMgJXBJNFxcblwiLFxuIFx0XHRcdFx0XHQgICAgIFx1MDAyNmZsNF9kZWMuZGFkZHIsIFx1MDAyNmZsNF9kZWMuc2FkZHIpO1xuK1x0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcnQyIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9MT0NBTCB8fCBydDItXHUwMDNlcnRfdHlwZSA9PSBSVE5fVU5SRUFDSEFCTEUpKSB7XG4gXHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2cnQyLVx1MDAzZWRzdCk7XG4gXHRcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTU6NDg6MzcuNDIyNTU4NjQ1WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNDg4OTYxMTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gSUNNUCBSb3V0aW5nIExvZ2ljKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIHRoZSBgaWNtcF9yb3V0ZV9sb29rdXBgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2lwdjQvaWNtcC5jYC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIGhvdyBJQ01QIHBhY2tldHMgYXJlIHJvdXRlZCBpbiB0aGUgSVB2NCBzdGFjay4gTXkgaW1tZWRpYXRlIGluY2xpbmF0aW9uIGlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbi4gV2hhdCBzcGVjaWZpYyBJQ01QIHJvdXRpbmcgYmVoYXZpb3IgaXMgYmVpbmcgdGFyZ2V0ZWQ/IElzIHRoaXMgYWJvdXQgaGFuZGxpbmcgcmVkaXJlY3RzLCByYXRlIGxpbWl0aW5nLCBlcnJvciByZXBvcnRpbmcsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5P1xuXG5UbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIHpvb20gaW4gb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSBjb250ZXh0IG9mIGBpY21wX3JvdXRlX2xvb2t1cGAgd2l0aGluIGBuZXQvaXB2NC9pY21wLmNgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzOiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBpY21wX3JvdXRlX2xvb2t1cGA/IFdoYXQgdmFyaWFibGVzIGFyZSBwYXNzZWQgdG8gaXQgYW5kIHdoYXQgYXJlIHRoZWlyIG1lYW5pbmdzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlPyBIb3cgaXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgaWNtcF9yb3V0ZV9sb29rdXBgIGJlaW5nIHVzZWQ/IEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgdGhpcyBmdW5jdGlvbiB0byBmdWxseSBncmFzcCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4gVGhpcyBkZWVwIGRpdmUgaW50byB0aGUgY29kZSB3aWxsIHJldmVhbCB0aGUgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY2hhbmdlcyBhbmQgYWxsb3cgbWUgdG8gZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhIG1pbm9yIHR3ZWFrLCBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQsIG9yIHNvbWV0aGluZyBpbiBiZXR3ZWVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0ODo0OC45MTE1MjQzMTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2ljbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTA6XFx0XFx0fSBlbHNlIHtcXG4gNTUxOlxcdFxcdFxcdHN0cnVjdCBmbG93aTQgZmw0XzIgPSBmbDRfZGVjO1xcbiA1NTI6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBvcmVmZHN0O1xcbiA1NTM6XFx0XFxuIDU1NDpcXHRcXHRcXHRzd2FwKGZsNF8yLmRhZGRyLCBmbDRfMi5zYWRkcik7XFxuIDU1NTpcXHRcXHRcXHRzd2l0Y2ggKGZsNF8yLmZsb3dpNF9wcm90bykge1xcbiA1NTY6XFx0XFx0XFx0Y2FzZSBJUFBST1RPX1RDUDpcXG4gNTU3OlxcdFxcdFxcdGNhc2UgSVBQUk9UT19VRFA6XFxuIDU1ODpcXHRcXHRcXHRjYXNlIElQUFJPVE9fU0NUUDpcXG4gNTU5OlxcdFxcdFxcdGNhc2UgSVBQUk9UT19EQ0NQOlxcbiA1NjA6XFx0XFx0XFx0XFx0c3dhcChmbDRfMi5mbDRfc3BvcnQsIGZsNF8yLmZsNF9kcG9ydCk7XFxuIDU2MTpcXHRcXHRcXHRcXHRicmVhaztcXG4gNTYyOlxcdFxcdFxcdH1cXG4gNTYzOlxcdFxcbiA1NjQ6XFx0XFx0XFx0Zmw0XzIuZmxvd2k0X29pZiA9IGwzbWRldl9tYXN0ZXJfaWZpbmRleChyb3V0ZV9sb29rdXBfZGV2KTtcXG4gNTY1OlxcdFxcdFxcdGZsNF8yLmZsb3dpNF9mbGFncyB8PSBGTE9XSV9GTEFHX0FOWVNSQztcXG4gNTY2OlxcdFxcbiA1Njc6XFx0XFx0XFx0cnQyID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNF8yKTtcXG4gNTY4OlxcdFxcdFxcdGlmIChJU19FUlIocnQyKSkge1xcbiA1Njk6XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihydDIpO1xcbiA1NzA6XFx0XFx0XFx0XFx0Z290byByZWxvb2t1cF9mYWlsZWQ7XFxuIDU3MTpcXHRcXHRcXHR9XFxuIDU3MjpcXHRcXHRcXHQvKiBVZ2ghICovXFxuIDU3MzpcXHRcXHRcXHRvcmVmZHN0ID0gc2tiX2RzdHJlZl9zdGVhbChza2JfaW4pO1xcbiA1NzQ6XFx0XFx0XFx0ZXJyID0gaXBfcm91dGVfaW5wdXQoc2tiX2luLCBmbDRfZGVjLmRhZGRyLCBmbDRfZGVjLnNhZGRyLFxcbiA1NzU6XFx0XFx0XFx0XFx0XFx0ICAgICBkc2NwLCBydDItXFx1MDAzZWRzdC5kZXYpID8gLUVJTlZBTCA6IDA7XFxuIDU3NjpcXHRcXG4gNTc3OlxcdFxcdFxcdGRzdF9yZWxlYXNlKFxcdTAwMjZydDItXFx1MDAzZWRzdCk7XFxuIDU3ODpcXHRcXHRcXHRydDIgPSBza2JfcnRhYmxlKHNrYl9pbik7XFxuIDU3OTpcXHRcXHRcXHQvKiBzdGVhbCBkc3QgZW50cnkgZnJvbSBza2JfaW4sIGRvbid0IGRyb3AgcmVmY250ICovXFxuIDU4MDpcXHRcXHRcXHRza2JfZHN0cmVmX3N0ZWFsKHNrYl9pbik7XFxuIDU4MTpcXHRcXHRcXHRza2JfZHN0cmVmX3Jlc3RvcmUoc2tiX2luLCBvcmVmZHN0KTtcXG4gNTgyOlxcdFxcbiA1ODM6XFx0XFx0XFx0LypcXG4gNTg0OlxcdFxcdFxcdCAqIGZsNF9kZWMuZGFkZHIgaXMgbm90IGV4cGVjdGVkIHRvIGJlIGxvY2FsIGhlcmUsIGJ1dCBpdCBjYW4gYmVcXG4gNTg1OlxcdFxcdFxcdCAqIGFkZGVkIHRvIGFuIGludGVyZmFjZSBjb25jdXJyZW50bHksIGluIHdoaWNoIGNhc2VcXG4gNTg2OlxcdFxcdFxcdCAqIGlwX3JvdXRlX2lucHV0KCkgcmV0dXJucyBhIExPQ0FMIHJvdXRlLiBJdCBjYW4gYWxzbyBmYWlsIHRvXFxuIDU4NzpcXHRcXHRcXHQgKiBidWlsZCBhIGZvcndhcmRpbmcgcm91dGUgdG93YXJkcyBmbDRfZGVjLmRhZGRyLCBmb3IgZXhhbXBsZSxcXG4gNTg4OlxcdFxcdFxcdCAqIHdoZW4gZm9yd2FyZGluZyBpcyBkaXNhYmxlZCwgYW5kIHJldHVybiBhbiBVTlJFQUNIQUJMRSByb3V0ZS5cXG4gNTg5OlxcdFxcdFxcdCAqIEJvdGggY2FzZXMgd2lsbCByZXN1bHQgaW4gYSByb3V0ZSB3aXRoIGRzdC5vdXRwdXQ9aXBfcnRfYnVnLFxcbiA1OTA6XFx0XFx0XFx0ICogd2hpY2ggbXVzdCBub3QgYmUgdXNlZCBmb3Igb3V0cHV0LlxcbiA1OTE6XFx0XFx0XFx0ICovXFxuIDU5MjpcXHRcXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBydDIgXFx1MDAyNlxcdTAwMjYgcnQyLVxcdTAwM2VydF90eXBlID09IFJUTl9MT0NBTClcXG4gNTkzOlxcdFxcdFxcdFxcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFxcXCJkZXRlY3RlZCBsb2NhbCByb3V0ZSBmb3IgJXBJNCBkdXJpbmcgSUNNUCBzZW5kaW5nLCBzcmMgJXBJNFxcXFxuXFxcIixcXG4gNTk0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmZsNF9kZWMuZGFkZHIsIFxcdTAwMjZmbDRfZGVjLnNhZGRyKTtcXG4gNTk1OlxcdFxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHJ0MiBcXHUwMDI2XFx1MDAyNlxcbiA1OTY6XFx0XFx0XFx0ICAgIChydDItXFx1MDAzZXJ0X3R5cGUgPT0gUlROX0xPQ0FMIHx8IHJ0Mi1cXHUwMDNlcnRfdHlwZSA9PSBSVE5fVU5SRUFDSEFCTEUpKSB7XFxuIDU5NzpcXHRcXHRcXHRcXHRkc3RfcmVsZWFzZShcXHUwMDI2cnQyLVxcdTAwM2Vkc3QpO1xcbiA1OTg6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gNTk5OlxcdFxcdFxcdH1cXG4gNjAwOlxcdFxcdH1cXG4gNjAxOlxcdFxcbiA2MDI6XFx0XFx0aWYgKGVycilcXG4gNjAzOlxcdFxcdFxcdGdvdG8gcmVsb29rdXBfZmFpbGVkO1xcbiA2MDQ6XFx0XFxuIDYwNTpcXHRcXHRkc3QyID0geGZybV9sb29rdXAobmV0LCBcXHUwMDI2cnQyLVxcdTAwM2Vkc3QsIGZsb3dpNF90b19mbG93aShcXHUwMDI2Zmw0X2RlYyksIE5VTEwsXFxuIDYwNjpcXHRcXHRcXHRcXHQgICBYRlJNX0xPT0tVUF9JQ01QKTtcXG4gNjA3OlxcdFxcdHJ0MiA9IGRzdF9ydGFibGUoZHN0Mik7XFxuIDYwODpcXHRcXHRpZiAoIUlTX0VSUihkc3QyKSkge1xcbiA2MDk6XFx0XFx0XFx0ZHN0X3JlbGVhc2UoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxNTo0ODo0OC45MTE2ODU1NTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEzODg2NjYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElDTVAgUm91dGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgd2UncmUgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIGluIGBpY21wX3JvdXRlX2xvb2t1cCgpYCB3aGVyZSwgd2hlbiB0aGUgcm91dGluZyBsb29rdXAgZm9yIElDTVAgc2VuZGluZyBmYWlscyBhbmQgcmV0dXJucyBhbiB1bnJlYWNoYWJsZSByb3V0ZSAoc3BlY2lmaWNhbGx5IGBSVE5fVU5SRUFDSEFCTEVgKSwgdGhlIGNvZGUgaW5jb3JyZWN0bHkgc2V0cyBgZHN0Lm91dHB1dGAgdG8gYGlwX3J0X2J1Z2AuIFRoaXMgY2FuIGxlYWQgdG8gY3Jhc2hlcyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHRyaWdnZXIgd2FybmluZ3Mgb3IgYnVncyB3aGVuIHRoZSBrZXJuZWwgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgaW52YWxpZCBvdXRwdXQuIFRoaXMgaXMgYSBjbGFzc2ljIGVycm9yIGNvbmRpdGlvbiwgYW5kIGl0IG5lZWRzIHRvIGJlIGFkZHJlc3NlZC5cblxuVGhlIHBhdGNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBhZGRpbmcgYSBjaGVjazogYHx8IHJ0Mi1cdTAwM2VydF90eXBlID09IFJUTl9VTlJFQUNIQUJMRWAgdG8gdGhlIGNvbmRpdGlvbiB0aGF0IHJlbGVhc2VzIGBydDItXHUwMDNlZHN0YCBhbmQgc2V0cyBgZXJyID0gLUVJTlZBTGAuIEVzc2VudGlhbGx5LCBpdCdzIGV4cGxpY2l0bHkgaGFuZGxpbmcgdGhlIGBSVE5fVU5SRUFDSEFCTEVgIGNhc2UgdG8gcHJldmVudCB0aGUgYmFkIGBpcF9ydF9idWdgIGFzc2lnbm1lbnQuXG5cbk5vdywgSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGlzc3Vlcy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBzZWU6XG5cbiogICBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zPyBHb29kLlxuKiAgIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBFeGNlbGxlbnQuXG4qICAgTm8gaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZT8gUmVhc3N1cmluZy5cbiogICBObyBzdHJ1Y3R1cmUgY29waWVzIGFjcm9zcyBib3VuZGFyaWVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24/IEZpbmUuXG5cblRoZSBwYXRjaCBpcyBvbmx5IGRlYWxpbmcgd2l0aCBhbiBleGlzdGluZywgaW5pdGlhbGl6ZWQgcm91dGluZyB0YWJsZSBzdHJ1Y3QsIHJlbGVhc2luZyB0aGUgYGRzdGAsIGFuZCBzZXR0aW5nIGFuIGVycm9yIGNvZGUuIEZyb20gYSBtZW1vcnkgc2FmZXR5IHN0YW5kcG9pbnQsIGl0J3MgbG9va2luZyBjbGVhbi5cblxuTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gS01TQU4uIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoaXMgZG9lc24ndCBjcmVhdGUgYW55IEtNU0FOLXJlbGF0ZWQgaXNzdWVzLiBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBhbmQgcG90ZW50aWFsIGluZm8gbGVha3MsIHJpZ2h0PyBXZWxsLCBhbGwgdGhlIHZhcmlhYmxlcyBpbnZvbHZlZCAoYGVycmAsIGBydDJgLCBldGMuKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQgdGhyb3VnaG91dCB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBUaGlzIHBhdGNoIGlzIHNpbXBseSBmaXhpbmcgYSBsb2dpY2FsIGVycm9yLCBhbiBlcnJvciBjb25kaXRpb24gd2hlcmUgdGhlIGBSVE5fVU5SRUFDSEFCTEVgIHJvdXRlIHdhcyBsZWFkaW5nIHRvIHRoZSBleGVjdXRpb24gb2YgYGlwX3J0X2J1Z2AsIHdoaWNoIHdvdWxkIHRyaWdnZXIga2VybmVsIHdhcm5pbmdzIGFuZCBidWdzLCBvciBwb3RlbnRpYWxseSBjYXVzZSByb3V0aW5nIGxvZ2ljIGlzc3VlcyB0aGF0IHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi9zdGFuZGFyZCBzYW5pdGl6ZXJzIG9yIHRyaWdnZXIgYSBrZXJuZWwgcGFuaWMuIEluIGZhY3QsIGlmIG5vdCBmb3IgdGhlIGZpeCwgd2UgbWlnaHQgc2VlIEtBU0FOIG9yIGFub3RoZXIgc2FuaXRpemVyIGZsYWdnaW5nIHRoaXMgaXNzdWUuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGlzIHB1cmVseSBhIGxvZ2ljIGVycm9yIGZpeCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrIHZ1bG5lcmFiaWxpdGllcywgXCJOZWVkc0tNU0FOXCIgc2hvdWxkIGRlZmluaXRpdmVseSBiZSBgZmFsc2VgLiBUaGUgY29yZSBvZiB0aGUgYnVnIHdlIGFyZSBmaXhpbmcgaXMgYSBsb2dpYyBlcnJvciB0aGF0IGNhdXNlcyBpbnZhbGlkIHJvdXRpbmcgb3V0cHV0LCB3aGljaCB3b3VsZCB0cmlnZ2VyIGtlcm5lbCB3YXJuaW5ncyAvIGJ1Z3Mgb3Igcm91dGluZyBsb2dpYyBpc3N1ZXMgY2F1Z2h0IGJ5IEtBU0FOIC8gc3RhbmRhcmQgc2FuaXRpemVycyAvIHBhbmljLiBLTVNBTiB3b3VsZCBub3QgYmUgdXNlZnVsIGhlcmUuIEtNU0FOJ3MgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIGNhdGNoIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gd2lsbCBsaWtlbHkgY2F0Y2ggdGhlIGJ1ZyB0aGF0IGlzIHByZXNlbnQgd2l0aG91dCB0aGUgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODY0LCJPdXRwdXRUb2tlbnMiOjE3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE1OjQ4OjU1LjA1MDU1NTI2OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGljbXBfcm91dGVfbG9va3VwKClgIGluIGBuZXQvaXB2NC9pY21wLmNgIHRvIHJlamVjdCBgUlROX1VOUkVBQ0hBQkxFYCByb3V0ZXMgaW4gYWRkaXRpb24gdG8gYFJUTl9MT0NBTGAgcm91dGVzLCBwcmV2ZW50aW5nIHRoZSB1c2Ugb2Ygcm91dGVzIHdpdGggYGRzdC5vdXRwdXQgPSBpcF9ydF9idWdgIHdoZW4gdHJhbnNtaXR0aW5nIElDTVAgbWVzc2FnZXMuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgcm91dGluZyBhbmQgZXJyb3ItaGFuZGxpbmcgbG9naWMgZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciBvcGVyYXRpb25zIG9uIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9idWZmZXJzLiBBbnkgYnVncyByZWxhdGVkIHRvIGV4ZWN1dGluZyBpbnZhbGlkIHJvdXRlIG91dHB1dCBmdW5jdGlvbnMgb3IgcmVmZXJlbmNlIGNvdW50aW5nL21lbW9yeSBzYWZldHkgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpY21wX3JvdXRlX2xvb2t1cCgpYCBpbiBgbmV0L2lwdjQvaWNtcC5jYCB0byByZWplY3QgYFJUTl9VTlJFQUNIQUJMRWAgcm91dGVzIGluIGFkZGl0aW9uIHRvIGBSVE5fTE9DQUxgIHJvdXRlcywgcHJldmVudGluZyB0aGUgdXNlIG9mIHJvdXRlcyB3aXRoIGBkc3Qub3V0cHV0ID0gaXBfcnRfYnVnYCB3aGVuIHRyYW5zbWl0dGluZyBJQ01QIG1lc3NhZ2VzLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHJvdXRpbmcgYW5kIGVycm9yLWhhbmRsaW5nIGxvZ2ljIGZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3Igb3BlcmF0aW9ucyBvbiB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvYnVmZmVycy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBleGVjdXRpbmcgaW52YWxpZCByb3V0ZSBvdXRwdXQgZnVuY3Rpb25zIG9yIHJlZmVyZW5jZSBjb3VudGluZy9tZW1vcnkgc2FmZXR5IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm89bb[1] Phase: Succeeded StartedAt: 2026-09-10 15:49:07 +0000 UTC FinishedAt: 2026-09-10 15:49:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 15:49:07 +0000 UTC FinishedAt: 2026-09-10 15:49:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2] Phase: Succeeded StartedAt: 2026-09-10 15:49:07 +0000 UTC FinishedAt: 2026-09-10 19:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 15:49:07 +0000 UTC FinishedAt: 2026-09-10 19:32:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 15:49:07 +0000 UTC FinishedAt: 2026-09-10 15:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 15:49:07 +0000 UTC FinishedAt: 2026-09-10 15:49:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm89bb/series-workflowm89bb-convert-artifact-1985039852/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 15:49:17 +0000 UTC FinishedAt: 2026-09-10 16:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 15:49:17 +0000 UTC FinishedAt: 2026-09-10 16:09:06 +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:*650df84a-da1c-4ec8-a99b-2ff1821c7084,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-workflowm89bb/series-workflowm89bb-convert-artifact-1985039852/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": "ae5ba8cf-ff06-4890-b1c2-79e01b10ba49", "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-workflowm89bb/series-workflowm89bb-build-action-1181661210/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 15:49:17 +0000 UTC FinishedAt: 2026-09-10 16:08:57 +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:*650df84a-da1c-4ec8-a99b-2ff1821c7084,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-workflowm89bb/series-workflowm89bb-convert-artifact-1985039852/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": "ae5ba8cf-ff06-4890-b1c2-79e01b10ba49", "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-workflowm89bb/series-workflowm89bb-build-action-1181661210/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 16:09:06 +0000 UTC FinishedAt: 2026-09-10 16:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 16:09:06 +0000 UTC FinishedAt: 2026-09-10 16:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 16:09:06 +0000 UTC FinishedAt: 2026-09-10 16:09:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 16:09:06 +0000 UTC FinishedAt: 2026-09-10 16:09:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm89bb/series-workflowm89bb-convert-artifact-1787184043/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 16:09:17 +0000 UTC FinishedAt: 2026-09-10 16:10:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 16:09:17 +0000 UTC FinishedAt: 2026-09-10 16:10:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ae5ba8cf-ff06-4890-b1c2-79e01b10ba49,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-workflowm89bb/series-workflowm89bb-build-action-1181661210/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-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 16:10:54 +0000 UTC FinishedAt: 2026-09-10 16:10:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 16:10:54 +0000 UTC FinishedAt: 2026-09-10 16:10:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 16:10:54 +0000 UTC FinishedAt: 2026-09-10 16:27:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 16:10:54 +0000 UTC FinishedAt: 2026-09-10 16:27:33 +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:*650df84a-da1c-4ec8-a99b-2ff1821c7084,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-workflowm89bb/series-workflowm89bb-convert-artifact-1787184043/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": "625ae2c5-fe9e-437b-bd56-1786a8fd68f3", "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-workflowm89bb/series-workflowm89bb-build-action-2339369935/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 16:10:54 +0000 UTC FinishedAt: 2026-09-10 16:27:23 +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:*650df84a-da1c-4ec8-a99b-2ff1821c7084,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-workflowm89bb/series-workflowm89bb-convert-artifact-1787184043/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": "625ae2c5-fe9e-437b-bd56-1786a8fd68f3", "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-workflowm89bb/series-workflowm89bb-build-action-2339369935/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 16:27:33 +0000 UTC FinishedAt: 2026-09-10 16:27:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 16:27:33 +0000 UTC FinishedAt: 2026-09-10 16:27:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 16:27:33 +0000 UTC FinishedAt: 2026-09-10 16:29:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 16:27:33 +0000 UTC FinishedAt: 2026-09-10 16:29:17 +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:*625ae2c5-fe9e-437b-bd56-1786a8fd68f3,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-workflowm89bb/series-workflowm89bb-build-action-2339369935/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-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 16:29:27 +0000 UTC FinishedAt: 2026-09-10 19:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 16:29:27 +0000 UTC FinishedAt: 2026-09-10 19:32:27 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"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:*ae5ba8cf-ff06-4890-b1c2-79e01b10ba49,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*625ae2c5-fe9e-437b-bd56-1786a8fd68f3,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-workflowm89bb/series-workflowm89bb-build-action-1181661210/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-workflowm89bb/series-workflowm89bb-build-action-2339369935/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 16:29:27 +0000 UTC FinishedAt: 2026-09-10 16:29:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 16:29:27 +0000 UTC FinishedAt: 2026-09-10 16:29:32 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"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-workflowm89bb/series-workflowm89bb-convert-artifact-3259091652/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 16:29:27 +0000 UTC FinishedAt: 2026-09-10 16:29:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 16:29:27 +0000 UTC FinishedAt: 2026-09-10 16:29:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 16:29:27 +0000 UTC FinishedAt: 2026-09-10 16:29:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 16:29:37 +0000 UTC FinishedAt: 2026-09-10 19:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm89bb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["icmp_route_lookup","__icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"596ad3e3-6b18-4391-809e-ef1d6d7430b5","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 16:29:37 +0000 UTC FinishedAt: 2026-09-10 19:32:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ae5ba8cf-ff06-4890-b1c2-79e01b10ba49,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*625ae2c5-fe9e-437b-bd56-1786a8fd68f3,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-workflowm89bb/series-workflowm89bb-build-action-1181661210/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-workflowm89bb/series-workflowm89bb-build-action-2339369935/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-workflowm89bb/series-workflowm89bb-convert-artifact-3259091652/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,}