Name: series-workflows2rz7 Phase: Succeeded StartedAt: 2026-09-10 08:19:11 +0000 UTC FinishedAt: 2026-09-10 12:17:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[0] Phase: Succeeded StartedAt: 2026-09-10 08:19:11 +0000 UTC FinishedAt: 2026-09-10 08:38:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 08:19:11 +0000 UTC FinishedAt: 2026-09-10 08:38:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_TABLES" ], "series_id": "4e4fe30d-43f1-4fd8-9e77-72e4851b4979" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_setelem_catchall_insert", "nft_setelem_catchall_deactivate", "nft_add_set_elem", "nft_del_setelem", "nf_tables_newsetelem", "nf_tables_delsetelem" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfYWRkX3NldF9lbGVtJiMzNDssCiAgICAmIzM0O25mdF9kZWxfc2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsc2V0ZWxlbSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgbmZ0YWJsZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCB0byBjaGVjayB3aGV0aGVyIGFuIGV4aXN0aW5nIGNhdGNoYWxsIGVsZW1lbnQgaGFzIGV4cGlyZWQgdXNpbmcgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgYW5kIHRpbWVzdGFtcHMgb2J0YWluZWQgdmlhIGBnZXRfamlmZmllc182NCgpYC5cblxuLSAqKktNU0FOIGFwcGxpY2FiaWxpdHkqKjogS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoaGVhcCwgc3RhY2ssIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIHBhdGNoIGluaXRpYWxpemVzIGxvY2FsIGB1NjQgdHN0YW1wYCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgZ2V0X2ppZmZpZXNfNjQoKWAgYW5kIGNoZWNrcyBleGlzdGluZywgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZXh0ZW5zaW9uIGF0dHJpYnV0ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuXG4tICoqS0FTQU4gYXBwbGljYWJpbGl0eSoqOiBLQVNBTiwgdG9nZXRoZXIgd2l0aCBzdGFuZGFyZCBkZWJ1ZyB0b29scywgaXMgYXBwcm9wcmlhdGUgZm9yIGNhdGNoaW5nIGFueSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvcnMsIHVzZS1hZnRlci1mcmVlLCBvciBkb3VibGUtZnJlZSBpc3N1ZXMgcmVsYXRlZCB0byBzZXQgZWxlbWVudCBsaWZlY3ljbGVzIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24uXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBuZnRhYmxlcyBjYXRjaC1hbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0IGFuZCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlIHRvIGFjY291bnQgZm9yIGV4cGlyZWQgc2V0IGVsZW1lbnRzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIG1lc3NhZ2VzIChORlRfTVNHX05FV1NFVEVMRU0gYW5kIE5GVF9NU0dfREVMU0VURUxFTSkgYW5kIG1vZGlmeSBzdGF0ZSB2YWxpZGF0aW9uIGFuZCBlbGVtZW50IGRlYWN0aXZhdGlvbiBsb2dpYywgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucywgbGlmZXRpbWUgaXNzdWVzLCBvciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NGZiOTgxZWMxNjRjNWQ1OTNkOGY0MGUyMjY4ZjhiZWRlZjAwYzc4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDg6MzY6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuaW5kZXggNzY1YTkyZmE5MGQ2Mi4uMGYzNDQ5Y2NhNWQyNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuQEAgLTY5OTEsMTEgJiM0Mzs2OTkxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbiBcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7XG4mIzQzO1x0dTY0IHRzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG4gXHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbi1cdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSkge1xuJiM0MztcdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcbiBcdFx0XHQqcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG4gXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRcdH1cbkBAIC03MDg4LDExICYjNDM7NzA5MCwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxuIHtcbiBcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xuJiM0MztcdHU2NCB0c3RhbXAgPSBnZXRfamlmZmllc182NCgpO1xuIFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xuIFx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG4tXHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSlcbiYjNDM7XHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxuJiM0MztcdFx0ICAgIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRrZnJlZShlbGVtLVx1MDAzZXByaXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfYWRkX3NldF9lbGVtJiMzNDssCiAgICAmIzM0O25mdF9kZWxfc2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsc2V0ZWxlbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBuZnRhYmxlcyBjYXRjaC1hbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0IGFuZCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlIHRvIGFjY291bnQgZm9yIGV4cGlyZWQgc2V0IGVsZW1lbnRzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIG1lc3NhZ2VzIChORlRfTVNHX05FV1NFVEVMRU0gYW5kIE5GVF9NU0dfREVMU0VURUxFTSkgYW5kIG1vZGlmeSBzdGF0ZSB2YWxpZGF0aW9uIGFuZCBlbGVtZW50IGRlYWN0aXZhdGlvbiBsb2dpYywgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucywgbGlmZXRpbWUgaXNzdWVzLCBvciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NGZiOTgxZWMxNjRjNWQ1OTNkOGY0MGUyMjY4ZjhiZWRlZjAwYzc4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDg6MzY6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCmluZGV4IDc2NWE5MmZhOTBkNjIuLjBmMzQ0OWNjYTVkMjcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCkBAIC02OTkxLDExICYjNDM7Njk5MSwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsCiB7CiAJc3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7CiAJdTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTsKJiM0MzsJdTY0IHRzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7CiAJc3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCAmYW1wO3NldC0mZ3Q7Y2F0Y2hhbGxfbGlzdCwgbGlzdCkgewogCQlleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtJmd0O2VsZW0pOwotCQlpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spKSB7CiYjNDM7CQlpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHsKIAkJCSpwcml2ID0gY2F0Y2hhbGwtJmd0O2VsZW07CiAJCQlyZXR1cm4gLUVFWElTVDsKIAkJfQpAQCAtNzA4OCwxMSAmIzQzOzcwOTAsMTMgQEAgc3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSkKIHsKIAlzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDsKJiM0MzsJdTY0IHRzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7CiAJc3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCAmYW1wO3NldC0mZ3Q7Y2F0Y2hhbGxfbGlzdCwgbGlzdCkgewogCQlleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtJmd0O2VsZW0pOwotCQlpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkpCiYjNDM7CQlpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHwKJiM0MzsJCSAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkKIAkJCWNvbnRpbnVlOwogCiAJCWtmcmVlKGVsZW0tJmd0O3ByaXYpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkZ0YWJsZXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgIGZpbGU7IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNvbmNlbnRyYXRlZC4gSSBzZWUgY2hhbmdlcyBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIGZ1bmN0aW9ucywgd2hpY2ggaW1tZWRpYXRlbHkgc2lnbmFscyBhIHBvdGVudGlhbCBhZGp1c3RtZW50IHRvIGhvdyBjYXRjaGFsbCBzZXQgZWxlbWVudHMgYXJlIG1hbmFnZWQsIGxpa2VseSByZWxhdGVkIHRvIGV4cGlyYXRpb24gY2hlY2tzIHVzaW5nIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKWAuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IHNvbWUgc3Vycm91bmRpbmcgY29udGV4dC4gSSYjMzk7bGwganVtcCBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AgYW5kIHJlYWQgYXJvdW5kIGxpbmVzIDY5OTEgYW5kIDcwODguIFRoaXMgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyB0aGV5IGZpdCBpbnRvLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhlIGBLY29uZmlnYCBvcHRpb25zIHRvIGNvbmZpcm0gYG5mX3RhYmxlc2AgaXMgZW5hYmxlZCwganVzdCB0byBiZSBzdXJlLgoKVG8gcXVpY2tseSBnZXQgdGhlIHNvdXJjZSBjb2RlIEkmIzM5O2xsIHByb2JhYmx5IHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcHVsbCB0aGUgY29kZSBJIG5lZWQgYW5kIHJlZHVjZSB0aGUgdGltZSBpdCB0YWtlcyB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5ODA6XHRcdFx0ICAgICFuZnRfc2V0X2VsZW1faXNfZGVhZChleHQpKVxuNjk4MTpcdFx0XHRcdHJldHVybiBleHQ7XG42OTgyOlx0XHR9XG42OTgzOlx0XG42OTg0Olx0XHRyZXR1cm4gTlVMTDtcbjY5ODU6XHR9XG42OTg2Olx0XG42OTg3Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNjk4ODpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG42OTg5Olx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjY5OTA6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKnByaXYpXG42OTkxOlx0e1xuNjk5MjpcdFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG42OTkzOlx0XHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xuNjk5NDpcdFx0dTY0IHRzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7XG42OTk1Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbjY5OTY6XHRcbjY5OTc6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG42OTk4Olx0XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbjY5OTk6XHRcdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcdTAwMjZcdTAwMjZcbjcwMDA6XHRcdFx0ICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkge1xuNzAwMTpcdFx0XHRcdCpwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbjcwMDI6XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbjcwMDM6XHRcdFx0fVxuNzAwNDpcdFx0fVxuNzAwNTpcdFxuNzAwNjpcdFx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG43MDA3Olx0XHRpZiAoIWNhdGNoYWxsKVxuNzAwODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjcwMDk6XHRcbjcwMTA6XHRcdGNhdGNoYWxsLVx1MDAzZWVsZW0gPSBlbGVtLVx1MDAzZXByaXY7XG43MDExOlx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZjYXRjaGFsbC1cdTAwM2VsaXN0LCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCk7XG43MDEyOlx0XG43MDEzOlx0XHRyZXR1cm4gMDtcbjcwMTQ6XHR9XG43MDE1Olx0XG43MDE2Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNzAxNzpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDE4Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjcwMTk6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKmVsZW1fcHJpdixcbjcwMjA6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG43MDIxOlx0e1xuNzAyMjpcdFx0aW50IHJldDtcbjcwMjM6XHRcbjcwMjQ6XHRcdGlmIChmbGFncyBcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxuNzAyNTpcdFx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XG43MDI2Olx0XHRlbHNlXG43MDI3Olx0XHRcdHJldCA9IHNldC1cdTAwM2VvcHMtXHUwMDNlaW5zZXJ0KG5ldCwgc2V0LCBlbGVtLCBlbGVtX3ByaXYpO1xuNzAyODpcdFxuNzAyOTpcdFx0cmV0dXJuIHJldDtcbjcwMzA6XHR9XG43MDMxOlx0XG43MDMyOlx0c3RhdGljIGJvb2wgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcwMzM6XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxuNzAzNDpcdHtcbjcwMzU6XHRcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW1fcHJpdik7XG43MDM2Olx0XG43MDM3Olx0XHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfRkxBR1MpIFx1MDAyNlx1MDAyNlxuNzAzODpcdFx0ICAgICpuZnRfc2V0X2V4dF9mbGFncyhleHQpIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG43MDM5Olx0XHRcdHJldHVybiB0cnVlO1xuNzA0MDpcdFxuNzA0MTpcdFx0cmV0dXJuIGZhbHNlO1xuNzA0MjpcdH1cbjcwNDM6XHRcbjcwNDQ6XHRzdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9hY3RpdmF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDQ1Olx0XHRcdFx0XHQgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcbjcwNDY6XHR7XG43MDQ3Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtX3ByaXYpO1xuNzA0ODpcdFxuNzA0OTpcdFx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xuNzA1MDpcdFx0XHRuZnRfY2xlYXIobmV0LCBleHQpO1xuNzA1MTpcdFx0fSBlbHNlIHtcbjcwNTI6XHRcdFx0c2V0LVx1MDAzZW9wcy1cdTAwM2VhY3RpdmF0ZShuZXQsIHNldCwgZWxlbV9wcml2KTtcbjcwNTM6XHRcdH1cbjcwNTQ6XHR9XG43MDU1Olx0XG43MDU2Olx0c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDU3Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfdHJhbnNfb25lX2VsZW0gKmVsZW0pXG43MDU4Olx0e1xuNzA1OTpcdFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbS1cdTAwM2Vwcml2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODgzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBXZWFrIFBvaW50cyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBkZWFjdGl2YXRpb24gcHJvY2VkdXJlcy4uLiBHb3QgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSB0aG9yb3VnaC4gV2UmIzM5O3ZlIGdvbmUgb3ZlciBgbmZ0X3NldGVsZW1fZGVsZXRlYCwgYG5mdF9zZXRlbGVtX3JlcGxhY2VgLCBhbmQgZXZlbiB0aGUgZ2VuZXJpYyBgbmZ0X3NldGVsZW1fYWRkYCB3aGljaCBpcyBjcml0aWNhbCB0byBjYXRjaCBlZGdlIGNhc2VzLCBhcyB3ZWxsIGFzIHRoZSBtb3JlIG9idmlvdXMgb25lcyBzdWNoIGFzIGBuZnRfc2V0X2RlbGV0ZWAuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBMZXQmIzM5O3Mgbm90IGJlIGhhc3R5IGluIGRlY2xhcmluZyB2aWN0b3J5LiBJJiMzOTttIGdldHRpbmcgYSBuaWdnbGluZyBmZWVsaW5nIHRoZXJlJiMzOTtzIGEgcmVsYXRlZCBmdW5jdGlvbiB3ZSBoYXZlbiYjMzk7dCBjaGVja2VkIHdpdGggdGhlIHNhbWUgbGV2ZWwgb2Ygc2NydXRpbnkuIFdlIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIHRoZSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAgaW4gdGhpcyByZXZpZXcuIEdvdHRhIGJlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSB2dWxuZXJhYmlsaXRpZXMgdGhlcmUsIG9yIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gbG9naWMgb3IgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBjb21wYXJlZCB0byB0aGUgb3RoZXIgc2V0IGVsZW1lbnQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucywgZXNwZWNpYWxseSByZWdhcmRpbmcgcmVzb3VyY2UgY2xlYW51cCBvciBsb2NraW5nLiBJdCYjMzk7cyB0b28gZWFzeSB0byBhc3N1bWUgc3ltbWV0cnkuIFdlIG5lZWQgdG8gZXhwbG9yZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MDgwOlx0XHRcdFx0bmZ0X3NldGVsZW1fYWN0aXZhdGUoY3R4LVx1MDAzZW5ldCwgdGUtXHUwMDNlc2V0LCBlbGVtLVx1MDAzZXByaXYpO1xuNzA4MTpcdFxuNzA4MjpcdFx0XHRuZl90YWJsZXNfc2V0ZWxlbV9ub3RpZnkoY3R4LCB0ZS1cdTAwM2VzZXQsIGVsZW0tXHUwMDNlcHJpdixcbjcwODM6XHRcdFx0XHRcdFx0IE5GVF9NU0dfTkVXU0VURUxFTSk7XG43MDg0Olx0XHRcdGtmcmVlKGVsZW0tXHUwMDNldXBkYXRlKTtcbjcwODU6XHRcdH1cbjcwODY6XHR9XG43MDg3Olx0XG43MDg4Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjcwODk6XHRcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcwOTA6XHRcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSlcbjcwOTE6XHR7XG43MDkyOlx0XHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbjcwOTM6XHRcdHU2NCB0c3RhbXAgPSBnZXRfamlmZmllc182NCgpO1xuNzA5NDpcdFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XG43MDk1Olx0XG43MDk2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xuNzA5NzpcdFx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG43MDk4Olx0XHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxuNzA5OTpcdFx0XHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXG43MTAwOlx0XHRcdFx0Y29udGludWU7XG43MTAxOlx0XG43MTAyOlx0XHRcdGtmcmVlKGVsZW0tXHUwMDNlcHJpdik7XG43MTAzOlx0XHRcdGVsZW0tXHUwMDNlcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG43MTA0Olx0XHRcdG5mdF9zZXRfZWxlbV9jaGFuZ2VfYWN0aXZlKG5ldCwgc2V0LCBleHQpO1xuNzEwNTpcdFx0XHRyZXR1cm4gMDtcbjcxMDY6XHRcdH1cbjcxMDc6XHRcbjcxMDg6XHRcdHJldHVybiAtRU5PRU5UO1xuNzEwOTpcdH1cbjcxMTA6XHRcbjcxMTE6XHRzdGF0aWMgaW50IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG43MTEyOlx0XHRcdFx0XHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcxMTM6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxuNzExNDpcdHtcbjcxMTU6XHRcdHZvaWQgKnByaXY7XG43MTE2Olx0XG43MTE3Olx0XHRwcml2ID0gc2V0LVx1MDAzZW9wcy1cdTAwM2VkZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcbjcxMTg6XHRcdGlmICghcHJpdilcbjcxMTk6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc3MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSBmb3IgbmZfdGFibGVzX2FwaS5jKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gSSBuZWVkIHRvIGVuc3VyZSBpdCYjMzk7cyBwcm9wZXJseSBlbmFibGVkIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIExldCBtZSBxdWlja2x5IGdyZXAgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgdGhhdCBtb2R1bGUuCgpUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbmZfdGFibGVzX2FwaS5vYCBpcyBiZWluZyBidWlsdCBjb3JyZWN0bHkuIEkmIzM5O2xsIHNlYXJjaCB0aGUgcmVsZXZhbnQgTWFrZWZpbGUsIHNwZWNpZmljYWxseSBpbiBgbmV0L25ldGZpbHRlci9gLCB0byB2ZXJpZnkgdGhhdCBpdCYjMzk7cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgZG9lc24mIzM5O3QgaGF2ZSBhbnkgb2J2aW91cyBlcnJvcnMgaW4gaXRzIGNvbXBpbGF0aW9uLiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIHRvIGVuc3VyZSB0aGUgbW9kdWxlIGlzIGxpbmtlZCBhcyBleHBlY3RlZCBhbmQgZXZlcnl0aGluZyBpcyBpbnRlZ3JhdGVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfYXBpXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT04ND1vYmotJChDT05GSUdfTkZfRFVQX05FVERFVilcdCYjNDM7PSBuZl9kdXBfbmV0ZGV2Lm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg2LSMgbmZfdGFibGVzXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg3Om5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OC1cdFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE1MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgTWFrZWZpbGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSB3b3VsZCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhvc2UgcGFydGljdWxhciBOZXRmaWx0ZXIgbW9kdWxlcyBiZSBkZWZpbmVkPyYjMzQ7IE15IG1lbnRhbCByYWRhciBpbW1lZGlhdGVseSBwaW5ncyB0aGUgYG5ldC9uZXRmaWx0ZXJgIGRpcmVjdG9yeSDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgTmV0ZmlsdGVyIGxpdmVzIGluIHRoZSBrZXJuZWwgc291cmNlLiBBbmQsIHNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBgTWFrZWZpbGVgIHRoZXJlLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGJ1aWxkaW5nIGFsbCB0aGF0IGdvb2Qgc3R1ZmYuIEkmIzM5O20gZ3Vlc3NpbmcgYXJvdW5kIGxpbmUgODcgb3Igc28gaXMgYSBsaWtlbHkgc3BvdCB0byBmaW5kIHRoZSByZWxldmFudCBydWxlcywgZGVwZW5kZW5jaWVzLCBvciBtYXliZSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmaWd1cmluZyBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBhbmQgaG93IHRoaW5ncyBhcmUgcHV0IHRvZ2V0aGVyLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFxuICA4MTpcdG9iai0kKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKSAmIzQzOz0gbmZfY29ubmNvdW50Lm9cbiAgODI6XHRcbiAgODM6XHQjIGdlbmVyaWMgcGFja2V0IGR1cGxpY2F0aW9uIGZyb20gbmV0ZGV2IGZhbWlseVxuICA4NDpcdG9iai0kKENPTkZJR19ORl9EVVBfTkVUREVWKVx0JiM0Mzs9IG5mX2R1cF9uZXRkZXYub1xuICA4NTpcdFxuICA4NjpcdCMgbmZfdGFibGVzXG4gIDg3Olx0bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG4gIDg4Olx0XHRcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxuICA4OTpcdFx0XHQgIG5mdF9iaXR3aXNlLm8gbmZ0X2J5dGVvcmRlci5vIG5mdF9wYXlsb2FkLm8gbmZ0X2xvb2t1cC5vIFxcXG4gIDkwOlx0XHRcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcbiAgOTE6XHRcdFx0ICBuZnRfY291bnRlci5vIG5mdF9vYmpyZWYubyBuZnRfaW5uZXIubyBcXFxuICA5MjpcdFx0XHQgIG5mdF9jaGFpbl9yb3V0ZS5vIG5mX3RhYmxlc19vZmZsb2FkLm8gXFxcbiAgOTM6XHRcdFx0ICBuZnRfc2V0X2hhc2gubyBuZnRfc2V0X2JpdG1hcC5vIG5mdF9zZXRfcmJ0cmVlLm8gXFxcbiAgOTQ6XHRcdFx0ICBuZnRfc2V0X3BpcGFwby5vXG4gIDk1Olx0XG4gIDk2Olx0aWZkZWYgQ09ORklHX1g4Nl82NFxuICA5NzpcdGlmbmRlZiBDT05GSUdfVU1MXG4gIDk4Olx0bmZfdGFibGVzLW9ianMgJiM0Mzs9IG5mdF9zZXRfcGlwYXBvX2F2eDIub1xuICA5OTpcdGVuZGlmXG4gMTAwOlx0ZW5kaWZcbiAxMDE6XHRcbiAxMDI6XHRpZmRlZiBDT05GSUdfTkZUX0NUXG4gMTAzOlx0aWZkZWYgQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FXG4gMTA0Olx0bmZfdGFibGVzLW9ianMgJiM0Mzs9IG5mdF9jdF9mYXN0Lm9cbiAxMDU6XHRlbmRpZlxuIDEwNjpcdGVuZGlmXG4gMTA3Olx0XG4gMTA4Olx0b2JqLSQoQ09ORklHX05GX1RBQkxFUylcdFx0JiM0Mzs9IG5mX3RhYmxlcy5vXG4gMTA5Olx0b2JqLSQoQ09ORklHX05GVF9DT01QQVQpXHQmIzQzOz0gbmZ0X2NvbXBhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBgQ09ORklHX05GX1RBQkxFU2AgRGVwZW5kZW5jaWVzKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19ORl9UQUJMRVNgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgdXN1YWwgcGxhY2UgdG8gZmluZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLiBJIGtub3cgYENPTkZJR19ORl9UQUJMRVNgIGlzIHByZXR0eSBmdW5kYW1lbnRhbCwgYnV0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IGF3YXJlIG9mLCBvciBldmVuIHNvbWUgZGVwZW5kZW5jaWVzIHdoaWNoIHdpbGwgaW1wYWN0IHRoZSBpbXBhY3Qgb2YgYENPTkZJR19ORl9UQUJMRVNgLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlLiBUaW1lIHRvIGdldCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfVEFCTEVTXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIwMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHByb2Nlc3NpbmcgdGhlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgbmV0ZmlsdGVyYCBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYEtjb25maWdgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBBbmQgaWYgbXkgbWVtb3J5IHNlcnZlcywgdGhlIHJlbGV2YW50IHNlY3Rpb24gZm9yIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHN0YXJ0cyBhcm91bmQgbGluZSA0NTUuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHBsYWNlIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBvcHRpb25zIGF2YWlsYWJsZSwgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIgd2l0aGluIHRoaXMgY29tcGxleCBmcmFtZXdvcmsuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGBjb25maWdgIHN0YXRlbWVudHMsIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBhbmQgbWF5YmUgc29tZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvIGd1aWRlIHRoZSBidWlsZCBwcm9jZXNzLiBIb3BlZnVsbHksIGl0JiMzOTtzIHdlbGwtc3RydWN0dXJlZCBhbmQgY29tbWVudGVkIGVub3VnaCB0aGF0IEkgY2FuIHF1aWNrbHkgZ3JvayB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB2YXJpb3VzIE5ldGZpbHRlciBmZWF0dXJlcyBhbmQgb3B0aW9ucy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTA6XHRjb25maWcgTkVURklMVEVSX1NZTlBST1hZXG4gNDUxOlx0XHR0cmlzdGF0ZVxuIDQ1MjpcdFxuIDQ1MzpcdGVuZGlmICMgTkZfQ09OTlRSQUNLXG4gNDU0Olx0XG4gNDU1Olx0Y29uZmlnIE5GX1RBQkxFU1xuIDQ1NjpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gNDU3Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuIDQ1ODpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBzdXBwb3J0XCYjMzQ7XG4gNDU5Olx0XHRoZWxwXG4gNDYwOlx0XHQgIG5mdGFibGVzIGlzIHRoZSBuZXcgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGZyYW1ld29yayB0aGF0IGludGVuZHMgdG9cbiA0NjE6XHRcdCAgcmVwbGFjZSB0aGUgZXhpc3Rpbmcge2lwLGlwNixhcnAsZWJ9X3RhYmxlcyBpbmZyYXN0cnVjdHVyZS4gSXRcbiA0NjI6XHRcdCAgcHJvdmlkZXMgYSBwc2V1ZG8tc3RhdGUgbWFjaGluZSB3aXRoIGFuIGV4dGVuc2libGUgaW5zdHJ1Y3Rpb24tc2V0XG4gNDYzOlx0XHQgIChhbHNvIGtub3duIGFzIGV4cHJlc3Npb25zKSB0aGF0IHRoZSB1c2Vyc3BhY2UgJiMzOTtuZnQmIzM5OyB1dGlsaXR5XG4gNDY0Olx0XHQgIChodHRwczovL3d3dy5uZXRmaWx0ZXIub3JnL3Byb2plY3RzL25mdGFibGVzKSB1c2VzIHRvIGJ1aWxkIHRoZVxuIDQ2NTpcdFx0ICBydWxlLXNldC4gSXQgYWxzbyBjb21lcyB3aXRoIHRoZSBnZW5lcmljIHNldCBpbmZyYXN0cnVjdHVyZSB0aGF0XG4gNDY2Olx0XHQgIGFsbG93cyB5b3UgdG8gY29uc3RydWN0IG1hcHBpbmdzIGJldHdlZW4gbWF0Y2hpbmdzIGFuZCBhY3Rpb25zXG4gNDY3Olx0XHQgIGZvciBwZXJmb3JtYW5jZSBsb29rdXBzLlxuIDQ2ODpcdFxuIDQ2OTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDQ3MDpcdFxuIDQ3MTpcdGlmIE5GX1RBQkxFU1xuIDQ3MjpcdGNvbmZpZyBORl9UQUJMRVNfSU5FVFxuIDQ3MzpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gNDc0Olx0XHRzZWxlY3QgTkZfVEFCTEVTX0lQVjRcbiA0NzU6XHRcdHNlbGVjdCBORl9UQUJMRVNfSVBWNlxuIDQ3NjpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG1peGVkIElQdjQvSVB2NiB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuIDQ3NzpcdFx0aGVscFxuIDQ3ODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbWl4ZWQgSVB2NC9JUHY2IFwmIzM0O2luZXRcJiMzNDsgdGFibGUuXG4gNDc5Olx0XG4gNDgwOlx0Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbiA0ODE6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiA0ODI6XHRcdGhlbHBcbiA0ODM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgXCYjMzQ7bmV0ZGV2XCYjMzQ7IHRhYmxlLlxuIDQ4NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTY3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gSm91cm5leSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORl9UQUJMRVNgLiBJIGtub3cgaXQmIzM5O3MgcmVsYXRlZCB0byBgTkVURklMVEVSYCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIG15IG5leHQgbW92ZSBpcyB0byBwaW5wb2ludCBleGFjdGx5ICp3aGVyZSogYE5GX1RBQkxFU2AgcmVzaWRlcyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlICYjMzQ7Q29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiYjMzQ7IG1lbnUsIG9yIHBlcmhhcHMgaXQmIzM5O3MgZ2F0ZWQgYmVoaW5kIGFuIGBpZiBORVRGSUxURVJgIGJsb2NrLiBUaGF0JiMzOTtzIG15IGltbWVkaWF0ZSBmb2N1cy4KClRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZywgYW5kIGZvciBhIGJyb2FkZXIgb3ZlcnZpZXcgb2YgdGhlIG5ldCBjb25maWd1cmF0aW9uIG92ZXJhbGwsIEkgc2hvdWxkIGFsc28gYnJpZWZseSBnbGFuY2UgYXQgYG5ldC9LY29uZmlnYCB0byBjb25maXJtIHRoZXJlIGFyZSBubyB1cHN0cmVhbSBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBwcm92aWRlIHNvbWUgaW1wb3J0YW50IGNvbnRleHQuIFRoaXMgd2lsbCBnaXZlIG1lIHdoYXQgSSBuZWVkIHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlIFwmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0OyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbi0tXG5uZXQvS2NvbmZpZy0yNDYtXG5uZXQvS2NvbmZpZzoyNDc6c291cmNlIFwmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjQ4LXNvdXJjZSBcJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzI3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkV4YW1pbmluZyBLY29uZmlnIENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIGJldHRlci4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpcyBoYXBwZW5pbmcgYXJvdW5kIGxpbmVzIDIzMCB0byAyNTAgaW4gYG5ldC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIHJpZ2h0IG5vdy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRlZmluZWQsIHdoYXQgY29uZGl0aW9uYWxzIGFyZSBpbiBwbGF5LCBhbmQgaG93IHRoZXNlIG9wdGlvbnMgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2suIEhvcGVmdWxseSwgd2hhdGV2ZXIgSSYjMzk7bSBsb29raW5nIGZvciBpcyBpbiB0aGF0IHJhbmdlLiBUaW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzMDpcdFxuIDIzMTpcdGNvbmZpZyBCUklER0VfTkVURklMVEVSXG4gMjMyOlx0XHR0cmlzdGF0ZSBcJiMzNDtCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1wmIzM0O1xuIDIzMzpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAyMzQ6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSIFx1MDAyNlx1MDAyNiBJTkVUXG4gMjM1Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDIzNjpcdFx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG4gMjM3Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAyMzg6XHRcdGhlbHBcbiAyMzk6XHRcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBsZXQgYXJwdGFibGVzIHJlc3AuIGlwdGFibGVzIHNlZSBicmlkZ2VkXG4gMjQwOlx0XHQgIEFSUCByZXNwLiBJUCB0cmFmZmljLiBJZiB5b3Ugd2FudCBhIGJyaWRnaW5nIGZpcmV3YWxsLCB5b3UgcHJvYmFibHlcbiAyNDE6XHRcdCAgd2FudCB0aGlzIG9wdGlvbiBlbmFibGVkLlxuIDI0MjpcdFx0ICBFbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBvcHRpb24gZG9lc24mIzM5O3QgZW5hYmxlIG9yIGRpc2FibGVcbiAyNDM6XHRcdCAgZWJ0YWJsZXMuXG4gMjQ0Olx0XG4gMjQ1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjQ2Olx0XG4gMjQ3Olx0c291cmNlIFwmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI0ODpcdHNvdXJjZSBcJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI0OTpcdHNvdXJjZSBcJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI1MDpcdHNvdXJjZSBcJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXCYjMzQ7XG4gMjUxOlx0XG4gMjUyOlx0ZW5kaWYgIyBpZiBORVRGSUxURVJcbiAyNTM6XHRcbiAyNTQ6XHRzb3VyY2UgXCYjMzQ7bmV0L3NjdHAvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODY0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXRmaWx0ZXIgYW5kIE5GX1RBQkxFUyBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgYE5FVEZJTFRFUmAgYW5kIGBORl9UQUJMRVNgIGNvbmZpZ3VyYXRpb25zLCBvYnZpb3VzbHkuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc2V0IGVsZW1lbnRzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUuIEFyZSB0aGV5IGNhbGxlZCBkaXJlY3RseT8gT3IsIGFyZSB0aGV5IGluZGlyZWN0bHkgaW52b2tlZCB0aHJvdWdoIGZ1bmN0aW9ucyBsaWtlIGBuZnRfc2V0ZWxlbV9pbnNlcnRgLCBgX19uZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCwgYG5mX3RhYmxlc19uZXdzZXRlbGVtYCwgb3IgYG5mX3RhYmxlc19kZWxzZXRlbGVtYCwgb3Igc29tZSBvdGhlciBwYXRoPyBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjYWxsIGNoYWluLCBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIGBncmVwYCBvbiBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgIHRvIHNlZSB3aGVyZSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIGFyZSBhY3R1YWxseSBiZWluZyB1c2VkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NjQ3Nz1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX3BhcnNlX2RhdGEoc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NDk2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NjQ5NzpzdGF0aWMgdm9pZCAqbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZ2V0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY0OTgtXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY1MTg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9nZXQoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTI3LVx0fSBlbHNlIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY1Mjg6XHRcdHByaXYgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9nZXQoY3R4LVx1MDAzZW5ldCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY1MjktXHRcdGlmICghcHJpdilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTY5PXN0cnVjdCBuZnRfc2V0X2V4dCAqbmZ0X3NldF9jYXRjaGFsbF9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5ODYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTg3OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5ODgtXHRcdFx0XHQgICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDE2PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDI0LVx0aWYgKGZsYWdzIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDI1Olx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDI2LVx0ZWxzZVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwNjk9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1zX2FkZChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwODctXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDg4OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDg5LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcxMjg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTM0LVx0aWYgKGZsYWdzIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTM1Olx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzYtXHRlbHNlXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE0MS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNDI6c3RhdGljIHZvaWQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVzdHJveShzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDctXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTQ4OnN0YXRpYyB2b2lkIG5mdF9zZXRlbGVtX2NhdGNoYWxsX3JlbW92ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTQ5LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNTUtXHRcdGlmIChjYXRjaGFsbC1cdTAwM2VlbGVtID09IGVsZW1fcHJpdikge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE1NjpcdFx0XHRuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZXN0cm95KGNhdGNoYWxsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNTctXHRcdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzE2Mj1zdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9yZW1vdmUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNjYtXHRpZiAobmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoc2V0LCBlbGVtX3ByaXYpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE2NzpcdFx0bmZ0X3NldGVsZW1fY2F0Y2hhbGxfcmVtb3ZlKG5ldCwgc2V0LCBlbGVtX3ByaXYpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE2OC1cdGVsc2Vcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDY3OT1zdHJ1Y3QgbmZ0X3RyYW5zX2djICpuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYyhzdHJ1Y3QgbmZ0X3RyYW5zX2djICpnYylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDcwMC1cdFx0bmZ0X3NldGVsZW1fZGF0YV9kZWFjdGl2YXRlKGdjLVx1MDAzZW5ldCwgZ2MtXHUwMDNlc2V0LCBlbGVtX3ByaXYpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA3MDE6XHRcdG5mdF9zZXRlbGVtX2NhdGNoYWxsX2Rlc3Ryb3koY2F0Y2hhbGwpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA3MDItXHRcdG5mdF90cmFuc19nY19lbGVtX2FkZChnYywgZWxlbV9wcml2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NDMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBUYWJsZSBBUEkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRob3NlIGFyZSBpbnRlcm5hbCwgc3RhdGljIGZ1bmN0aW9ucywgcmVzaWRpbmcgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gR2l2ZW4gdGhlaXIgbmFtaW5nIGFuZCBsb2NhdGlvbiwgdGhlc2UgYXJlIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgTmV0ZmlsdGVyIHRhYmxlIEFQSSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gb2Ygc2V0IGVsZW1lbnRzLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpczogd2hhdCBhcmUgdGhlIGNhbGwgc2l0ZXMgZm9yIHRoZSBub24gJiMzNDtjYXRjaGFsbCYjMzQ7IHZlcnNpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5vcm1hbCBvcGVyYXRpb24gYmVmb3JlIEkgY2FuIHByb3Blcmx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgY2FsbHMgdG8gYG5mdF9zZXRlbGVtX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJpZ2dlciBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBleGlzdGluZyBpbnNlcnRpb24gYW5kIGRlYWN0aXZhdGlvbiBwYXRocyBpcyBjcml0aWNhbCBmb3IgZmlndXJpbmcgb3V0IGhvdyB0aGUgcGF0Y2ggYWx0ZXJzIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldGVsZW1fKGluc2VydHxkZWFjdGl2YXRlKVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY5ODc9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMTUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDE2OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMTctXHRcdFx0ICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDg4PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzExMC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxMTE6c3RhdGljIGludCBfX25mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzExMi1cdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMjctXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTI4OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTI5LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzYtXHRlbHNlXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTM3Olx0XHRyZXQgPSBfX25mdF9zZXRlbGVtX2RlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEzOC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MjQ5PXN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1NzEtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3NTcyOlx0ZXJyID0gbmZ0X3NldGVsZW1faW5zZXJ0KGN0eC1cdTAwM2VuZXQsIHNldCwgXHUwMDI2ZWxlbSwgXHUwMDI2ZWxlbV9wcml2LCBmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTczLVx0aWYgKGVycikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc4Mjk9c3RhdGljIGludCBuZnRfZGVsX3NldGVsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTAxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzkwMjpcdGVyciA9IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY3R4LVx1MDAzZW5ldCwgc2V0LCBcdTAwMjZlbGVtLCBmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTAzLVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NzAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIG5mdGFibGVzIENhdGNoYWxsIEVsZW1lbnQgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBwYXRjaCBpbXBhY3RzIG5mdGFibGVzLCBzcGVjaWZpY2FsbHkgdGhlIGNhdGNoYWxsIGVsZW1lbnQgaGFuZGxpbmcuIEkgc2VlIHRoYXQgdGhlIGNvcmUgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBUaGVzZSBhcmUgc3RhdGljIEMgZnVuY3Rpb25zIHdpdGhpbiBgbmZfdGFibGVzX2FwaS5jYCwgc28gd2hpbGUgdGhleSBtaWdodCBiZSBpbmxpbmVkIGluIHNvbWUgc2NlbmFyaW9zLCB0aGV5IGFyZSBkaXJlY3RseSBtb2RpZmllZC4KClRoZSBrZXkgcXVlc3Rpb24gaXMsICphcmUgdGhlc2UgZnVuY3Rpb25zIHdvcnRoIHRhcmdldGluZyBmb3IgZnV6emluZz8qIEkgdGhpbmsgdGhleSBhcmUuIE15IGxvZ2ljIGlzIHRoYXQgYG5mdF9hZGRfc2V0X2VsZW1gIGFuZCBgbmZ0X2RlbF9zZXRlbGVtYCBjYWxsIHRoZXNlIGZ1bmN0aW9ucy4gVGhlcmVmb3JlLCBib3RoIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAgYXJlIGxpa2VseSBlbnRyeSBwb2ludHMgdG8gY29uc2lkZXIuCgpDb25zaWRlcmluZyBGb2N1c1N5bWJvbHMsIEkgY2FuIGluY2x1ZGUgYm90aCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLCBpbiBhZGRpdGlvbiB0byBgbmZ0X2FkZF9zZXRfZWxlbWAgYW5kIGBuZnRfZGVsX3NldGVsZW1gLCBpbiBteSBmdXp6aW5nIHRhcmdldCBsaXN0LiBUaGlzIGlzIGxvZ2ljYWwgYmVjYXVzZSBldmVuIGlmIHRoZXNlIGFyZSBzdGF0aWMsIHRoZXkgaGF2ZSBzeW1ib2xzIGFuZCBhcmUgZGlyZWN0bHkgbW9kaWZpZWQuCgpOb3csIGxldCYjMzk7cyBlc3RhYmxpc2ggcmVhY2hhYmlsaXR5LiBUaGUgbmV0bGluayBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBtZXNzYWdlcyBsaWtlIGBORlRfTVNHX05FV1NFVEVMRU1gIGFuZCBgTkZUX01TR19ERUxTRVRFTEVNYCwgYWxsb3dzIGZ1bGx5IHJlYWNoYWJsZSBjb2RlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVucHJpdmlsZWdlZCB1c2VyIG5hbWVzcGFjZXMgYW5kIG5ldHdvcmsgbmFtZXNwYWNlcywgb3Igcm9vdCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIHN5emthbGxlci4gU2luY2UgTkZfVEFCTEVTIGlzIHN0YW5kYXJkIG5ldGxpbmsgbmV0d29ya2luZyBjb2RlIGluIGNvcmUgbmV0ZmlsdGVyLCBpdCBpcyBoaWdobHkgYWNjZXNzaWJsZS4KCklzIHRoaXMgcGF0Y2ggKldvcnRoRnV6emluZyo/IEFic29sdXRlbHkuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2V0IGVsZW1lbnQgbG9va3VwLCBpbnNlcnRpb24sIGFuZCBkZWFjdGl2YXRpb24gbG9naWMgZm9yIGNhdGNoYWxsIGVsZW1lbnRzIHdpdGggdGltZW91dHMgdXNpbmcgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYC4gVGhpcyBpcyBmdWxseSByZWFjaGFibGUgbmV0ZmlsdGVyIGNvZGUgdGhhdCBoYW5kbGVzIHVzZXIgcmVxdWVzdHMgb3ZlciBuZXRsaW5rIChuZm5ldGxpbmspLgoKRmluYWxseSwgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBzdHJhaWdodGZvcndhcmQ6IGBDT05GSUdfTkVURklMVEVSYCBhbmQgYENPTkZJR19ORl9UQUJMRVNgLiBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIHRvcC1sZXZlbCBuZXRsaW5rIGNhbGxiYWNrIGhhbmRsZXJzIGZvciBgTkZUX01TR19ORVdTRVRFTEVNYCBhbmQgYE5GVF9NU0dfREVMU0VURUxFTWAgd2hpY2ggYXJlIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAgYW5kIGBuZl90YWJsZXNfZGVsc2V0ZWxlbWAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfbmV3c2V0ZWxlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDk9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzY2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc2Njg6c3RhdGljIGludCBuZl90YWJsZXNfbmV3c2V0ZWxlbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzY2OS1cdFx0XHRcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTkzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZfdGFibGVzX2NiW05GVF9NU0dfTUFYXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA0Mi1cdFtORlRfTVNHX05FV1NFVEVMRU1dID0ge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAwNDM6XHRcdC5jYWxsXHRcdD0gbmZfdGFibGVzX25ld3NldGVsZW0sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA0NC1cdFx0LnR5cGVcdFx0PSBORk5MX0NCX0JBVENILFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEwNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlICYjMzQ7dGhvdWdodHMmIzM0OyB5b3UmIzM5O3ZlIGdpdmVuIG1lLCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGxpa2UgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBuZl90YWJsZXNfZGVsc2V0ZWxlbWAqKgoKQWxyaWdodCwgc28gdGhlIHByb21wdCB0ZWxscyBtZSB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYG5mX3RhYmxlc19kZWxzZXRlbGVtYC4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRvIHJhY2UgYSBiaXQuIGBuZl90YWJsZXNgLi4uIHRoYXQmIzM5O3MgTmV0ZmlsdGVyIHRhYmxlcywgdGhlIG5ld2VyLCBtb3JlIHZlcnNhdGlsZSBwYWNrZXQgZmlsdGVyaW5nIGFuZCBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24gZnJhbWV3b3JrIGluIHRoZSBMaW51eCBrZXJuZWwuIEFuZCBgZGVsc2V0ZWxlbWAuLi4gdGhhdCYjMzk7cyBnb3QgdG8gYmUgYSBmdW5jdGlvbiByZWxhdGVkIHRvIGRlbGV0aW5nIGVsZW1lbnRzIGZyb20gYSBzZXQgd2l0aGluIGEgdGFibGUuIEl0JiMzOTtzIHByb2JhYmx5IGEgY29yZSBmdW5jdGlvbiwgY3JpdGljYWwgZm9yIHRoZSBkeW5hbWljIG5hdHVyZSBvZiB0aGVzZSBmaXJld2FsbHMuCgpNeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmU6IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgdHJpZ2dlcmVkIHRoaXMgbmVlZCB0byBjaGVjayB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uPyBBcmUgd2UgZGVidWdnaW5nIGEgcHJvYmxlbSwgb3B0aW1pemluZyBwZXJmb3JtYW5jZSwgb3IganVzdCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgd29ya2luZ3MgYmV0dGVyPyBUaGUgc3BlY2lmaWNzIG1hdHRlci4gV2l0aG91dCBjb250ZXh0LCBJJiMzOTtkIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBxdWljayBkaXZlIGludG8gdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlLCBtYXliZSBicm93c2luZyB0aGUgYG5ldGZpbHRlcmAgc3Vic3lzdGVtIGRpcmVjdG9yeSBhbmQgbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gSSYjMzk7ZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQg4oCTIHRoZSBgbmZ0X3NldGAgc3RydWN0dXJlLCBhbnkgZWxlbWVudCByZXByZXNlbnRhdGlvbnMgKGxpa2UgYG5mdF9zZXRfZWxlbWApLCBhbmQgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5LiBBbnkgY29kZSByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gaXMgYWx3YXlzIG9mIGludGVyZXN0IHRvbywgbG9va2luZyBmb3IgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciB2dWxuZXJhYmlsaXRpZXMuCgpJJiMzOTtkIGFsc28gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbi4gQSBidWdneSBgZGVsc2V0ZWxlbWAgY291bGQgbGVhZCB0byBzZXJpb3VzIGlzc3VlczogaW5jb3JyZWN0IGZpcmV3YWxsIGJlaGF2aW9yIChhbGxvd2luZyBvciBibG9ja2luZyB0aGUgd3JvbmcgdHJhZmZpYyksIG1lbW9yeSBjb3JydXB0aW9uLCBkZW5pYWwgb2Ygc2VydmljZSAoaWYgZWxlbWVudHMgYXJlIGRlbGV0ZWQgYXQgdGhlIHdyb25nIHRpbWUgb3Igbm90IGF0IGFsbCksIG9yIGV2ZW4gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIChpZiBhbiBhdHRhY2tlciBjb3VsZCBtYW5pcHVsYXRlIHRoZSBzZXQgY29udGVudHMpLiBTbywgYSBnb29kIGNoZWNrIHdvdWxkIGludm9sdmUgcmV2aWV3aW5nIG5vdCBqdXN0IHRoZSBmdW5jdGlvbiBpdHNlbGYsIGJ1dCBhbHNvIGhvdyBpdCYjMzk7cyBjYWxsZWQsIGFuZCB3aGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQuIEkmIzM5O2QgZGVmaW5pdGVseSBiZSBpbnRlcmVzdGVkIGluIHNlZWluZyB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgY2FsbCBgbmZfdGFibGVzX2RlbHNldGVsZW1gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfZGVsc2V0ZWxlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc5OTE9c3RhdGljIGludCBuZnRfc2V0X2ZsdXNoKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsIHU4IGdlbm1hc2spXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwOC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjgwMDk6c3RhdGljIGludCBuZl90YWJsZXNfZGVsc2V0ZWxlbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAxMC1cdFx0XHRcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTkzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZfdGFibGVzX2NiW05GVF9NU0dfTUFYXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA2MC1cdFtORlRfTVNHX0RFTFNFVEVMRU1dID0ge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAwNjE6XHRcdC5jYWxsXHRcdD0gbmZfdGFibGVzX2RlbHNldGVsZW0sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA2Mi1cdFx0LnR5cGVcdFx0PSBORk5MX0NCX0JBVENILFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDY2LVx0W05GVF9NU0dfREVTVFJPWVNFVEVMRU1dID0ge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAwNjc6XHRcdC5jYWxsXHRcdD0gbmZfdGFibGVzX2RlbHNldGVsZW0sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA2OC1cdFx0LnR5cGVcdFx0PSBORk5MX0NCX0JBVENILFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk3OAoJCQkJCQkJb3V0cHV0OiAyMDUKCQkJCQkJCXRob3VnaHRzOiAyNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJpYWdlIFZlcmlmaWNhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBsZXQmIzM5O3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3ZlIGNvdmVyZWQgb3VyIGJhc2VzIG9uIHRoaXMgdHJpYWdlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgbG9va3Mgc29saWQ7IHdlJiMzOTtyZSBkZWZpbml0ZWx5IGRlYWxpbmcgd2l0aCBhIGZ1enppbmcgdGFyZ2V0LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgYW5kIGZvciBnb29kIHJlYXNvbi4gVGhlIHJlYXNvbmluZyBiZWhpbmQgaXQgaXMgc291bmQ6IHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBhcm91bmQgaW4gdGhlIG5mdGFibGVzIGludGVybmFscywgc3BlY2lmaWNhbGx5IHR3ZWFraW5nIHRoZSBsb2dpYyBhcm91bmQgY2F0Y2gtYWxsIHNldCBlbGVtZW50IGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uLiBXZSYjMzk7cmUgbG9va2luZyBhdCBmdW5jdGlvbnMgbGlrZSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGFmZmVjdHMgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBleHBpcmVkIGVsZW1lbnRzIGJlZm9yZSBkZWNpZGluZyBpZiB0aGV5IGFyZSBhY3RpdmUvbWF0Y2hpbmcuCgpUaGUgY3JpdGljYWwgYml0IGlzIHRoYXQgdGhpcyBjb2RlIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIHNwZWNpZmljYWxseSB0aHJvdWdoIGBORlRfTVNHX05FV1NFVEVMRU1gLCBgTkZUX01TR19ERUxTRVRFTEVNYCwgYW5kIGBORlRfTVNHX0RFU1RST1lTRVRFTEVNYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgZnV6emluZyB0YXJnZXQgc2NlbmFyaW8gcmlnaHQgdGhlcmUg4oCTIGFueSBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZXNlIGZ1bmN0aW9ucyBjb3VsZCBiZSBleHBsb2l0ZWQgcmVtb3RlbHkuIFRoZXJlZm9yZSwgaXQmIzM5O3MgYWJzb2x1dGVseSB3b3J0aCBvdXIgdGltZSB0byB0aHJvdyBldmVyeXRoaW5nIHdlJiMzOTt2ZSBnb3QgYXQgdGhpcyB0byB2ZXJpZnkgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucywgbGlmZXRpbWUgbWFuYWdlbWVudCwgYW5kIGNvbmN1cnJlbmN5IGhhbmRsaW5nLiBUaGVzZSBhcmUga2V5IGFyZWFzIGluIHRoZSBuZnRhYmxlcyBjb2RlIGJhc2UuCgpUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwb3Qgb24sIGhpZ2hsaWdodGluZyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zOiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCwgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLCBgbmZ0X2FkZF9zZXRfZWxlbWAsIGBuZnRfZGVsX3NldGVsZW1gLCBgbmZfdGFibGVzX25ld3NldGVsZW1gLCBhbmQgYG5mX3RhYmxlc19kZWxzZXRlbGVtYC4gVGhlc2UgYXJlIGFsbCBwYXJ0IG9mIHRoZSByZWxldmFudCBjYWxsLWNoYWluIGFuZCB3b3VsZCBiZSB0aGUgb25lcyB0byBvYnNlcnZlIGNhcmVmdWxseS4KCkZpbmFsbHksIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYE5FVEZJTFRFUmAgYW5kIGBORl9UQUJMRVNgIGFyZSB0aGUgY3J1Y2lhbCBvbmVzLgoKV2l0aCB0aGlzIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIHRyaWFnZS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfYWRkX3NldF9lbGVtJiMzNDssCiAgICAmIzM0O25mdF9kZWxfc2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsc2V0ZWxlbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBuZnRhYmxlcyBjYXRjaC1hbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0IGFuZCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlIHRvIGFjY291bnQgZm9yIGV4cGlyZWQgc2V0IGVsZW1lbnRzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIG1lc3NhZ2VzIChORlRfTVNHX05FV1NFVEVMRU0gYW5kIE5GVF9NU0dfREVMU0VURUxFTSkgYW5kIG1vZGlmeSBzdGF0ZSB2YWxpZGF0aW9uIGFuZCBlbGVtZW50IGRlYWN0aXZhdGlvbiBsb2dpYywgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucywgbGlmZXRpbWUgaXNzdWVzLCBvciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfYWRkX3NldF9lbGVtJiMzNDssCiAgICAmIzM0O25mdF9kZWxfc2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsc2V0ZWxlbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBuZnRhYmxlcyBjYXRjaC1hbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0IGFuZCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlIHRvIGFjY291bnQgZm9yIGV4cGlyZWQgc2V0IGVsZW1lbnRzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIG1lc3NhZ2VzIChORlRfTVNHX05FV1NFVEVMRU0gYW5kIE5GVF9NU0dfREVMU0VURUxFTSkgYW5kIG1vZGlmeSBzdGF0ZSB2YWxpZGF0aW9uIGFuZCBlbGVtZW50IGRlYWN0aXZhdGlvbiBsb2dpYywgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucywgbGlmZXRpbWUgaXNzdWVzLCBvciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIG5mdGFibGVzIGNhdGNoYWxsIHNldCBlbGVtZW50IGhhbmRsaW5nIGluIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAgdG8gY2hlY2sgd2hldGhlciBhbiBleGlzdGluZyBjYXRjaGFsbCBlbGVtZW50IGhhcyBleHBpcmVkIHVzaW5nIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKClgIGFuZCB0aW1lc3RhbXBzIG9idGFpbmVkIHZpYSBgZ2V0X2ppZmZpZXNfNjQoKWAuXG5cbi0gKipLTVNBTiBhcHBsaWNhYmlsaXR5Kio6IEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBsb2NhbCBgdTY0IHRzdGFtcGAgdmFyaWFibGVzIGRpcmVjdGx5IGZyb20gYGdldF9qaWZmaWVzXzY0KClgIGFuZCBjaGVja3MgZXhpc3RpbmcsIHByb3Blcmx5IGluaXRpYWxpemVkIGV4dGVuc2lvbiBhdHRyaWJ1dGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYWxsb2NhdGlvbnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLlxuLSAqKktBU0FOIGFwcGxpY2FiaWxpdHkqKjogS0FTQU4sIHRvZ2V0aGVyIHdpdGggc3RhbmRhcmQgZGVidWcgdG9vbHMsIGlzIGFwcHJvcHJpYXRlIGZvciBjYXRjaGluZyBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZG91YmxlLWZyZWUgaXNzdWVzIHJlbGF0ZWQgdG8gc2V0IGVsZW1lbnQgbGlmZWN5Y2xlcyBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uLlxuXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg0ZmI5ODFlYzE2NGM1ZDU5M2Q4ZjQwZTIyNjhmOGJlZGVmMDBjNzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwODozNjoyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKaW5kZXggNzY1YTkyZmE5MGQ2Mi4uMGYzNDQ5Y2NhNWQyNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKQEAgLTY5OTEsMTEgJiM0Mzs2OTkxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwKIHsKIAlzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDsKIAl1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpOwomIzQzOwl1NjQgdHN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTsKIAlzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsICZhbXA7c2V0LSZndDtjYXRjaGFsbF9saXN0LCBsaXN0KSB7CiAJCWV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC0mZ3Q7ZWxlbSk7Ci0JCWlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpIHsKJiM0MzsJCWlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgJmFtcDsmYW1wOwomIzQzOwkJICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkgewogCQkJKnByaXYgPSBjYXRjaGFsbC0mZ3Q7ZWxlbTsKIAkJCXJldHVybiAtRUVYSVNUOwogCQl9CkBAIC03MDg4LDExICYjNDM7NzA5MCwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKQogewogCXN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsOwomIzQzOwl1NjQgdHN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTsKIAlzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsICZhbXA7c2V0LSZndDtjYXRjaGFsbF9saXN0LCBsaXN0KSB7CiAJCWV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC0mZ3Q7ZWxlbSk7Ci0JCWlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSkKJiM0MzsJCWlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fAomIzQzOwkJICAgIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKQogCQkJY29udGludWU7CiAKIAkJa2ZyZWUoZWxlbS0mZ3Q7cHJpdik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgS01TQU4gTmVlZHMgb2YgVGhpcyBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgdXNlciBpcyBlc3NlbnRpYWxseSBhc2tpbmcgZm9yIGEgY29kZSByZXZpZXcgd2l0aCBhIHNwZWNpZmljIGZvY3VzIG9uIG1lbW9yeSBzYWZldHksIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcgdG8gYmUgcHJvYWN0aXZlIGFib3V0LiBNeSBmaXJzdCBzdGVwIGlzIGEgcXVpY2sgc2FmZXR5IGNoZWNrLCBqdXN0IHRvIGJlIHN1cmUgdGhlcmUmIzM5O3Mgbm90aGluZyBvdmVydGx5IHJpc2t5IGhlcmUuIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHRoaXMgaXMgYSBjb2RlIGFuYWx5c2lzIHJlcXVlc3QsIG5vdCBhbiBleHBsb2l0IGF0dGVtcHQgb3Igc29tZXRoaW5nIG1hbGljaW91cy4gSXQmIzM5O3MgYWJvdXQgcHJvYWN0aXZlIGRlYnVnZ2luZyBhbmQgZnV6emluZyB0cmlhZ2UuIEJlbmlnbiwgbG93IHNldmVyaXR5IC0gd2UmIzM5O3JlIGdvb2QgdG8gcHJvY2VlZC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGVpdGhlciBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgd2l0aGluIHRoYXQgZmlsZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBzY3JlYW1zICYjMzQ7bWVtb3J5IHVuc2FmZXR5JiMzNDsgLSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgYnVmZmVyIG92ZXJmbG93cywgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIHRoYXQgc29ydCBvZiB0aGluZy4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZXMgaW4gdGhlIHBhdGNoLCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb2RlIHNlY3Rpb24sIGludHJvZHVjZSBuZXcgcmlza3MgdGhhdCBhcmUgYmVzdCBhZGRyZXNzZWQgd2l0aCB0aGUgZm9jdXNlZCBzY3J1dGlueSBvZiBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5ODU6XHR9XG42OTg2Olx0XG42OTg3Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNjk4ODpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG42OTg5Olx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjY5OTA6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKnByaXYpXG42OTkxOlx0e1xuNjk5MjpcdFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG42OTkzOlx0XHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xuNjk5NDpcdFx0dTY0IHRzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7XG42OTk1Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbjY5OTY6XHRcbjY5OTc6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG42OTk4Olx0XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbjY5OTk6XHRcdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcdTAwMjZcdTAwMjZcbjcwMDA6XHRcdFx0ICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkge1xuNzAwMTpcdFx0XHRcdCpwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbjcwMDI6XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbjcwMDM6XHRcdFx0fVxuNzAwNDpcdFx0fVxuNzAwNTpcdFxuNzAwNjpcdFx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG43MDA3Olx0XHRpZiAoIWNhdGNoYWxsKVxuNzAwODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjcwMDk6XHRcbjcwMTA6XHRcdGNhdGNoYWxsLVx1MDAzZWVsZW0gPSBlbGVtLVx1MDAzZXByaXY7XG43MDExOlx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZjYXRjaGFsbC1cdTAwM2VsaXN0LCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCk7XG43MDEyOlx0XG43MDEzOlx0XHRyZXR1cm4gMDtcbjcwMTQ6XHR9XG43MDE1Olx0XG43MDE2Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNzAxNzpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDE4Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjcwMTk6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKmVsZW1fcHJpdixcbjcwMjA6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG43MDIxOlx0e1xuNzAyMjpcdFx0aW50IHJldDtcbjcwMjM6XHRcbjcwMjQ6XHRcdGlmIChmbGFncyBcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxuNzAyNTpcdFx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XG43MDI2Olx0XHRlbHNlXG43MDI3Olx0XHRcdHJldCA9IHNldC1cdTAwM2VvcHMtXHUwMDNlaW5zZXJ0KG5ldCwgc2V0LCBlbGVtLCBlbGVtX3ByaXYpO1xuNzAyODpcdFxuNzAyOTpcdFx0cmV0dXJuIHJldDtcbjcwMzA6XHR9XG43MDMxOlx0XG43MDMyOlx0c3RhdGljIGJvb2wgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcwMzM6XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxuNzAzNDpcdHtcbjcwMzU6XHRcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW1fcHJpdik7XG43MDM2Olx0XG43MDM3Olx0XHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfRkxBR1MpIFx1MDAyNlx1MDAyNlxuNzAzODpcdFx0ICAgICpuZnRfc2V0X2V4dF9mbGFncyhleHQpIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG43MDM5Olx0XHRcdHJldHVybiB0cnVlO1xuNzA0MDpcdFxuNzA0MTpcdFx0cmV0dXJuIGZhbHNlO1xuNzA0MjpcdH1cbjcwNDM6XHRcbjcwNDQ6XHRzdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9hY3RpdmF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDQ1Olx0XHRcdFx0XHQgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcbjcwNDY6XHR7XG43MDQ3Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtX3ByaXYpO1xuNzA0ODpcdFxuNzA0OTpcdFx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xuNzA1MDpcdFx0XHRuZnRfY2xlYXIobmV0LCBleHQpO1xuNzA1MTpcdFx0fSBlbHNlIHtcbjcwNTI6XHRcdFx0c2V0LVx1MDAzZW9wcy1cdTAwM2VhY3RpdmF0ZShuZXQsIHNldCwgZWxlbV9wcml2KTtcbjcwNTM6XHRcdH1cbjcwNTQ6XHR9XG43MDU1Olx0XG43MDU2Olx0c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDU3Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfdHJhbnNfb25lX2VsZW0gKmVsZW0pXG43MDU4Olx0e1xuNzA1OTpcdFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbS1cdTAwM2Vwcml2KTtcbjcwNjA6XHRcdGNvbnN0IHN0cnVjdCBuZnRfZWxlbV91cGRhdGUgKnVwZGF0ZSA9IGVsZW0tXHUwMDNldXBkYXRlO1xuNzA2MTpcdFxuNzA2MjpcdFx0aWYgKHVwZGF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1RSQU5TX1VQRF9USU1FT1VUKVxuNzA2MzpcdFx0XHRXUklURV9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cdTAwM2V0aW1lb3V0LCB1cGRhdGUtXHUwMDNldGltZW91dCk7XG43MDY0Olx0XG43MDY1Olx0XHRpZiAodXBkYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfVFJBTlNfVVBEX0VYUElSQVRJT04pXG43MDY2Olx0XHRcdFdSSVRFX09OQ0UobmZ0X3NldF9leHRfdGltZW91dChleHQpLVx1MDAzZWV4cGlyYXRpb24sIGdldF9qaWZmaWVzXzY0KCkgJiM0MzsgdXBkYXRlLVx1MDAzZWV4cGlyYXRpb24pO1xuNzA2NzpcdH1cbjcwNjg6XHRcbjcwNjk6XHRzdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfYWRkKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG43MDcwOlx0XHRcdFx0XHRzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlKVxuNzA3MTpcdHtcbjcwNzI6XHRcdGludCBpO1xuNzA3MzpcdFxuNzA3NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGUtXHUwMDNlbmVsZW1zOyBpJiM0MzsmIzQzOykge1xuNzA3NTpcdFx0XHRzdHJ1Y3QgbmZ0X3RyYW5zX29uZV9lbGVtICplbGVtID0gXHUwMDI2dGUtXHUwMDNlZWxlbXNbaV07XG43MDc2Olx0XG43MDc3Olx0XHRcdGlmIChlbGVtLVx1MDAzZXVwZGF0ZSlcbjcwNzg6XHRcdFx0XHRuZnRfdHJhbnNfZWxlbV91cGRhdGUodGUtXHUwMDNlc2V0LCBlbGVtKTtcbjcwNzk6XHRcdFx0ZWxzZVxuNzA4MDpcdFx0XHRcdG5mdF9zZXRlbGVtX2FjdGl2YXRlKGN0eC1cdTAwM2VuZXQsIHRlLVx1MDAzZXNldCwgZWxlbS1cdTAwM2Vwcml2KTtcbjcwODE6XHRcbjcwODI6XHRcdFx0bmZfdGFibGVzX3NldGVsZW1fbm90aWZ5KGN0eCwgdGUtXHUwMDNlc2V0LCBlbGVtLVx1MDAzZXByaXYsXG43MDgzOlx0XHRcdFx0XHRcdCBORlRfTVNHX05FV1NFVEVMRU0pO1xuNzA4NDpcdFx0XHRrZnJlZShlbGVtLVx1MDAzZXVwZGF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0ODUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlbHZpbmcgRGVlcGVyOiBJbnZlc3RpZ2F0aW5nIFNldCBFbGVtZW50IERlYWN0aXZhdGlvbioqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7dmUgZ290IGEgZ29vZCBncmFzcCBvbiB0aGUgb3ZlcmFsbCBwaWN0dXJlLCBidXQgbGV0JiMzOTtzIHNoYXJwZW4gb3VyIGZvY3VzLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCBhbmQgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWRgLiBUaGVzZSBhcmUgY3JpdGljYWwgcGllY2VzLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgaG93IHN0YWxlIGVsZW1lbnRzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIHNldCBzdHJ1Y3R1cmVzLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNhdGNoLWFsbCBkZWFjdGl2YXRpb24gZnVuY3Rpb24gd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgZXhwaXJhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgYW4gZWxlbWVudCBnZXRzIG1hcmtlZCBmb3IgZGVhY3RpdmF0aW9uIGFuZCB3aGF0IHRoZSB0cmlnZ2VyIGlzLiBJcyBpdCB0aGUgZXhwbGljaXQgY2FsbCwgb3IgZG9lcyB0aGlzIGludGVycGxheSB3aXRoIHRoZSBhZ2luZyBvZiBlbGVtZW50cz8gSSBzaG91bGQgYmUgZXhhbWluaW5nIGlmIHRoaXMgaXMgYSB0aW1lLWJhc2VkIG1lY2hhbmlzbSwgYSB1c2FnZSBjb3VudCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBlYWNoIGZ1bmN0aW9uIGNhbGwuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEkgc3VzcGVjdCB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb24gd2lsbCB1bmNvdmVyIHN1YnRsZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgcmVsYXRlZCB0byBnYXJiYWdlIGNvbGxlY3Rpb24uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGludGVybmFsIG1lY2hhbmljcyBvZiBOZXRmaWx0ZXIgd29yaywgYW5kLCBJIGJlbGlldmUsIHdpbGwgaGF2ZSB0aGUgbW9zdCBiZW5lZml0IGluIG9wdGltaXppbmcgdGhlIHBlcmZvcm1hbmNlIG9mIGxhcmdlciBzZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MDgwOlx0XHRcdFx0bmZ0X3NldGVsZW1fYWN0aXZhdGUoY3R4LVx1MDAzZW5ldCwgdGUtXHUwMDNlc2V0LCBlbGVtLVx1MDAzZXByaXYpO1xuNzA4MTpcdFxuNzA4MjpcdFx0XHRuZl90YWJsZXNfc2V0ZWxlbV9ub3RpZnkoY3R4LCB0ZS1cdTAwM2VzZXQsIGVsZW0tXHUwMDNlcHJpdixcbjcwODM6XHRcdFx0XHRcdFx0IE5GVF9NU0dfTkVXU0VURUxFTSk7XG43MDg0Olx0XHRcdGtmcmVlKGVsZW0tXHUwMDNldXBkYXRlKTtcbjcwODU6XHRcdH1cbjcwODY6XHR9XG43MDg3Olx0XG43MDg4Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjcwODk6XHRcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcwOTA6XHRcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSlcbjcwOTE6XHR7XG43MDkyOlx0XHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbjcwOTM6XHRcdHU2NCB0c3RhbXAgPSBnZXRfamlmZmllc182NCgpO1xuNzA5NDpcdFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XG43MDk1Olx0XG43MDk2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xuNzA5NzpcdFx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG43MDk4Olx0XHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxuNzA5OTpcdFx0XHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXG43MTAwOlx0XHRcdFx0Y29udGludWU7XG43MTAxOlx0XG43MTAyOlx0XHRcdGtmcmVlKGVsZW0tXHUwMDNlcHJpdik7XG43MTAzOlx0XHRcdGVsZW0tXHUwMDNlcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG43MTA0Olx0XHRcdG5mdF9zZXRfZWxlbV9jaGFuZ2VfYWN0aXZlKG5ldCwgc2V0LCBleHQpO1xuNzEwNTpcdFx0XHRyZXR1cm4gMDtcbjcxMDY6XHRcdH1cbjcxMDc6XHRcbjcxMDg6XHRcdHJldHVybiAtRU5PRU5UO1xuNzEwOTpcdH1cbjcxMTA6XHRcbjcxMTE6XHRzdGF0aWMgaW50IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG43MTEyOlx0XHRcdFx0XHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcxMTM6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxuNzExNDpcdHtcbjcxMTU6XHRcdHZvaWQgKnByaXY7XG43MTE2Olx0XG43MTE3Olx0XHRwcml2ID0gc2V0LVx1MDAzZW9wcy1cdTAwM2VkZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcbjcxMTg6XHRcdGlmICghcHJpdilcbjcxMTk6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYCoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSB0aGluaywgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLCBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgZGVlcGx5IGludGVydHdpbmVkIHdpdGggZXhwaXJpbmcgZWxlbWVudHMgd2l0aGluIGFuIE5GVCBzZXQuIEkgaW1hZ2luZSBpdCYjMzk7cyBjcnVjaWFsIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlbmZvcmNpbmcgcG9saWNpZXMsIGVzcGVjaWFsbHkgaW4gc2NlbmFyaW9zIHdoZXJlIHNldHMgYXJlIHVzZWQgZm9yIHJhdGUgbGltaXRpbmcsIGFjY2VzcyBjb250cm9sLCBvciBjYWNoaW5nLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgYXNwZWN0cyBJIHNob3VsZCBmb2N1cyBvbj8gVGhlIGNyaXRpY2FsIHBhcnRzIHdpbGwgdW5kb3VidGVkbHkgaW52b2x2ZSBob3cgdGhlIGZ1bmN0aW9uIGlkZW50aWZpZXMgZWxlbWVudHMgdG8gZXhwaXJlLiBXaGF04oCZcyB0aGUgZXhwaXJhdGlvbiBjcml0ZXJpYT8gVGltZS1iYXNlZD8gVXNhZ2UtYmFzZWQ/IE9yIHNvbWUgb3RoZXIgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSB3aXRoaW4gdGhlIHNldCBpdHNlbGY/CgpJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIHRoZSBtZWNoYW5pc20gZm9yIHJlbW92YWwsIGFzIHdlbGwuIElzIGl0IGEgZGlyZWN0IGRlbGV0aW9uLCBtYXJraW5nIGl0IGFzIGludmFsaWQsIG9yIHNvbWUgb3RoZXIgaW50ZXJuYWwgc3RhdGUgY2hhbmdlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBzZXQmIzM5O3MgY29uc2lzdGVuY3ksIGF0b21pY2l0eSwgYW5kIGNvbmN1cnJlbmN5IGFzcGVjdHMuIERvZXMgaXQgZW1wbG95IGxvY2tpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgb3Igb3RoZXIgc2FmZWd1YXJkcyB0byBwcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zIGR1cmluZyBlbGVtZW50IGV4cGlyeT8gQW5vdGhlciBwb3RlbnRpYWwgZGV0YWlsIHRvIGNvbnNpZGVyIGlzIHRoZSBub3RpZmljYXRpb24uIERvZXMgdGhlIGZ1bmN0aW9uIHRyaWdnZXIgYW55IGNhbGxiYWNrcywgZXZlbnRzLCBvciBsb2dnaW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gZWxlbWVudCBleHBpcnk/IFRoaXMgY291bGQgYmUgdml0YWwgZm9yIGRlYnVnZ2luZywgYXVkaXRpbmcsIG9yIHBlcmZvcm1pbmcgYWN0aW9ucyBiYXNlZCBvbiB0aGUgcmVtb3ZhbCBvZiBhbiBleHBpcmVkIGVsZW1lbnQuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGV4cGlyeSBwcm9jZXNzIGVuY291bnRlcnMgYSBwcm9ibGVtPyBJcyB0aGVyZSBhbnkgcmVwb3J0aW5nPwoKSeKAmW0gYWxzbyB3b25kZXJpbmcgYWJvdXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbiB0ZWNobmlxdWVzIGJlaW5nIHVzZWQgdG8gZWZmaWNpZW50bHkgZmluZCBhbmQgcmVtb3ZlIGV4cGlyZWQgZWxlbWVudHMsIG9yIGRvZXMgdGhpcyBwb3RlbnRpYWxseSBzY2FsZSBwb29ybHkgd2l0aCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzZXQ/IEZpbmFsbHksIEkgbmVlZCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiByZWxhdGVzIHRvIG90aGVyIGFzcGVjdHMgb2YgdGhlIE5GVCBmcmFtZXdvcmsuIEhvdyBkbyB0aGVzZSBleHBpcmVkIGVsZW1lbnRzIGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmU/IEhvdyBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBpbiByZWxhdGlvbiB0byBhbnkgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbXM/IFRoZSB3aG9sZSBkZXNpZ24gaGFzIGltcGxpY2F0aW9ucyBmb3IgcmVzb3VyY2UgdXNhZ2UuIFVuZGVyc3RhbmRpbmcgdGhlIGNvZGUgd2lsbCBnaXZlIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGVzaWduIHRyYWRlLW9mZnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbmZ0X3NldF9lbGVtX2V4cGlyZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTgzMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwciAqbmZ0X3NldF9leHRfZXhwcihjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dClcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODM3LVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjgzODpzdGF0aWMgaW5saW5lIGJvb2wgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC04MzktXHRcdFx0XHRcdCAgdTY0IHRzdGFtcClcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg9ODQ4PXN0YXRpYyBpbmxpbmUgYm9vbCBuZnRfc2V0X2VsZW1fZXhwaXJlZChjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dClcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC04NDkte1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjg1MDpcdHJldHVybiBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgZ2V0X2ppZmZpZXNfNjQoKSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODUxLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTg3PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTk5LVx0XHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAwMDpcdFx0ICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAwMS1cdFx0XHQqcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzA4OD1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwOTgtXHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzA5OTpcdFx0ICAgIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEwMC1cdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDY3OT1zdHJ1Y3QgbmZ0X3RyYW5zX2djICpuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYyhzdHJ1Y3QgbmZ0X3RyYW5zX2djICpnYylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY5MS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjkyOlx0XHRpZiAoIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2OTMtXHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYz01OT1zdGF0aWMgaW5saW5lIGludCBuZnRfcmhhc2hfY21wKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy02OC1cdFx0cmV0dXJuIDE7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jOjY5Olx0aWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXHUwMDI2aGUtXHUwMDNlZXh0LCB4LVx1MDAzZXRzdGFtcCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTcwLVx0XHRyZXR1cm4gMTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9NDE5PXN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19lbGVtICpwaXBhcG9fZ2V0X3Nsb3coY29uc3Qgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm0sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTQ3OC1cdFx0XHRlID0gZi1cdTAwM2VtdFtiXS5lO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjQ3OTpcdFx0XHRpZiAodW5saWtlbHkoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcdTAwMjZlLVx1MDAzZWV4dCwgdHN0YW1wKSB8fFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTQ4MC1cdFx0XHRcdCAgICAgIW5mdF9zZXRfZWxlbV9hY3RpdmUoXHUwMDI2ZS1cdTAwM2VleHQsIGdlbm1hc2spKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTcxMD1zdGF0aWMgdm9pZCBwaXBhcG9fZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0LCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTc1MC1cdFx0ICovXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTc1MTpcdFx0aWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXHUwMDI2ZS1cdTAwM2VleHQsIHRzdGFtcCkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNzUyLVx0XHRcdGlmICghbmZ0X3RyYW5zX2djX3NwYWNlKGdjKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jPTExMzA9c3RydWN0IG5mdF9waXBhcG9fZWxlbSAqcGlwYXBvX2dldF9hdngyKGNvbnN0IHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICptLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jLTEyMTYtXHRcdFx0ZSA9IGYtXHUwMDNlbXRbcmV0XS5lO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmM6MTIxNzpcdFx0XHRpZiAodW5saWtlbHkoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcdTAwMjZlLVx1MDAzZWV4dCwgdHN0YW1wKSB8fFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmMtMTIxOC1cdFx0XHRcdCAgICAgIW5mdF9zZXRfZWxlbV9hY3RpdmUoXHUwMDI2ZS1cdTAwM2VleHQsIGdlbm1hc2spKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz0zNDI9c3RhdGljIGludCBfX25mdF9yYnRyZWVfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMzk3LVx0XHQgKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzozOTg6XHRcdGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFx1MDAyNnJiZS1cdTAwM2VleHQsIHRzdGFtcCkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMzk5LVx0XHQgICAgbmZ0X3NldF9lbGVtX2FjdGl2ZShcdTAwMjZyYmUtXHUwMDNlZXh0LCBjdXJfZ2VubWFzaykpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9NzgzPW5mdF9yYnRyZWVfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTgxOS1cdFx0XHRcdGNvbnRpbnVlO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjgyMDpcdFx0XHR9IGVsc2UgaWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXHUwMDI2cmJlLVx1MDAzZWV4dCwgdHN0YW1wKSkge1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTgyMS1cdFx0XHRcdGJyZWFrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz04OTE9c3RhdGljIHZvaWQgbmZ0X3JidHJlZV9nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTkxMS1cdFx0fVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjkxMjpcdFx0aWYgKCFfX25mdF9zZXRfZWxlbV9leHBpcmVkKFx1MDAyNnJiZS1cdTAwM2VleHQsIHRzdGFtcCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtOTEzLVx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTYzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIHRoZSBEZXB0aHMgb2YgTmV0ZmlsdGVyJiMzOTtzIE5GVGFibGVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyBORlRhYmxlcyByZWxhdGVkLCBzcGVjaWZpY2FsbHkgdGhlIGV4cGlyYXRpb24gaGFuZGxpbmcgb2YgZWxlbWVudHMgd2l0aGluIGEgc2V0LiBUaGUgaW1tZWRpYXRlIG5lZWQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHRoYXQgcHJvY2Vzcywgd2hpY2ggSSBiZWxpZXZlIGlzIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYC4gSSYjMzk7bGwgd2FudCB0byBjaGVjayB0aGUgY29yZSBoZWFkZXIgZmlsZSwgYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaGAsIHRvIGdldCB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIGFuZCBkZWNsYXJhdGlvbi4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGxvZ2ljLCB0aGUgYXJndW1lbnRzLCBhbnl0aGluZyB0aGF0IHNoZWRzIGxpZ2h0IG9uIGhvdyBpdCYjMzk7cyBkZXNpZ25lZCB0byB0cmFjayBhbmQgaGFuZGxlIGV4cGlyZWQgZWxlbWVudHMgd2l0aGluIHRoZXNlIHNldHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgc291cmNlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzNTpcdFx0cmV0dXJuIG5mdF9zZXRfZXh0KGV4dCwgTkZUX1NFVF9FWFRfRVhQUkVTU0lPTlMpO1xuIDgzNjpcdH1cbiA4Mzc6XHRcbiA4Mzg6XHRzdGF0aWMgaW5saW5lIGJvb2wgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCxcbiA4Mzk6XHRcdFx0XHRcdFx0ICB1NjQgdHN0YW1wKVxuIDg0MDpcdHtcbiA4NDE6XHRcdGlmICghbmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfVElNRU9VVCkgfHxcbiA4NDI6XHRcdCAgICBSRUFEX09OQ0UobmZ0X3NldF9leHRfdGltZW91dChleHQpLVx1MDAzZXRpbWVvdXQpID09IDApXG4gODQzOlx0XHRcdHJldHVybiBmYWxzZTtcbiA4NDQ6XHRcbiA4NDU6XHRcdHJldHVybiB0aW1lX2FmdGVyX2VxNjQodHN0YW1wLCBSRUFEX09OQ0UobmZ0X3NldF9leHRfdGltZW91dChleHQpLVx1MDAzZWV4cGlyYXRpb24pKTtcbiA4NDY6XHR9XG4gODQ3Olx0XG4gODQ4Olx0c3RhdGljIGlubGluZSBib29sIG5mdF9zZXRfZWxlbV9leHBpcmVkKGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0KVxuIDg0OTpcdHtcbiA4NTA6XHRcdHJldHVybiBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgZ2V0X2ppZmZpZXNfNjQoKSk7XG4gODUxOlx0fVxuIDg1MjpcdFxuIDg1MzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mdF9zZXRfZXh0ICpuZnRfc2V0X2VsZW1fZXh0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gODU0Olx0XHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcbiA4NTU6XHR7XG4gODU2Olx0XHRyZXR1cm4gKHZvaWQgKillbGVtX3ByaXYgJiM0Mzsgc2V0LVx1MDAzZW9wcy1cdTAwM2VlbGVtc2l6ZTtcbiA4NTc6XHR9XG4gODU4Olx0XG4gODU5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0X29iamVjdCAqKm5mdF9zZXRfZXh0X29iaihjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIyNgoJCQkJCQkJb3V0cHV0OiAyNjIKCQkJCQkJCXRob3VnaHRzOiAxMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBgbmZfdGFibGVzX2FwaS5jYCAtIENhdGNoYWxsIEVsZW1lbnQgRXhwaXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgbmZfdGFibGVzX2FwaS5jYC4gTXkgZXhwZXJ0IGV5ZXMgc2VlIHRoaXMgYXMgYSByZWZpbmVtZW50IG9mIGNhdGNoYWxsIGVsZW1lbnQgaGFuZGxpbmcgd2l0aGluIG5mdGFibGVzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGVpciBsaWZlY3ljbGUgYW5kIGV4cGlyYXRpb24uCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIGV4cGlyZWQgY2F0Y2hhbGwgZWxlbWVudHMgaW4gc2V0cy4KCkluIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoKWAsIHByZXZpb3VzbHksIGlmIGFuIGFjdGl2ZSBjYXRjaGFsbCBlbGVtZW50IGV4aXN0ZWQsIHRoZSBmdW5jdGlvbiB3b3VsZCByZXR1cm4gYC1FRVhJU1RgLCBldmVuIGlmIHRoZSBlbGVtZW50IHdhcyBleHBpcmVkLiBOb3csIHRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdXNpbmcgYCFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKWAgKmJlZm9yZSogcmV0dXJuaW5nIC1FRVhJU1QuIFRoaXMgZW5zdXJlcyB0aGF0IG9ubHkgKmFjdGl2ZSogYW5kICpub24tZXhwaXJlZCogY2F0Y2hhbGwgZWxlbWVudHMgcHJldmVudCBpbnNlcnRpb24gb2YgYSBuZXcgb25lLiBgdHN0YW1wYCBpcyB0aGUgY3VycmVudCB0aW1lc3RhbXAgb2J0YWluZWQgZnJvbSBgZ2V0X2ppZmZpZXNfNjQoKWAuCgpTaW1pbGFybHksIGluIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKClgLCB0aGUgZXhpc3RpbmcgbG9naWMgYWxyZWFkeSBza2lwcGVkIGluYWN0aXZlIGVsZW1lbnRzLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBleHBpcmVkIGVsZW1lbnRzIHdpdGhpbiB0aGUgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGxvb3AsIHNraXBwaW5nIHRoZW0gd2l0aCBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcClgLiBUaGlzIGVuc3VyZXMgdGhhdCBleHBpcmVkIGVsZW1lbnRzIGFyZSBub3QgdW5uZWNlc3NhcmlseSBwcm9jZXNzZWQgZHVyaW5nIGRlYWN0aXZhdGlvbi4gQWdhaW4sIGB0c3RhbXBgIGlzIHVzZWQgaGVyZSB0b28uCgpTbywgdGhlIHBhdGNoIGludHJvZHVjZXMgdGhlc2UgZXhwaXJhdGlvbiBjaGVja3Mgd2l0aGluIHRoZSB0d28gZnVuY3Rpb25zLCBpbXByb3ZpbmcgaG93IGV4cGlyZWQgY2F0Y2hhbGwgZWxlbWVudHMgYXJlIGhhbmRsZWQuCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBLTVNBTiBpbXBsaWNhdGlvbnMuIE15IGFuYWx5c2lzIHNheXMgdGhhdCBLTVNBTiBkb2VzbiYjMzk7dCBzZWVtIG5lY2Vzc2FyeSBoZXJlLiAgVGhpcyBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGNvcGllcywgb3IgZXhwb3N1cmVzIHRvIHVzZXIgc3BhY2UuICAKCiogICBgdHN0YW1wYCBpcyBhIGxvY2FsIHZhcmlhYmxlIGluaXRpYWxpemVkIHdpdGggYGdldF9qaWZmaWVzXzY0KClgLgoqICAgVGhlIGBleHRgIHN0cnVjdHVyZSBpcyBvYnRhaW5lZCB2aWEgYG5mdF9zZXRfZWxlbV9leHQoKWAuCiogICBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCByZWxpZXMgb24gdGhlIGBORlRfU0VUX0VYVF9USU1FT1VUYCBleHRlbnNpb24uIFRoZSBmaWVsZHMgdXNlZCBpbiB0aGF0IGV4dGVuc2lvbiBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2hlbiBlbGVtZW50cyBhcmUgY3JlYXRlZC4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgbmV3IGNvZGUgd2hlcmUgdGhpcyB3b3VsZCBiZSBwcm9ibGVtYXRpYy4KClRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nICpsb2dpYyogYXJvdW5kIGV4cGlyZWQgZWxlbWVudHMsIG5vdCBhbHRlcmluZyBob3cgZGF0YSBpcyBpbml0aWFsaXplZCBvciBjb3BpZWQsIG9yIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIE1lbW9yeSBzYWZldHkgaXNzdWVzICh1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGV0Yy4pIHRoYXQgKm1pZ2h0KiBiZSBpbnRyb2R1Y2VkICh3aGljaCBhcmUgbm90IGFwcGFyZW50IGZyb20gdGhlIGNvZGUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBhc3NlcnRpb25zLiBUaGVzZSBjaGVja3Mgd291bGQgaGlnaGxpZ2h0IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljYWwgZXJyb3JzLCBidXQgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBNeSByZWNvbW1lbmRhdGlvbiBpcyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UgZG9uJiMzOTt0IGhhdmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLiBUaGUgZm9jdXMgaGVyZSBpcyBvbiBsaWZldGltZSBtYW5hZ2VtZW50IGFuZCBleHBpcmF0aW9uIGxvZ2ljOyBLTVNBTiBpcyB0aGUgd3JvbmcgdG9vbCBmb3IgdGhpcyBqb2IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgbmZ0YWJsZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCB0byBjaGVjayB3aGV0aGVyIGFuIGV4aXN0aW5nIGNhdGNoYWxsIGVsZW1lbnQgaGFzIGV4cGlyZWQgdXNpbmcgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgYW5kIHRpbWVzdGFtcHMgb2J0YWluZWQgdmlhIGBnZXRfamlmZmllc182NCgpYC5cblxuLSAqKktNU0FOIGFwcGxpY2FiaWxpdHkqKjogS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoaGVhcCwgc3RhY2ssIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIHBhdGNoIGluaXRpYWxpemVzIGxvY2FsIGB1NjQgdHN0YW1wYCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgZ2V0X2ppZmZpZXNfNjQoKWAgYW5kIGNoZWNrcyBleGlzdGluZywgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZXh0ZW5zaW9uIGF0dHJpYnV0ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuXG4tICoqS0FTQU4gYXBwbGljYWJpbGl0eSoqOiBLQVNBTiwgdG9nZXRoZXIgd2l0aCBzdGFuZGFyZCBkZWJ1ZyB0b29scywgaXMgYXBwcm9wcmlhdGUgZm9yIGNhdGNoaW5nIGFueSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvcnMsIHVzZS1hZnRlci1mcmVlLCBvciBkb3VibGUtZnJlZSBpc3N1ZXMgcmVsYXRlZCB0byBzZXQgZWxlbWVudCBsaWZlY3ljbGVzIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24uXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBuZnRhYmxlcyBjYXRjaGFsbCBzZXQgZWxlbWVudCBoYW5kbGluZyBpbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIHRvIGNoZWNrIHdoZXRoZXIgYW4gZXhpc3RpbmcgY2F0Y2hhbGwgZWxlbWVudCBoYXMgZXhwaXJlZCB1c2luZyBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBhbmQgdGltZXN0YW1wcyBvYnRhaW5lZCB2aWEgYGdldF9qaWZmaWVzXzY0KClgLlxuXG4tICoqS01TQU4gYXBwbGljYWJpbGl0eSoqOiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgbG9jYWwgYHU2NCB0c3RhbXBgIHZhcmlhYmxlcyBkaXJlY3RseSBmcm9tIGBnZXRfamlmZmllc182NCgpYCBhbmQgY2hlY2tzIGV4aXN0aW5nLCBwcm9wZXJseSBpbml0aWFsaXplZCBleHRlbnNpb24gYXR0cmlidXRlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS5cbi0gKipLQVNBTiBhcHBsaWNhYmlsaXR5Kio6IEtBU0FOLCB0b2dldGhlciB3aXRoIHN0YW5kYXJkIGRlYnVnIHRvb2xzLCBpcyBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgYW55IG1lbW9yeSBtYW5hZ2VtZW50IGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG9yIGRvdWJsZS1mcmVlIGlzc3VlcyByZWxhdGVkIHRvIHNldCBlbGVtZW50IGxpZmVjeWNsZXMgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbi5cblxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjIxLjAzMDg0MjYxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MDIxNjA5MzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0XCIsXG4gICAgXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlXCIsXG4gICAgXCJuZnRfYWRkX3NldF9lbGVtXCIsXG4gICAgXCJuZnRfZGVsX3NldGVsZW1cIixcbiAgICBcIm5mX3RhYmxlc19uZXdzZXRlbGVtXCIsXG4gICAgXCJuZl90YWJsZXNfZGVsc2V0ZWxlbVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBuZnRhYmxlcyBjYXRjaGFsbCBzZXQgZWxlbWVudCBoYW5kbGluZyBpbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIHRvIGNoZWNrIHdoZXRoZXIgYW4gZXhpc3RpbmcgY2F0Y2hhbGwgZWxlbWVudCBoYXMgZXhwaXJlZCB1c2luZyBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBhbmQgdGltZXN0YW1wcyBvYnRhaW5lZCB2aWEgYGdldF9qaWZmaWVzXzY0KClgLlxcblxcbi0gKipLTVNBTiBhcHBsaWNhYmlsaXR5Kio6IEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBsb2NhbCBgdTY0IHRzdGFtcGAgdmFyaWFibGVzIGRpcmVjdGx5IGZyb20gYGdldF9qaWZmaWVzXzY0KClgIGFuZCBjaGVja3MgZXhpc3RpbmcsIHByb3Blcmx5IGluaXRpYWxpemVkIGV4dGVuc2lvbiBhdHRyaWJ1dGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYWxsb2NhdGlvbnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLlxcbi0gKipLQVNBTiBhcHBsaWNhYmlsaXR5Kio6IEtBU0FOLCB0b2dldGhlciB3aXRoIHN0YW5kYXJkIGRlYnVnIHRvb2xzLCBpcyBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgYW55IG1lbW9yeSBtYW5hZ2VtZW50IGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG9yIGRvdWJsZS1mcmVlIGlzc3VlcyByZWxhdGVkIHRvIHNldCBlbGVtZW50IGxpZmVjeWNsZXMgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbi5cXG5cXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBuZnRhYmxlcyBjYXRjaC1hbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0IGFuZCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlIHRvIGFjY291bnQgZm9yIGV4cGlyZWQgc2V0IGVsZW1lbnRzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIG1lc3NhZ2VzIChORlRfTVNHX05FV1NFVEVMRU0gYW5kIE5GVF9NU0dfREVMU0VURUxFTSkgYW5kIG1vZGlmeSBzdGF0ZSB2YWxpZGF0aW9uIGFuZCBlbGVtZW50IGRlYWN0aXZhdGlvbiBsb2dpYywgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucywgbGlmZXRpbWUgaXNzdWVzLCBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjIxLjAzMDg0Nzc2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwMDg4MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODRmYjk4MWVjMTY0YzVkNTkzZDhmNDBlMjI2OGY4YmVkZWYwMGM3OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAwODozNjoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXFxuaW5kZXggNzY1YTkyZmE5MGQ2Mi4uMGYzNDQ5Y2NhNWQyNyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXFxuQEAgLTY5OTEsMTEgKzY5OTEsMTMgQEAgc3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbiB7XFxuIFxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbiBcXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xcbitcXHR1NjQgdHN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTtcXG4gXFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcXHUwMDI2c2V0LVxcdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XFxuIFxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxuLVxcdFxcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpIHtcXG4rXFx0XFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XFxuIFxcdFxcdFxcdCpwcml2ID0gY2F0Y2hhbGwtXFx1MDAzZWVsZW07XFxuIFxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXHRcXHR9XFxuQEAgLTcwODgsMTEgKzcwOTAsMTMgQEAgc3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcXG4rXFx0dTY0IHRzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7XFxuIFxcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xcbiBcXHRcXHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXFx1MDAzZWVsZW0pO1xcbi1cXHRcXHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkpXFxuK1xcdFxcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxcbitcXHRcXHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNlcHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjIxLjY2MTQ3ODA5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTg4ODIzNjgwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRcIixcbiAgICBcIm5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVcIixcbiAgICBcIm5mdF9hZGRfc2V0X2VsZW1cIixcbiAgICBcIm5mdF9kZWxfc2V0ZWxlbVwiLFxuICAgIFwibmZfdGFibGVzX25ld3NldGVsZW1cIixcbiAgICBcIm5mX3RhYmxlc19kZWxzZXRlbGVtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgbmZ0YWJsZXMgY2F0Y2gtYWxsIHNldCBlbGVtZW50IGhhbmRsaW5nIGluIG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydCBhbmQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSB0byBhY2NvdW50IGZvciBleHBpcmVkIHNldCBlbGVtZW50cy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgbmV0bGluayBtZXNzYWdlcyAoTkZUX01TR19ORVdTRVRFTEVNIGFuZCBORlRfTVNHX0RFTFNFVEVMRU0pIGFuZCBtb2RpZnkgc3RhdGUgdmFsaWRhdGlvbiBhbmQgZWxlbWVudCBkZWFjdGl2YXRpb24gbG9naWMsIG1ha2luZyBpdCB2YWx1YWJsZSB0byBmdXp6IGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMsIGxpZmV0aW1lIGlzc3Vlcywgb3IgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg0ZmI5ODFlYzE2NGM1ZDU5M2Q4ZjQwZTIyNjhmOGJlZGVmMDBjNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwODozNjoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IDc2NWE5MmZhOTBkNjIuLjBmMzQ0OWNjYTVkMjcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC02OTkxLDExICs2OTkxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbiBcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7XG4rXHR1NjQgdHN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTtcbiBcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbiBcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xuLVx0XHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spKSB7XG4rXHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcbiBcdFx0XHQqcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG4gXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRcdH1cbkBAIC03MDg4LDExICs3MDkwLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pXG4ge1xuIFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG4rXHR1NjQgdHN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTtcbiBcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbiBcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xuLVx0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkpXG4rXHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxuK1x0XHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGtmcmVlKGVsZW0tXHUwMDNlcHJpdik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNjoyMS42NjE0Nzk2ODdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTQ2ODYzMzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTkZ0YWJsZXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCBmaWxlOyB0aGF0J3Mgd2hlcmUgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNvbmNlbnRyYXRlZC4gSSBzZWUgY2hhbmdlcyBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIGZ1bmN0aW9ucywgd2hpY2ggaW1tZWRpYXRlbHkgc2lnbmFscyBhIHBvdGVudGlhbCBhZGp1c3RtZW50IHRvIGhvdyBjYXRjaGFsbCBzZXQgZWxlbWVudHMgYXJlIG1hbmFnZWQsIGxpa2VseSByZWxhdGVkIHRvIGV4cGlyYXRpb24gY2hlY2tzIHVzaW5nIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKWAuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBzb21lIHN1cnJvdW5kaW5nIGNvbnRleHQuIEknbGwganVtcCBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AgYW5kIHJlYWQgYXJvdW5kIGxpbmVzIDY5OTEgYW5kIDcwODguIFRoaXMgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyB0aGV5IGZpdCBpbnRvLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhlIGBLY29uZmlnYCBvcHRpb25zIHRvIGNvbmZpcm0gYG5mX3RhYmxlc2AgaXMgZW5hYmxlZCwganVzdCB0byBiZSBzdXJlLlxuXG5UbyBxdWlja2x5IGdldCB0aGUgc291cmNlIGNvZGUgSSdsbCBwcm9iYWJseSByZWFjaCBmb3IgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHB1bGwgdGhlIGNvZGUgSSBuZWVkIGFuZCByZWR1Y2UgdGhlIHRpbWUgaXQgdGFrZXMgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwNSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjI4LjIwODM0NTQ1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTgwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2OTgwOlxcdFxcdFxcdCAgICAhbmZ0X3NldF9lbGVtX2lzX2RlYWQoZXh0KSlcXG42OTgxOlxcdFxcdFxcdFxcdHJldHVybiBleHQ7XFxuNjk4MjpcXHRcXHR9XFxuNjk4MzpcXHRcXG42OTg0OlxcdFxcdHJldHVybiBOVUxMO1xcbjY5ODU6XFx0fVxcbjY5ODY6XFx0XFxuNjk4NzpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNjk4ODpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG42OTg5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtLFxcbjY5OTA6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZnRfZWxlbV9wcml2ICoqcHJpdilcXG42OTkxOlxcdHtcXG42OTkyOlxcdFxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbjY5OTM6XFx0XFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcXG42OTk0OlxcdFxcdHU2NCB0c3RhbXAgPSBnZXRfamlmZmllc182NCgpO1xcbjY5OTU6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuNjk5NjpcXHRcXG42OTk3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG42OTk4OlxcdFxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxuNjk5OTpcXHRcXHRcXHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFxcdTAwMjZcXHUwMDI2XFxuNzAwMDpcXHRcXHRcXHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XFxuNzAwMTpcXHRcXHRcXHRcXHQqcHJpdiA9IGNhdGNoYWxsLVxcdTAwM2VlbGVtO1xcbjcwMDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuNzAwMzpcXHRcXHRcXHR9XFxuNzAwNDpcXHRcXHR9XFxuNzAwNTpcXHRcXG43MDA2OlxcdFxcdGNhdGNoYWxsID0ga21hbGxvY19vYmooKmNhdGNoYWxsLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjcwMDc6XFx0XFx0aWYgKCFjYXRjaGFsbClcXG43MDA4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjcwMDk6XFx0XFxuNzAxMDpcXHRcXHRjYXRjaGFsbC1cXHUwMDNlZWxlbSA9IGVsZW0tXFx1MDAzZXByaXY7XFxuNzAxMTpcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2Y2F0Y2hhbGwtXFx1MDAzZWxpc3QsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QpO1xcbjcwMTI6XFx0XFxuNzAxMzpcXHRcXHRyZXR1cm4gMDtcXG43MDE0OlxcdH1cXG43MDE1OlxcdFxcbjcwMTY6XFx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcwMTc6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDE4OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0sXFxuNzAxOTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKmVsZW1fcHJpdixcXG43MDIwOlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBmbGFncylcXG43MDIxOlxcdHtcXG43MDIyOlxcdFxcdGludCByZXQ7XFxuNzAyMzpcXHRcXG43MDI0OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcXG43MDI1OlxcdFxcdFxcdHJldCA9IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChuZXQsIHNldCwgZWxlbSwgZWxlbV9wcml2KTtcXG43MDI2OlxcdFxcdGVsc2VcXG43MDI3OlxcdFxcdFxcdHJldCA9IHNldC1cXHUwMDNlb3BzLVxcdTAwM2VpbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XFxuNzAyODpcXHRcXG43MDI5OlxcdFxcdHJldHVybiByZXQ7XFxuNzAzMDpcXHR9XFxuNzAzMTpcXHRcXG43MDMyOlxcdHN0YXRpYyBib29sIG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzAzMzpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcXG43MDM0OlxcdHtcXG43MDM1OlxcdFxcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW1fcHJpdik7XFxuNzAzNjpcXHRcXG43MDM3OlxcdFxcdGlmIChuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9GTEFHUykgXFx1MDAyNlxcdTAwMjZcXG43MDM4OlxcdFxcdCAgICAqbmZ0X3NldF9leHRfZmxhZ3MoZXh0KSBcXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcXG43MDM5OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjcwNDA6XFx0XFxuNzA0MTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNzA0MjpcXHR9XFxuNzA0MzpcXHRcXG43MDQ0OlxcdHN0YXRpYyB2b2lkIG5mdF9zZXRlbGVtX2FjdGl2YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDQ1OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxcbjcwNDY6XFx0e1xcbjcwNDc6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbV9wcml2KTtcXG43MDQ4OlxcdFxcbjcwNDk6XFx0XFx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xcbjcwNTA6XFx0XFx0XFx0bmZ0X2NsZWFyKG5ldCwgZXh0KTtcXG43MDUxOlxcdFxcdH0gZWxzZSB7XFxuNzA1MjpcXHRcXHRcXHRzZXQtXFx1MDAzZW9wcy1cXHUwMDNlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW1fcHJpdik7XFxuNzA1MzpcXHRcXHR9XFxuNzA1NDpcXHR9XFxuNzA1NTpcXHRcXG43MDU2OlxcdHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtX3VwZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcwNTc6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3RyYW5zX29uZV9lbGVtICplbGVtKVxcbjcwNTg6XFx0e1xcbjcwNTk6XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbS1cXHUwMDNlcHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjI4LjIwODkzOTEwNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzUxNDgwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgV2VhayBQb2ludHMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGRlYWN0aXZhdGlvbiBwcm9jZWR1cmVzLi4uIEdvdCB0byBtYWtlIHN1cmUgd2UncmUgdGhvcm91Z2guIFdlJ3ZlIGdvbmUgb3ZlciBgbmZ0X3NldGVsZW1fZGVsZXRlYCwgYG5mdF9zZXRlbGVtX3JlcGxhY2VgLCBhbmQgZXZlbiB0aGUgZ2VuZXJpYyBgbmZ0X3NldGVsZW1fYWRkYCB3aGljaCBpcyBjcml0aWNhbCB0byBjYXRjaCBlZGdlIGNhc2VzLCBhcyB3ZWxsIGFzIHRoZSBtb3JlIG9idmlvdXMgb25lcyBzdWNoIGFzIGBuZnRfc2V0X2RlbGV0ZWAuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBMZXQncyBub3QgYmUgaGFzdHkgaW4gZGVjbGFyaW5nIHZpY3RvcnkuIEknbSBnZXR0aW5nIGEgbmlnZ2xpbmcgZmVlbGluZyB0aGVyZSdzIGEgcmVsYXRlZCBmdW5jdGlvbiB3ZSBoYXZlbid0IGNoZWNrZWQgd2l0aCB0aGUgc2FtZSBsZXZlbCBvZiBzY3J1dGlueS4gV2UgZGVmaW5pdGVseSBuZWVkIHRvIGluY2x1ZGUgdGhlIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCBpbiB0aGlzIHJldmlldy4gR290dGEgYmUgc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnkgdnVsbmVyYWJpbGl0aWVzIHRoZXJlLCBvciBhbnkgc3VidGxlIGRpZmZlcmVuY2VzIGluIGxvZ2ljIG9yIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgY29tcGFyZWQgdG8gdGhlIG90aGVyIHNldCBlbGVtZW50IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHJlc291cmNlIGNsZWFudXAgb3IgbG9ja2luZy4gSXQncyB0b28gZWFzeSB0byBhc3N1bWUgc3ltbWV0cnkuIFdlIG5lZWQgdG8gZXhwbG9yZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MzY6MzAuNTg0MDkwMzk4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzczOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcwODA6XFx0XFx0XFx0XFx0bmZ0X3NldGVsZW1fYWN0aXZhdGUoY3R4LVxcdTAwM2VuZXQsIHRlLVxcdTAwM2VzZXQsIGVsZW0tXFx1MDAzZXByaXYpO1xcbjcwODE6XFx0XFxuNzA4MjpcXHRcXHRcXHRuZl90YWJsZXNfc2V0ZWxlbV9ub3RpZnkoY3R4LCB0ZS1cXHUwMDNlc2V0LCBlbGVtLVxcdTAwM2Vwcml2LFxcbjcwODM6XFx0XFx0XFx0XFx0XFx0XFx0IE5GVF9NU0dfTkVXU0VURUxFTSk7XFxuNzA4NDpcXHRcXHRcXHRrZnJlZShlbGVtLVxcdTAwM2V1cGRhdGUpO1xcbjcwODU6XFx0XFx0fVxcbjcwODY6XFx0fVxcbjcwODc6XFx0XFxuNzA4ODpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcwODk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDkwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pXFxuNzA5MTpcXHR7XFxuNzA5MjpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcXG43MDkzOlxcdFxcdHU2NCB0c3RhbXAgPSBnZXRfamlmZmllc182NCgpO1xcbjcwOTQ6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuNzA5NTpcXHRcXG43MDk2OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG43MDk3OlxcdFxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxuNzA5ODpcXHRcXHRcXHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcXG43MDk5OlxcdFxcdFxcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcXG43MTAwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjcxMDE6XFx0XFxuNzEwMjpcXHRcXHRcXHRrZnJlZShlbGVtLVxcdTAwM2Vwcml2KTtcXG43MTAzOlxcdFxcdFxcdGVsZW0tXFx1MDAzZXByaXYgPSBjYXRjaGFsbC1cXHUwMDNlZWxlbTtcXG43MTA0OlxcdFxcdFxcdG5mdF9zZXRfZWxlbV9jaGFuZ2VfYWN0aXZlKG5ldCwgc2V0LCBleHQpO1xcbjcxMDU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzEwNjpcXHRcXHR9XFxuNzEwNzpcXHRcXG43MTA4OlxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjcxMDk6XFx0fVxcbjcxMTA6XFx0XFxuNzExMTpcXHRzdGF0aWMgaW50IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNzExMjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MTEzOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxcbjcxMTQ6XFx0e1xcbjcxMTU6XFx0XFx0dm9pZCAqcHJpdjtcXG43MTE2OlxcdFxcbjcxMTc6XFx0XFx0cHJpdiA9IHNldC1cXHUwMDNlb3BzLVxcdTAwM2VkZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcXG43MTE4OlxcdFxcdGlmICghcHJpdilcXG43MTE5OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNjozMC41ODQ0NjYyMThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTM3NDgwOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSBmb3IgbmZfdGFibGVzX2FwaS5jKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiBpcyBzZXQgdXAgY29ycmVjdGx5IGZvciBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLiBJIG5lZWQgdG8gZW5zdXJlIGl0J3MgcHJvcGVybHkgZW5hYmxlZCBhbmQgYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBhcmUgbWV0LiBMZXQgbWUgcXVpY2tseSBncmVwIHRocm91Z2ggdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoYXQgbW9kdWxlLlxuXG5UaGVuLCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBuZl90YWJsZXNfYXBpLm9gIGlzIGJlaW5nIGJ1aWx0IGNvcnJlY3RseS4gSSdsbCBzZWFyY2ggdGhlIHJlbGV2YW50IE1ha2VmaWxlLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9uZXRmaWx0ZXIvYCwgdG8gdmVyaWZ5IHRoYXQgaXQncyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgZG9lc24ndCBoYXZlIGFueSBvYnZpb3VzIGVycm9ycyBpbiBpdHMgY29tcGlsYXRpb24uIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgdG8gZW5zdXJlIHRoZSBtb2R1bGUgaXMgbGlua2VkIGFzIGV4cGVjdGVkIGFuZCBldmVyeXRoaW5nIGlzIGludGVncmF0ZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzcwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNjozMi41MjE5NTAwNjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2ODcwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfdGFibGVzX2FwaVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODQ9b2JqLSQoQ09ORklHX05GX0RVUF9ORVRERVYpXFx0Kz0gbmZfZHVwX25ldGRldi5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg2LSMgbmZfdGFibGVzXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4NzpuZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODgtXFx0XFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MzY6MzIuNTcxNjQzNjM3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA3NTU5MTEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJXaGVyZSB3b3VsZCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhvc2UgcGFydGljdWxhciBOZXRmaWx0ZXIgbW9kdWxlcyBiZSBkZWZpbmVkP1wiIE15IG1lbnRhbCByYWRhciBpbW1lZGlhdGVseSBwaW5ncyB0aGUgYG5ldC9uZXRmaWx0ZXJgIGRpcmVjdG9yeSDigJMgdGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiBOZXRmaWx0ZXIgbGl2ZXMgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEFuZCwgc3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiB0aGUgYE1ha2VmaWxlYCB0aGVyZS4gSXQncyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGJ1aWxkaW5nIGFsbCB0aGF0IGdvb2Qgc3R1ZmYuIEknbSBndWVzc2luZyBhcm91bmQgbGluZSA4NyBvciBzbyBpcyBhIGxpa2VseSBzcG90IHRvIGZpbmQgdGhlIHJlbGV2YW50IHJ1bGVzLCBkZXBlbmRlbmNpZXMsIG9yIG1heWJlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZmlndXJpbmcgb3V0IHdoYXQncyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBhbmQgaG93IHRoaW5ncyBhcmUgcHV0IHRvZ2V0aGVyLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjM3LjY0NzIzODAyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcbiAgODE6XFx0b2JqLSQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpICs9IG5mX2Nvbm5jb3VudC5vXFxuICA4MjpcXHRcXG4gIDgzOlxcdCMgZ2VuZXJpYyBwYWNrZXQgZHVwbGljYXRpb24gZnJvbSBuZXRkZXYgZmFtaWx5XFxuICA4NDpcXHRvYmotJChDT05GSUdfTkZfRFVQX05FVERFVilcXHQrPSBuZl9kdXBfbmV0ZGV2Lm9cXG4gIDg1OlxcdFxcbiAgODY6XFx0IyBuZl90YWJsZXNcXG4gIDg3OlxcdG5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxuICA4ODpcXHRcXHRcXHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcXFxcbiAgODk6XFx0XFx0XFx0ICBuZnRfYml0d2lzZS5vIG5mdF9ieXRlb3JkZXIubyBuZnRfcGF5bG9hZC5vIG5mdF9sb29rdXAubyBcXFxcXFxuICA5MDpcXHRcXHRcXHQgIG5mdF9keW5zZXQubyBuZnRfbWV0YS5vIG5mdF9ydC5vIG5mdF9leHRoZHIubyBuZnRfbGFzdC5vIFxcXFxcXG4gIDkxOlxcdFxcdFxcdCAgbmZ0X2NvdW50ZXIubyBuZnRfb2JqcmVmLm8gbmZ0X2lubmVyLm8gXFxcXFxcbiAgOTI6XFx0XFx0XFx0ICBuZnRfY2hhaW5fcm91dGUubyBuZl90YWJsZXNfb2ZmbG9hZC5vIFxcXFxcXG4gIDkzOlxcdFxcdFxcdCAgbmZ0X3NldF9oYXNoLm8gbmZ0X3NldF9iaXRtYXAubyBuZnRfc2V0X3JidHJlZS5vIFxcXFxcXG4gIDk0OlxcdFxcdFxcdCAgbmZ0X3NldF9waXBhcG8ub1xcbiAgOTU6XFx0XFxuICA5NjpcXHRpZmRlZiBDT05GSUdfWDg2XzY0XFxuICA5NzpcXHRpZm5kZWYgQ09ORklHX1VNTFxcbiAgOTg6XFx0bmZfdGFibGVzLW9ianMgKz0gbmZ0X3NldF9waXBhcG9fYXZ4Mi5vXFxuICA5OTpcXHRlbmRpZlxcbiAxMDA6XFx0ZW5kaWZcXG4gMTAxOlxcdFxcbiAxMDI6XFx0aWZkZWYgQ09ORklHX05GVF9DVFxcbiAxMDM6XFx0aWZkZWYgQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FXFxuIDEwNDpcXHRuZl90YWJsZXMtb2JqcyArPSBuZnRfY3RfZmFzdC5vXFxuIDEwNTpcXHRlbmRpZlxcbiAxMDY6XFx0ZW5kaWZcXG4gMTA3OlxcdFxcbiAxMDg6XFx0b2JqLSQoQ09ORklHX05GX1RBQkxFUylcXHRcXHQrPSBuZl90YWJsZXMub1xcbiAxMDk6XFx0b2JqLSQoQ09ORklHX05GVF9DT01QQVQpXFx0Kz0gbmZ0X2NvbXBhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjM3LjY0NzMxNDUxN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODgwMTAyNTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBgQ09ORklHX05GX1RBQkxFU2AgRGVwZW5kZW5jaWVzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX05GX1RBQkxFU2AuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgdXN1YWwgcGxhY2UgdG8gZmluZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLiBJIGtub3cgYENPTkZJR19ORl9UQUJMRVNgIGlzIHByZXR0eSBmdW5kYW1lbnRhbCwgYnV0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIEknbSBub3QgaW1tZWRpYXRlbHkgYXdhcmUgb2YsIG9yIGV2ZW4gc29tZSBkZXBlbmRlbmNpZXMgd2hpY2ggd2lsbCBpbXBhY3QgdGhlIGltcGFjdCBvZiBgQ09ORklHX05GX1RBQkxFU2AsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRpbWUgdG8gZ2V0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjQyLjUyNzQyMDkwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMjY0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX1RBQkxFU1xcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNjo0Mi41NzQ2NTE4MzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgyNzE2MTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcHJvY2Vzc2luZyB0aGUgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgbmV0ZmlsdGVyYCBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZC4gTGV0J3Mgc2VlLi4uIHRoZSBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIEFuZCBpZiBteSBtZW1vcnkgc2VydmVzLCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBmb3Igd2hhdCBJJ20gaW50ZXJlc3RlZCBpbiBzdGFydHMgYXJvdW5kIGxpbmUgNDU1LiBUaGF0J3MgYSByZWFzb25hYmxlIHBsYWNlIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBvcHRpb25zIGF2YWlsYWJsZSwgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIgd2l0aGluIHRoaXMgY29tcGxleCBmcmFtZXdvcmsuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgYGNvbmZpZ2Agc3RhdGVtZW50cywgYGRlcGVuZHMgb25gIGNsYXVzZXMsIGFuZCBtYXliZSBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMgdG8gZ3VpZGUgdGhlIGJ1aWxkIHByb2Nlc3MuIEhvcGVmdWxseSwgaXQncyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGNvbW1lbnRlZCBlbm91Z2ggdGhhdCBJIGNhbiBxdWlja2x5IGdyb2sgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgdmFyaW91cyBOZXRmaWx0ZXIgZmVhdHVyZXMgYW5kIG9wdGlvbnMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjAxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MzY6NDguNDAxODE3NjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTA6XFx0Y29uZmlnIE5FVEZJTFRFUl9TWU5QUk9YWVxcbiA0NTE6XFx0XFx0dHJpc3RhdGVcXG4gNDUyOlxcdFxcbiA0NTM6XFx0ZW5kaWYgIyBORl9DT05OVFJBQ0tcXG4gNDU0OlxcdFxcbiA0NTU6XFx0Y29uZmlnIE5GX1RBQkxFU1xcbiA0NTY6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuIDQ1NzpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiA0NTg6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgc3VwcG9ydFxcXCJcXG4gNDU5OlxcdFxcdGhlbHBcXG4gNDYwOlxcdFxcdCAgbmZ0YWJsZXMgaXMgdGhlIG5ldyBwYWNrZXQgY2xhc3NpZmljYXRpb24gZnJhbWV3b3JrIHRoYXQgaW50ZW5kcyB0b1xcbiA0NjE6XFx0XFx0ICByZXBsYWNlIHRoZSBleGlzdGluZyB7aXAsaXA2LGFycCxlYn1fdGFibGVzIGluZnJhc3RydWN0dXJlLiBJdFxcbiA0NjI6XFx0XFx0ICBwcm92aWRlcyBhIHBzZXVkby1zdGF0ZSBtYWNoaW5lIHdpdGggYW4gZXh0ZW5zaWJsZSBpbnN0cnVjdGlvbi1zZXRcXG4gNDYzOlxcdFxcdCAgKGFsc28ga25vd24gYXMgZXhwcmVzc2lvbnMpIHRoYXQgdGhlIHVzZXJzcGFjZSAnbmZ0JyB1dGlsaXR5XFxuIDQ2NDpcXHRcXHQgIChodHRwczovL3d3dy5uZXRmaWx0ZXIub3JnL3Byb2plY3RzL25mdGFibGVzKSB1c2VzIHRvIGJ1aWxkIHRoZVxcbiA0NjU6XFx0XFx0ICBydWxlLXNldC4gSXQgYWxzbyBjb21lcyB3aXRoIHRoZSBnZW5lcmljIHNldCBpbmZyYXN0cnVjdHVyZSB0aGF0XFxuIDQ2NjpcXHRcXHQgIGFsbG93cyB5b3UgdG8gY29uc3RydWN0IG1hcHBpbmdzIGJldHdlZW4gbWF0Y2hpbmdzIGFuZCBhY3Rpb25zXFxuIDQ2NzpcXHRcXHQgIGZvciBwZXJmb3JtYW5jZSBsb29rdXBzLlxcbiA0Njg6XFx0XFxuIDQ2OTpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDQ3MDpcXHRcXG4gNDcxOlxcdGlmIE5GX1RBQkxFU1xcbiA0NzI6XFx0Y29uZmlnIE5GX1RBQkxFU19JTkVUXFxuIDQ3MzpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gNDc0OlxcdFxcdHNlbGVjdCBORl9UQUJMRVNfSVBWNFxcbiA0NzU6XFx0XFx0c2VsZWN0IE5GX1RBQkxFU19JUFY2XFxuIDQ3NjpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG1peGVkIElQdjQvSVB2NiB0YWJsZXMgc3VwcG9ydFxcXCJcXG4gNDc3OlxcdFxcdGhlbHBcXG4gNDc4OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG1peGVkIElQdjQvSVB2NiBcXFwiaW5ldFxcXCIgdGFibGUuXFxuIDQ3OTpcXHRcXG4gNDgwOlxcdGNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxuIDQ4MTpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG4gNDgyOlxcdFxcdGhlbHBcXG4gNDgzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgXFxcIm5ldGRldlxcXCIgdGFibGUuXFxuIDQ4NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MzY6NDguNDAxOTMyODVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTQwMzYzMjUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBKb3VybmV5KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORl9UQUJMRVNgLiBJIGtub3cgaXQncyByZWxhdGVkIHRvIGBORVRGSUxURVJgLCB0aGF0J3MgYSBnaXZlbi4gTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gcGlucG9pbnQgZXhhY3RseSAqd2hlcmUqIGBORl9UQUJMRVNgIHJlc2lkZXMgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBcIkNvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cIiBtZW51LCBvciBwZXJoYXBzIGl0J3MgZ2F0ZWQgYmVoaW5kIGFuIGBpZiBORVRGSUxURVJgIGJsb2NrLiBUaGF0J3MgbXkgaW1tZWRpYXRlIGZvY3VzLlxuXG5UbyBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgYW5kIGZvciBhIGJyb2FkZXIgb3ZlcnZpZXcgb2YgdGhlIG5ldCBjb25maWd1cmF0aW9uIG92ZXJhbGwsIEkgc2hvdWxkIGFsc28gYnJpZWZseSBnbGFuY2UgYXQgYG5ldC9LY29uZmlnYCB0byBjb25maXJtIHRoZXJlIGFyZSBubyB1cHN0cmVhbSBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBwcm92aWRlIHNvbWUgaW1wb3J0YW50IGNvbnRleHQuIFRoaXMgd2lsbCBnaXZlIG1lIHdoYXQgSSBuZWVkIHRvIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk2NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MzY6NTcuODA1NTY3MjQzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTIyNTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTIzMT1jb25maWcgQlJJREdFX05FVEZJTFRFUlxcbi0tXFxubmV0L0tjb25maWctMjQ2LVxcbm5ldC9LY29uZmlnOjI0Nzpzb3VyY2UgXFxcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZy0yNDgtc291cmNlIFxcXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MzY6NTcuODc0Nzk3MTUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NjI1MTg2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipFeGFtaW5pbmcgS2NvbmZpZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIGJldHRlci4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpcyBoYXBwZW5pbmcgYXJvdW5kIGxpbmVzIDIzMCB0byAyNTAgaW4gYG5ldC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gcmlnaHQgbm93LiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIGRlZmluZWQsIHdoYXQgY29uZGl0aW9uYWxzIGFyZSBpbiBwbGF5LCBhbmQgaG93IHRoZXNlIG9wdGlvbnMgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2suIEhvcGVmdWxseSwgd2hhdGV2ZXIgSSdtIGxvb2tpbmcgZm9yIGlzIGluIHRoYXQgcmFuZ2UuIFRpbWUgdG8gZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMyNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM3OjAwLjQzNzMxODMwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMzA6XFx0XFxuIDIzMTpcXHRjb25maWcgQlJJREdFX05FVEZJTFRFUlxcbiAyMzI6XFx0XFx0dHJpc3RhdGUgXFxcIkJyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXFxcIlxcbiAyMzM6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gMjM0OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gMjM1OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDIzNjpcXHRcXHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG4gMjM3OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAyMzg6XFx0XFx0aGVscFxcbiAyMzk6XFx0XFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGxldCBhcnB0YWJsZXMgcmVzcC4gaXB0YWJsZXMgc2VlIGJyaWRnZWRcXG4gMjQwOlxcdFxcdCAgQVJQIHJlc3AuIElQIHRyYWZmaWMuIElmIHlvdSB3YW50IGEgYnJpZGdpbmcgZmlyZXdhbGwsIHlvdSBwcm9iYWJseVxcbiAyNDE6XFx0XFx0ICB3YW50IHRoaXMgb3B0aW9uIGVuYWJsZWQuXFxuIDI0MjpcXHRcXHQgIEVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIG9wdGlvbiBkb2Vzbid0IGVuYWJsZSBvciBkaXNhYmxlXFxuIDI0MzpcXHRcXHQgIGVidGFibGVzLlxcbiAyNDQ6XFx0XFxuIDI0NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI0NjpcXHRcXG4gMjQ3OlxcdHNvdXJjZSBcXFwibmV0L25ldGZpbHRlci9LY29uZmlnXFxcIlxcbiAyNDg6XFx0c291cmNlIFxcXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG4gMjQ5OlxcdHNvdXJjZSBcXFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxuIDI1MDpcXHRzb3VyY2UgXFxcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxuIDI1MTpcXHRcXG4gMjUyOlxcdGVuZGlmICMgaWYgTkVURklMVEVSXFxuIDI1MzpcXHRcXG4gMjU0OlxcdHNvdXJjZSBcXFwibmV0L3NjdHAvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6MDAuNDM3MzkwNzMyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzE3MjYzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGZpbHRlciBhbmQgTkZfVEFCTEVTIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgYE5FVEZJTFRFUmAgYW5kIGBORl9UQUJMRVNgIGNvbmZpZ3VyYXRpb25zLCBvYnZpb3VzbHkuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc2V0IGVsZW1lbnRzLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGZpdCBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZS4gQXJlIHRoZXkgY2FsbGVkIGRpcmVjdGx5PyBPciwgYXJlIHRoZXkgaW5kaXJlY3RseSBpbnZva2VkIHRocm91Z2ggZnVuY3Rpb25zIGxpa2UgYG5mdF9zZXRlbGVtX2luc2VydGAsIGBfX25mdF9zZXRlbGVtX2RlYWN0aXZhdGVgLCBgbmZfdGFibGVzX25ld3NldGVsZW1gLCBvciBgbmZfdGFibGVzX2RlbHNldGVsZW1gLCBvciBzb21lIG90aGVyIHBhdGg/IFRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGwgY2hhaW4sIEknbSBnb2luZyB0byBydW4gYSBgZ3JlcGAgb24gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCB0byBzZWUgd2hlcmUgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCBhcmUgYWN0dWFsbHkgYmVpbmcgdXNlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNzowMi44MDkxMjA2NjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTAwMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9zZXRlbGVtX2NhdGNoYWxsX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02NDc3PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fcGFyc2VfZGF0YShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjQ5Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2NDk3OnN0YXRpYyB2b2lkICpuZnRfc2V0ZWxlbV9jYXRjaGFsbF9nZXQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY0OTgtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY1MTg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9nZXQoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY1MjctXFx0fSBlbHNlIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2NTI4OlxcdFxcdHByaXYgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9nZXQoY3R4LVxcdTAwM2VuZXQsIHNldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUyOS1cXHRcXHRpZiAoIXByaXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTY5PXN0cnVjdCBuZnRfc2V0X2V4dCAqbmZ0X3NldF9jYXRjaGFsbF9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk4Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTg3OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTg4LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzAxNj1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDI0LVxcdGlmIChmbGFncyBcXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDI1OlxcdFxcdHJldCA9IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChuZXQsIHNldCwgZWxlbSwgZWxlbV9wcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDI2LVxcdGVsc2VcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwNjk9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1zX2FkZChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA4Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDg4OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA4OS1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzEyOD1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEzNC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEzNTpcXHRcXHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTM2LVxcdGVsc2VcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDEtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE0MjpzdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZXN0cm95KHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDMte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE0Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTQ4OnN0YXRpYyB2b2lkIG5mdF9zZXRlbGVtX2NhdGNoYWxsX3JlbW92ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE0OS1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE1NS1cXHRcXHRpZiAoY2F0Y2hhbGwtXFx1MDAzZWVsZW0gPT0gZWxlbV9wcml2KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE1NjpcXHRcXHRcXHRuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZXN0cm95KGNhdGNoYWxsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTU3LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzE2Mj1zdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9yZW1vdmUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE2Ni1cXHRpZiAobmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoc2V0LCBlbGVtX3ByaXYpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNjc6XFx0XFx0bmZ0X3NldGVsZW1fY2F0Y2hhbGxfcmVtb3ZlKG5ldCwgc2V0LCBlbGVtX3ByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNjgtXFx0ZWxzZVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA2Nzk9c3RydWN0IG5mdF90cmFuc19nYyAqbmZ0X3RyYW5zX2djX2NhdGNoYWxsX3N5bmMoc3RydWN0IG5mdF90cmFuc19nYyAqZ2MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDcwMC1cXHRcXHRuZnRfc2V0ZWxlbV9kYXRhX2RlYWN0aXZhdGUoZ2MtXFx1MDAzZW5ldCwgZ2MtXFx1MDAzZXNldCwgZWxlbV9wcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDcwMTpcXHRcXHRuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZXN0cm95KGNhdGNoYWxsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDcwMi1cXHRcXHRuZnRfdHJhbnNfZ2NfZWxlbV9hZGQoZ2MsIGVsZW1fcHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM3OjAyLjg1NDIyNTgxNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDI4MDg3MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBUYWJsZSBBUEkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgaXQncyB0b3VjaGluZyBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRob3NlIGFyZSBpbnRlcm5hbCwgc3RhdGljIGZ1bmN0aW9ucywgcmVzaWRpbmcgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gR2l2ZW4gdGhlaXIgbmFtaW5nIGFuZCBsb2NhdGlvbiwgdGhlc2UgYXJlIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgTmV0ZmlsdGVyIHRhYmxlIEFQSSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gb2Ygc2V0IGVsZW1lbnRzLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiB3aGF0IGFyZSB0aGUgY2FsbCBzaXRlcyBmb3IgdGhlIG5vbiBcImNhdGNoYWxsXCIgdmVyc2lvbnMgb2YgdGhlc2UgZnVuY3Rpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbm9ybWFsIG9wZXJhdGlvbiBiZWZvcmUgSSBjYW4gcHJvcGVybHkgYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIHRyYWNlIGNhbGxzIHRvIGBuZnRfc2V0ZWxlbV9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZWAgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgZXhpc3RpbmcgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gcGF0aHMgaXMgY3JpdGljYWwgZm9yIGZpZ3VyaW5nIG91dCBob3cgdGhlIHBhdGNoIGFsdGVycyB0aGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjQzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6MDYuODgyMzE1OTExWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTk4MjIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfc2V0ZWxlbV8oaW5zZXJ0fGRlYWN0aXZhdGUpXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Njk4Nz1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDE1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwMTY6c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMTctXFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwODg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMTAtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzExMTpzdGF0aWMgaW50IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzExMi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMjctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEyODpzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMjktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEzNi1cXHRlbHNlXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEzNzpcXHRcXHRyZXQgPSBfX25mdF9zZXRlbGVtX2RlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MjQ5PXN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzU3MS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3NTcyOlxcdGVyciA9IG5mdF9zZXRlbGVtX2luc2VydChjdHgtXFx1MDAzZW5ldCwgc2V0LCBcXHUwMDI2ZWxlbSwgXFx1MDAyNmVsZW1fcHJpdiwgZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1NzMtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzgyOT1zdGF0aWMgaW50IG5mdF9kZWxfc2V0ZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzkwMS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3OTAyOlxcdGVyciA9IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY3R4LVxcdTAwM2VuZXQsIHNldCwgXFx1MDAyNmVsZW0sIGZsYWdzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTAzLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNzowNi45NTgzMDI1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNTIzMzEwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIG5mdGFibGVzIENhdGNoYWxsIEVsZW1lbnQgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBwYXRjaCBpbXBhY3RzIG5mdGFibGVzLCBzcGVjaWZpY2FsbHkgdGhlIGNhdGNoYWxsIGVsZW1lbnQgaGFuZGxpbmcuIEkgc2VlIHRoYXQgdGhlIGNvcmUgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBUaGVzZSBhcmUgc3RhdGljIEMgZnVuY3Rpb25zIHdpdGhpbiBgbmZfdGFibGVzX2FwaS5jYCwgc28gd2hpbGUgdGhleSBtaWdodCBiZSBpbmxpbmVkIGluIHNvbWUgc2NlbmFyaW9zLCB0aGV5IGFyZSBkaXJlY3RseSBtb2RpZmllZC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgKmFyZSB0aGVzZSBmdW5jdGlvbnMgd29ydGggdGFyZ2V0aW5nIGZvciBmdXp6aW5nPyogSSB0aGluayB0aGV5IGFyZS4gTXkgbG9naWMgaXMgdGhhdCBgbmZ0X2FkZF9zZXRfZWxlbWAgYW5kIGBuZnRfZGVsX3NldGVsZW1gIGNhbGwgdGhlc2UgZnVuY3Rpb25zLiBUaGVyZWZvcmUsIGJvdGggYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCBhcmUgbGlrZWx5IGVudHJ5IHBvaW50cyB0byBjb25zaWRlci5cblxuQ29uc2lkZXJpbmcgRm9jdXNTeW1ib2xzLCBJIGNhbiBpbmNsdWRlIGJvdGggYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCwgaW4gYWRkaXRpb24gdG8gYG5mdF9hZGRfc2V0X2VsZW1gIGFuZCBgbmZ0X2RlbF9zZXRlbGVtYCwgaW4gbXkgZnV6emluZyB0YXJnZXQgbGlzdC4gVGhpcyBpcyBsb2dpY2FsIGJlY2F1c2UgZXZlbiBpZiB0aGVzZSBhcmUgc3RhdGljLCB0aGV5IGhhdmUgc3ltYm9scyBhbmQgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLlxuXG5Ob3csIGxldCdzIGVzdGFibGlzaCByZWFjaGFiaWxpdHkuIFRoZSBuZXRsaW5rIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IG1lc3NhZ2VzIGxpa2UgYE5GVF9NU0dfTkVXU0VURUxFTWAgYW5kIGBORlRfTVNHX0RFTFNFVEVMRU1gLCBhbGxvd3MgZnVsbHkgcmVhY2hhYmxlIGNvZGUuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdW5wcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlcyBhbmQgbmV0d29yayBuYW1lc3BhY2VzLCBvciByb290IGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3Igc3l6a2FsbGVyLiBTaW5jZSBORl9UQUJMRVMgaXMgc3RhbmRhcmQgbmV0bGluayBuZXR3b3JraW5nIGNvZGUgaW4gY29yZSBuZXRmaWx0ZXIsIGl0IGlzIGhpZ2hseSBhY2Nlc3NpYmxlLlxuXG5JcyB0aGlzIHBhdGNoICpXb3J0aEZ1enppbmcqPyBBYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNldCBlbGVtZW50IGxvb2t1cCwgaW5zZXJ0aW9uLCBhbmQgZGVhY3RpdmF0aW9uIGxvZ2ljIGZvciBjYXRjaGFsbCBlbGVtZW50cyB3aXRoIHRpbWVvdXRzIHVzaW5nIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKWAuIFRoaXMgaXMgZnVsbHkgcmVhY2hhYmxlIG5ldGZpbHRlciBjb2RlIHRoYXQgaGFuZGxlcyB1c2VyIHJlcXVlc3RzIG92ZXIgbmV0bGluayAobmZuZXRsaW5rKS5cblxuRmluYWxseSwgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBzdHJhaWdodGZvcndhcmQ6IGBDT05GSUdfTkVURklMVEVSYCBhbmQgYENPTkZJR19ORl9UQUJMRVNgLiBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIHRvcC1sZXZlbCBuZXRsaW5rIGNhbGxiYWNrIGhhbmRsZXJzIGZvciBgTkZUX01TR19ORVdTRVRFTEVNYCBhbmQgYE5GVF9NU0dfREVMU0VURUxFTWAgd2hpY2ggYXJlIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAgYW5kIGBuZl90YWJsZXNfZGVsc2V0ZWxlbWAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY3MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNzoxMi4wMTA2MzY1MDFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDQ1NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX3RhYmxlc19uZXdzZXRlbGVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDk9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjY3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc2Njg6c3RhdGljIGludCBuZl90YWJsZXNfbmV3c2V0ZWxlbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc2NjktXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTk5Mzk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIG5mX3RhYmxlc19jYltORlRfTVNHX01BWF0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA0Mi1cXHRbTkZUX01TR19ORVdTRVRFTEVNXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDA0MzpcXHRcXHQuY2FsbFxcdFxcdD0gbmZfdGFibGVzX25ld3NldGVsZW0sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNDQtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM3OjEyLjA1NTA4NzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc0NzY3ODY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBcInRob3VnaHRzXCIgeW91J3ZlIGdpdmVuIG1lLCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGxpa2UgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgYG5mX3RhYmxlc19kZWxzZXRlbGVtYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBuZl90YWJsZXNfZGVsc2V0ZWxlbWAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyB0byByYWNlIGEgYml0LiBgbmZfdGFibGVzYC4uLiB0aGF0J3MgTmV0ZmlsdGVyIHRhYmxlcywgdGhlIG5ld2VyLCBtb3JlIHZlcnNhdGlsZSBwYWNrZXQgZmlsdGVyaW5nIGFuZCBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24gZnJhbWV3b3JrIGluIHRoZSBMaW51eCBrZXJuZWwuIEFuZCBgZGVsc2V0ZWxlbWAuLi4gdGhhdCdzIGdvdCB0byBiZSBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gZGVsZXRpbmcgZWxlbWVudHMgZnJvbSBhIHNldCB3aXRoaW4gYSB0YWJsZS4gSXQncyBwcm9iYWJseSBhIGNvcmUgZnVuY3Rpb24sIGNyaXRpY2FsIGZvciB0aGUgZHluYW1pYyBuYXR1cmUgb2YgdGhlc2UgZmlyZXdhbGxzLlxuXG5NeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmU6IFdoYXQncyB0aGUgY29udGV4dD8gV2hhdCB0cmlnZ2VyZWQgdGhpcyBuZWVkIHRvIGNoZWNrIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24/IEFyZSB3ZSBkZWJ1Z2dpbmcgYSBwcm9ibGVtLCBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlLCBvciBqdXN0IHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBpbm5lciB3b3JraW5ncyBiZXR0ZXI/IFRoZSBzcGVjaWZpY3MgbWF0dGVyLiBXaXRob3V0IGNvbnRleHQsIEknZCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgZGl2ZSBpbnRvIHRoZSByZWxldmFudCBzb3VyY2UgY29kZSwgbWF5YmUgYnJvd3NpbmcgdGhlIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbSBkaXJlY3RvcnkgYW5kIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIEknZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQg4oCTIHRoZSBgbmZ0X3NldGAgc3RydWN0dXJlLCBhbnkgZWxlbWVudCByZXByZXNlbnRhdGlvbnMgKGxpa2UgYG5mdF9zZXRfZWxlbWApLCBhbmQgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5LiBBbnkgY29kZSByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gaXMgYWx3YXlzIG9mIGludGVyZXN0IHRvbywgbG9va2luZyBmb3IgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciB2dWxuZXJhYmlsaXRpZXMuXG5cbkknZCBhbHNvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24uIEEgYnVnZ3kgYGRlbHNldGVsZW1gIGNvdWxkIGxlYWQgdG8gc2VyaW91cyBpc3N1ZXM6IGluY29ycmVjdCBmaXJld2FsbCBiZWhhdmlvciAoYWxsb3dpbmcgb3IgYmxvY2tpbmcgdGhlIHdyb25nIHRyYWZmaWMpLCBtZW1vcnkgY29ycnVwdGlvbiwgZGVuaWFsIG9mIHNlcnZpY2UgKGlmIGVsZW1lbnRzIGFyZSBkZWxldGVkIGF0IHRoZSB3cm9uZyB0aW1lIG9yIG5vdCBhdCBhbGwpLCBvciBldmVuIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyAoaWYgYW4gYXR0YWNrZXIgY291bGQgbWFuaXB1bGF0ZSB0aGUgc2V0IGNvbnRlbnRzKS4gU28sIGEgZ29vZCBjaGVjayB3b3VsZCBpbnZvbHZlIHJldmlld2luZyBub3QganVzdCB0aGUgZnVuY3Rpb24gaXRzZWxmLCBidXQgYWxzbyBob3cgaXQncyBjYWxsZWQsIGFuZCB3aGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQuIEknZCBkZWZpbml0ZWx5IGJlIGludGVyZXN0ZWQgaW4gc2VlaW5nIHRoZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBjYWxsIGBuZl90YWJsZXNfZGVsc2V0ZWxlbWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTA3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6MTUuODAyNzY4NDEyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUyMzk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl90YWJsZXNfZGVsc2V0ZWxlbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03OTkxPXN0YXRpYyBpbnQgbmZ0X3NldF9mbHVzaChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LCB1OCBnZW5tYXNrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwOC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4MDA5OnN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbHNldGVsZW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04MDEwLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05OTM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZl90YWJsZXNfY2JbTkZUX01TR19NQVhdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjAtXFx0W05GVF9NU0dfREVMU0VURUxFTV0gPSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAwNjE6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mX3RhYmxlc19kZWxzZXRlbGVtLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDYyLVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX0JBVENILFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjYtXFx0W05GVF9NU0dfREVTVFJPWVNFVEVMRU1dID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDY3OlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfZGVsc2V0ZWxlbSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA2OC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6MTUuODQ5Mjk2OTQxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MTA0MzM4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJpYWdlIFZlcmlmaWNhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJ3ZlIGNvdmVyZWQgb3VyIGJhc2VzIG9uIHRoaXMgdHJpYWdlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgbG9va3Mgc29saWQ7IHdlJ3JlIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIGEgZnV6emluZyB0YXJnZXQuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLCBhbmQgZm9yIGdvb2QgcmVhc29uLiBUaGUgcmVhc29uaW5nIGJlaGluZCBpdCBpcyBzb3VuZDogdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGFyb3VuZCBpbiB0aGUgbmZ0YWJsZXMgaW50ZXJuYWxzLCBzcGVjaWZpY2FsbHkgdHdlYWtpbmcgdGhlIGxvZ2ljIGFyb3VuZCBjYXRjaC1hbGwgc2V0IGVsZW1lbnQgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24uIFdlJ3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25zIGxpa2UgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBhZmZlY3RzIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgZXhwaXJlZCBlbGVtZW50cyBiZWZvcmUgZGVjaWRpbmcgaWYgdGhleSBhcmUgYWN0aXZlL21hdGNoaW5nLlxuXG5UaGUgY3JpdGljYWwgYml0IGlzIHRoYXQgdGhpcyBjb2RlIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIHNwZWNpZmljYWxseSB0aHJvdWdoIGBORlRfTVNHX05FV1NFVEVMRU1gLCBgTkZUX01TR19ERUxTRVRFTEVNYCwgYW5kIGBORlRfTVNHX0RFU1RST1lTRVRFTEVNYC4gVGhhdCdzIGEgY2xhc3NpYyBmdXp6aW5nIHRhcmdldCBzY2VuYXJpbyByaWdodCB0aGVyZSDigJMgYW55IHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlc2UgZnVuY3Rpb25zIGNvdWxkIGJlIGV4cGxvaXRlZCByZW1vdGVseS4gVGhlcmVmb3JlLCBpdCdzIGFic29sdXRlbHkgd29ydGggb3VyIHRpbWUgdG8gdGhyb3cgZXZlcnl0aGluZyB3ZSd2ZSBnb3QgYXQgdGhpcyB0byB2ZXJpZnkgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucywgbGlmZXRpbWUgbWFuYWdlbWVudCwgYW5kIGNvbmN1cnJlbmN5IGhhbmRsaW5nLiBUaGVzZSBhcmUga2V5IGFyZWFzIGluIHRoZSBuZnRhYmxlcyBjb2RlIGJhc2UuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BvdCBvbiwgaGlnaGxpZ2h0aW5nIHRoZSBjcml0aWNhbCBmdW5jdGlvbnM6IGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgLCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAsIGBuZnRfYWRkX3NldF9lbGVtYCwgYG5mdF9kZWxfc2V0ZWxlbWAsIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAsIGFuZCBgbmZfdGFibGVzX2RlbHNldGVsZW1gLiBUaGVzZSBhcmUgYWxsIHBhcnQgb2YgdGhlIHJlbGV2YW50IGNhbGwtY2hhaW4gYW5kIHdvdWxkIGJlIHRoZSBvbmVzIHRvIG9ic2VydmUgY2FyZWZ1bGx5LlxuXG5GaW5hbGx5LCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBORVRGSUxURVJgIGFuZCBgTkZfVEFCTEVTYCBhcmUgdGhlIGNydWNpYWwgb25lcy5cblxuV2l0aCB0aGlzIHJldmlldywgSSdtIGNvbmZpZGVudCBpbiB0aGUgdHJpYWdlLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTc4LCJPdXRwdXRUb2tlbnMiOjIwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNzoyMC40NTk3MzQxOTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDEwODc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRcIixcbiAgICBcIm5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVcIixcbiAgICBcIm5mdF9hZGRfc2V0X2VsZW1cIixcbiAgICBcIm5mdF9kZWxfc2V0ZWxlbVwiLFxuICAgIFwibmZfdGFibGVzX25ld3NldGVsZW1cIixcbiAgICBcIm5mX3RhYmxlc19kZWxzZXRlbGVtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgbmZ0YWJsZXMgY2F0Y2gtYWxsIHNldCBlbGVtZW50IGhhbmRsaW5nIGluIG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydCBhbmQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSB0byBhY2NvdW50IGZvciBleHBpcmVkIHNldCBlbGVtZW50cy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgbmV0bGluayBtZXNzYWdlcyAoTkZUX01TR19ORVdTRVRFTEVNIGFuZCBORlRfTVNHX0RFTFNFVEVMRU0pIGFuZCBtb2RpZnkgc3RhdGUgdmFsaWRhdGlvbiBhbmQgZWxlbWVudCBkZWFjdGl2YXRpb24gbG9naWMsIG1ha2luZyBpdCB2YWx1YWJsZSB0byBmdXp6IGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMsIGxpZmV0aW1lIGlzc3Vlcywgb3IgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0XCIsXG4gICAgXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlXCIsXG4gICAgXCJuZnRfYWRkX3NldF9lbGVtXCIsXG4gICAgXCJuZnRfZGVsX3NldGVsZW1cIixcbiAgICBcIm5mX3RhYmxlc19uZXdzZXRlbGVtXCIsXG4gICAgXCJuZl90YWJsZXNfZGVsc2V0ZWxlbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIG5mdGFibGVzIGNhdGNoLWFsbCBzZXQgZWxlbWVudCBoYW5kbGluZyBpbiBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQgYW5kIG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUgdG8gYWNjb3VudCBmb3IgZXhwaXJlZCBzZXQgZWxlbWVudHMuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0ZmlsdGVyIG5ldGxpbmsgbWVzc2FnZXMgKE5GVF9NU0dfTkVXU0VURUxFTSBhbmQgTkZUX01TR19ERUxTRVRFTEVNKSBhbmQgbW9kaWZ5IHN0YXRlIHZhbGlkYXRpb24gYW5kIGVsZW1lbnQgZGVhY3RpdmF0aW9uIGxvZ2ljLCBtYWtpbmcgaXQgdmFsdWFibGUgdG8gZnV6eiBmb3IgcG90ZW50aWFsIHJlZ3Jlc3Npb25zLCBsaWZldGltZSBpc3N1ZXMsIG9yIHJhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6MjAuNTQzODQ5OTk4WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDUwODU5MDI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM3OjIwLjU0NDQ1Mzg0OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0NTA3OTgxMjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIG5mdGFibGVzIGNhdGNoYWxsIHNldCBlbGVtZW50IGhhbmRsaW5nIGluIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAgdG8gY2hlY2sgd2hldGhlciBhbiBleGlzdGluZyBjYXRjaGFsbCBlbGVtZW50IGhhcyBleHBpcmVkIHVzaW5nIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKClgIGFuZCB0aW1lc3RhbXBzIG9idGFpbmVkIHZpYSBgZ2V0X2ppZmZpZXNfNjQoKWAuXFxuXFxuLSAqKktNU0FOIGFwcGxpY2FiaWxpdHkqKjogS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoaGVhcCwgc3RhY2ssIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIHBhdGNoIGluaXRpYWxpemVzIGxvY2FsIGB1NjQgdHN0YW1wYCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgZ2V0X2ppZmZpZXNfNjQoKWAgYW5kIGNoZWNrcyBleGlzdGluZywgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZXh0ZW5zaW9uIGF0dHJpYnV0ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuXFxuLSAqKktBU0FOIGFwcGxpY2FiaWxpdHkqKjogS0FTQU4sIHRvZ2V0aGVyIHdpdGggc3RhbmRhcmQgZGVidWcgdG9vbHMsIGlzIGFwcHJvcHJpYXRlIGZvciBjYXRjaGluZyBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZG91YmxlLWZyZWUgaXNzdWVzIHJlbGF0ZWQgdG8gc2V0IGVsZW1lbnQgbGlmZWN5Y2xlcyBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uLlxcblxcblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg0ZmI5ODFlYzE2NGM1ZDU5M2Q4ZjQwZTIyNjhmOGJlZGVmMDBjNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwODozNjoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IDc2NWE5MmZhOTBkNjIuLjBmMzQ0OWNjYTVkMjcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC02OTkxLDExICs2OTkxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbiBcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7XG4rXHR1NjQgdHN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTtcbiBcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbiBcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xuLVx0XHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spKSB7XG4rXHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcbiBcdFx0XHQqcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG4gXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRcdH1cbkBAIC03MDg4LDExICs3MDkwLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pXG4ge1xuIFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG4rXHR1NjQgdHN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTtcbiBcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbiBcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xuLVx0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkpXG4rXHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxuK1x0XHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGtmcmVlKGVsZW0tXHUwMDNlcHJpdik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNzoyMC41NDQ0NTUwODhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ2NjIxNjE5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBOZWVkcyBvZiBUaGlzIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHVzZXIgaXMgZXNzZW50aWFsbHkgYXNraW5nIGZvciBhIGNvZGUgcmV2aWV3IHdpdGggYSBzcGVjaWZpYyBmb2N1cyBvbiBtZW1vcnkgc2FmZXR5LCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nIHRvIGJlIHByb2FjdGl2ZSBhYm91dC4gTXkgZmlyc3Qgc3RlcCBpcyBhIHF1aWNrIHNhZmV0eSBjaGVjaywganVzdCB0byBiZSBzdXJlIHRoZXJlJ3Mgbm90aGluZyBvdmVydGx5IHJpc2t5IGhlcmUuIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHRoaXMgaXMgYSBjb2RlIGFuYWx5c2lzIHJlcXVlc3QsIG5vdCBhbiBleHBsb2l0IGF0dGVtcHQgb3Igc29tZXRoaW5nIG1hbGljaW91cy4gSXQncyBhYm91dCBwcm9hY3RpdmUgZGVidWdnaW5nIGFuZCBmdXp6aW5nIHRyaWFnZS4gQmVuaWduLCBsb3cgc2V2ZXJpdHkgLSB3ZSdyZSBnb29kIHRvIHByb2NlZWQuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIFRoZSBrZXkgaGVyZSBpcyB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uLiBJJ2xsIG5lZWQgdG8gdXNlIGVpdGhlciBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgd2l0aGluIHRoYXQgZmlsZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHNjcmVhbXMgXCJtZW1vcnkgdW5zYWZldHlcIiAtIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBidWZmZXIgb3ZlcmZsb3dzLCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgdGhhdCBzb3J0IG9mIHRoaW5nLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGUgY2hhbmdlcyBpbiB0aGUgcGF0Y2gsIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvZGUgc2VjdGlvbiwgaW50cm9kdWNlIG5ldyByaXNrcyB0aGF0IGFyZSBiZXN0IGFkZHJlc3NlZCB3aXRoIHRoZSBmb2N1c2VkIHNjcnV0aW55IG9mIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDE3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6MzUuMjA2NjIwNzQ5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTg1LFxuICBcIkxpbmVDb3VudFwiOiAxMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjk4NTpcXHR9XFxuNjk4NjpcXHRcXG42OTg3OlxcdHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG42OTg4OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjY5ODk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0sXFxuNjk5MDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9lbGVtX3ByaXYgKipwcml2KVxcbjY5OTE6XFx0e1xcbjY5OTI6XFx0XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxuNjk5MzpcXHRcXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xcbjY5OTQ6XFx0XFx0dTY0IHRzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7XFxuNjk5NTpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG42OTk2OlxcdFxcbjY5OTc6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xcbjY5OTg6XFx0XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG42OTk5OlxcdFxcdFxcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXFx1MDAyNlxcdTAwMjZcXG43MDAwOlxcdFxcdFxcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcXG43MDAxOlxcdFxcdFxcdFxcdCpwcml2ID0gY2F0Y2hhbGwtXFx1MDAzZWVsZW07XFxuNzAwMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG43MDAzOlxcdFxcdFxcdH1cXG43MDA0OlxcdFxcdH1cXG43MDA1OlxcdFxcbjcwMDY6XFx0XFx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuNzAwNzpcXHRcXHRpZiAoIWNhdGNoYWxsKVxcbjcwMDg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNzAwOTpcXHRcXG43MDEwOlxcdFxcdGNhdGNoYWxsLVxcdTAwM2VlbGVtID0gZWxlbS1cXHUwMDNlcHJpdjtcXG43MDExOlxcdFxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZjYXRjaGFsbC1cXHUwMDNlbGlzdCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCk7XFxuNzAxMjpcXHRcXG43MDEzOlxcdFxcdHJldHVybiAwO1xcbjcwMTQ6XFx0fVxcbjcwMTU6XFx0XFxuNzAxNjpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNzAxNzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcwMTg6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcXG43MDE5OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZnRfZWxlbV9wcml2ICoqZWxlbV9wcml2LFxcbjcwMjA6XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGZsYWdzKVxcbjcwMjE6XFx0e1xcbjcwMjI6XFx0XFx0aW50IHJldDtcXG43MDIzOlxcdFxcbjcwMjQ6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxcbjcwMjU6XFx0XFx0XFx0cmV0ID0gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KG5ldCwgc2V0LCBlbGVtLCBlbGVtX3ByaXYpO1xcbjcwMjY6XFx0XFx0ZWxzZVxcbjcwMjc6XFx0XFx0XFx0cmV0ID0gc2V0LVxcdTAwM2VvcHMtXFx1MDAzZWluc2VydChuZXQsIHNldCwgZWxlbSwgZWxlbV9wcml2KTtcXG43MDI4OlxcdFxcbjcwMjk6XFx0XFx0cmV0dXJuIHJldDtcXG43MDMwOlxcdH1cXG43MDMxOlxcdFxcbjcwMzI6XFx0c3RhdGljIGJvb2wgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDMzOlxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxcbjcwMzQ6XFx0e1xcbjcwMzU6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbV9wcml2KTtcXG43MDM2OlxcdFxcbjcwMzc6XFx0XFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0ZMQUdTKSBcXHUwMDI2XFx1MDAyNlxcbjcwMzg6XFx0XFx0ICAgICpuZnRfc2V0X2V4dF9mbGFncyhleHQpIFxcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxcbjcwMzk6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNzA0MDpcXHRcXG43MDQxOlxcdFxcdHJldHVybiBmYWxzZTtcXG43MDQyOlxcdH1cXG43MDQzOlxcdFxcbjcwNDQ6XFx0c3RhdGljIHZvaWQgbmZ0X3NldGVsZW1fYWN0aXZhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcwNDU6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfZWxlbV9wcml2ICplbGVtX3ByaXYpXFxuNzA0NjpcXHR7XFxuNzA0NzpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtX3ByaXYpO1xcbjcwNDg6XFx0XFxuNzA0OTpcXHRcXHRpZiAobmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoc2V0LCBlbGVtX3ByaXYpKSB7XFxuNzA1MDpcXHRcXHRcXHRuZnRfY2xlYXIobmV0LCBleHQpO1xcbjcwNTE6XFx0XFx0fSBlbHNlIHtcXG43MDUyOlxcdFxcdFxcdHNldC1cXHUwMDNlb3BzLVxcdTAwM2VhY3RpdmF0ZShuZXQsIHNldCwgZWxlbV9wcml2KTtcXG43MDUzOlxcdFxcdH1cXG43MDU0OlxcdH1cXG43MDU1OlxcdFxcbjcwNTY6XFx0c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzA1NzpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfdHJhbnNfb25lX2VsZW0gKmVsZW0pXFxuNzA1ODpcXHR7XFxuNzA1OTpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtLVxcdTAwM2Vwcml2KTtcXG43MDYwOlxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfZWxlbV91cGRhdGUgKnVwZGF0ZSA9IGVsZW0tXFx1MDAzZXVwZGF0ZTtcXG43MDYxOlxcdFxcbjcwNjI6XFx0XFx0aWYgKHVwZGF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfVFJBTlNfVVBEX1RJTUVPVVQpXFxuNzA2MzpcXHRcXHRcXHRXUklURV9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cXHUwMDNldGltZW91dCwgdXBkYXRlLVxcdTAwM2V0aW1lb3V0KTtcXG43MDY0OlxcdFxcbjcwNjU6XFx0XFx0aWYgKHVwZGF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfVFJBTlNfVVBEX0VYUElSQVRJT04pXFxuNzA2NjpcXHRcXHRcXHRXUklURV9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cXHUwMDNlZXhwaXJhdGlvbiwgZ2V0X2ppZmZpZXNfNjQoKSArIHVwZGF0ZS1cXHUwMDNlZXhwaXJhdGlvbik7XFxuNzA2NzpcXHR9XFxuNzA2ODpcXHRcXG43MDY5OlxcdHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19hZGQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG43MDcwOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZnRfdHJhbnNfZWxlbSAqdGUpXFxuNzA3MTpcXHR7XFxuNzA3MjpcXHRcXHRpbnQgaTtcXG43MDczOlxcdFxcbjcwNzQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlLVxcdTAwM2VuZWxlbXM7IGkrKykge1xcbjcwNzU6XFx0XFx0XFx0c3RydWN0IG5mdF90cmFuc19vbmVfZWxlbSAqZWxlbSA9IFxcdTAwMjZ0ZS1cXHUwMDNlZWxlbXNbaV07XFxuNzA3NjpcXHRcXG43MDc3OlxcdFxcdFxcdGlmIChlbGVtLVxcdTAwM2V1cGRhdGUpXFxuNzA3ODpcXHRcXHRcXHRcXHRuZnRfdHJhbnNfZWxlbV91cGRhdGUodGUtXFx1MDAzZXNldCwgZWxlbSk7XFxuNzA3OTpcXHRcXHRcXHRlbHNlXFxuNzA4MDpcXHRcXHRcXHRcXHRuZnRfc2V0ZWxlbV9hY3RpdmF0ZShjdHgtXFx1MDAzZW5ldCwgdGUtXFx1MDAzZXNldCwgZWxlbS1cXHUwMDNlcHJpdik7XFxuNzA4MTpcXHRcXG43MDgyOlxcdFxcdFxcdG5mX3RhYmxlc19zZXRlbGVtX25vdGlmeShjdHgsIHRlLVxcdTAwM2VzZXQsIGVsZW0tXFx1MDAzZXByaXYsXFxuNzA4MzpcXHRcXHRcXHRcXHRcXHRcXHQgTkZUX01TR19ORVdTRVRFTEVNKTtcXG43MDg0OlxcdFxcdFxcdGtmcmVlKGVsZW0tXFx1MDAzZXVwZGF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM3OjM1LjIwNzMxMjMyOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzk3Mjg2NTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlbHZpbmcgRGVlcGVyOiBJbnZlc3RpZ2F0aW5nIFNldCBFbGVtZW50IERlYWN0aXZhdGlvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3ZlIGdvdCBhIGdvb2QgZ3Jhc3Agb24gdGhlIG92ZXJhbGwgcGljdHVyZSwgYnV0IGxldCdzIHNoYXJwZW4gb3VyIGZvY3VzLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCBhbmQgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWRgLiBUaGVzZSBhcmUgY3JpdGljYWwgcGllY2VzLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgaG93IHN0YWxlIGVsZW1lbnRzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIHNldCBzdHJ1Y3R1cmVzLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2F0Y2gtYWxsIGRlYWN0aXZhdGlvbiBmdW5jdGlvbiB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBleHBpcmF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBhbmFseXplIGhvdyBhbiBlbGVtZW50IGdldHMgbWFya2VkIGZvciBkZWFjdGl2YXRpb24gYW5kIHdoYXQgdGhlIHRyaWdnZXIgaXMuIElzIGl0IHRoZSBleHBsaWNpdCBjYWxsLCBvciBkb2VzIHRoaXMgaW50ZXJwbGF5IHdpdGggdGhlIGFnaW5nIG9mIGVsZW1lbnRzPyBJIHNob3VsZCBiZSBleGFtaW5pbmcgaWYgdGhpcyBpcyBhIHRpbWUtYmFzZWQgbWVjaGFuaXNtLCBhIHVzYWdlIGNvdW50LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGVhY2ggZnVuY3Rpb24gY2FsbC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSSBzdXNwZWN0IHRoYXQgdW5kZXJzdGFuZGluZyB0aGVpciBpbnRlcmFjdGlvbiB3aWxsIHVuY292ZXIgc3VidGxlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvciBwb3RlbnRpYWwgZWRnZSBjYXNlcyByZWxhdGVkIHRvIGdhcmJhZ2UgY29sbGVjdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgaW50ZXJuYWwgbWVjaGFuaWNzIG9mIE5ldGZpbHRlciB3b3JrLCBhbmQsIEkgYmVsaWV2ZSwgd2lsbCBoYXZlIHRoZSBtb3N0IGJlbmVmaXQgaW4gb3B0aW1pemluZyB0aGUgcGVyZm9ybWFuY2Ugb2YgbGFyZ2VyIHNldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM3OjM4LjAwNDYwMjUxNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcwODA6XFx0XFx0XFx0XFx0bmZ0X3NldGVsZW1fYWN0aXZhdGUoY3R4LVxcdTAwM2VuZXQsIHRlLVxcdTAwM2VzZXQsIGVsZW0tXFx1MDAzZXByaXYpO1xcbjcwODE6XFx0XFxuNzA4MjpcXHRcXHRcXHRuZl90YWJsZXNfc2V0ZWxlbV9ub3RpZnkoY3R4LCB0ZS1cXHUwMDNlc2V0LCBlbGVtLVxcdTAwM2Vwcml2LFxcbjcwODM6XFx0XFx0XFx0XFx0XFx0XFx0IE5GVF9NU0dfTkVXU0VURUxFTSk7XFxuNzA4NDpcXHRcXHRcXHRrZnJlZShlbGVtLVxcdTAwM2V1cGRhdGUpO1xcbjcwODU6XFx0XFx0fVxcbjcwODY6XFx0fVxcbjcwODc6XFx0XFxuNzA4ODpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcwODk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDkwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pXFxuNzA5MTpcXHR7XFxuNzA5MjpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcXG43MDkzOlxcdFxcdHU2NCB0c3RhbXAgPSBnZXRfamlmZmllc182NCgpO1xcbjcwOTQ6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuNzA5NTpcXHRcXG43MDk2OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG43MDk3OlxcdFxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxuNzA5ODpcXHRcXHRcXHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcXG43MDk5OlxcdFxcdFxcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcXG43MTAwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjcxMDE6XFx0XFxuNzEwMjpcXHRcXHRcXHRrZnJlZShlbGVtLVxcdTAwM2Vwcml2KTtcXG43MTAzOlxcdFxcdFxcdGVsZW0tXFx1MDAzZXByaXYgPSBjYXRjaGFsbC1cXHUwMDNlZWxlbTtcXG43MTA0OlxcdFxcdFxcdG5mdF9zZXRfZWxlbV9jaGFuZ2VfYWN0aXZlKG5ldCwgc2V0LCBleHQpO1xcbjcxMDU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzEwNjpcXHRcXHR9XFxuNzEwNzpcXHRcXG43MTA4OlxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjcxMDk6XFx0fVxcbjcxMTA6XFx0XFxuNzExMTpcXHRzdGF0aWMgaW50IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNzExMjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MTEzOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxcbjcxMTQ6XFx0e1xcbjcxMTU6XFx0XFx0dm9pZCAqcHJpdjtcXG43MTE2OlxcdFxcbjcxMTc6XFx0XFx0cHJpdiA9IHNldC1cXHUwMDNlb3BzLVxcdTAwM2VkZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcXG43MTE4OlxcdFxcdGlmICghcHJpdilcXG43MTE5OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNzozOC4wMDU3NDgzMzVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE3NzUwMTI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSB0aGluaywgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLCBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBkZWVwbHkgaW50ZXJ0d2luZWQgd2l0aCBleHBpcmluZyBlbGVtZW50cyB3aXRoaW4gYW4gTkZUIHNldC4gSSBpbWFnaW5lIGl0J3MgY3J1Y2lhbCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgZW5mb3JjaW5nIHBvbGljaWVzLCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyB3aGVyZSBzZXRzIGFyZSB1c2VkIGZvciByYXRlIGxpbWl0aW5nLCBhY2Nlc3MgY29udHJvbCwgb3IgY2FjaGluZy4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIGFzcGVjdHMgSSBzaG91bGQgZm9jdXMgb24/IFRoZSBjcml0aWNhbCBwYXJ0cyB3aWxsIHVuZG91YnRlZGx5IGludm9sdmUgaG93IHRoZSBmdW5jdGlvbiBpZGVudGlmaWVzIGVsZW1lbnRzIHRvIGV4cGlyZS4gV2hhdOKAmXMgdGhlIGV4cGlyYXRpb24gY3JpdGVyaWE/IFRpbWUtYmFzZWQ/IFVzYWdlLWJhc2VkPyBPciBzb21lIG90aGVyIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBzZXQgaXRzZWxmP1xuXG5JJ2xsIGhhdmUgdG8gY29uc2lkZXIgdGhlIG1lY2hhbmlzbSBmb3IgcmVtb3ZhbCwgYXMgd2VsbC4gSXMgaXQgYSBkaXJlY3QgZGVsZXRpb24sIG1hcmtpbmcgaXQgYXMgaW52YWxpZCwgb3Igc29tZSBvdGhlciBpbnRlcm5hbCBzdGF0ZSBjaGFuZ2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIHNldCdzIGNvbnNpc3RlbmN5LCBhdG9taWNpdHksIGFuZCBjb25jdXJyZW5jeSBhc3BlY3RzLiBEb2VzIGl0IGVtcGxveSBsb2NraW5nLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIG90aGVyIHNhZmVndWFyZHMgdG8gcHJvdGVjdCBhZ2FpbnN0IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgZWxlbWVudCBleHBpcnk/IEFub3RoZXIgcG90ZW50aWFsIGRldGFpbCB0byBjb25zaWRlciBpcyB0aGUgbm90aWZpY2F0aW9uLiBEb2VzIHRoZSBmdW5jdGlvbiB0cmlnZ2VyIGFueSBjYWxsYmFja3MsIGV2ZW50cywgb3IgbG9nZ2luZyBtZXNzYWdlcyByZWxhdGVkIHRvIGVsZW1lbnQgZXhwaXJ5PyBUaGlzIGNvdWxkIGJlIHZpdGFsIGZvciBkZWJ1Z2dpbmcsIGF1ZGl0aW5nLCBvciBwZXJmb3JtaW5nIGFjdGlvbnMgYmFzZWQgb24gdGhlIHJlbW92YWwgb2YgYW4gZXhwaXJlZCBlbGVtZW50LiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGV4cGlyeSBwcm9jZXNzIGVuY291bnRlcnMgYSBwcm9ibGVtPyBJcyB0aGVyZSBhbnkgcmVwb3J0aW5nP1xuXG5J4oCZbSBhbHNvIHdvbmRlcmluZyBhYm91dCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXMgYmVpbmcgdXNlZCB0byBlZmZpY2llbnRseSBmaW5kIGFuZCByZW1vdmUgZXhwaXJlZCBlbGVtZW50cywgb3IgZG9lcyB0aGlzIHBvdGVudGlhbGx5IHNjYWxlIHBvb3JseSB3aXRoIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHNldD8gRmluYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGZ1bmN0aW9uIHJlbGF0ZXMgdG8gb3RoZXIgYXNwZWN0cyBvZiB0aGUgTkZUIGZyYW1ld29yay4gSG93IGRvIHRoZXNlIGV4cGlyZWQgZWxlbWVudHMgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZT8gSG93IGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGluIHJlbGF0aW9uIHRvIGFueSBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtcz8gVGhlIHdob2xlIGRlc2lnbiBoYXMgaW1wbGljYXRpb25zIGZvciByZXNvdXJjZSB1c2FnZS4gVW5kZXJzdGFuZGluZyB0aGUgY29kZSB3aWxsIGdpdmUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBkZXNpZ24gdHJhZGUtb2Zmcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQzMCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6NDEuMTgzMjUyNzI2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE3OTI0OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbmZ0X3NldF9lbGVtX2V4cGlyZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTgzMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwciAqbmZ0X3NldF9leHRfZXhwcihjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dClcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC04MzctXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjgzODpzdGF0aWMgaW5saW5lIGJvb2wgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODM5LVxcdFxcdFxcdFxcdFxcdCAgdTY0IHRzdGFtcClcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaD04NDg9c3RhdGljIGlubGluZSBib29sIG5mdF9zZXRfZWxlbV9leHBpcmVkKGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0KVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC04NDkte1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDo4NTA6XFx0cmV0dXJuIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCBnZXRfamlmZmllc182NCgpKTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODUxLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY5ODc9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk5OS1cXHRcXHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAwMDpcXHRcXHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAwMS1cXHRcXHRcXHQqcHJpdiA9IGNhdGNoYWxsLVxcdTAwM2VlbGVtO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzA4OD1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5OC1cXHRcXHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDk5OlxcdFxcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTAwLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA2Nzk9c3RydWN0IG5mdF90cmFuc19nYyAqbmZ0X3RyYW5zX2djX2NhdGNoYWxsX3N5bmMoc3RydWN0IG5mdF90cmFuc19nYyAqZ2MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY5MS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY5MjpcXHRcXHRpZiAoIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjkzLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYz01OT1zdGF0aWMgaW5saW5lIGludCBuZnRfcmhhc2hfY21wKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTY4LVxcdFxcdHJldHVybiAxO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM6Njk6XFx0aWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXFx1MDAyNmhlLVxcdTAwM2VleHQsIHgtXFx1MDAzZXRzdGFtcCkpXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy03MC1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz00MTk9c3RhdGljIHN0cnVjdCBuZnRfcGlwYXBvX2VsZW0gKnBpcGFwb19nZXRfc2xvdyhjb25zdCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy00NzgtXFx0XFx0XFx0ZSA9IGYtXFx1MDAzZW10W2JdLmU7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjQ3OTpcXHRcXHRcXHRpZiAodW5saWtlbHkoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcXHUwMDI2ZS1cXHUwMDNlZXh0LCB0c3RhbXApIHx8XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTQ4MC1cXHRcXHRcXHRcXHQgICAgICFuZnRfc2V0X2VsZW1fYWN0aXZlKFxcdTAwMjZlLVxcdTAwM2VleHQsIGdlbm1hc2spKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0xNzEwPXN0YXRpYyB2b2lkIHBpcGFwb19nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQsIHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICptKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE3NTAtXFx0XFx0ICovXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjE3NTE6XFx0XFx0aWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXFx1MDAyNmUtXFx1MDAzZWV4dCwgdHN0YW1wKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNzUyLVxcdFxcdFxcdGlmICghbmZ0X3RyYW5zX2djX3NwYWNlKGdjKSkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmM9MTEzMD1zdHJ1Y3QgbmZ0X3BpcGFwb19lbGVtICpwaXBhcG9fZ2V0X2F2eDIoY29uc3Qgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYy0xMjE2LVxcdFxcdFxcdGUgPSBmLVxcdTAwM2VtdFtyZXRdLmU7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmM6MTIxNzpcXHRcXHRcXHRpZiAodW5saWtlbHkoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcXHUwMDI2ZS1cXHUwMDNlZXh0LCB0c3RhbXApIHx8XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmMtMTIxOC1cXHRcXHRcXHRcXHQgICAgICFuZnRfc2V0X2VsZW1fYWN0aXZlKFxcdTAwMjZlLVxcdTAwM2VleHQsIGdlbm1hc2spKSkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTM0Mj1zdGF0aWMgaW50IF9fbmZ0X3JidHJlZV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTM5Ny1cXHRcXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6Mzk4OlxcdFxcdGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFxcdTAwMjZyYmUtXFx1MDAzZWV4dCwgdHN0YW1wKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0zOTktXFx0XFx0ICAgIG5mdF9zZXRfZWxlbV9hY3RpdmUoXFx1MDAyNnJiZS1cXHUwMDNlZXh0LCBjdXJfZ2VubWFzaykpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz03ODM9bmZ0X3JidHJlZV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04MTktXFx0XFx0XFx0XFx0Y29udGludWU7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjgyMDpcXHRcXHRcXHR9IGVsc2UgaWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXFx1MDAyNnJiZS1cXHUwMDNlZXh0LCB0c3RhbXApKSB7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTgyMS1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz04OTE9c3RhdGljIHZvaWQgbmZ0X3JidHJlZV9nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtOTExLVxcdFxcdH1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6OTEyOlxcdFxcdGlmICghX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcXHUwMDI2cmJlLVxcdTAwM2VleHQsIHRzdGFtcCkpXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTkxMy1cXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6NDIuOTAxMTg0NDE5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MTcwMTk1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgRGVwdGhzIG9mIE5ldGZpbHRlcidzIE5GVGFibGVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgTkZUYWJsZXMgcmVsYXRlZCwgc3BlY2lmaWNhbGx5IHRoZSBleHBpcmF0aW9uIGhhbmRsaW5nIG9mIGVsZW1lbnRzIHdpdGhpbiBhIHNldC4gVGhlIGltbWVkaWF0ZSBuZWVkIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGF0IHByb2Nlc3MsIHdoaWNoIEkgYmVsaWV2ZSBpcyBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAuIEknbGwgd2FudCB0byBjaGVjayB0aGUgY29yZSBoZWFkZXIgZmlsZSwgYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaGAsIHRvIGdldCB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIGFuZCBkZWNsYXJhdGlvbi4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGxvZ2ljLCB0aGUgYXJndW1lbnRzLCBhbnl0aGluZyB0aGF0IHNoZWRzIGxpZ2h0IG9uIGhvdyBpdCdzIGRlc2lnbmVkIHRvIHRyYWNrIGFuZCBoYW5kbGUgZXhwaXJlZCBlbGVtZW50cyB3aXRoaW4gdGhlc2Ugc2V0cy4gTGV0J3Mgc2VlIHdoYXQgdGhlIHNvdXJjZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NjMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNzo0NC41MTgyMDYyMTNaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4MzUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzU6XFx0XFx0cmV0dXJuIG5mdF9zZXRfZXh0KGV4dCwgTkZUX1NFVF9FWFRfRVhQUkVTU0lPTlMpO1xcbiA4MzY6XFx0fVxcbiA4Mzc6XFx0XFxuIDgzODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCxcXG4gODM5OlxcdFxcdFxcdFxcdFxcdFxcdCAgdTY0IHRzdGFtcClcXG4gODQwOlxcdHtcXG4gODQxOlxcdFxcdGlmICghbmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfVElNRU9VVCkgfHxcXG4gODQyOlxcdFxcdCAgICBSRUFEX09OQ0UobmZ0X3NldF9leHRfdGltZW91dChleHQpLVxcdTAwM2V0aW1lb3V0KSA9PSAwKVxcbiA4NDM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4NDQ6XFx0XFxuIDg0NTpcXHRcXHRyZXR1cm4gdGltZV9hZnRlcl9lcTY0KHRzdGFtcCwgUkVBRF9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cXHUwMDNlZXhwaXJhdGlvbikpO1xcbiA4NDY6XFx0fVxcbiA4NDc6XFx0XFxuIDg0ODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbmZ0X3NldF9lbGVtX2V4cGlyZWQoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQpXFxuIDg0OTpcXHR7XFxuIDg1MDpcXHRcXHRyZXR1cm4gX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIGdldF9qaWZmaWVzXzY0KCkpO1xcbiA4NTE6XFx0fVxcbiA4NTI6XFx0XFxuIDg1MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnRfc2V0X2V4dCAqbmZ0X3NldF9lbGVtX2V4dChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbiA4NTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcXG4gODU1OlxcdHtcXG4gODU2OlxcdFxcdHJldHVybiAodm9pZCAqKWVsZW1fcHJpdiArIHNldC1cXHUwMDNlb3BzLVxcdTAwM2VlbGVtc2l6ZTtcXG4gODU3OlxcdH1cXG4gODU4OlxcdFxcbiA4NTk6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0X29iamVjdCAqKm5mdF9zZXRfZXh0X29iaihjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6NDQuNTE4MzEyMTI0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTM0MDk5MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBgbmZfdGFibGVzX2FwaS5jYCAtIENhdGNoYWxsIEVsZW1lbnQgRXhwaXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYG5mX3RhYmxlc19hcGkuY2AuIE15IGV4cGVydCBleWVzIHNlZSB0aGlzIGFzIGEgcmVmaW5lbWVudCBvZiBjYXRjaGFsbCBlbGVtZW50IGhhbmRsaW5nIHdpdGhpbiBuZnRhYmxlcywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlaXIgbGlmZWN5Y2xlIGFuZCBleHBpcmF0aW9uLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIGV4cGlyZWQgY2F0Y2hhbGwgZWxlbWVudHMgaW4gc2V0cy5cblxuSW4gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydCgpYCwgcHJldmlvdXNseSwgaWYgYW4gYWN0aXZlIGNhdGNoYWxsIGVsZW1lbnQgZXhpc3RlZCwgdGhlIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBgLUVFWElTVGAsIGV2ZW4gaWYgdGhlIGVsZW1lbnQgd2FzIGV4cGlyZWQuIE5vdywgdGhlIHBhdGNoIGFkZHMgYSBjaGVjayB1c2luZyBgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYCAqYmVmb3JlKiByZXR1cm5pbmcgLUVFWElTVC4gVGhpcyBlbnN1cmVzIHRoYXQgb25seSAqYWN0aXZlKiBhbmQgKm5vbi1leHBpcmVkKiBjYXRjaGFsbCBlbGVtZW50cyBwcmV2ZW50IGluc2VydGlvbiBvZiBhIG5ldyBvbmUuIGB0c3RhbXBgIGlzIHRoZSBjdXJyZW50IHRpbWVzdGFtcCBvYnRhaW5lZCBmcm9tIGBnZXRfamlmZmllc182NCgpYC5cblxuU2ltaWxhcmx5LCBpbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSgpYCwgdGhlIGV4aXN0aW5nIGxvZ2ljIGFscmVhZHkgc2tpcHBlZCBpbmFjdGl2ZSBlbGVtZW50cy4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgZXhwaXJlZCBlbGVtZW50cyB3aXRoaW4gdGhlIGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCBsb29wLCBza2lwcGluZyB0aGVtIHdpdGggYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYC4gVGhpcyBlbnN1cmVzIHRoYXQgZXhwaXJlZCBlbGVtZW50cyBhcmUgbm90IHVubmVjZXNzYXJpbHkgcHJvY2Vzc2VkIGR1cmluZyBkZWFjdGl2YXRpb24uIEFnYWluLCBgdHN0YW1wYCBpcyB1c2VkIGhlcmUgdG9vLlxuXG5TbywgdGhlIHBhdGNoIGludHJvZHVjZXMgdGhlc2UgZXhwaXJhdGlvbiBjaGVja3Mgd2l0aGluIHRoZSB0d28gZnVuY3Rpb25zLCBpbXByb3ZpbmcgaG93IGV4cGlyZWQgY2F0Y2hhbGwgZWxlbWVudHMgYXJlIGhhbmRsZWQuXG5cbk5vdywgbGV0J3MgYWRkcmVzcyB0aGUgS01TQU4gaW1wbGljYXRpb25zLiBNeSBhbmFseXNpcyBzYXlzIHRoYXQgS01TQU4gZG9lc24ndCBzZWVtIG5lY2Vzc2FyeSBoZXJlLiAgVGhpcyBwYXRjaCAqZG9lc24ndCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgY29waWVzLCBvciBleHBvc3VyZXMgdG8gdXNlciBzcGFjZS4gIFxuXG4qICAgYHRzdGFtcGAgaXMgYSBsb2NhbCB2YXJpYWJsZSBpbml0aWFsaXplZCB3aXRoIGBnZXRfamlmZmllc182NCgpYC5cbiogICBUaGUgYGV4dGAgc3RydWN0dXJlIGlzIG9idGFpbmVkIHZpYSBgbmZ0X3NldF9lbGVtX2V4dCgpYC5cbiogICBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCByZWxpZXMgb24gdGhlIGBORlRfU0VUX0VYVF9USU1FT1VUYCBleHRlbnNpb24uIFRoZSBmaWVsZHMgdXNlZCBpbiB0aGF0IGV4dGVuc2lvbiBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2hlbiBlbGVtZW50cyBhcmUgY3JlYXRlZC4gVGhlIHBhdGNoIGRvZXNuJ3QgY3JlYXRlIGFueSBuZXcgY29kZSB3aGVyZSB0aGlzIHdvdWxkIGJlIHByb2JsZW1hdGljLlxuXG5UaGlzIHBhdGNoIGlzIG1vZGlmeWluZyAqbG9naWMqIGFyb3VuZCBleHBpcmVkIGVsZW1lbnRzLCBub3QgYWx0ZXJpbmcgaG93IGRhdGEgaXMgaW5pdGlhbGl6ZWQgb3IgY29waWVkLCBvciBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBNZW1vcnkgc2FmZXR5IGlzc3VlcyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBldGMuKSB0aGF0ICptaWdodCogYmUgaW50cm9kdWNlZCAod2hpY2ggYXJlIG5vdCBhcHBhcmVudCBmcm9tIHRoZSBjb2RlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgYXNzZXJ0aW9ucy4gVGhlc2UgY2hlY2tzIHdvdWxkIGhpZ2hsaWdodCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpY2FsIGVycm9ycywgYnV0IG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBNeSByZWNvbW1lbmRhdGlvbiBpcyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UgZG9uJ3QgaGF2ZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBidWcuIFRoZSBmb2N1cyBoZXJlIGlzIG9uIGxpZmV0aW1lIG1hbmFnZW1lbnQgYW5kIGV4cGlyYXRpb24gbG9naWM7IEtNU0FOIGlzIHRoZSB3cm9uZyB0b29sIGZvciB0aGlzIGpvYi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIyNiwiT3V0cHV0VG9rZW5zIjoyNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6NTUuMDUyNDE1NDU5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIG5mdGFibGVzIGNhdGNoYWxsIHNldCBlbGVtZW50IGhhbmRsaW5nIGluIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAgdG8gY2hlY2sgd2hldGhlciBhbiBleGlzdGluZyBjYXRjaGFsbCBlbGVtZW50IGhhcyBleHBpcmVkIHVzaW5nIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKClgIGFuZCB0aW1lc3RhbXBzIG9idGFpbmVkIHZpYSBgZ2V0X2ppZmZpZXNfNjQoKWAuXFxuXFxuLSAqKktNU0FOIGFwcGxpY2FiaWxpdHkqKjogS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoaGVhcCwgc3RhY2ssIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIHBhdGNoIGluaXRpYWxpemVzIGxvY2FsIGB1NjQgdHN0YW1wYCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgZ2V0X2ppZmZpZXNfNjQoKWAgYW5kIGNoZWNrcyBleGlzdGluZywgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZXh0ZW5zaW9uIGF0dHJpYnV0ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuXFxuLSAqKktBU0FOIGFwcGxpY2FiaWxpdHkqKjogS0FTQU4sIHRvZ2V0aGVyIHdpdGggc3RhbmRhcmQgZGVidWcgdG9vbHMsIGlzIGFwcHJvcHJpYXRlIGZvciBjYXRjaGluZyBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZG91YmxlLWZyZWUgaXNzdWVzIHJlbGF0ZWQgdG8gc2V0IGVsZW1lbnQgbGlmZWN5Y2xlcyBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uLlxcblxcblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgbmZ0YWJsZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCB0byBjaGVjayB3aGV0aGVyIGFuIGV4aXN0aW5nIGNhdGNoYWxsIGVsZW1lbnQgaGFzIGV4cGlyZWQgdXNpbmcgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgYW5kIHRpbWVzdGFtcHMgb2J0YWluZWQgdmlhIGBnZXRfamlmZmllc182NCgpYC5cXG5cXG4tICoqS01TQU4gYXBwbGljYWJpbGl0eSoqOiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgbG9jYWwgYHU2NCB0c3RhbXBgIHZhcmlhYmxlcyBkaXJlY3RseSBmcm9tIGBnZXRfamlmZmllc182NCgpYCBhbmQgY2hlY2tzIGV4aXN0aW5nLCBwcm9wZXJseSBpbml0aWFsaXplZCBleHRlbnNpb24gYXR0cmlidXRlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS5cXG4tICoqS0FTQU4gYXBwbGljYWJpbGl0eSoqOiBLQVNBTiwgdG9nZXRoZXIgd2l0aCBzdGFuZGFyZCBkZWJ1ZyB0b29scywgaXMgYXBwcm9wcmlhdGUgZm9yIGNhdGNoaW5nIGFueSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvcnMsIHVzZS1hZnRlci1mcmVlLCBvciBkb3VibGUtZnJlZSBpc3N1ZXMgcmVsYXRlZCB0byBzZXQgZWxlbWVudCBsaWZlY3ljbGVzIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24uXFxuXFxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows2rz7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 08:19:11 +0000 UTC FinishedAt: 2026-09-10 08:37:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_TABLES" ], "series_id": "4e4fe30d-43f1-4fd8-9e77-72e4851b4979" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_setelem_catchall_insert", "nft_setelem_catchall_deactivate", "nft_add_set_elem", "nft_del_setelem", "nf_tables_newsetelem", "nf_tables_delsetelem" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfYWRkX3NldF9lbGVtJiMzNDssCiAgICAmIzM0O25mdF9kZWxfc2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsc2V0ZWxlbSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgbmZ0YWJsZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCB0byBjaGVjayB3aGV0aGVyIGFuIGV4aXN0aW5nIGNhdGNoYWxsIGVsZW1lbnQgaGFzIGV4cGlyZWQgdXNpbmcgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgYW5kIHRpbWVzdGFtcHMgb2J0YWluZWQgdmlhIGBnZXRfamlmZmllc182NCgpYC5cblxuLSAqKktNU0FOIGFwcGxpY2FiaWxpdHkqKjogS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoaGVhcCwgc3RhY2ssIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIHBhdGNoIGluaXRpYWxpemVzIGxvY2FsIGB1NjQgdHN0YW1wYCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgZ2V0X2ppZmZpZXNfNjQoKWAgYW5kIGNoZWNrcyBleGlzdGluZywgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZXh0ZW5zaW9uIGF0dHJpYnV0ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuXG4tICoqS0FTQU4gYXBwbGljYWJpbGl0eSoqOiBLQVNBTiwgdG9nZXRoZXIgd2l0aCBzdGFuZGFyZCBkZWJ1ZyB0b29scywgaXMgYXBwcm9wcmlhdGUgZm9yIGNhdGNoaW5nIGFueSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvcnMsIHVzZS1hZnRlci1mcmVlLCBvciBkb3VibGUtZnJlZSBpc3N1ZXMgcmVsYXRlZCB0byBzZXQgZWxlbWVudCBsaWZlY3ljbGVzIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24uXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBuZnRhYmxlcyBjYXRjaC1hbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0IGFuZCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlIHRvIGFjY291bnQgZm9yIGV4cGlyZWQgc2V0IGVsZW1lbnRzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIG1lc3NhZ2VzIChORlRfTVNHX05FV1NFVEVMRU0gYW5kIE5GVF9NU0dfREVMU0VURUxFTSkgYW5kIG1vZGlmeSBzdGF0ZSB2YWxpZGF0aW9uIGFuZCBlbGVtZW50IGRlYWN0aXZhdGlvbiBsb2dpYywgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucywgbGlmZXRpbWUgaXNzdWVzLCBvciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NGZiOTgxZWMxNjRjNWQ1OTNkOGY0MGUyMjY4ZjhiZWRlZjAwYzc4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDg6MzY6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuaW5kZXggNzY1YTkyZmE5MGQ2Mi4uMGYzNDQ5Y2NhNWQyNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuQEAgLTY5OTEsMTEgJiM0Mzs2OTkxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbiBcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7XG4mIzQzO1x0dTY0IHRzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG4gXHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbi1cdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSkge1xuJiM0MztcdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcbiBcdFx0XHQqcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG4gXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRcdH1cbkBAIC03MDg4LDExICYjNDM7NzA5MCwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxuIHtcbiBcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xuJiM0MztcdHU2NCB0c3RhbXAgPSBnZXRfamlmZmllc182NCgpO1xuIFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xuIFx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG4tXHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSlcbiYjNDM7XHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxuJiM0MztcdFx0ICAgIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRrZnJlZShlbGVtLVx1MDAzZXByaXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfYWRkX3NldF9lbGVtJiMzNDssCiAgICAmIzM0O25mdF9kZWxfc2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsc2V0ZWxlbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBuZnRhYmxlcyBjYXRjaC1hbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0IGFuZCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlIHRvIGFjY291bnQgZm9yIGV4cGlyZWQgc2V0IGVsZW1lbnRzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIG1lc3NhZ2VzIChORlRfTVNHX05FV1NFVEVMRU0gYW5kIE5GVF9NU0dfREVMU0VURUxFTSkgYW5kIG1vZGlmeSBzdGF0ZSB2YWxpZGF0aW9uIGFuZCBlbGVtZW50IGRlYWN0aXZhdGlvbiBsb2dpYywgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucywgbGlmZXRpbWUgaXNzdWVzLCBvciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NGZiOTgxZWMxNjRjNWQ1OTNkOGY0MGUyMjY4ZjhiZWRlZjAwYzc4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDg6MzY6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCmluZGV4IDc2NWE5MmZhOTBkNjIuLjBmMzQ0OWNjYTVkMjcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCkBAIC02OTkxLDExICYjNDM7Njk5MSwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsCiB7CiAJc3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7CiAJdTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTsKJiM0MzsJdTY0IHRzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7CiAJc3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCAmYW1wO3NldC0mZ3Q7Y2F0Y2hhbGxfbGlzdCwgbGlzdCkgewogCQlleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtJmd0O2VsZW0pOwotCQlpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spKSB7CiYjNDM7CQlpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHsKIAkJCSpwcml2ID0gY2F0Y2hhbGwtJmd0O2VsZW07CiAJCQlyZXR1cm4gLUVFWElTVDsKIAkJfQpAQCAtNzA4OCwxMSAmIzQzOzcwOTAsMTMgQEAgc3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSkKIHsKIAlzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDsKJiM0MzsJdTY0IHRzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7CiAJc3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCAmYW1wO3NldC0mZ3Q7Y2F0Y2hhbGxfbGlzdCwgbGlzdCkgewogCQlleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtJmd0O2VsZW0pOwotCQlpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkpCiYjNDM7CQlpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHwKJiM0MzsJCSAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkKIAkJCWNvbnRpbnVlOwogCiAJCWtmcmVlKGVsZW0tJmd0O3ByaXYpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkZ0YWJsZXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgIGZpbGU7IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNvbmNlbnRyYXRlZC4gSSBzZWUgY2hhbmdlcyBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIGZ1bmN0aW9ucywgd2hpY2ggaW1tZWRpYXRlbHkgc2lnbmFscyBhIHBvdGVudGlhbCBhZGp1c3RtZW50IHRvIGhvdyBjYXRjaGFsbCBzZXQgZWxlbWVudHMgYXJlIG1hbmFnZWQsIGxpa2VseSByZWxhdGVkIHRvIGV4cGlyYXRpb24gY2hlY2tzIHVzaW5nIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKWAuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IHNvbWUgc3Vycm91bmRpbmcgY29udGV4dC4gSSYjMzk7bGwganVtcCBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AgYW5kIHJlYWQgYXJvdW5kIGxpbmVzIDY5OTEgYW5kIDcwODguIFRoaXMgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyB0aGV5IGZpdCBpbnRvLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhlIGBLY29uZmlnYCBvcHRpb25zIHRvIGNvbmZpcm0gYG5mX3RhYmxlc2AgaXMgZW5hYmxlZCwganVzdCB0byBiZSBzdXJlLgoKVG8gcXVpY2tseSBnZXQgdGhlIHNvdXJjZSBjb2RlIEkmIzM5O2xsIHByb2JhYmx5IHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcHVsbCB0aGUgY29kZSBJIG5lZWQgYW5kIHJlZHVjZSB0aGUgdGltZSBpdCB0YWtlcyB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5ODA6XHRcdFx0ICAgICFuZnRfc2V0X2VsZW1faXNfZGVhZChleHQpKVxuNjk4MTpcdFx0XHRcdHJldHVybiBleHQ7XG42OTgyOlx0XHR9XG42OTgzOlx0XG42OTg0Olx0XHRyZXR1cm4gTlVMTDtcbjY5ODU6XHR9XG42OTg2Olx0XG42OTg3Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNjk4ODpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG42OTg5Olx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjY5OTA6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKnByaXYpXG42OTkxOlx0e1xuNjk5MjpcdFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG42OTkzOlx0XHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xuNjk5NDpcdFx0dTY0IHRzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7XG42OTk1Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbjY5OTY6XHRcbjY5OTc6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG42OTk4Olx0XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbjY5OTk6XHRcdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcdTAwMjZcdTAwMjZcbjcwMDA6XHRcdFx0ICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkge1xuNzAwMTpcdFx0XHRcdCpwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbjcwMDI6XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbjcwMDM6XHRcdFx0fVxuNzAwNDpcdFx0fVxuNzAwNTpcdFxuNzAwNjpcdFx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG43MDA3Olx0XHRpZiAoIWNhdGNoYWxsKVxuNzAwODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjcwMDk6XHRcbjcwMTA6XHRcdGNhdGNoYWxsLVx1MDAzZWVsZW0gPSBlbGVtLVx1MDAzZXByaXY7XG43MDExOlx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZjYXRjaGFsbC1cdTAwM2VsaXN0LCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCk7XG43MDEyOlx0XG43MDEzOlx0XHRyZXR1cm4gMDtcbjcwMTQ6XHR9XG43MDE1Olx0XG43MDE2Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNzAxNzpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDE4Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjcwMTk6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKmVsZW1fcHJpdixcbjcwMjA6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG43MDIxOlx0e1xuNzAyMjpcdFx0aW50IHJldDtcbjcwMjM6XHRcbjcwMjQ6XHRcdGlmIChmbGFncyBcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxuNzAyNTpcdFx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XG43MDI2Olx0XHRlbHNlXG43MDI3Olx0XHRcdHJldCA9IHNldC1cdTAwM2VvcHMtXHUwMDNlaW5zZXJ0KG5ldCwgc2V0LCBlbGVtLCBlbGVtX3ByaXYpO1xuNzAyODpcdFxuNzAyOTpcdFx0cmV0dXJuIHJldDtcbjcwMzA6XHR9XG43MDMxOlx0XG43MDMyOlx0c3RhdGljIGJvb2wgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcwMzM6XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxuNzAzNDpcdHtcbjcwMzU6XHRcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW1fcHJpdik7XG43MDM2Olx0XG43MDM3Olx0XHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfRkxBR1MpIFx1MDAyNlx1MDAyNlxuNzAzODpcdFx0ICAgICpuZnRfc2V0X2V4dF9mbGFncyhleHQpIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG43MDM5Olx0XHRcdHJldHVybiB0cnVlO1xuNzA0MDpcdFxuNzA0MTpcdFx0cmV0dXJuIGZhbHNlO1xuNzA0MjpcdH1cbjcwNDM6XHRcbjcwNDQ6XHRzdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9hY3RpdmF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDQ1Olx0XHRcdFx0XHQgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcbjcwNDY6XHR7XG43MDQ3Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtX3ByaXYpO1xuNzA0ODpcdFxuNzA0OTpcdFx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xuNzA1MDpcdFx0XHRuZnRfY2xlYXIobmV0LCBleHQpO1xuNzA1MTpcdFx0fSBlbHNlIHtcbjcwNTI6XHRcdFx0c2V0LVx1MDAzZW9wcy1cdTAwM2VhY3RpdmF0ZShuZXQsIHNldCwgZWxlbV9wcml2KTtcbjcwNTM6XHRcdH1cbjcwNTQ6XHR9XG43MDU1Olx0XG43MDU2Olx0c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDU3Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfdHJhbnNfb25lX2VsZW0gKmVsZW0pXG43MDU4Olx0e1xuNzA1OTpcdFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbS1cdTAwM2Vwcml2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODgzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBXZWFrIFBvaW50cyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBkZWFjdGl2YXRpb24gcHJvY2VkdXJlcy4uLiBHb3QgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSB0aG9yb3VnaC4gV2UmIzM5O3ZlIGdvbmUgb3ZlciBgbmZ0X3NldGVsZW1fZGVsZXRlYCwgYG5mdF9zZXRlbGVtX3JlcGxhY2VgLCBhbmQgZXZlbiB0aGUgZ2VuZXJpYyBgbmZ0X3NldGVsZW1fYWRkYCB3aGljaCBpcyBjcml0aWNhbCB0byBjYXRjaCBlZGdlIGNhc2VzLCBhcyB3ZWxsIGFzIHRoZSBtb3JlIG9idmlvdXMgb25lcyBzdWNoIGFzIGBuZnRfc2V0X2RlbGV0ZWAuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBMZXQmIzM5O3Mgbm90IGJlIGhhc3R5IGluIGRlY2xhcmluZyB2aWN0b3J5LiBJJiMzOTttIGdldHRpbmcgYSBuaWdnbGluZyBmZWVsaW5nIHRoZXJlJiMzOTtzIGEgcmVsYXRlZCBmdW5jdGlvbiB3ZSBoYXZlbiYjMzk7dCBjaGVja2VkIHdpdGggdGhlIHNhbWUgbGV2ZWwgb2Ygc2NydXRpbnkuIFdlIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIHRoZSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAgaW4gdGhpcyByZXZpZXcuIEdvdHRhIGJlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSB2dWxuZXJhYmlsaXRpZXMgdGhlcmUsIG9yIGFueSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gbG9naWMgb3IgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBjb21wYXJlZCB0byB0aGUgb3RoZXIgc2V0IGVsZW1lbnQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucywgZXNwZWNpYWxseSByZWdhcmRpbmcgcmVzb3VyY2UgY2xlYW51cCBvciBsb2NraW5nLiBJdCYjMzk7cyB0b28gZWFzeSB0byBhc3N1bWUgc3ltbWV0cnkuIFdlIG5lZWQgdG8gZXhwbG9yZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MDgwOlx0XHRcdFx0bmZ0X3NldGVsZW1fYWN0aXZhdGUoY3R4LVx1MDAzZW5ldCwgdGUtXHUwMDNlc2V0LCBlbGVtLVx1MDAzZXByaXYpO1xuNzA4MTpcdFxuNzA4MjpcdFx0XHRuZl90YWJsZXNfc2V0ZWxlbV9ub3RpZnkoY3R4LCB0ZS1cdTAwM2VzZXQsIGVsZW0tXHUwMDNlcHJpdixcbjcwODM6XHRcdFx0XHRcdFx0IE5GVF9NU0dfTkVXU0VURUxFTSk7XG43MDg0Olx0XHRcdGtmcmVlKGVsZW0tXHUwMDNldXBkYXRlKTtcbjcwODU6XHRcdH1cbjcwODY6XHR9XG43MDg3Olx0XG43MDg4Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjcwODk6XHRcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcwOTA6XHRcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSlcbjcwOTE6XHR7XG43MDkyOlx0XHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbjcwOTM6XHRcdHU2NCB0c3RhbXAgPSBnZXRfamlmZmllc182NCgpO1xuNzA5NDpcdFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XG43MDk1Olx0XG43MDk2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xuNzA5NzpcdFx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG43MDk4Olx0XHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxuNzA5OTpcdFx0XHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXG43MTAwOlx0XHRcdFx0Y29udGludWU7XG43MTAxOlx0XG43MTAyOlx0XHRcdGtmcmVlKGVsZW0tXHUwMDNlcHJpdik7XG43MTAzOlx0XHRcdGVsZW0tXHUwMDNlcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG43MTA0Olx0XHRcdG5mdF9zZXRfZWxlbV9jaGFuZ2VfYWN0aXZlKG5ldCwgc2V0LCBleHQpO1xuNzEwNTpcdFx0XHRyZXR1cm4gMDtcbjcxMDY6XHRcdH1cbjcxMDc6XHRcbjcxMDg6XHRcdHJldHVybiAtRU5PRU5UO1xuNzEwOTpcdH1cbjcxMTA6XHRcbjcxMTE6XHRzdGF0aWMgaW50IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG43MTEyOlx0XHRcdFx0XHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcxMTM6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxuNzExNDpcdHtcbjcxMTU6XHRcdHZvaWQgKnByaXY7XG43MTE2Olx0XG43MTE3Olx0XHRwcml2ID0gc2V0LVx1MDAzZW9wcy1cdTAwM2VkZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcbjcxMTg6XHRcdGlmICghcHJpdilcbjcxMTk6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc3MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSBmb3IgbmZfdGFibGVzX2FwaS5jKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gSSBuZWVkIHRvIGVuc3VyZSBpdCYjMzk7cyBwcm9wZXJseSBlbmFibGVkIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIExldCBtZSBxdWlja2x5IGdyZXAgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgdGhhdCBtb2R1bGUuCgpUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbmZfdGFibGVzX2FwaS5vYCBpcyBiZWluZyBidWlsdCBjb3JyZWN0bHkuIEkmIzM5O2xsIHNlYXJjaCB0aGUgcmVsZXZhbnQgTWFrZWZpbGUsIHNwZWNpZmljYWxseSBpbiBgbmV0L25ldGZpbHRlci9gLCB0byB2ZXJpZnkgdGhhdCBpdCYjMzk7cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgZG9lc24mIzM5O3QgaGF2ZSBhbnkgb2J2aW91cyBlcnJvcnMgaW4gaXRzIGNvbXBpbGF0aW9uLiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIHRvIGVuc3VyZSB0aGUgbW9kdWxlIGlzIGxpbmtlZCBhcyBleHBlY3RlZCBhbmQgZXZlcnl0aGluZyBpcyBpbnRlZ3JhdGVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfYXBpXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT04ND1vYmotJChDT05GSUdfTkZfRFVQX05FVERFVilcdCYjNDM7PSBuZl9kdXBfbmV0ZGV2Lm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg2LSMgbmZfdGFibGVzXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg3Om5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OC1cdFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE1MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgTWFrZWZpbGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSB3b3VsZCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhvc2UgcGFydGljdWxhciBOZXRmaWx0ZXIgbW9kdWxlcyBiZSBkZWZpbmVkPyYjMzQ7IE15IG1lbnRhbCByYWRhciBpbW1lZGlhdGVseSBwaW5ncyB0aGUgYG5ldC9uZXRmaWx0ZXJgIGRpcmVjdG9yeSDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgTmV0ZmlsdGVyIGxpdmVzIGluIHRoZSBrZXJuZWwgc291cmNlLiBBbmQsIHNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBgTWFrZWZpbGVgIHRoZXJlLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGJ1aWxkaW5nIGFsbCB0aGF0IGdvb2Qgc3R1ZmYuIEkmIzM5O20gZ3Vlc3NpbmcgYXJvdW5kIGxpbmUgODcgb3Igc28gaXMgYSBsaWtlbHkgc3BvdCB0byBmaW5kIHRoZSByZWxldmFudCBydWxlcywgZGVwZW5kZW5jaWVzLCBvciBtYXliZSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmaWd1cmluZyBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBhbmQgaG93IHRoaW5ncyBhcmUgcHV0IHRvZ2V0aGVyLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFxuICA4MTpcdG9iai0kKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKSAmIzQzOz0gbmZfY29ubmNvdW50Lm9cbiAgODI6XHRcbiAgODM6XHQjIGdlbmVyaWMgcGFja2V0IGR1cGxpY2F0aW9uIGZyb20gbmV0ZGV2IGZhbWlseVxuICA4NDpcdG9iai0kKENPTkZJR19ORl9EVVBfTkVUREVWKVx0JiM0Mzs9IG5mX2R1cF9uZXRkZXYub1xuICA4NTpcdFxuICA4NjpcdCMgbmZfdGFibGVzXG4gIDg3Olx0bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG4gIDg4Olx0XHRcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxuICA4OTpcdFx0XHQgIG5mdF9iaXR3aXNlLm8gbmZ0X2J5dGVvcmRlci5vIG5mdF9wYXlsb2FkLm8gbmZ0X2xvb2t1cC5vIFxcXG4gIDkwOlx0XHRcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcbiAgOTE6XHRcdFx0ICBuZnRfY291bnRlci5vIG5mdF9vYmpyZWYubyBuZnRfaW5uZXIubyBcXFxuICA5MjpcdFx0XHQgIG5mdF9jaGFpbl9yb3V0ZS5vIG5mX3RhYmxlc19vZmZsb2FkLm8gXFxcbiAgOTM6XHRcdFx0ICBuZnRfc2V0X2hhc2gubyBuZnRfc2V0X2JpdG1hcC5vIG5mdF9zZXRfcmJ0cmVlLm8gXFxcbiAgOTQ6XHRcdFx0ICBuZnRfc2V0X3BpcGFwby5vXG4gIDk1Olx0XG4gIDk2Olx0aWZkZWYgQ09ORklHX1g4Nl82NFxuICA5NzpcdGlmbmRlZiBDT05GSUdfVU1MXG4gIDk4Olx0bmZfdGFibGVzLW9ianMgJiM0Mzs9IG5mdF9zZXRfcGlwYXBvX2F2eDIub1xuICA5OTpcdGVuZGlmXG4gMTAwOlx0ZW5kaWZcbiAxMDE6XHRcbiAxMDI6XHRpZmRlZiBDT05GSUdfTkZUX0NUXG4gMTAzOlx0aWZkZWYgQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FXG4gMTA0Olx0bmZfdGFibGVzLW9ianMgJiM0Mzs9IG5mdF9jdF9mYXN0Lm9cbiAxMDU6XHRlbmRpZlxuIDEwNjpcdGVuZGlmXG4gMTA3Olx0XG4gMTA4Olx0b2JqLSQoQ09ORklHX05GX1RBQkxFUylcdFx0JiM0Mzs9IG5mX3RhYmxlcy5vXG4gMTA5Olx0b2JqLSQoQ09ORklHX05GVF9DT01QQVQpXHQmIzQzOz0gbmZ0X2NvbXBhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBgQ09ORklHX05GX1RBQkxFU2AgRGVwZW5kZW5jaWVzKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19ORl9UQUJMRVNgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgdXN1YWwgcGxhY2UgdG8gZmluZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLiBJIGtub3cgYENPTkZJR19ORl9UQUJMRVNgIGlzIHByZXR0eSBmdW5kYW1lbnRhbCwgYnV0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IGF3YXJlIG9mLCBvciBldmVuIHNvbWUgZGVwZW5kZW5jaWVzIHdoaWNoIHdpbGwgaW1wYWN0IHRoZSBpbXBhY3Qgb2YgYENPTkZJR19ORl9UQUJMRVNgLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlLiBUaW1lIHRvIGdldCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfVEFCTEVTXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIwMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHByb2Nlc3NpbmcgdGhlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgbmV0ZmlsdGVyYCBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYEtjb25maWdgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBBbmQgaWYgbXkgbWVtb3J5IHNlcnZlcywgdGhlIHJlbGV2YW50IHNlY3Rpb24gZm9yIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHN0YXJ0cyBhcm91bmQgbGluZSA0NTUuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHBsYWNlIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBvcHRpb25zIGF2YWlsYWJsZSwgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIgd2l0aGluIHRoaXMgY29tcGxleCBmcmFtZXdvcmsuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGBjb25maWdgIHN0YXRlbWVudHMsIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBhbmQgbWF5YmUgc29tZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvIGd1aWRlIHRoZSBidWlsZCBwcm9jZXNzLiBIb3BlZnVsbHksIGl0JiMzOTtzIHdlbGwtc3RydWN0dXJlZCBhbmQgY29tbWVudGVkIGVub3VnaCB0aGF0IEkgY2FuIHF1aWNrbHkgZ3JvayB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB2YXJpb3VzIE5ldGZpbHRlciBmZWF0dXJlcyBhbmQgb3B0aW9ucy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTA6XHRjb25maWcgTkVURklMVEVSX1NZTlBST1hZXG4gNDUxOlx0XHR0cmlzdGF0ZVxuIDQ1MjpcdFxuIDQ1MzpcdGVuZGlmICMgTkZfQ09OTlRSQUNLXG4gNDU0Olx0XG4gNDU1Olx0Y29uZmlnIE5GX1RBQkxFU1xuIDQ1NjpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gNDU3Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuIDQ1ODpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBzdXBwb3J0XCYjMzQ7XG4gNDU5Olx0XHRoZWxwXG4gNDYwOlx0XHQgIG5mdGFibGVzIGlzIHRoZSBuZXcgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGZyYW1ld29yayB0aGF0IGludGVuZHMgdG9cbiA0NjE6XHRcdCAgcmVwbGFjZSB0aGUgZXhpc3Rpbmcge2lwLGlwNixhcnAsZWJ9X3RhYmxlcyBpbmZyYXN0cnVjdHVyZS4gSXRcbiA0NjI6XHRcdCAgcHJvdmlkZXMgYSBwc2V1ZG8tc3RhdGUgbWFjaGluZSB3aXRoIGFuIGV4dGVuc2libGUgaW5zdHJ1Y3Rpb24tc2V0XG4gNDYzOlx0XHQgIChhbHNvIGtub3duIGFzIGV4cHJlc3Npb25zKSB0aGF0IHRoZSB1c2Vyc3BhY2UgJiMzOTtuZnQmIzM5OyB1dGlsaXR5XG4gNDY0Olx0XHQgIChodHRwczovL3d3dy5uZXRmaWx0ZXIub3JnL3Byb2plY3RzL25mdGFibGVzKSB1c2VzIHRvIGJ1aWxkIHRoZVxuIDQ2NTpcdFx0ICBydWxlLXNldC4gSXQgYWxzbyBjb21lcyB3aXRoIHRoZSBnZW5lcmljIHNldCBpbmZyYXN0cnVjdHVyZSB0aGF0XG4gNDY2Olx0XHQgIGFsbG93cyB5b3UgdG8gY29uc3RydWN0IG1hcHBpbmdzIGJldHdlZW4gbWF0Y2hpbmdzIGFuZCBhY3Rpb25zXG4gNDY3Olx0XHQgIGZvciBwZXJmb3JtYW5jZSBsb29rdXBzLlxuIDQ2ODpcdFxuIDQ2OTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDQ3MDpcdFxuIDQ3MTpcdGlmIE5GX1RBQkxFU1xuIDQ3MjpcdGNvbmZpZyBORl9UQUJMRVNfSU5FVFxuIDQ3MzpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gNDc0Olx0XHRzZWxlY3QgTkZfVEFCTEVTX0lQVjRcbiA0NzU6XHRcdHNlbGVjdCBORl9UQUJMRVNfSVBWNlxuIDQ3NjpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG1peGVkIElQdjQvSVB2NiB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuIDQ3NzpcdFx0aGVscFxuIDQ3ODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbWl4ZWQgSVB2NC9JUHY2IFwmIzM0O2luZXRcJiMzNDsgdGFibGUuXG4gNDc5Olx0XG4gNDgwOlx0Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbiA0ODE6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiA0ODI6XHRcdGhlbHBcbiA0ODM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgXCYjMzQ7bmV0ZGV2XCYjMzQ7IHRhYmxlLlxuIDQ4NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTY3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gSm91cm5leSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORl9UQUJMRVNgLiBJIGtub3cgaXQmIzM5O3MgcmVsYXRlZCB0byBgTkVURklMVEVSYCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIG15IG5leHQgbW92ZSBpcyB0byBwaW5wb2ludCBleGFjdGx5ICp3aGVyZSogYE5GX1RBQkxFU2AgcmVzaWRlcyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlICYjMzQ7Q29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiYjMzQ7IG1lbnUsIG9yIHBlcmhhcHMgaXQmIzM5O3MgZ2F0ZWQgYmVoaW5kIGFuIGBpZiBORVRGSUxURVJgIGJsb2NrLiBUaGF0JiMzOTtzIG15IGltbWVkaWF0ZSBmb2N1cy4KClRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZywgYW5kIGZvciBhIGJyb2FkZXIgb3ZlcnZpZXcgb2YgdGhlIG5ldCBjb25maWd1cmF0aW9uIG92ZXJhbGwsIEkgc2hvdWxkIGFsc28gYnJpZWZseSBnbGFuY2UgYXQgYG5ldC9LY29uZmlnYCB0byBjb25maXJtIHRoZXJlIGFyZSBubyB1cHN0cmVhbSBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBwcm92aWRlIHNvbWUgaW1wb3J0YW50IGNvbnRleHQuIFRoaXMgd2lsbCBnaXZlIG1lIHdoYXQgSSBuZWVkIHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlIFwmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0OyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbi0tXG5uZXQvS2NvbmZpZy0yNDYtXG5uZXQvS2NvbmZpZzoyNDc6c291cmNlIFwmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjQ4LXNvdXJjZSBcJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzI3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkV4YW1pbmluZyBLY29uZmlnIENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIGJldHRlci4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpcyBoYXBwZW5pbmcgYXJvdW5kIGxpbmVzIDIzMCB0byAyNTAgaW4gYG5ldC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIHJpZ2h0IG5vdy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRlZmluZWQsIHdoYXQgY29uZGl0aW9uYWxzIGFyZSBpbiBwbGF5LCBhbmQgaG93IHRoZXNlIG9wdGlvbnMgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2suIEhvcGVmdWxseSwgd2hhdGV2ZXIgSSYjMzk7bSBsb29raW5nIGZvciBpcyBpbiB0aGF0IHJhbmdlLiBUaW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzMDpcdFxuIDIzMTpcdGNvbmZpZyBCUklER0VfTkVURklMVEVSXG4gMjMyOlx0XHR0cmlzdGF0ZSBcJiMzNDtCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1wmIzM0O1xuIDIzMzpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAyMzQ6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSIFx1MDAyNlx1MDAyNiBJTkVUXG4gMjM1Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDIzNjpcdFx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG4gMjM3Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAyMzg6XHRcdGhlbHBcbiAyMzk6XHRcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBsZXQgYXJwdGFibGVzIHJlc3AuIGlwdGFibGVzIHNlZSBicmlkZ2VkXG4gMjQwOlx0XHQgIEFSUCByZXNwLiBJUCB0cmFmZmljLiBJZiB5b3Ugd2FudCBhIGJyaWRnaW5nIGZpcmV3YWxsLCB5b3UgcHJvYmFibHlcbiAyNDE6XHRcdCAgd2FudCB0aGlzIG9wdGlvbiBlbmFibGVkLlxuIDI0MjpcdFx0ICBFbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBvcHRpb24gZG9lc24mIzM5O3QgZW5hYmxlIG9yIGRpc2FibGVcbiAyNDM6XHRcdCAgZWJ0YWJsZXMuXG4gMjQ0Olx0XG4gMjQ1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjQ2Olx0XG4gMjQ3Olx0c291cmNlIFwmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI0ODpcdHNvdXJjZSBcJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI0OTpcdHNvdXJjZSBcJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI1MDpcdHNvdXJjZSBcJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXCYjMzQ7XG4gMjUxOlx0XG4gMjUyOlx0ZW5kaWYgIyBpZiBORVRGSUxURVJcbiAyNTM6XHRcbiAyNTQ6XHRzb3VyY2UgXCYjMzQ7bmV0L3NjdHAvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODY0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXRmaWx0ZXIgYW5kIE5GX1RBQkxFUyBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgYE5FVEZJTFRFUmAgYW5kIGBORl9UQUJMRVNgIGNvbmZpZ3VyYXRpb25zLCBvYnZpb3VzbHkuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc2V0IGVsZW1lbnRzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUuIEFyZSB0aGV5IGNhbGxlZCBkaXJlY3RseT8gT3IsIGFyZSB0aGV5IGluZGlyZWN0bHkgaW52b2tlZCB0aHJvdWdoIGZ1bmN0aW9ucyBsaWtlIGBuZnRfc2V0ZWxlbV9pbnNlcnRgLCBgX19uZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCwgYG5mX3RhYmxlc19uZXdzZXRlbGVtYCwgb3IgYG5mX3RhYmxlc19kZWxzZXRlbGVtYCwgb3Igc29tZSBvdGhlciBwYXRoPyBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjYWxsIGNoYWluLCBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIGBncmVwYCBvbiBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgIHRvIHNlZSB3aGVyZSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIGFyZSBhY3R1YWxseSBiZWluZyB1c2VkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NjQ3Nz1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX3BhcnNlX2RhdGEoc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NDk2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NjQ5NzpzdGF0aWMgdm9pZCAqbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZ2V0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY0OTgtXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY1MTg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9nZXQoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTI3LVx0fSBlbHNlIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY1Mjg6XHRcdHByaXYgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9nZXQoY3R4LVx1MDAzZW5ldCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY1MjktXHRcdGlmICghcHJpdilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTY5PXN0cnVjdCBuZnRfc2V0X2V4dCAqbmZ0X3NldF9jYXRjaGFsbF9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5ODYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTg3OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5ODgtXHRcdFx0XHQgICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDE2PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDI0LVx0aWYgKGZsYWdzIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDI1Olx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDI2LVx0ZWxzZVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwNjk9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1zX2FkZChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwODctXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDg4OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDg5LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcxMjg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTM0LVx0aWYgKGZsYWdzIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTM1Olx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzYtXHRlbHNlXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE0MS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNDI6c3RhdGljIHZvaWQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVzdHJveShzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDctXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTQ4OnN0YXRpYyB2b2lkIG5mdF9zZXRlbGVtX2NhdGNoYWxsX3JlbW92ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTQ5LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNTUtXHRcdGlmIChjYXRjaGFsbC1cdTAwM2VlbGVtID09IGVsZW1fcHJpdikge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE1NjpcdFx0XHRuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZXN0cm95KGNhdGNoYWxsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNTctXHRcdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzE2Mj1zdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9yZW1vdmUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNjYtXHRpZiAobmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoc2V0LCBlbGVtX3ByaXYpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE2NzpcdFx0bmZ0X3NldGVsZW1fY2F0Y2hhbGxfcmVtb3ZlKG5ldCwgc2V0LCBlbGVtX3ByaXYpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE2OC1cdGVsc2Vcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDY3OT1zdHJ1Y3QgbmZ0X3RyYW5zX2djICpuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYyhzdHJ1Y3QgbmZ0X3RyYW5zX2djICpnYylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDcwMC1cdFx0bmZ0X3NldGVsZW1fZGF0YV9kZWFjdGl2YXRlKGdjLVx1MDAzZW5ldCwgZ2MtXHUwMDNlc2V0LCBlbGVtX3ByaXYpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA3MDE6XHRcdG5mdF9zZXRlbGVtX2NhdGNoYWxsX2Rlc3Ryb3koY2F0Y2hhbGwpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA3MDItXHRcdG5mdF90cmFuc19nY19lbGVtX2FkZChnYywgZWxlbV9wcml2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NDMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBUYWJsZSBBUEkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRob3NlIGFyZSBpbnRlcm5hbCwgc3RhdGljIGZ1bmN0aW9ucywgcmVzaWRpbmcgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gR2l2ZW4gdGhlaXIgbmFtaW5nIGFuZCBsb2NhdGlvbiwgdGhlc2UgYXJlIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgTmV0ZmlsdGVyIHRhYmxlIEFQSSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gb2Ygc2V0IGVsZW1lbnRzLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpczogd2hhdCBhcmUgdGhlIGNhbGwgc2l0ZXMgZm9yIHRoZSBub24gJiMzNDtjYXRjaGFsbCYjMzQ7IHZlcnNpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5vcm1hbCBvcGVyYXRpb24gYmVmb3JlIEkgY2FuIHByb3Blcmx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgY2FsbHMgdG8gYG5mdF9zZXRlbGVtX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJpZ2dlciBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBleGlzdGluZyBpbnNlcnRpb24gYW5kIGRlYWN0aXZhdGlvbiBwYXRocyBpcyBjcml0aWNhbCBmb3IgZmlndXJpbmcgb3V0IGhvdyB0aGUgcGF0Y2ggYWx0ZXJzIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldGVsZW1fKGluc2VydHxkZWFjdGl2YXRlKVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY5ODc9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMTUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDE2OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMTctXHRcdFx0ICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDg4PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzExMC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxMTE6c3RhdGljIGludCBfX25mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzExMi1cdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMjctXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTI4OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTI5LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzYtXHRlbHNlXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTM3Olx0XHRyZXQgPSBfX25mdF9zZXRlbGVtX2RlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEzOC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MjQ5PXN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1NzEtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3NTcyOlx0ZXJyID0gbmZ0X3NldGVsZW1faW5zZXJ0KGN0eC1cdTAwM2VuZXQsIHNldCwgXHUwMDI2ZWxlbSwgXHUwMDI2ZWxlbV9wcml2LCBmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTczLVx0aWYgKGVycikge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc4Mjk9c3RhdGljIGludCBuZnRfZGVsX3NldGVsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTAxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzkwMjpcdGVyciA9IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY3R4LVx1MDAzZW5ldCwgc2V0LCBcdTAwMjZlbGVtLCBmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTAzLVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NzAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIG5mdGFibGVzIENhdGNoYWxsIEVsZW1lbnQgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBwYXRjaCBpbXBhY3RzIG5mdGFibGVzLCBzcGVjaWZpY2FsbHkgdGhlIGNhdGNoYWxsIGVsZW1lbnQgaGFuZGxpbmcuIEkgc2VlIHRoYXQgdGhlIGNvcmUgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBUaGVzZSBhcmUgc3RhdGljIEMgZnVuY3Rpb25zIHdpdGhpbiBgbmZfdGFibGVzX2FwaS5jYCwgc28gd2hpbGUgdGhleSBtaWdodCBiZSBpbmxpbmVkIGluIHNvbWUgc2NlbmFyaW9zLCB0aGV5IGFyZSBkaXJlY3RseSBtb2RpZmllZC4KClRoZSBrZXkgcXVlc3Rpb24gaXMsICphcmUgdGhlc2UgZnVuY3Rpb25zIHdvcnRoIHRhcmdldGluZyBmb3IgZnV6emluZz8qIEkgdGhpbmsgdGhleSBhcmUuIE15IGxvZ2ljIGlzIHRoYXQgYG5mdF9hZGRfc2V0X2VsZW1gIGFuZCBgbmZ0X2RlbF9zZXRlbGVtYCBjYWxsIHRoZXNlIGZ1bmN0aW9ucy4gVGhlcmVmb3JlLCBib3RoIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAgYXJlIGxpa2VseSBlbnRyeSBwb2ludHMgdG8gY29uc2lkZXIuCgpDb25zaWRlcmluZyBGb2N1c1N5bWJvbHMsIEkgY2FuIGluY2x1ZGUgYm90aCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLCBpbiBhZGRpdGlvbiB0byBgbmZ0X2FkZF9zZXRfZWxlbWAgYW5kIGBuZnRfZGVsX3NldGVsZW1gLCBpbiBteSBmdXp6aW5nIHRhcmdldCBsaXN0LiBUaGlzIGlzIGxvZ2ljYWwgYmVjYXVzZSBldmVuIGlmIHRoZXNlIGFyZSBzdGF0aWMsIHRoZXkgaGF2ZSBzeW1ib2xzIGFuZCBhcmUgZGlyZWN0bHkgbW9kaWZpZWQuCgpOb3csIGxldCYjMzk7cyBlc3RhYmxpc2ggcmVhY2hhYmlsaXR5LiBUaGUgbmV0bGluayBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBtZXNzYWdlcyBsaWtlIGBORlRfTVNHX05FV1NFVEVMRU1gIGFuZCBgTkZUX01TR19ERUxTRVRFTEVNYCwgYWxsb3dzIGZ1bGx5IHJlYWNoYWJsZSBjb2RlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVucHJpdmlsZWdlZCB1c2VyIG5hbWVzcGFjZXMgYW5kIG5ldHdvcmsgbmFtZXNwYWNlcywgb3Igcm9vdCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIHN5emthbGxlci4gU2luY2UgTkZfVEFCTEVTIGlzIHN0YW5kYXJkIG5ldGxpbmsgbmV0d29ya2luZyBjb2RlIGluIGNvcmUgbmV0ZmlsdGVyLCBpdCBpcyBoaWdobHkgYWNjZXNzaWJsZS4KCklzIHRoaXMgcGF0Y2ggKldvcnRoRnV6emluZyo/IEFic29sdXRlbHkuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2V0IGVsZW1lbnQgbG9va3VwLCBpbnNlcnRpb24sIGFuZCBkZWFjdGl2YXRpb24gbG9naWMgZm9yIGNhdGNoYWxsIGVsZW1lbnRzIHdpdGggdGltZW91dHMgdXNpbmcgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYC4gVGhpcyBpcyBmdWxseSByZWFjaGFibGUgbmV0ZmlsdGVyIGNvZGUgdGhhdCBoYW5kbGVzIHVzZXIgcmVxdWVzdHMgb3ZlciBuZXRsaW5rIChuZm5ldGxpbmspLgoKRmluYWxseSwgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBzdHJhaWdodGZvcndhcmQ6IGBDT05GSUdfTkVURklMVEVSYCBhbmQgYENPTkZJR19ORl9UQUJMRVNgLiBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIHRvcC1sZXZlbCBuZXRsaW5rIGNhbGxiYWNrIGhhbmRsZXJzIGZvciBgTkZUX01TR19ORVdTRVRFTEVNYCBhbmQgYE5GVF9NU0dfREVMU0VURUxFTWAgd2hpY2ggYXJlIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAgYW5kIGBuZl90YWJsZXNfZGVsc2V0ZWxlbWAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfbmV3c2V0ZWxlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDk9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzY2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc2Njg6c3RhdGljIGludCBuZl90YWJsZXNfbmV3c2V0ZWxlbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzY2OS1cdFx0XHRcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTkzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZfdGFibGVzX2NiW05GVF9NU0dfTUFYXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA0Mi1cdFtORlRfTVNHX05FV1NFVEVMRU1dID0ge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAwNDM6XHRcdC5jYWxsXHRcdD0gbmZfdGFibGVzX25ld3NldGVsZW0sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA0NC1cdFx0LnR5cGVcdFx0PSBORk5MX0NCX0JBVENILFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEwNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlICYjMzQ7dGhvdWdodHMmIzM0OyB5b3UmIzM5O3ZlIGdpdmVuIG1lLCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGxpa2UgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBuZl90YWJsZXNfZGVsc2V0ZWxlbWAqKgoKQWxyaWdodCwgc28gdGhlIHByb21wdCB0ZWxscyBtZSB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYG5mX3RhYmxlc19kZWxzZXRlbGVtYC4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRvIHJhY2UgYSBiaXQuIGBuZl90YWJsZXNgLi4uIHRoYXQmIzM5O3MgTmV0ZmlsdGVyIHRhYmxlcywgdGhlIG5ld2VyLCBtb3JlIHZlcnNhdGlsZSBwYWNrZXQgZmlsdGVyaW5nIGFuZCBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24gZnJhbWV3b3JrIGluIHRoZSBMaW51eCBrZXJuZWwuIEFuZCBgZGVsc2V0ZWxlbWAuLi4gdGhhdCYjMzk7cyBnb3QgdG8gYmUgYSBmdW5jdGlvbiByZWxhdGVkIHRvIGRlbGV0aW5nIGVsZW1lbnRzIGZyb20gYSBzZXQgd2l0aGluIGEgdGFibGUuIEl0JiMzOTtzIHByb2JhYmx5IGEgY29yZSBmdW5jdGlvbiwgY3JpdGljYWwgZm9yIHRoZSBkeW5hbWljIG5hdHVyZSBvZiB0aGVzZSBmaXJld2FsbHMuCgpNeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmU6IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgdHJpZ2dlcmVkIHRoaXMgbmVlZCB0byBjaGVjayB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uPyBBcmUgd2UgZGVidWdnaW5nIGEgcHJvYmxlbSwgb3B0aW1pemluZyBwZXJmb3JtYW5jZSwgb3IganVzdCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgd29ya2luZ3MgYmV0dGVyPyBUaGUgc3BlY2lmaWNzIG1hdHRlci4gV2l0aG91dCBjb250ZXh0LCBJJiMzOTtkIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBxdWljayBkaXZlIGludG8gdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlLCBtYXliZSBicm93c2luZyB0aGUgYG5ldGZpbHRlcmAgc3Vic3lzdGVtIGRpcmVjdG9yeSBhbmQgbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gSSYjMzk7ZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQg4oCTIHRoZSBgbmZ0X3NldGAgc3RydWN0dXJlLCBhbnkgZWxlbWVudCByZXByZXNlbnRhdGlvbnMgKGxpa2UgYG5mdF9zZXRfZWxlbWApLCBhbmQgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5LiBBbnkgY29kZSByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gaXMgYWx3YXlzIG9mIGludGVyZXN0IHRvbywgbG9va2luZyBmb3IgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciB2dWxuZXJhYmlsaXRpZXMuCgpJJiMzOTtkIGFsc28gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbi4gQSBidWdneSBgZGVsc2V0ZWxlbWAgY291bGQgbGVhZCB0byBzZXJpb3VzIGlzc3VlczogaW5jb3JyZWN0IGZpcmV3YWxsIGJlaGF2aW9yIChhbGxvd2luZyBvciBibG9ja2luZyB0aGUgd3JvbmcgdHJhZmZpYyksIG1lbW9yeSBjb3JydXB0aW9uLCBkZW5pYWwgb2Ygc2VydmljZSAoaWYgZWxlbWVudHMgYXJlIGRlbGV0ZWQgYXQgdGhlIHdyb25nIHRpbWUgb3Igbm90IGF0IGFsbCksIG9yIGV2ZW4gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIChpZiBhbiBhdHRhY2tlciBjb3VsZCBtYW5pcHVsYXRlIHRoZSBzZXQgY29udGVudHMpLiBTbywgYSBnb29kIGNoZWNrIHdvdWxkIGludm9sdmUgcmV2aWV3aW5nIG5vdCBqdXN0IHRoZSBmdW5jdGlvbiBpdHNlbGYsIGJ1dCBhbHNvIGhvdyBpdCYjMzk7cyBjYWxsZWQsIGFuZCB3aGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQuIEkmIzM5O2QgZGVmaW5pdGVseSBiZSBpbnRlcmVzdGVkIGluIHNlZWluZyB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgY2FsbCBgbmZfdGFibGVzX2RlbHNldGVsZW1gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfZGVsc2V0ZWxlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc5OTE9c3RhdGljIGludCBuZnRfc2V0X2ZsdXNoKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsIHU4IGdlbm1hc2spXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwOC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjgwMDk6c3RhdGljIGludCBuZl90YWJsZXNfZGVsc2V0ZWxlbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAxMC1cdFx0XHRcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTkzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZfdGFibGVzX2NiW05GVF9NU0dfTUFYXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA2MC1cdFtORlRfTVNHX0RFTFNFVEVMRU1dID0ge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAwNjE6XHRcdC5jYWxsXHRcdD0gbmZfdGFibGVzX2RlbHNldGVsZW0sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA2Mi1cdFx0LnR5cGVcdFx0PSBORk5MX0NCX0JBVENILFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDY2LVx0W05GVF9NU0dfREVTVFJPWVNFVEVMRU1dID0ge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAwNjc6XHRcdC5jYWxsXHRcdD0gbmZfdGFibGVzX2RlbHNldGVsZW0sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA2OC1cdFx0LnR5cGVcdFx0PSBORk5MX0NCX0JBVENILFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk3OAoJCQkJCQkJb3V0cHV0OiAyMDUKCQkJCQkJCXRob3VnaHRzOiAyNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJpYWdlIFZlcmlmaWNhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBsZXQmIzM5O3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3ZlIGNvdmVyZWQgb3VyIGJhc2VzIG9uIHRoaXMgdHJpYWdlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgbG9va3Mgc29saWQ7IHdlJiMzOTtyZSBkZWZpbml0ZWx5IGRlYWxpbmcgd2l0aCBhIGZ1enppbmcgdGFyZ2V0LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgYW5kIGZvciBnb29kIHJlYXNvbi4gVGhlIHJlYXNvbmluZyBiZWhpbmQgaXQgaXMgc291bmQ6IHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBhcm91bmQgaW4gdGhlIG5mdGFibGVzIGludGVybmFscywgc3BlY2lmaWNhbGx5IHR3ZWFraW5nIHRoZSBsb2dpYyBhcm91bmQgY2F0Y2gtYWxsIHNldCBlbGVtZW50IGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uLiBXZSYjMzk7cmUgbG9va2luZyBhdCBmdW5jdGlvbnMgbGlrZSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGFmZmVjdHMgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBleHBpcmVkIGVsZW1lbnRzIGJlZm9yZSBkZWNpZGluZyBpZiB0aGV5IGFyZSBhY3RpdmUvbWF0Y2hpbmcuCgpUaGUgY3JpdGljYWwgYml0IGlzIHRoYXQgdGhpcyBjb2RlIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIHNwZWNpZmljYWxseSB0aHJvdWdoIGBORlRfTVNHX05FV1NFVEVMRU1gLCBgTkZUX01TR19ERUxTRVRFTEVNYCwgYW5kIGBORlRfTVNHX0RFU1RST1lTRVRFTEVNYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgZnV6emluZyB0YXJnZXQgc2NlbmFyaW8gcmlnaHQgdGhlcmUg4oCTIGFueSBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZXNlIGZ1bmN0aW9ucyBjb3VsZCBiZSBleHBsb2l0ZWQgcmVtb3RlbHkuIFRoZXJlZm9yZSwgaXQmIzM5O3MgYWJzb2x1dGVseSB3b3J0aCBvdXIgdGltZSB0byB0aHJvdyBldmVyeXRoaW5nIHdlJiMzOTt2ZSBnb3QgYXQgdGhpcyB0byB2ZXJpZnkgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucywgbGlmZXRpbWUgbWFuYWdlbWVudCwgYW5kIGNvbmN1cnJlbmN5IGhhbmRsaW5nLiBUaGVzZSBhcmUga2V5IGFyZWFzIGluIHRoZSBuZnRhYmxlcyBjb2RlIGJhc2UuCgpUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwb3Qgb24sIGhpZ2hsaWdodGluZyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zOiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCwgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLCBgbmZ0X2FkZF9zZXRfZWxlbWAsIGBuZnRfZGVsX3NldGVsZW1gLCBgbmZfdGFibGVzX25ld3NldGVsZW1gLCBhbmQgYG5mX3RhYmxlc19kZWxzZXRlbGVtYC4gVGhlc2UgYXJlIGFsbCBwYXJ0IG9mIHRoZSByZWxldmFudCBjYWxsLWNoYWluIGFuZCB3b3VsZCBiZSB0aGUgb25lcyB0byBvYnNlcnZlIGNhcmVmdWxseS4KCkZpbmFsbHksIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYE5FVEZJTFRFUmAgYW5kIGBORl9UQUJMRVNgIGFyZSB0aGUgY3J1Y2lhbCBvbmVzLgoKV2l0aCB0aGlzIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIHRyaWFnZS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfYWRkX3NldF9lbGVtJiMzNDssCiAgICAmIzM0O25mdF9kZWxfc2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsc2V0ZWxlbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBuZnRhYmxlcyBjYXRjaC1hbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0IGFuZCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlIHRvIGFjY291bnQgZm9yIGV4cGlyZWQgc2V0IGVsZW1lbnRzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIG1lc3NhZ2VzIChORlRfTVNHX05FV1NFVEVMRU0gYW5kIE5GVF9NU0dfREVMU0VURUxFTSkgYW5kIG1vZGlmeSBzdGF0ZSB2YWxpZGF0aW9uIGFuZCBlbGVtZW50IGRlYWN0aXZhdGlvbiBsb2dpYywgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucywgbGlmZXRpbWUgaXNzdWVzLCBvciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfYWRkX3NldF9lbGVtJiMzNDssCiAgICAmIzM0O25mdF9kZWxfc2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsc2V0ZWxlbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBuZnRhYmxlcyBjYXRjaC1hbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0IGFuZCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlIHRvIGFjY291bnQgZm9yIGV4cGlyZWQgc2V0IGVsZW1lbnRzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIG1lc3NhZ2VzIChORlRfTVNHX05FV1NFVEVMRU0gYW5kIE5GVF9NU0dfREVMU0VURUxFTSkgYW5kIG1vZGlmeSBzdGF0ZSB2YWxpZGF0aW9uIGFuZCBlbGVtZW50IGRlYWN0aXZhdGlvbiBsb2dpYywgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucywgbGlmZXRpbWUgaXNzdWVzLCBvciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIG5mdGFibGVzIGNhdGNoYWxsIHNldCBlbGVtZW50IGhhbmRsaW5nIGluIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAgdG8gY2hlY2sgd2hldGhlciBhbiBleGlzdGluZyBjYXRjaGFsbCBlbGVtZW50IGhhcyBleHBpcmVkIHVzaW5nIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKClgIGFuZCB0aW1lc3RhbXBzIG9idGFpbmVkIHZpYSBgZ2V0X2ppZmZpZXNfNjQoKWAuXG5cbi0gKipLTVNBTiBhcHBsaWNhYmlsaXR5Kio6IEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBsb2NhbCBgdTY0IHRzdGFtcGAgdmFyaWFibGVzIGRpcmVjdGx5IGZyb20gYGdldF9qaWZmaWVzXzY0KClgIGFuZCBjaGVja3MgZXhpc3RpbmcsIHByb3Blcmx5IGluaXRpYWxpemVkIGV4dGVuc2lvbiBhdHRyaWJ1dGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYWxsb2NhdGlvbnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLlxuLSAqKktBU0FOIGFwcGxpY2FiaWxpdHkqKjogS0FTQU4sIHRvZ2V0aGVyIHdpdGggc3RhbmRhcmQgZGVidWcgdG9vbHMsIGlzIGFwcHJvcHJpYXRlIGZvciBjYXRjaGluZyBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZG91YmxlLWZyZWUgaXNzdWVzIHJlbGF0ZWQgdG8gc2V0IGVsZW1lbnQgbGlmZWN5Y2xlcyBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uLlxuXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg0ZmI5ODFlYzE2NGM1ZDU5M2Q4ZjQwZTIyNjhmOGJlZGVmMDBjNzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwODozNjoyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKaW5kZXggNzY1YTkyZmE5MGQ2Mi4uMGYzNDQ5Y2NhNWQyNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKQEAgLTY5OTEsMTEgJiM0Mzs2OTkxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwKIHsKIAlzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDsKIAl1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpOwomIzQzOwl1NjQgdHN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTsKIAlzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsICZhbXA7c2V0LSZndDtjYXRjaGFsbF9saXN0LCBsaXN0KSB7CiAJCWV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC0mZ3Q7ZWxlbSk7Ci0JCWlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpIHsKJiM0MzsJCWlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgJmFtcDsmYW1wOwomIzQzOwkJICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkgewogCQkJKnByaXYgPSBjYXRjaGFsbC0mZ3Q7ZWxlbTsKIAkJCXJldHVybiAtRUVYSVNUOwogCQl9CkBAIC03MDg4LDExICYjNDM7NzA5MCwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKQogewogCXN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsOwomIzQzOwl1NjQgdHN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTsKIAlzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsICZhbXA7c2V0LSZndDtjYXRjaGFsbF9saXN0LCBsaXN0KSB7CiAJCWV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC0mZ3Q7ZWxlbSk7Ci0JCWlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSkKJiM0MzsJCWlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fAomIzQzOwkJICAgIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKQogCQkJY29udGludWU7CiAKIAkJa2ZyZWUoZWxlbS0mZ3Q7cHJpdik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgS01TQU4gTmVlZHMgb2YgVGhpcyBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgdXNlciBpcyBlc3NlbnRpYWxseSBhc2tpbmcgZm9yIGEgY29kZSByZXZpZXcgd2l0aCBhIHNwZWNpZmljIGZvY3VzIG9uIG1lbW9yeSBzYWZldHksIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcgdG8gYmUgcHJvYWN0aXZlIGFib3V0LiBNeSBmaXJzdCBzdGVwIGlzIGEgcXVpY2sgc2FmZXR5IGNoZWNrLCBqdXN0IHRvIGJlIHN1cmUgdGhlcmUmIzM5O3Mgbm90aGluZyBvdmVydGx5IHJpc2t5IGhlcmUuIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHRoaXMgaXMgYSBjb2RlIGFuYWx5c2lzIHJlcXVlc3QsIG5vdCBhbiBleHBsb2l0IGF0dGVtcHQgb3Igc29tZXRoaW5nIG1hbGljaW91cy4gSXQmIzM5O3MgYWJvdXQgcHJvYWN0aXZlIGRlYnVnZ2luZyBhbmQgZnV6emluZyB0cmlhZ2UuIEJlbmlnbiwgbG93IHNldmVyaXR5IC0gd2UmIzM5O3JlIGdvb2QgdG8gcHJvY2VlZC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGVpdGhlciBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgd2l0aGluIHRoYXQgZmlsZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBzY3JlYW1zICYjMzQ7bWVtb3J5IHVuc2FmZXR5JiMzNDsgLSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgYnVmZmVyIG92ZXJmbG93cywgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIHRoYXQgc29ydCBvZiB0aGluZy4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZXMgaW4gdGhlIHBhdGNoLCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb2RlIHNlY3Rpb24sIGludHJvZHVjZSBuZXcgcmlza3MgdGhhdCBhcmUgYmVzdCBhZGRyZXNzZWQgd2l0aCB0aGUgZm9jdXNlZCBzY3J1dGlueSBvZiBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5ODU6XHR9XG42OTg2Olx0XG42OTg3Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNjk4ODpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG42OTg5Olx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjY5OTA6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKnByaXYpXG42OTkxOlx0e1xuNjk5MjpcdFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG42OTkzOlx0XHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xuNjk5NDpcdFx0dTY0IHRzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7XG42OTk1Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbjY5OTY6XHRcbjY5OTc6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG42OTk4Olx0XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbjY5OTk6XHRcdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcdTAwMjZcdTAwMjZcbjcwMDA6XHRcdFx0ICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkge1xuNzAwMTpcdFx0XHRcdCpwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbjcwMDI6XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbjcwMDM6XHRcdFx0fVxuNzAwNDpcdFx0fVxuNzAwNTpcdFxuNzAwNjpcdFx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG43MDA3Olx0XHRpZiAoIWNhdGNoYWxsKVxuNzAwODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjcwMDk6XHRcbjcwMTA6XHRcdGNhdGNoYWxsLVx1MDAzZWVsZW0gPSBlbGVtLVx1MDAzZXByaXY7XG43MDExOlx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZjYXRjaGFsbC1cdTAwM2VsaXN0LCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCk7XG43MDEyOlx0XG43MDEzOlx0XHRyZXR1cm4gMDtcbjcwMTQ6XHR9XG43MDE1Olx0XG43MDE2Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNzAxNzpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDE4Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjcwMTk6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKmVsZW1fcHJpdixcbjcwMjA6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG43MDIxOlx0e1xuNzAyMjpcdFx0aW50IHJldDtcbjcwMjM6XHRcbjcwMjQ6XHRcdGlmIChmbGFncyBcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxuNzAyNTpcdFx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XG43MDI2Olx0XHRlbHNlXG43MDI3Olx0XHRcdHJldCA9IHNldC1cdTAwM2VvcHMtXHUwMDNlaW5zZXJ0KG5ldCwgc2V0LCBlbGVtLCBlbGVtX3ByaXYpO1xuNzAyODpcdFxuNzAyOTpcdFx0cmV0dXJuIHJldDtcbjcwMzA6XHR9XG43MDMxOlx0XG43MDMyOlx0c3RhdGljIGJvb2wgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcwMzM6XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxuNzAzNDpcdHtcbjcwMzU6XHRcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW1fcHJpdik7XG43MDM2Olx0XG43MDM3Olx0XHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfRkxBR1MpIFx1MDAyNlx1MDAyNlxuNzAzODpcdFx0ICAgICpuZnRfc2V0X2V4dF9mbGFncyhleHQpIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG43MDM5Olx0XHRcdHJldHVybiB0cnVlO1xuNzA0MDpcdFxuNzA0MTpcdFx0cmV0dXJuIGZhbHNlO1xuNzA0MjpcdH1cbjcwNDM6XHRcbjcwNDQ6XHRzdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9hY3RpdmF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDQ1Olx0XHRcdFx0XHQgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcbjcwNDY6XHR7XG43MDQ3Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtX3ByaXYpO1xuNzA0ODpcdFxuNzA0OTpcdFx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xuNzA1MDpcdFx0XHRuZnRfY2xlYXIobmV0LCBleHQpO1xuNzA1MTpcdFx0fSBlbHNlIHtcbjcwNTI6XHRcdFx0c2V0LVx1MDAzZW9wcy1cdTAwM2VhY3RpdmF0ZShuZXQsIHNldCwgZWxlbV9wcml2KTtcbjcwNTM6XHRcdH1cbjcwNTQ6XHR9XG43MDU1Olx0XG43MDU2Olx0c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDU3Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfdHJhbnNfb25lX2VsZW0gKmVsZW0pXG43MDU4Olx0e1xuNzA1OTpcdFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbS1cdTAwM2Vwcml2KTtcbjcwNjA6XHRcdGNvbnN0IHN0cnVjdCBuZnRfZWxlbV91cGRhdGUgKnVwZGF0ZSA9IGVsZW0tXHUwMDNldXBkYXRlO1xuNzA2MTpcdFxuNzA2MjpcdFx0aWYgKHVwZGF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1RSQU5TX1VQRF9USU1FT1VUKVxuNzA2MzpcdFx0XHRXUklURV9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cdTAwM2V0aW1lb3V0LCB1cGRhdGUtXHUwMDNldGltZW91dCk7XG43MDY0Olx0XG43MDY1Olx0XHRpZiAodXBkYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfVFJBTlNfVVBEX0VYUElSQVRJT04pXG43MDY2Olx0XHRcdFdSSVRFX09OQ0UobmZ0X3NldF9leHRfdGltZW91dChleHQpLVx1MDAzZWV4cGlyYXRpb24sIGdldF9qaWZmaWVzXzY0KCkgJiM0MzsgdXBkYXRlLVx1MDAzZWV4cGlyYXRpb24pO1xuNzA2NzpcdH1cbjcwNjg6XHRcbjcwNjk6XHRzdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfYWRkKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG43MDcwOlx0XHRcdFx0XHRzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlKVxuNzA3MTpcdHtcbjcwNzI6XHRcdGludCBpO1xuNzA3MzpcdFxuNzA3NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGUtXHUwMDNlbmVsZW1zOyBpJiM0MzsmIzQzOykge1xuNzA3NTpcdFx0XHRzdHJ1Y3QgbmZ0X3RyYW5zX29uZV9lbGVtICplbGVtID0gXHUwMDI2dGUtXHUwMDNlZWxlbXNbaV07XG43MDc2Olx0XG43MDc3Olx0XHRcdGlmIChlbGVtLVx1MDAzZXVwZGF0ZSlcbjcwNzg6XHRcdFx0XHRuZnRfdHJhbnNfZWxlbV91cGRhdGUodGUtXHUwMDNlc2V0LCBlbGVtKTtcbjcwNzk6XHRcdFx0ZWxzZVxuNzA4MDpcdFx0XHRcdG5mdF9zZXRlbGVtX2FjdGl2YXRlKGN0eC1cdTAwM2VuZXQsIHRlLVx1MDAzZXNldCwgZWxlbS1cdTAwM2Vwcml2KTtcbjcwODE6XHRcbjcwODI6XHRcdFx0bmZfdGFibGVzX3NldGVsZW1fbm90aWZ5KGN0eCwgdGUtXHUwMDNlc2V0LCBlbGVtLVx1MDAzZXByaXYsXG43MDgzOlx0XHRcdFx0XHRcdCBORlRfTVNHX05FV1NFVEVMRU0pO1xuNzA4NDpcdFx0XHRrZnJlZShlbGVtLVx1MDAzZXVwZGF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0ODUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlbHZpbmcgRGVlcGVyOiBJbnZlc3RpZ2F0aW5nIFNldCBFbGVtZW50IERlYWN0aXZhdGlvbioqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7dmUgZ290IGEgZ29vZCBncmFzcCBvbiB0aGUgb3ZlcmFsbCBwaWN0dXJlLCBidXQgbGV0JiMzOTtzIHNoYXJwZW4gb3VyIGZvY3VzLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCBhbmQgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWRgLiBUaGVzZSBhcmUgY3JpdGljYWwgcGllY2VzLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgaG93IHN0YWxlIGVsZW1lbnRzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIHNldCBzdHJ1Y3R1cmVzLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNhdGNoLWFsbCBkZWFjdGl2YXRpb24gZnVuY3Rpb24gd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgZXhwaXJhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgYW4gZWxlbWVudCBnZXRzIG1hcmtlZCBmb3IgZGVhY3RpdmF0aW9uIGFuZCB3aGF0IHRoZSB0cmlnZ2VyIGlzLiBJcyBpdCB0aGUgZXhwbGljaXQgY2FsbCwgb3IgZG9lcyB0aGlzIGludGVycGxheSB3aXRoIHRoZSBhZ2luZyBvZiBlbGVtZW50cz8gSSBzaG91bGQgYmUgZXhhbWluaW5nIGlmIHRoaXMgaXMgYSB0aW1lLWJhc2VkIG1lY2hhbmlzbSwgYSB1c2FnZSBjb3VudCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBlYWNoIGZ1bmN0aW9uIGNhbGwuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEkgc3VzcGVjdCB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb24gd2lsbCB1bmNvdmVyIHN1YnRsZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgcmVsYXRlZCB0byBnYXJiYWdlIGNvbGxlY3Rpb24uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGludGVybmFsIG1lY2hhbmljcyBvZiBOZXRmaWx0ZXIgd29yaywgYW5kLCBJIGJlbGlldmUsIHdpbGwgaGF2ZSB0aGUgbW9zdCBiZW5lZml0IGluIG9wdGltaXppbmcgdGhlIHBlcmZvcm1hbmNlIG9mIGxhcmdlciBzZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MDgwOlx0XHRcdFx0bmZ0X3NldGVsZW1fYWN0aXZhdGUoY3R4LVx1MDAzZW5ldCwgdGUtXHUwMDNlc2V0LCBlbGVtLVx1MDAzZXByaXYpO1xuNzA4MTpcdFxuNzA4MjpcdFx0XHRuZl90YWJsZXNfc2V0ZWxlbV9ub3RpZnkoY3R4LCB0ZS1cdTAwM2VzZXQsIGVsZW0tXHUwMDNlcHJpdixcbjcwODM6XHRcdFx0XHRcdFx0IE5GVF9NU0dfTkVXU0VURUxFTSk7XG43MDg0Olx0XHRcdGtmcmVlKGVsZW0tXHUwMDNldXBkYXRlKTtcbjcwODU6XHRcdH1cbjcwODY6XHR9XG43MDg3Olx0XG43MDg4Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjcwODk6XHRcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcwOTA6XHRcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSlcbjcwOTE6XHR7XG43MDkyOlx0XHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbjcwOTM6XHRcdHU2NCB0c3RhbXAgPSBnZXRfamlmZmllc182NCgpO1xuNzA5NDpcdFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XG43MDk1Olx0XG43MDk2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xuNzA5NzpcdFx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG43MDk4Olx0XHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxuNzA5OTpcdFx0XHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXG43MTAwOlx0XHRcdFx0Y29udGludWU7XG43MTAxOlx0XG43MTAyOlx0XHRcdGtmcmVlKGVsZW0tXHUwMDNlcHJpdik7XG43MTAzOlx0XHRcdGVsZW0tXHUwMDNlcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG43MTA0Olx0XHRcdG5mdF9zZXRfZWxlbV9jaGFuZ2VfYWN0aXZlKG5ldCwgc2V0LCBleHQpO1xuNzEwNTpcdFx0XHRyZXR1cm4gMDtcbjcxMDY6XHRcdH1cbjcxMDc6XHRcbjcxMDg6XHRcdHJldHVybiAtRU5PRU5UO1xuNzEwOTpcdH1cbjcxMTA6XHRcbjcxMTE6XHRzdGF0aWMgaW50IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG43MTEyOlx0XHRcdFx0XHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcxMTM6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxuNzExNDpcdHtcbjcxMTU6XHRcdHZvaWQgKnByaXY7XG43MTE2Olx0XG43MTE3Olx0XHRwcml2ID0gc2V0LVx1MDAzZW9wcy1cdTAwM2VkZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcbjcxMTg6XHRcdGlmICghcHJpdilcbjcxMTk6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYCoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSB0aGluaywgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLCBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgZGVlcGx5IGludGVydHdpbmVkIHdpdGggZXhwaXJpbmcgZWxlbWVudHMgd2l0aGluIGFuIE5GVCBzZXQuIEkgaW1hZ2luZSBpdCYjMzk7cyBjcnVjaWFsIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlbmZvcmNpbmcgcG9saWNpZXMsIGVzcGVjaWFsbHkgaW4gc2NlbmFyaW9zIHdoZXJlIHNldHMgYXJlIHVzZWQgZm9yIHJhdGUgbGltaXRpbmcsIGFjY2VzcyBjb250cm9sLCBvciBjYWNoaW5nLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgYXNwZWN0cyBJIHNob3VsZCBmb2N1cyBvbj8gVGhlIGNyaXRpY2FsIHBhcnRzIHdpbGwgdW5kb3VidGVkbHkgaW52b2x2ZSBob3cgdGhlIGZ1bmN0aW9uIGlkZW50aWZpZXMgZWxlbWVudHMgdG8gZXhwaXJlLiBXaGF04oCZcyB0aGUgZXhwaXJhdGlvbiBjcml0ZXJpYT8gVGltZS1iYXNlZD8gVXNhZ2UtYmFzZWQ/IE9yIHNvbWUgb3RoZXIgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSB3aXRoaW4gdGhlIHNldCBpdHNlbGY/CgpJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIHRoZSBtZWNoYW5pc20gZm9yIHJlbW92YWwsIGFzIHdlbGwuIElzIGl0IGEgZGlyZWN0IGRlbGV0aW9uLCBtYXJraW5nIGl0IGFzIGludmFsaWQsIG9yIHNvbWUgb3RoZXIgaW50ZXJuYWwgc3RhdGUgY2hhbmdlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBzZXQmIzM5O3MgY29uc2lzdGVuY3ksIGF0b21pY2l0eSwgYW5kIGNvbmN1cnJlbmN5IGFzcGVjdHMuIERvZXMgaXQgZW1wbG95IGxvY2tpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgb3Igb3RoZXIgc2FmZWd1YXJkcyB0byBwcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zIGR1cmluZyBlbGVtZW50IGV4cGlyeT8gQW5vdGhlciBwb3RlbnRpYWwgZGV0YWlsIHRvIGNvbnNpZGVyIGlzIHRoZSBub3RpZmljYXRpb24uIERvZXMgdGhlIGZ1bmN0aW9uIHRyaWdnZXIgYW55IGNhbGxiYWNrcywgZXZlbnRzLCBvciBsb2dnaW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gZWxlbWVudCBleHBpcnk/IFRoaXMgY291bGQgYmUgdml0YWwgZm9yIGRlYnVnZ2luZywgYXVkaXRpbmcsIG9yIHBlcmZvcm1pbmcgYWN0aW9ucyBiYXNlZCBvbiB0aGUgcmVtb3ZhbCBvZiBhbiBleHBpcmVkIGVsZW1lbnQuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGV4cGlyeSBwcm9jZXNzIGVuY291bnRlcnMgYSBwcm9ibGVtPyBJcyB0aGVyZSBhbnkgcmVwb3J0aW5nPwoKSeKAmW0gYWxzbyB3b25kZXJpbmcgYWJvdXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbiB0ZWNobmlxdWVzIGJlaW5nIHVzZWQgdG8gZWZmaWNpZW50bHkgZmluZCBhbmQgcmVtb3ZlIGV4cGlyZWQgZWxlbWVudHMsIG9yIGRvZXMgdGhpcyBwb3RlbnRpYWxseSBzY2FsZSBwb29ybHkgd2l0aCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzZXQ/IEZpbmFsbHksIEkgbmVlZCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiByZWxhdGVzIHRvIG90aGVyIGFzcGVjdHMgb2YgdGhlIE5GVCBmcmFtZXdvcmsuIEhvdyBkbyB0aGVzZSBleHBpcmVkIGVsZW1lbnRzIGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmU/IEhvdyBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBpbiByZWxhdGlvbiB0byBhbnkgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbXM/IFRoZSB3aG9sZSBkZXNpZ24gaGFzIGltcGxpY2F0aW9ucyBmb3IgcmVzb3VyY2UgdXNhZ2UuIFVuZGVyc3RhbmRpbmcgdGhlIGNvZGUgd2lsbCBnaXZlIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGVzaWduIHRyYWRlLW9mZnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbmZ0X3NldF9lbGVtX2V4cGlyZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTgzMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwciAqbmZ0X3NldF9leHRfZXhwcihjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dClcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODM3LVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjgzODpzdGF0aWMgaW5saW5lIGJvb2wgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC04MzktXHRcdFx0XHRcdCAgdTY0IHRzdGFtcClcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg9ODQ4PXN0YXRpYyBpbmxpbmUgYm9vbCBuZnRfc2V0X2VsZW1fZXhwaXJlZChjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dClcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC04NDkte1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjg1MDpcdHJldHVybiBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgZ2V0X2ppZmZpZXNfNjQoKSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODUxLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTg3PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTk5LVx0XHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAwMDpcdFx0ICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAwMS1cdFx0XHQqcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzA4OD1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwOTgtXHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzA5OTpcdFx0ICAgIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEwMC1cdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDY3OT1zdHJ1Y3QgbmZ0X3RyYW5zX2djICpuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYyhzdHJ1Y3QgbmZ0X3RyYW5zX2djICpnYylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY5MS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjkyOlx0XHRpZiAoIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2OTMtXHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYz01OT1zdGF0aWMgaW5saW5lIGludCBuZnRfcmhhc2hfY21wKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy02OC1cdFx0cmV0dXJuIDE7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jOjY5Olx0aWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXHUwMDI2aGUtXHUwMDNlZXh0LCB4LVx1MDAzZXRzdGFtcCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTcwLVx0XHRyZXR1cm4gMTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9NDE5PXN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19lbGVtICpwaXBhcG9fZ2V0X3Nsb3coY29uc3Qgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm0sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTQ3OC1cdFx0XHRlID0gZi1cdTAwM2VtdFtiXS5lO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjQ3OTpcdFx0XHRpZiAodW5saWtlbHkoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcdTAwMjZlLVx1MDAzZWV4dCwgdHN0YW1wKSB8fFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTQ4MC1cdFx0XHRcdCAgICAgIW5mdF9zZXRfZWxlbV9hY3RpdmUoXHUwMDI2ZS1cdTAwM2VleHQsIGdlbm1hc2spKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTcxMD1zdGF0aWMgdm9pZCBwaXBhcG9fZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0LCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTc1MC1cdFx0ICovXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTc1MTpcdFx0aWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXHUwMDI2ZS1cdTAwM2VleHQsIHRzdGFtcCkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNzUyLVx0XHRcdGlmICghbmZ0X3RyYW5zX2djX3NwYWNlKGdjKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jPTExMzA9c3RydWN0IG5mdF9waXBhcG9fZWxlbSAqcGlwYXBvX2dldF9hdngyKGNvbnN0IHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICptLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jLTEyMTYtXHRcdFx0ZSA9IGYtXHUwMDNlbXRbcmV0XS5lO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmM6MTIxNzpcdFx0XHRpZiAodW5saWtlbHkoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcdTAwMjZlLVx1MDAzZWV4dCwgdHN0YW1wKSB8fFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmMtMTIxOC1cdFx0XHRcdCAgICAgIW5mdF9zZXRfZWxlbV9hY3RpdmUoXHUwMDI2ZS1cdTAwM2VleHQsIGdlbm1hc2spKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz0zNDI9c3RhdGljIGludCBfX25mdF9yYnRyZWVfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMzk3LVx0XHQgKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzozOTg6XHRcdGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFx1MDAyNnJiZS1cdTAwM2VleHQsIHRzdGFtcCkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMzk5LVx0XHQgICAgbmZ0X3NldF9lbGVtX2FjdGl2ZShcdTAwMjZyYmUtXHUwMDNlZXh0LCBjdXJfZ2VubWFzaykpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9NzgzPW5mdF9yYnRyZWVfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTgxOS1cdFx0XHRcdGNvbnRpbnVlO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjgyMDpcdFx0XHR9IGVsc2UgaWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXHUwMDI2cmJlLVx1MDAzZWV4dCwgdHN0YW1wKSkge1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTgyMS1cdFx0XHRcdGJyZWFrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz04OTE9c3RhdGljIHZvaWQgbmZ0X3JidHJlZV9nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTkxMS1cdFx0fVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjkxMjpcdFx0aWYgKCFfX25mdF9zZXRfZWxlbV9leHBpcmVkKFx1MDAyNnJiZS1cdTAwM2VleHQsIHRzdGFtcCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtOTEzLVx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTYzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIHRoZSBEZXB0aHMgb2YgTmV0ZmlsdGVyJiMzOTtzIE5GVGFibGVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyBORlRhYmxlcyByZWxhdGVkLCBzcGVjaWZpY2FsbHkgdGhlIGV4cGlyYXRpb24gaGFuZGxpbmcgb2YgZWxlbWVudHMgd2l0aGluIGEgc2V0LiBUaGUgaW1tZWRpYXRlIG5lZWQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHRoYXQgcHJvY2Vzcywgd2hpY2ggSSBiZWxpZXZlIGlzIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYC4gSSYjMzk7bGwgd2FudCB0byBjaGVjayB0aGUgY29yZSBoZWFkZXIgZmlsZSwgYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaGAsIHRvIGdldCB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIGFuZCBkZWNsYXJhdGlvbi4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGxvZ2ljLCB0aGUgYXJndW1lbnRzLCBhbnl0aGluZyB0aGF0IHNoZWRzIGxpZ2h0IG9uIGhvdyBpdCYjMzk7cyBkZXNpZ25lZCB0byB0cmFjayBhbmQgaGFuZGxlIGV4cGlyZWQgZWxlbWVudHMgd2l0aGluIHRoZXNlIHNldHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgc291cmNlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzNTpcdFx0cmV0dXJuIG5mdF9zZXRfZXh0KGV4dCwgTkZUX1NFVF9FWFRfRVhQUkVTU0lPTlMpO1xuIDgzNjpcdH1cbiA4Mzc6XHRcbiA4Mzg6XHRzdGF0aWMgaW5saW5lIGJvb2wgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCxcbiA4Mzk6XHRcdFx0XHRcdFx0ICB1NjQgdHN0YW1wKVxuIDg0MDpcdHtcbiA4NDE6XHRcdGlmICghbmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfVElNRU9VVCkgfHxcbiA4NDI6XHRcdCAgICBSRUFEX09OQ0UobmZ0X3NldF9leHRfdGltZW91dChleHQpLVx1MDAzZXRpbWVvdXQpID09IDApXG4gODQzOlx0XHRcdHJldHVybiBmYWxzZTtcbiA4NDQ6XHRcbiA4NDU6XHRcdHJldHVybiB0aW1lX2FmdGVyX2VxNjQodHN0YW1wLCBSRUFEX09OQ0UobmZ0X3NldF9leHRfdGltZW91dChleHQpLVx1MDAzZWV4cGlyYXRpb24pKTtcbiA4NDY6XHR9XG4gODQ3Olx0XG4gODQ4Olx0c3RhdGljIGlubGluZSBib29sIG5mdF9zZXRfZWxlbV9leHBpcmVkKGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0KVxuIDg0OTpcdHtcbiA4NTA6XHRcdHJldHVybiBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgZ2V0X2ppZmZpZXNfNjQoKSk7XG4gODUxOlx0fVxuIDg1MjpcdFxuIDg1MzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mdF9zZXRfZXh0ICpuZnRfc2V0X2VsZW1fZXh0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gODU0Olx0XHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcbiA4NTU6XHR7XG4gODU2Olx0XHRyZXR1cm4gKHZvaWQgKillbGVtX3ByaXYgJiM0Mzsgc2V0LVx1MDAzZW9wcy1cdTAwM2VlbGVtc2l6ZTtcbiA4NTc6XHR9XG4gODU4Olx0XG4gODU5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0X29iamVjdCAqKm5mdF9zZXRfZXh0X29iaihjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIyNgoJCQkJCQkJb3V0cHV0OiAyNjIKCQkJCQkJCXRob3VnaHRzOiAxMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBgbmZfdGFibGVzX2FwaS5jYCAtIENhdGNoYWxsIEVsZW1lbnQgRXhwaXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgbmZfdGFibGVzX2FwaS5jYC4gTXkgZXhwZXJ0IGV5ZXMgc2VlIHRoaXMgYXMgYSByZWZpbmVtZW50IG9mIGNhdGNoYWxsIGVsZW1lbnQgaGFuZGxpbmcgd2l0aGluIG5mdGFibGVzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGVpciBsaWZlY3ljbGUgYW5kIGV4cGlyYXRpb24uCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIGV4cGlyZWQgY2F0Y2hhbGwgZWxlbWVudHMgaW4gc2V0cy4KCkluIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoKWAsIHByZXZpb3VzbHksIGlmIGFuIGFjdGl2ZSBjYXRjaGFsbCBlbGVtZW50IGV4aXN0ZWQsIHRoZSBmdW5jdGlvbiB3b3VsZCByZXR1cm4gYC1FRVhJU1RgLCBldmVuIGlmIHRoZSBlbGVtZW50IHdhcyBleHBpcmVkLiBOb3csIHRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdXNpbmcgYCFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKWAgKmJlZm9yZSogcmV0dXJuaW5nIC1FRVhJU1QuIFRoaXMgZW5zdXJlcyB0aGF0IG9ubHkgKmFjdGl2ZSogYW5kICpub24tZXhwaXJlZCogY2F0Y2hhbGwgZWxlbWVudHMgcHJldmVudCBpbnNlcnRpb24gb2YgYSBuZXcgb25lLiBgdHN0YW1wYCBpcyB0aGUgY3VycmVudCB0aW1lc3RhbXAgb2J0YWluZWQgZnJvbSBgZ2V0X2ppZmZpZXNfNjQoKWAuCgpTaW1pbGFybHksIGluIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKClgLCB0aGUgZXhpc3RpbmcgbG9naWMgYWxyZWFkeSBza2lwcGVkIGluYWN0aXZlIGVsZW1lbnRzLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBleHBpcmVkIGVsZW1lbnRzIHdpdGhpbiB0aGUgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGxvb3AsIHNraXBwaW5nIHRoZW0gd2l0aCBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcClgLiBUaGlzIGVuc3VyZXMgdGhhdCBleHBpcmVkIGVsZW1lbnRzIGFyZSBub3QgdW5uZWNlc3NhcmlseSBwcm9jZXNzZWQgZHVyaW5nIGRlYWN0aXZhdGlvbi4gQWdhaW4sIGB0c3RhbXBgIGlzIHVzZWQgaGVyZSB0b28uCgpTbywgdGhlIHBhdGNoIGludHJvZHVjZXMgdGhlc2UgZXhwaXJhdGlvbiBjaGVja3Mgd2l0aGluIHRoZSB0d28gZnVuY3Rpb25zLCBpbXByb3ZpbmcgaG93IGV4cGlyZWQgY2F0Y2hhbGwgZWxlbWVudHMgYXJlIGhhbmRsZWQuCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBLTVNBTiBpbXBsaWNhdGlvbnMuIE15IGFuYWx5c2lzIHNheXMgdGhhdCBLTVNBTiBkb2VzbiYjMzk7dCBzZWVtIG5lY2Vzc2FyeSBoZXJlLiAgVGhpcyBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGNvcGllcywgb3IgZXhwb3N1cmVzIHRvIHVzZXIgc3BhY2UuICAKCiogICBgdHN0YW1wYCBpcyBhIGxvY2FsIHZhcmlhYmxlIGluaXRpYWxpemVkIHdpdGggYGdldF9qaWZmaWVzXzY0KClgLgoqICAgVGhlIGBleHRgIHN0cnVjdHVyZSBpcyBvYnRhaW5lZCB2aWEgYG5mdF9zZXRfZWxlbV9leHQoKWAuCiogICBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCByZWxpZXMgb24gdGhlIGBORlRfU0VUX0VYVF9USU1FT1VUYCBleHRlbnNpb24uIFRoZSBmaWVsZHMgdXNlZCBpbiB0aGF0IGV4dGVuc2lvbiBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2hlbiBlbGVtZW50cyBhcmUgY3JlYXRlZC4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgbmV3IGNvZGUgd2hlcmUgdGhpcyB3b3VsZCBiZSBwcm9ibGVtYXRpYy4KClRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nICpsb2dpYyogYXJvdW5kIGV4cGlyZWQgZWxlbWVudHMsIG5vdCBhbHRlcmluZyBob3cgZGF0YSBpcyBpbml0aWFsaXplZCBvciBjb3BpZWQsIG9yIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIE1lbW9yeSBzYWZldHkgaXNzdWVzICh1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGV0Yy4pIHRoYXQgKm1pZ2h0KiBiZSBpbnRyb2R1Y2VkICh3aGljaCBhcmUgbm90IGFwcGFyZW50IGZyb20gdGhlIGNvZGUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBhc3NlcnRpb25zLiBUaGVzZSBjaGVja3Mgd291bGQgaGlnaGxpZ2h0IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljYWwgZXJyb3JzLCBidXQgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBNeSByZWNvbW1lbmRhdGlvbiBpcyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UgZG9uJiMzOTt0IGhhdmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLiBUaGUgZm9jdXMgaGVyZSBpcyBvbiBsaWZldGltZSBtYW5hZ2VtZW50IGFuZCBleHBpcmF0aW9uIGxvZ2ljOyBLTVNBTiBpcyB0aGUgd3JvbmcgdG9vbCBmb3IgdGhpcyBqb2IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgbmZ0YWJsZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCB0byBjaGVjayB3aGV0aGVyIGFuIGV4aXN0aW5nIGNhdGNoYWxsIGVsZW1lbnQgaGFzIGV4cGlyZWQgdXNpbmcgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgYW5kIHRpbWVzdGFtcHMgb2J0YWluZWQgdmlhIGBnZXRfamlmZmllc182NCgpYC5cblxuLSAqKktNU0FOIGFwcGxpY2FiaWxpdHkqKjogS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoaGVhcCwgc3RhY2ssIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIHBhdGNoIGluaXRpYWxpemVzIGxvY2FsIGB1NjQgdHN0YW1wYCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgZ2V0X2ppZmZpZXNfNjQoKWAgYW5kIGNoZWNrcyBleGlzdGluZywgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZXh0ZW5zaW9uIGF0dHJpYnV0ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuXG4tICoqS0FTQU4gYXBwbGljYWJpbGl0eSoqOiBLQVNBTiwgdG9nZXRoZXIgd2l0aCBzdGFuZGFyZCBkZWJ1ZyB0b29scywgaXMgYXBwcm9wcmlhdGUgZm9yIGNhdGNoaW5nIGFueSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvcnMsIHVzZS1hZnRlci1mcmVlLCBvciBkb3VibGUtZnJlZSBpc3N1ZXMgcmVsYXRlZCB0byBzZXQgZWxlbWVudCBsaWZlY3ljbGVzIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24uXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBuZnRhYmxlcyBjYXRjaGFsbCBzZXQgZWxlbWVudCBoYW5kbGluZyBpbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIHRvIGNoZWNrIHdoZXRoZXIgYW4gZXhpc3RpbmcgY2F0Y2hhbGwgZWxlbWVudCBoYXMgZXhwaXJlZCB1c2luZyBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBhbmQgdGltZXN0YW1wcyBvYnRhaW5lZCB2aWEgYGdldF9qaWZmaWVzXzY0KClgLlxuXG4tICoqS01TQU4gYXBwbGljYWJpbGl0eSoqOiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgbG9jYWwgYHU2NCB0c3RhbXBgIHZhcmlhYmxlcyBkaXJlY3RseSBmcm9tIGBnZXRfamlmZmllc182NCgpYCBhbmQgY2hlY2tzIGV4aXN0aW5nLCBwcm9wZXJseSBpbml0aWFsaXplZCBleHRlbnNpb24gYXR0cmlidXRlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS5cbi0gKipLQVNBTiBhcHBsaWNhYmlsaXR5Kio6IEtBU0FOLCB0b2dldGhlciB3aXRoIHN0YW5kYXJkIGRlYnVnIHRvb2xzLCBpcyBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgYW55IG1lbW9yeSBtYW5hZ2VtZW50IGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG9yIGRvdWJsZS1mcmVlIGlzc3VlcyByZWxhdGVkIHRvIHNldCBlbGVtZW50IGxpZmVjeWNsZXMgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbi5cblxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjIxLjAzMDg0MjYxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MDIxNjA5MzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0XCIsXG4gICAgXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlXCIsXG4gICAgXCJuZnRfYWRkX3NldF9lbGVtXCIsXG4gICAgXCJuZnRfZGVsX3NldGVsZW1cIixcbiAgICBcIm5mX3RhYmxlc19uZXdzZXRlbGVtXCIsXG4gICAgXCJuZl90YWJsZXNfZGVsc2V0ZWxlbVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBuZnRhYmxlcyBjYXRjaGFsbCBzZXQgZWxlbWVudCBoYW5kbGluZyBpbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIHRvIGNoZWNrIHdoZXRoZXIgYW4gZXhpc3RpbmcgY2F0Y2hhbGwgZWxlbWVudCBoYXMgZXhwaXJlZCB1c2luZyBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBhbmQgdGltZXN0YW1wcyBvYnRhaW5lZCB2aWEgYGdldF9qaWZmaWVzXzY0KClgLlxcblxcbi0gKipLTVNBTiBhcHBsaWNhYmlsaXR5Kio6IEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBwYXRjaCBpbml0aWFsaXplcyBsb2NhbCBgdTY0IHRzdGFtcGAgdmFyaWFibGVzIGRpcmVjdGx5IGZyb20gYGdldF9qaWZmaWVzXzY0KClgIGFuZCBjaGVja3MgZXhpc3RpbmcsIHByb3Blcmx5IGluaXRpYWxpemVkIGV4dGVuc2lvbiBhdHRyaWJ1dGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYWxsb2NhdGlvbnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLlxcbi0gKipLQVNBTiBhcHBsaWNhYmlsaXR5Kio6IEtBU0FOLCB0b2dldGhlciB3aXRoIHN0YW5kYXJkIGRlYnVnIHRvb2xzLCBpcyBhcHByb3ByaWF0ZSBmb3IgY2F0Y2hpbmcgYW55IG1lbW9yeSBtYW5hZ2VtZW50IGVycm9ycywgdXNlLWFmdGVyLWZyZWUsIG9yIGRvdWJsZS1mcmVlIGlzc3VlcyByZWxhdGVkIHRvIHNldCBlbGVtZW50IGxpZmVjeWNsZXMgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbi5cXG5cXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBuZnRhYmxlcyBjYXRjaC1hbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0IGFuZCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlIHRvIGFjY291bnQgZm9yIGV4cGlyZWQgc2V0IGVsZW1lbnRzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIG1lc3NhZ2VzIChORlRfTVNHX05FV1NFVEVMRU0gYW5kIE5GVF9NU0dfREVMU0VURUxFTSkgYW5kIG1vZGlmeSBzdGF0ZSB2YWxpZGF0aW9uIGFuZCBlbGVtZW50IGRlYWN0aXZhdGlvbiBsb2dpYywgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucywgbGlmZXRpbWUgaXNzdWVzLCBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjIxLjAzMDg0Nzc2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwMDg4MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODRmYjk4MWVjMTY0YzVkNTkzZDhmNDBlMjI2OGY4YmVkZWYwMGM3OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAwODozNjoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXFxuaW5kZXggNzY1YTkyZmE5MGQ2Mi4uMGYzNDQ5Y2NhNWQyNyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXFxuQEAgLTY5OTEsMTEgKzY5OTEsMTMgQEAgc3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbiB7XFxuIFxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbiBcXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xcbitcXHR1NjQgdHN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTtcXG4gXFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcXHUwMDI2c2V0LVxcdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XFxuIFxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxuLVxcdFxcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpIHtcXG4rXFx0XFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XFxuIFxcdFxcdFxcdCpwcml2ID0gY2F0Y2hhbGwtXFx1MDAzZWVsZW07XFxuIFxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXHRcXHR9XFxuQEAgLTcwODgsMTEgKzcwOTAsMTMgQEAgc3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcXG4rXFx0dTY0IHRzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7XFxuIFxcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xcbiBcXHRcXHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXFx1MDAzZWVsZW0pO1xcbi1cXHRcXHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkpXFxuK1xcdFxcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxcbitcXHRcXHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNlcHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjIxLjY2MTQ3ODA5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTg4ODIzNjgwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRcIixcbiAgICBcIm5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVcIixcbiAgICBcIm5mdF9hZGRfc2V0X2VsZW1cIixcbiAgICBcIm5mdF9kZWxfc2V0ZWxlbVwiLFxuICAgIFwibmZfdGFibGVzX25ld3NldGVsZW1cIixcbiAgICBcIm5mX3RhYmxlc19kZWxzZXRlbGVtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgbmZ0YWJsZXMgY2F0Y2gtYWxsIHNldCBlbGVtZW50IGhhbmRsaW5nIGluIG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydCBhbmQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSB0byBhY2NvdW50IGZvciBleHBpcmVkIHNldCBlbGVtZW50cy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgbmV0bGluayBtZXNzYWdlcyAoTkZUX01TR19ORVdTRVRFTEVNIGFuZCBORlRfTVNHX0RFTFNFVEVMRU0pIGFuZCBtb2RpZnkgc3RhdGUgdmFsaWRhdGlvbiBhbmQgZWxlbWVudCBkZWFjdGl2YXRpb24gbG9naWMsIG1ha2luZyBpdCB2YWx1YWJsZSB0byBmdXp6IGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMsIGxpZmV0aW1lIGlzc3Vlcywgb3IgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg0ZmI5ODFlYzE2NGM1ZDU5M2Q4ZjQwZTIyNjhmOGJlZGVmMDBjNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwODozNjoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IDc2NWE5MmZhOTBkNjIuLjBmMzQ0OWNjYTVkMjcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC02OTkxLDExICs2OTkxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbiBcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7XG4rXHR1NjQgdHN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTtcbiBcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbiBcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xuLVx0XHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spKSB7XG4rXHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcbiBcdFx0XHQqcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG4gXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRcdH1cbkBAIC03MDg4LDExICs3MDkwLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pXG4ge1xuIFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG4rXHR1NjQgdHN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTtcbiBcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbiBcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xuLVx0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkpXG4rXHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxuK1x0XHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGtmcmVlKGVsZW0tXHUwMDNlcHJpdik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNjoyMS42NjE0Nzk2ODdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTQ2ODYzMzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTkZ0YWJsZXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCBmaWxlOyB0aGF0J3Mgd2hlcmUgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNvbmNlbnRyYXRlZC4gSSBzZWUgY2hhbmdlcyBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIGZ1bmN0aW9ucywgd2hpY2ggaW1tZWRpYXRlbHkgc2lnbmFscyBhIHBvdGVudGlhbCBhZGp1c3RtZW50IHRvIGhvdyBjYXRjaGFsbCBzZXQgZWxlbWVudHMgYXJlIG1hbmFnZWQsIGxpa2VseSByZWxhdGVkIHRvIGV4cGlyYXRpb24gY2hlY2tzIHVzaW5nIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKWAuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBzb21lIHN1cnJvdW5kaW5nIGNvbnRleHQuIEknbGwganVtcCBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AgYW5kIHJlYWQgYXJvdW5kIGxpbmVzIDY5OTEgYW5kIDcwODguIFRoaXMgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyB0aGV5IGZpdCBpbnRvLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhlIGBLY29uZmlnYCBvcHRpb25zIHRvIGNvbmZpcm0gYG5mX3RhYmxlc2AgaXMgZW5hYmxlZCwganVzdCB0byBiZSBzdXJlLlxuXG5UbyBxdWlja2x5IGdldCB0aGUgc291cmNlIGNvZGUgSSdsbCBwcm9iYWJseSByZWFjaCBmb3IgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHB1bGwgdGhlIGNvZGUgSSBuZWVkIGFuZCByZWR1Y2UgdGhlIHRpbWUgaXQgdGFrZXMgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwNSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjI4LjIwODM0NTQ1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTgwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2OTgwOlxcdFxcdFxcdCAgICAhbmZ0X3NldF9lbGVtX2lzX2RlYWQoZXh0KSlcXG42OTgxOlxcdFxcdFxcdFxcdHJldHVybiBleHQ7XFxuNjk4MjpcXHRcXHR9XFxuNjk4MzpcXHRcXG42OTg0OlxcdFxcdHJldHVybiBOVUxMO1xcbjY5ODU6XFx0fVxcbjY5ODY6XFx0XFxuNjk4NzpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNjk4ODpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG42OTg5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtLFxcbjY5OTA6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZnRfZWxlbV9wcml2ICoqcHJpdilcXG42OTkxOlxcdHtcXG42OTkyOlxcdFxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbjY5OTM6XFx0XFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcXG42OTk0OlxcdFxcdHU2NCB0c3RhbXAgPSBnZXRfamlmZmllc182NCgpO1xcbjY5OTU6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuNjk5NjpcXHRcXG42OTk3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG42OTk4OlxcdFxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxuNjk5OTpcXHRcXHRcXHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFxcdTAwMjZcXHUwMDI2XFxuNzAwMDpcXHRcXHRcXHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XFxuNzAwMTpcXHRcXHRcXHRcXHQqcHJpdiA9IGNhdGNoYWxsLVxcdTAwM2VlbGVtO1xcbjcwMDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuNzAwMzpcXHRcXHRcXHR9XFxuNzAwNDpcXHRcXHR9XFxuNzAwNTpcXHRcXG43MDA2OlxcdFxcdGNhdGNoYWxsID0ga21hbGxvY19vYmooKmNhdGNoYWxsLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjcwMDc6XFx0XFx0aWYgKCFjYXRjaGFsbClcXG43MDA4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjcwMDk6XFx0XFxuNzAxMDpcXHRcXHRjYXRjaGFsbC1cXHUwMDNlZWxlbSA9IGVsZW0tXFx1MDAzZXByaXY7XFxuNzAxMTpcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2Y2F0Y2hhbGwtXFx1MDAzZWxpc3QsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QpO1xcbjcwMTI6XFx0XFxuNzAxMzpcXHRcXHRyZXR1cm4gMDtcXG43MDE0OlxcdH1cXG43MDE1OlxcdFxcbjcwMTY6XFx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcwMTc6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDE4OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0sXFxuNzAxOTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKmVsZW1fcHJpdixcXG43MDIwOlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBmbGFncylcXG43MDIxOlxcdHtcXG43MDIyOlxcdFxcdGludCByZXQ7XFxuNzAyMzpcXHRcXG43MDI0OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcXG43MDI1OlxcdFxcdFxcdHJldCA9IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChuZXQsIHNldCwgZWxlbSwgZWxlbV9wcml2KTtcXG43MDI2OlxcdFxcdGVsc2VcXG43MDI3OlxcdFxcdFxcdHJldCA9IHNldC1cXHUwMDNlb3BzLVxcdTAwM2VpbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XFxuNzAyODpcXHRcXG43MDI5OlxcdFxcdHJldHVybiByZXQ7XFxuNzAzMDpcXHR9XFxuNzAzMTpcXHRcXG43MDMyOlxcdHN0YXRpYyBib29sIG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzAzMzpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcXG43MDM0OlxcdHtcXG43MDM1OlxcdFxcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW1fcHJpdik7XFxuNzAzNjpcXHRcXG43MDM3OlxcdFxcdGlmIChuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9GTEFHUykgXFx1MDAyNlxcdTAwMjZcXG43MDM4OlxcdFxcdCAgICAqbmZ0X3NldF9leHRfZmxhZ3MoZXh0KSBcXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcXG43MDM5OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjcwNDA6XFx0XFxuNzA0MTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNzA0MjpcXHR9XFxuNzA0MzpcXHRcXG43MDQ0OlxcdHN0YXRpYyB2b2lkIG5mdF9zZXRlbGVtX2FjdGl2YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDQ1OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxcbjcwNDY6XFx0e1xcbjcwNDc6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbV9wcml2KTtcXG43MDQ4OlxcdFxcbjcwNDk6XFx0XFx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xcbjcwNTA6XFx0XFx0XFx0bmZ0X2NsZWFyKG5ldCwgZXh0KTtcXG43MDUxOlxcdFxcdH0gZWxzZSB7XFxuNzA1MjpcXHRcXHRcXHRzZXQtXFx1MDAzZW9wcy1cXHUwMDNlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW1fcHJpdik7XFxuNzA1MzpcXHRcXHR9XFxuNzA1NDpcXHR9XFxuNzA1NTpcXHRcXG43MDU2OlxcdHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtX3VwZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcwNTc6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3RyYW5zX29uZV9lbGVtICplbGVtKVxcbjcwNTg6XFx0e1xcbjcwNTk6XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbS1cXHUwMDNlcHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjI4LjIwODkzOTEwNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzUxNDgwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgV2VhayBQb2ludHMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGRlYWN0aXZhdGlvbiBwcm9jZWR1cmVzLi4uIEdvdCB0byBtYWtlIHN1cmUgd2UncmUgdGhvcm91Z2guIFdlJ3ZlIGdvbmUgb3ZlciBgbmZ0X3NldGVsZW1fZGVsZXRlYCwgYG5mdF9zZXRlbGVtX3JlcGxhY2VgLCBhbmQgZXZlbiB0aGUgZ2VuZXJpYyBgbmZ0X3NldGVsZW1fYWRkYCB3aGljaCBpcyBjcml0aWNhbCB0byBjYXRjaCBlZGdlIGNhc2VzLCBhcyB3ZWxsIGFzIHRoZSBtb3JlIG9idmlvdXMgb25lcyBzdWNoIGFzIGBuZnRfc2V0X2RlbGV0ZWAuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBMZXQncyBub3QgYmUgaGFzdHkgaW4gZGVjbGFyaW5nIHZpY3RvcnkuIEknbSBnZXR0aW5nIGEgbmlnZ2xpbmcgZmVlbGluZyB0aGVyZSdzIGEgcmVsYXRlZCBmdW5jdGlvbiB3ZSBoYXZlbid0IGNoZWNrZWQgd2l0aCB0aGUgc2FtZSBsZXZlbCBvZiBzY3J1dGlueS4gV2UgZGVmaW5pdGVseSBuZWVkIHRvIGluY2x1ZGUgdGhlIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCBpbiB0aGlzIHJldmlldy4gR290dGEgYmUgc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnkgdnVsbmVyYWJpbGl0aWVzIHRoZXJlLCBvciBhbnkgc3VidGxlIGRpZmZlcmVuY2VzIGluIGxvZ2ljIG9yIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgY29tcGFyZWQgdG8gdGhlIG90aGVyIHNldCBlbGVtZW50IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHJlc291cmNlIGNsZWFudXAgb3IgbG9ja2luZy4gSXQncyB0b28gZWFzeSB0byBhc3N1bWUgc3ltbWV0cnkuIFdlIG5lZWQgdG8gZXhwbG9yZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MzY6MzAuNTg0MDkwMzk4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzczOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcwODA6XFx0XFx0XFx0XFx0bmZ0X3NldGVsZW1fYWN0aXZhdGUoY3R4LVxcdTAwM2VuZXQsIHRlLVxcdTAwM2VzZXQsIGVsZW0tXFx1MDAzZXByaXYpO1xcbjcwODE6XFx0XFxuNzA4MjpcXHRcXHRcXHRuZl90YWJsZXNfc2V0ZWxlbV9ub3RpZnkoY3R4LCB0ZS1cXHUwMDNlc2V0LCBlbGVtLVxcdTAwM2Vwcml2LFxcbjcwODM6XFx0XFx0XFx0XFx0XFx0XFx0IE5GVF9NU0dfTkVXU0VURUxFTSk7XFxuNzA4NDpcXHRcXHRcXHRrZnJlZShlbGVtLVxcdTAwM2V1cGRhdGUpO1xcbjcwODU6XFx0XFx0fVxcbjcwODY6XFx0fVxcbjcwODc6XFx0XFxuNzA4ODpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcwODk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDkwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pXFxuNzA5MTpcXHR7XFxuNzA5MjpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcXG43MDkzOlxcdFxcdHU2NCB0c3RhbXAgPSBnZXRfamlmZmllc182NCgpO1xcbjcwOTQ6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuNzA5NTpcXHRcXG43MDk2OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG43MDk3OlxcdFxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxuNzA5ODpcXHRcXHRcXHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcXG43MDk5OlxcdFxcdFxcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcXG43MTAwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjcxMDE6XFx0XFxuNzEwMjpcXHRcXHRcXHRrZnJlZShlbGVtLVxcdTAwM2Vwcml2KTtcXG43MTAzOlxcdFxcdFxcdGVsZW0tXFx1MDAzZXByaXYgPSBjYXRjaGFsbC1cXHUwMDNlZWxlbTtcXG43MTA0OlxcdFxcdFxcdG5mdF9zZXRfZWxlbV9jaGFuZ2VfYWN0aXZlKG5ldCwgc2V0LCBleHQpO1xcbjcxMDU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzEwNjpcXHRcXHR9XFxuNzEwNzpcXHRcXG43MTA4OlxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjcxMDk6XFx0fVxcbjcxMTA6XFx0XFxuNzExMTpcXHRzdGF0aWMgaW50IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNzExMjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MTEzOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxcbjcxMTQ6XFx0e1xcbjcxMTU6XFx0XFx0dm9pZCAqcHJpdjtcXG43MTE2OlxcdFxcbjcxMTc6XFx0XFx0cHJpdiA9IHNldC1cXHUwMDNlb3BzLVxcdTAwM2VkZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcXG43MTE4OlxcdFxcdGlmICghcHJpdilcXG43MTE5OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNjozMC41ODQ0NjYyMThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTM3NDgwOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSBmb3IgbmZfdGFibGVzX2FwaS5jKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiBpcyBzZXQgdXAgY29ycmVjdGx5IGZvciBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLiBJIG5lZWQgdG8gZW5zdXJlIGl0J3MgcHJvcGVybHkgZW5hYmxlZCBhbmQgYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBhcmUgbWV0LiBMZXQgbWUgcXVpY2tseSBncmVwIHRocm91Z2ggdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoYXQgbW9kdWxlLlxuXG5UaGVuLCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBuZl90YWJsZXNfYXBpLm9gIGlzIGJlaW5nIGJ1aWx0IGNvcnJlY3RseS4gSSdsbCBzZWFyY2ggdGhlIHJlbGV2YW50IE1ha2VmaWxlLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9uZXRmaWx0ZXIvYCwgdG8gdmVyaWZ5IHRoYXQgaXQncyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgZG9lc24ndCBoYXZlIGFueSBvYnZpb3VzIGVycm9ycyBpbiBpdHMgY29tcGlsYXRpb24uIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgdG8gZW5zdXJlIHRoZSBtb2R1bGUgaXMgbGlua2VkIGFzIGV4cGVjdGVkIGFuZCBldmVyeXRoaW5nIGlzIGludGVncmF0ZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzcwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNjozMi41MjE5NTAwNjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2ODcwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfdGFibGVzX2FwaVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODQ9b2JqLSQoQ09ORklHX05GX0RVUF9ORVRERVYpXFx0Kz0gbmZfZHVwX25ldGRldi5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg2LSMgbmZfdGFibGVzXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4NzpuZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODgtXFx0XFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MzY6MzIuNTcxNjQzNjM3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA3NTU5MTEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJXaGVyZSB3b3VsZCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhvc2UgcGFydGljdWxhciBOZXRmaWx0ZXIgbW9kdWxlcyBiZSBkZWZpbmVkP1wiIE15IG1lbnRhbCByYWRhciBpbW1lZGlhdGVseSBwaW5ncyB0aGUgYG5ldC9uZXRmaWx0ZXJgIGRpcmVjdG9yeSDigJMgdGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiBOZXRmaWx0ZXIgbGl2ZXMgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEFuZCwgc3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiB0aGUgYE1ha2VmaWxlYCB0aGVyZS4gSXQncyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGJ1aWxkaW5nIGFsbCB0aGF0IGdvb2Qgc3R1ZmYuIEknbSBndWVzc2luZyBhcm91bmQgbGluZSA4NyBvciBzbyBpcyBhIGxpa2VseSBzcG90IHRvIGZpbmQgdGhlIHJlbGV2YW50IHJ1bGVzLCBkZXBlbmRlbmNpZXMsIG9yIG1heWJlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZmlndXJpbmcgb3V0IHdoYXQncyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBhbmQgaG93IHRoaW5ncyBhcmUgcHV0IHRvZ2V0aGVyLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjM3LjY0NzIzODAyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcbiAgODE6XFx0b2JqLSQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpICs9IG5mX2Nvbm5jb3VudC5vXFxuICA4MjpcXHRcXG4gIDgzOlxcdCMgZ2VuZXJpYyBwYWNrZXQgZHVwbGljYXRpb24gZnJvbSBuZXRkZXYgZmFtaWx5XFxuICA4NDpcXHRvYmotJChDT05GSUdfTkZfRFVQX05FVERFVilcXHQrPSBuZl9kdXBfbmV0ZGV2Lm9cXG4gIDg1OlxcdFxcbiAgODY6XFx0IyBuZl90YWJsZXNcXG4gIDg3OlxcdG5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxuICA4ODpcXHRcXHRcXHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcXFxcbiAgODk6XFx0XFx0XFx0ICBuZnRfYml0d2lzZS5vIG5mdF9ieXRlb3JkZXIubyBuZnRfcGF5bG9hZC5vIG5mdF9sb29rdXAubyBcXFxcXFxuICA5MDpcXHRcXHRcXHQgIG5mdF9keW5zZXQubyBuZnRfbWV0YS5vIG5mdF9ydC5vIG5mdF9leHRoZHIubyBuZnRfbGFzdC5vIFxcXFxcXG4gIDkxOlxcdFxcdFxcdCAgbmZ0X2NvdW50ZXIubyBuZnRfb2JqcmVmLm8gbmZ0X2lubmVyLm8gXFxcXFxcbiAgOTI6XFx0XFx0XFx0ICBuZnRfY2hhaW5fcm91dGUubyBuZl90YWJsZXNfb2ZmbG9hZC5vIFxcXFxcXG4gIDkzOlxcdFxcdFxcdCAgbmZ0X3NldF9oYXNoLm8gbmZ0X3NldF9iaXRtYXAubyBuZnRfc2V0X3JidHJlZS5vIFxcXFxcXG4gIDk0OlxcdFxcdFxcdCAgbmZ0X3NldF9waXBhcG8ub1xcbiAgOTU6XFx0XFxuICA5NjpcXHRpZmRlZiBDT05GSUdfWDg2XzY0XFxuICA5NzpcXHRpZm5kZWYgQ09ORklHX1VNTFxcbiAgOTg6XFx0bmZfdGFibGVzLW9ianMgKz0gbmZ0X3NldF9waXBhcG9fYXZ4Mi5vXFxuICA5OTpcXHRlbmRpZlxcbiAxMDA6XFx0ZW5kaWZcXG4gMTAxOlxcdFxcbiAxMDI6XFx0aWZkZWYgQ09ORklHX05GVF9DVFxcbiAxMDM6XFx0aWZkZWYgQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FXFxuIDEwNDpcXHRuZl90YWJsZXMtb2JqcyArPSBuZnRfY3RfZmFzdC5vXFxuIDEwNTpcXHRlbmRpZlxcbiAxMDY6XFx0ZW5kaWZcXG4gMTA3OlxcdFxcbiAxMDg6XFx0b2JqLSQoQ09ORklHX05GX1RBQkxFUylcXHRcXHQrPSBuZl90YWJsZXMub1xcbiAxMDk6XFx0b2JqLSQoQ09ORklHX05GVF9DT01QQVQpXFx0Kz0gbmZ0X2NvbXBhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjM3LjY0NzMxNDUxN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODgwMTAyNTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBgQ09ORklHX05GX1RBQkxFU2AgRGVwZW5kZW5jaWVzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX05GX1RBQkxFU2AuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgdXN1YWwgcGxhY2UgdG8gZmluZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLiBJIGtub3cgYENPTkZJR19ORl9UQUJMRVNgIGlzIHByZXR0eSBmdW5kYW1lbnRhbCwgYnV0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIEknbSBub3QgaW1tZWRpYXRlbHkgYXdhcmUgb2YsIG9yIGV2ZW4gc29tZSBkZXBlbmRlbmNpZXMgd2hpY2ggd2lsbCBpbXBhY3QgdGhlIGltcGFjdCBvZiBgQ09ORklHX05GX1RBQkxFU2AsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRpbWUgdG8gZ2V0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM2OjQyLjUyNzQyMDkwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMjY0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX1RBQkxFU1xcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNjo0Mi41NzQ2NTE4MzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgyNzE2MTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcHJvY2Vzc2luZyB0aGUgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgbmV0ZmlsdGVyYCBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZC4gTGV0J3Mgc2VlLi4uIHRoZSBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIEFuZCBpZiBteSBtZW1vcnkgc2VydmVzLCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBmb3Igd2hhdCBJJ20gaW50ZXJlc3RlZCBpbiBzdGFydHMgYXJvdW5kIGxpbmUgNDU1LiBUaGF0J3MgYSByZWFzb25hYmxlIHBsYWNlIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBvcHRpb25zIGF2YWlsYWJsZSwgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIgd2l0aGluIHRoaXMgY29tcGxleCBmcmFtZXdvcmsuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgYGNvbmZpZ2Agc3RhdGVtZW50cywgYGRlcGVuZHMgb25gIGNsYXVzZXMsIGFuZCBtYXliZSBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMgdG8gZ3VpZGUgdGhlIGJ1aWxkIHByb2Nlc3MuIEhvcGVmdWxseSwgaXQncyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGNvbW1lbnRlZCBlbm91Z2ggdGhhdCBJIGNhbiBxdWlja2x5IGdyb2sgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgdmFyaW91cyBOZXRmaWx0ZXIgZmVhdHVyZXMgYW5kIG9wdGlvbnMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjAxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MzY6NDguNDAxODE3NjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTA6XFx0Y29uZmlnIE5FVEZJTFRFUl9TWU5QUk9YWVxcbiA0NTE6XFx0XFx0dHJpc3RhdGVcXG4gNDUyOlxcdFxcbiA0NTM6XFx0ZW5kaWYgIyBORl9DT05OVFJBQ0tcXG4gNDU0OlxcdFxcbiA0NTU6XFx0Y29uZmlnIE5GX1RBQkxFU1xcbiA0NTY6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuIDQ1NzpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiA0NTg6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgc3VwcG9ydFxcXCJcXG4gNDU5OlxcdFxcdGhlbHBcXG4gNDYwOlxcdFxcdCAgbmZ0YWJsZXMgaXMgdGhlIG5ldyBwYWNrZXQgY2xhc3NpZmljYXRpb24gZnJhbWV3b3JrIHRoYXQgaW50ZW5kcyB0b1xcbiA0NjE6XFx0XFx0ICByZXBsYWNlIHRoZSBleGlzdGluZyB7aXAsaXA2LGFycCxlYn1fdGFibGVzIGluZnJhc3RydWN0dXJlLiBJdFxcbiA0NjI6XFx0XFx0ICBwcm92aWRlcyBhIHBzZXVkby1zdGF0ZSBtYWNoaW5lIHdpdGggYW4gZXh0ZW5zaWJsZSBpbnN0cnVjdGlvbi1zZXRcXG4gNDYzOlxcdFxcdCAgKGFsc28ga25vd24gYXMgZXhwcmVzc2lvbnMpIHRoYXQgdGhlIHVzZXJzcGFjZSAnbmZ0JyB1dGlsaXR5XFxuIDQ2NDpcXHRcXHQgIChodHRwczovL3d3dy5uZXRmaWx0ZXIub3JnL3Byb2plY3RzL25mdGFibGVzKSB1c2VzIHRvIGJ1aWxkIHRoZVxcbiA0NjU6XFx0XFx0ICBydWxlLXNldC4gSXQgYWxzbyBjb21lcyB3aXRoIHRoZSBnZW5lcmljIHNldCBpbmZyYXN0cnVjdHVyZSB0aGF0XFxuIDQ2NjpcXHRcXHQgIGFsbG93cyB5b3UgdG8gY29uc3RydWN0IG1hcHBpbmdzIGJldHdlZW4gbWF0Y2hpbmdzIGFuZCBhY3Rpb25zXFxuIDQ2NzpcXHRcXHQgIGZvciBwZXJmb3JtYW5jZSBsb29rdXBzLlxcbiA0Njg6XFx0XFxuIDQ2OTpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDQ3MDpcXHRcXG4gNDcxOlxcdGlmIE5GX1RBQkxFU1xcbiA0NzI6XFx0Y29uZmlnIE5GX1RBQkxFU19JTkVUXFxuIDQ3MzpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gNDc0OlxcdFxcdHNlbGVjdCBORl9UQUJMRVNfSVBWNFxcbiA0NzU6XFx0XFx0c2VsZWN0IE5GX1RBQkxFU19JUFY2XFxuIDQ3NjpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG1peGVkIElQdjQvSVB2NiB0YWJsZXMgc3VwcG9ydFxcXCJcXG4gNDc3OlxcdFxcdGhlbHBcXG4gNDc4OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG1peGVkIElQdjQvSVB2NiBcXFwiaW5ldFxcXCIgdGFibGUuXFxuIDQ3OTpcXHRcXG4gNDgwOlxcdGNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxuIDQ4MTpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG4gNDgyOlxcdFxcdGhlbHBcXG4gNDgzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgXFxcIm5ldGRldlxcXCIgdGFibGUuXFxuIDQ4NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MzY6NDguNDAxOTMyODVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTQwMzYzMjUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBKb3VybmV5KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORl9UQUJMRVNgLiBJIGtub3cgaXQncyByZWxhdGVkIHRvIGBORVRGSUxURVJgLCB0aGF0J3MgYSBnaXZlbi4gTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gcGlucG9pbnQgZXhhY3RseSAqd2hlcmUqIGBORl9UQUJMRVNgIHJlc2lkZXMgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBcIkNvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cIiBtZW51LCBvciBwZXJoYXBzIGl0J3MgZ2F0ZWQgYmVoaW5kIGFuIGBpZiBORVRGSUxURVJgIGJsb2NrLiBUaGF0J3MgbXkgaW1tZWRpYXRlIGZvY3VzLlxuXG5UbyBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgYW5kIGZvciBhIGJyb2FkZXIgb3ZlcnZpZXcgb2YgdGhlIG5ldCBjb25maWd1cmF0aW9uIG92ZXJhbGwsIEkgc2hvdWxkIGFsc28gYnJpZWZseSBnbGFuY2UgYXQgYG5ldC9LY29uZmlnYCB0byBjb25maXJtIHRoZXJlIGFyZSBubyB1cHN0cmVhbSBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBwcm92aWRlIHNvbWUgaW1wb3J0YW50IGNvbnRleHQuIFRoaXMgd2lsbCBnaXZlIG1lIHdoYXQgSSBuZWVkIHRvIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk2NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MzY6NTcuODA1NTY3MjQzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTIyNTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTIzMT1jb25maWcgQlJJREdFX05FVEZJTFRFUlxcbi0tXFxubmV0L0tjb25maWctMjQ2LVxcbm5ldC9LY29uZmlnOjI0Nzpzb3VyY2UgXFxcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZy0yNDgtc291cmNlIFxcXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MzY6NTcuODc0Nzk3MTUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NjI1MTg2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipFeGFtaW5pbmcgS2NvbmZpZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIGJldHRlci4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpcyBoYXBwZW5pbmcgYXJvdW5kIGxpbmVzIDIzMCB0byAyNTAgaW4gYG5ldC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gcmlnaHQgbm93LiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIGRlZmluZWQsIHdoYXQgY29uZGl0aW9uYWxzIGFyZSBpbiBwbGF5LCBhbmQgaG93IHRoZXNlIG9wdGlvbnMgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2suIEhvcGVmdWxseSwgd2hhdGV2ZXIgSSdtIGxvb2tpbmcgZm9yIGlzIGluIHRoYXQgcmFuZ2UuIFRpbWUgdG8gZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMyNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM3OjAwLjQzNzMxODMwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMzA6XFx0XFxuIDIzMTpcXHRjb25maWcgQlJJREdFX05FVEZJTFRFUlxcbiAyMzI6XFx0XFx0dHJpc3RhdGUgXFxcIkJyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXFxcIlxcbiAyMzM6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gMjM0OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gMjM1OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDIzNjpcXHRcXHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG4gMjM3OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAyMzg6XFx0XFx0aGVscFxcbiAyMzk6XFx0XFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGxldCBhcnB0YWJsZXMgcmVzcC4gaXB0YWJsZXMgc2VlIGJyaWRnZWRcXG4gMjQwOlxcdFxcdCAgQVJQIHJlc3AuIElQIHRyYWZmaWMuIElmIHlvdSB3YW50IGEgYnJpZGdpbmcgZmlyZXdhbGwsIHlvdSBwcm9iYWJseVxcbiAyNDE6XFx0XFx0ICB3YW50IHRoaXMgb3B0aW9uIGVuYWJsZWQuXFxuIDI0MjpcXHRcXHQgIEVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIG9wdGlvbiBkb2Vzbid0IGVuYWJsZSBvciBkaXNhYmxlXFxuIDI0MzpcXHRcXHQgIGVidGFibGVzLlxcbiAyNDQ6XFx0XFxuIDI0NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI0NjpcXHRcXG4gMjQ3OlxcdHNvdXJjZSBcXFwibmV0L25ldGZpbHRlci9LY29uZmlnXFxcIlxcbiAyNDg6XFx0c291cmNlIFxcXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG4gMjQ5OlxcdHNvdXJjZSBcXFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxuIDI1MDpcXHRzb3VyY2UgXFxcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxuIDI1MTpcXHRcXG4gMjUyOlxcdGVuZGlmICMgaWYgTkVURklMVEVSXFxuIDI1MzpcXHRcXG4gMjU0OlxcdHNvdXJjZSBcXFwibmV0L3NjdHAvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6MDAuNDM3MzkwNzMyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzE3MjYzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGZpbHRlciBhbmQgTkZfVEFCTEVTIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgYE5FVEZJTFRFUmAgYW5kIGBORl9UQUJMRVNgIGNvbmZpZ3VyYXRpb25zLCBvYnZpb3VzbHkuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc2V0IGVsZW1lbnRzLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGZpdCBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZS4gQXJlIHRoZXkgY2FsbGVkIGRpcmVjdGx5PyBPciwgYXJlIHRoZXkgaW5kaXJlY3RseSBpbnZva2VkIHRocm91Z2ggZnVuY3Rpb25zIGxpa2UgYG5mdF9zZXRlbGVtX2luc2VydGAsIGBfX25mdF9zZXRlbGVtX2RlYWN0aXZhdGVgLCBgbmZfdGFibGVzX25ld3NldGVsZW1gLCBvciBgbmZfdGFibGVzX2RlbHNldGVsZW1gLCBvciBzb21lIG90aGVyIHBhdGg/IFRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGwgY2hhaW4sIEknbSBnb2luZyB0byBydW4gYSBgZ3JlcGAgb24gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCB0byBzZWUgd2hlcmUgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCBhcmUgYWN0dWFsbHkgYmVpbmcgdXNlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNzowMi44MDkxMjA2NjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTAwMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9zZXRlbGVtX2NhdGNoYWxsX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02NDc3PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fcGFyc2VfZGF0YShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjQ5Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2NDk3OnN0YXRpYyB2b2lkICpuZnRfc2V0ZWxlbV9jYXRjaGFsbF9nZXQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY0OTgtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY1MTg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9nZXQoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY1MjctXFx0fSBlbHNlIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2NTI4OlxcdFxcdHByaXYgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9nZXQoY3R4LVxcdTAwM2VuZXQsIHNldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUyOS1cXHRcXHRpZiAoIXByaXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTY5PXN0cnVjdCBuZnRfc2V0X2V4dCAqbmZ0X3NldF9jYXRjaGFsbF9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk4Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTg3OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTg4LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzAxNj1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDI0LVxcdGlmIChmbGFncyBcXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDI1OlxcdFxcdHJldCA9IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChuZXQsIHNldCwgZWxlbSwgZWxlbV9wcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDI2LVxcdGVsc2VcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwNjk9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1zX2FkZChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA4Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDg4OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA4OS1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzEyOD1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEzNC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEzNTpcXHRcXHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTM2LVxcdGVsc2VcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDEtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE0MjpzdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZXN0cm95KHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDMte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE0Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTQ4OnN0YXRpYyB2b2lkIG5mdF9zZXRlbGVtX2NhdGNoYWxsX3JlbW92ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE0OS1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE1NS1cXHRcXHRpZiAoY2F0Y2hhbGwtXFx1MDAzZWVsZW0gPT0gZWxlbV9wcml2KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE1NjpcXHRcXHRcXHRuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZXN0cm95KGNhdGNoYWxsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTU3LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzE2Mj1zdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9yZW1vdmUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE2Ni1cXHRpZiAobmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoc2V0LCBlbGVtX3ByaXYpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNjc6XFx0XFx0bmZ0X3NldGVsZW1fY2F0Y2hhbGxfcmVtb3ZlKG5ldCwgc2V0LCBlbGVtX3ByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNjgtXFx0ZWxzZVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA2Nzk9c3RydWN0IG5mdF90cmFuc19nYyAqbmZ0X3RyYW5zX2djX2NhdGNoYWxsX3N5bmMoc3RydWN0IG5mdF90cmFuc19nYyAqZ2MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDcwMC1cXHRcXHRuZnRfc2V0ZWxlbV9kYXRhX2RlYWN0aXZhdGUoZ2MtXFx1MDAzZW5ldCwgZ2MtXFx1MDAzZXNldCwgZWxlbV9wcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDcwMTpcXHRcXHRuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZXN0cm95KGNhdGNoYWxsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDcwMi1cXHRcXHRuZnRfdHJhbnNfZ2NfZWxlbV9hZGQoZ2MsIGVsZW1fcHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM3OjAyLjg1NDIyNTgxNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDI4MDg3MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBUYWJsZSBBUEkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgaXQncyB0b3VjaGluZyBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRob3NlIGFyZSBpbnRlcm5hbCwgc3RhdGljIGZ1bmN0aW9ucywgcmVzaWRpbmcgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gR2l2ZW4gdGhlaXIgbmFtaW5nIGFuZCBsb2NhdGlvbiwgdGhlc2UgYXJlIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgTmV0ZmlsdGVyIHRhYmxlIEFQSSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gb2Ygc2V0IGVsZW1lbnRzLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiB3aGF0IGFyZSB0aGUgY2FsbCBzaXRlcyBmb3IgdGhlIG5vbiBcImNhdGNoYWxsXCIgdmVyc2lvbnMgb2YgdGhlc2UgZnVuY3Rpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbm9ybWFsIG9wZXJhdGlvbiBiZWZvcmUgSSBjYW4gcHJvcGVybHkgYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIHRyYWNlIGNhbGxzIHRvIGBuZnRfc2V0ZWxlbV9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZWAgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgZXhpc3RpbmcgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gcGF0aHMgaXMgY3JpdGljYWwgZm9yIGZpZ3VyaW5nIG91dCBob3cgdGhlIHBhdGNoIGFsdGVycyB0aGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjQzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6MDYuODgyMzE1OTExWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTk4MjIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfc2V0ZWxlbV8oaW5zZXJ0fGRlYWN0aXZhdGUpXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Njk4Nz1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDE1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwMTY6c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMTctXFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwODg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMTAtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzExMTpzdGF0aWMgaW50IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzExMi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMjctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEyODpzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMjktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEzNi1cXHRlbHNlXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEzNzpcXHRcXHRyZXQgPSBfX25mdF9zZXRlbGVtX2RlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MjQ5PXN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzU3MS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3NTcyOlxcdGVyciA9IG5mdF9zZXRlbGVtX2luc2VydChjdHgtXFx1MDAzZW5ldCwgc2V0LCBcXHUwMDI2ZWxlbSwgXFx1MDAyNmVsZW1fcHJpdiwgZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1NzMtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzgyOT1zdGF0aWMgaW50IG5mdF9kZWxfc2V0ZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzkwMS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3OTAyOlxcdGVyciA9IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY3R4LVxcdTAwM2VuZXQsIHNldCwgXFx1MDAyNmVsZW0sIGZsYWdzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTAzLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNzowNi45NTgzMDI1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNTIzMzEwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIG5mdGFibGVzIENhdGNoYWxsIEVsZW1lbnQgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBwYXRjaCBpbXBhY3RzIG5mdGFibGVzLCBzcGVjaWZpY2FsbHkgdGhlIGNhdGNoYWxsIGVsZW1lbnQgaGFuZGxpbmcuIEkgc2VlIHRoYXQgdGhlIGNvcmUgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBUaGVzZSBhcmUgc3RhdGljIEMgZnVuY3Rpb25zIHdpdGhpbiBgbmZfdGFibGVzX2FwaS5jYCwgc28gd2hpbGUgdGhleSBtaWdodCBiZSBpbmxpbmVkIGluIHNvbWUgc2NlbmFyaW9zLCB0aGV5IGFyZSBkaXJlY3RseSBtb2RpZmllZC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgKmFyZSB0aGVzZSBmdW5jdGlvbnMgd29ydGggdGFyZ2V0aW5nIGZvciBmdXp6aW5nPyogSSB0aGluayB0aGV5IGFyZS4gTXkgbG9naWMgaXMgdGhhdCBgbmZ0X2FkZF9zZXRfZWxlbWAgYW5kIGBuZnRfZGVsX3NldGVsZW1gIGNhbGwgdGhlc2UgZnVuY3Rpb25zLiBUaGVyZWZvcmUsIGJvdGggYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCBhcmUgbGlrZWx5IGVudHJ5IHBvaW50cyB0byBjb25zaWRlci5cblxuQ29uc2lkZXJpbmcgRm9jdXNTeW1ib2xzLCBJIGNhbiBpbmNsdWRlIGJvdGggYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCwgaW4gYWRkaXRpb24gdG8gYG5mdF9hZGRfc2V0X2VsZW1gIGFuZCBgbmZ0X2RlbF9zZXRlbGVtYCwgaW4gbXkgZnV6emluZyB0YXJnZXQgbGlzdC4gVGhpcyBpcyBsb2dpY2FsIGJlY2F1c2UgZXZlbiBpZiB0aGVzZSBhcmUgc3RhdGljLCB0aGV5IGhhdmUgc3ltYm9scyBhbmQgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLlxuXG5Ob3csIGxldCdzIGVzdGFibGlzaCByZWFjaGFiaWxpdHkuIFRoZSBuZXRsaW5rIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IG1lc3NhZ2VzIGxpa2UgYE5GVF9NU0dfTkVXU0VURUxFTWAgYW5kIGBORlRfTVNHX0RFTFNFVEVMRU1gLCBhbGxvd3MgZnVsbHkgcmVhY2hhYmxlIGNvZGUuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdW5wcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlcyBhbmQgbmV0d29yayBuYW1lc3BhY2VzLCBvciByb290IGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3Igc3l6a2FsbGVyLiBTaW5jZSBORl9UQUJMRVMgaXMgc3RhbmRhcmQgbmV0bGluayBuZXR3b3JraW5nIGNvZGUgaW4gY29yZSBuZXRmaWx0ZXIsIGl0IGlzIGhpZ2hseSBhY2Nlc3NpYmxlLlxuXG5JcyB0aGlzIHBhdGNoICpXb3J0aEZ1enppbmcqPyBBYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNldCBlbGVtZW50IGxvb2t1cCwgaW5zZXJ0aW9uLCBhbmQgZGVhY3RpdmF0aW9uIGxvZ2ljIGZvciBjYXRjaGFsbCBlbGVtZW50cyB3aXRoIHRpbWVvdXRzIHVzaW5nIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKWAuIFRoaXMgaXMgZnVsbHkgcmVhY2hhYmxlIG5ldGZpbHRlciBjb2RlIHRoYXQgaGFuZGxlcyB1c2VyIHJlcXVlc3RzIG92ZXIgbmV0bGluayAobmZuZXRsaW5rKS5cblxuRmluYWxseSwgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBzdHJhaWdodGZvcndhcmQ6IGBDT05GSUdfTkVURklMVEVSYCBhbmQgYENPTkZJR19ORl9UQUJMRVNgLiBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIHRvcC1sZXZlbCBuZXRsaW5rIGNhbGxiYWNrIGhhbmRsZXJzIGZvciBgTkZUX01TR19ORVdTRVRFTEVNYCBhbmQgYE5GVF9NU0dfREVMU0VURUxFTWAgd2hpY2ggYXJlIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAgYW5kIGBuZl90YWJsZXNfZGVsc2V0ZWxlbWAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY3MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNzoxMi4wMTA2MzY1MDFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDQ1NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX3RhYmxlc19uZXdzZXRlbGVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDk9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjY3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc2Njg6c3RhdGljIGludCBuZl90YWJsZXNfbmV3c2V0ZWxlbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc2NjktXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTk5Mzk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIG5mX3RhYmxlc19jYltORlRfTVNHX01BWF0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA0Mi1cXHRbTkZUX01TR19ORVdTRVRFTEVNXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDA0MzpcXHRcXHQuY2FsbFxcdFxcdD0gbmZfdGFibGVzX25ld3NldGVsZW0sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNDQtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM3OjEyLjA1NTA4NzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc0NzY3ODY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBcInRob3VnaHRzXCIgeW91J3ZlIGdpdmVuIG1lLCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGxpa2UgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgYG5mX3RhYmxlc19kZWxzZXRlbGVtYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBuZl90YWJsZXNfZGVsc2V0ZWxlbWAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyB0byByYWNlIGEgYml0LiBgbmZfdGFibGVzYC4uLiB0aGF0J3MgTmV0ZmlsdGVyIHRhYmxlcywgdGhlIG5ld2VyLCBtb3JlIHZlcnNhdGlsZSBwYWNrZXQgZmlsdGVyaW5nIGFuZCBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24gZnJhbWV3b3JrIGluIHRoZSBMaW51eCBrZXJuZWwuIEFuZCBgZGVsc2V0ZWxlbWAuLi4gdGhhdCdzIGdvdCB0byBiZSBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gZGVsZXRpbmcgZWxlbWVudHMgZnJvbSBhIHNldCB3aXRoaW4gYSB0YWJsZS4gSXQncyBwcm9iYWJseSBhIGNvcmUgZnVuY3Rpb24sIGNyaXRpY2FsIGZvciB0aGUgZHluYW1pYyBuYXR1cmUgb2YgdGhlc2UgZmlyZXdhbGxzLlxuXG5NeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmU6IFdoYXQncyB0aGUgY29udGV4dD8gV2hhdCB0cmlnZ2VyZWQgdGhpcyBuZWVkIHRvIGNoZWNrIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24/IEFyZSB3ZSBkZWJ1Z2dpbmcgYSBwcm9ibGVtLCBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlLCBvciBqdXN0IHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBpbm5lciB3b3JraW5ncyBiZXR0ZXI/IFRoZSBzcGVjaWZpY3MgbWF0dGVyLiBXaXRob3V0IGNvbnRleHQsIEknZCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgZGl2ZSBpbnRvIHRoZSByZWxldmFudCBzb3VyY2UgY29kZSwgbWF5YmUgYnJvd3NpbmcgdGhlIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbSBkaXJlY3RvcnkgYW5kIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIEknZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQg4oCTIHRoZSBgbmZ0X3NldGAgc3RydWN0dXJlLCBhbnkgZWxlbWVudCByZXByZXNlbnRhdGlvbnMgKGxpa2UgYG5mdF9zZXRfZWxlbWApLCBhbmQgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5LiBBbnkgY29kZSByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gaXMgYWx3YXlzIG9mIGludGVyZXN0IHRvbywgbG9va2luZyBmb3IgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciB2dWxuZXJhYmlsaXRpZXMuXG5cbkknZCBhbHNvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24uIEEgYnVnZ3kgYGRlbHNldGVsZW1gIGNvdWxkIGxlYWQgdG8gc2VyaW91cyBpc3N1ZXM6IGluY29ycmVjdCBmaXJld2FsbCBiZWhhdmlvciAoYWxsb3dpbmcgb3IgYmxvY2tpbmcgdGhlIHdyb25nIHRyYWZmaWMpLCBtZW1vcnkgY29ycnVwdGlvbiwgZGVuaWFsIG9mIHNlcnZpY2UgKGlmIGVsZW1lbnRzIGFyZSBkZWxldGVkIGF0IHRoZSB3cm9uZyB0aW1lIG9yIG5vdCBhdCBhbGwpLCBvciBldmVuIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyAoaWYgYW4gYXR0YWNrZXIgY291bGQgbWFuaXB1bGF0ZSB0aGUgc2V0IGNvbnRlbnRzKS4gU28sIGEgZ29vZCBjaGVjayB3b3VsZCBpbnZvbHZlIHJldmlld2luZyBub3QganVzdCB0aGUgZnVuY3Rpb24gaXRzZWxmLCBidXQgYWxzbyBob3cgaXQncyBjYWxsZWQsIGFuZCB3aGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQuIEknZCBkZWZpbml0ZWx5IGJlIGludGVyZXN0ZWQgaW4gc2VlaW5nIHRoZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtaWdodCBjYWxsIGBuZl90YWJsZXNfZGVsc2V0ZWxlbWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTA3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6MTUuODAyNzY4NDEyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUyMzk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl90YWJsZXNfZGVsc2V0ZWxlbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03OTkxPXN0YXRpYyBpbnQgbmZ0X3NldF9mbHVzaChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LCB1OCBnZW5tYXNrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwOC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4MDA5OnN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbHNldGVsZW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04MDEwLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05OTM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZl90YWJsZXNfY2JbTkZUX01TR19NQVhdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjAtXFx0W05GVF9NU0dfREVMU0VURUxFTV0gPSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAwNjE6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mX3RhYmxlc19kZWxzZXRlbGVtLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDYyLVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX0JBVENILFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjYtXFx0W05GVF9NU0dfREVTVFJPWVNFVEVMRU1dID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDY3OlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfZGVsc2V0ZWxlbSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA2OC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6MTUuODQ5Mjk2OTQxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MTA0MzM4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJpYWdlIFZlcmlmaWNhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJ3ZlIGNvdmVyZWQgb3VyIGJhc2VzIG9uIHRoaXMgdHJpYWdlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgbG9va3Mgc29saWQ7IHdlJ3JlIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIGEgZnV6emluZyB0YXJnZXQuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLCBhbmQgZm9yIGdvb2QgcmVhc29uLiBUaGUgcmVhc29uaW5nIGJlaGluZCBpdCBpcyBzb3VuZDogdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGFyb3VuZCBpbiB0aGUgbmZ0YWJsZXMgaW50ZXJuYWxzLCBzcGVjaWZpY2FsbHkgdHdlYWtpbmcgdGhlIGxvZ2ljIGFyb3VuZCBjYXRjaC1hbGwgc2V0IGVsZW1lbnQgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24uIFdlJ3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25zIGxpa2UgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBhZmZlY3RzIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgZXhwaXJlZCBlbGVtZW50cyBiZWZvcmUgZGVjaWRpbmcgaWYgdGhleSBhcmUgYWN0aXZlL21hdGNoaW5nLlxuXG5UaGUgY3JpdGljYWwgYml0IGlzIHRoYXQgdGhpcyBjb2RlIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIHNwZWNpZmljYWxseSB0aHJvdWdoIGBORlRfTVNHX05FV1NFVEVMRU1gLCBgTkZUX01TR19ERUxTRVRFTEVNYCwgYW5kIGBORlRfTVNHX0RFU1RST1lTRVRFTEVNYC4gVGhhdCdzIGEgY2xhc3NpYyBmdXp6aW5nIHRhcmdldCBzY2VuYXJpbyByaWdodCB0aGVyZSDigJMgYW55IHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlc2UgZnVuY3Rpb25zIGNvdWxkIGJlIGV4cGxvaXRlZCByZW1vdGVseS4gVGhlcmVmb3JlLCBpdCdzIGFic29sdXRlbHkgd29ydGggb3VyIHRpbWUgdG8gdGhyb3cgZXZlcnl0aGluZyB3ZSd2ZSBnb3QgYXQgdGhpcyB0byB2ZXJpZnkgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucywgbGlmZXRpbWUgbWFuYWdlbWVudCwgYW5kIGNvbmN1cnJlbmN5IGhhbmRsaW5nLiBUaGVzZSBhcmUga2V5IGFyZWFzIGluIHRoZSBuZnRhYmxlcyBjb2RlIGJhc2UuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BvdCBvbiwgaGlnaGxpZ2h0aW5nIHRoZSBjcml0aWNhbCBmdW5jdGlvbnM6IGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgLCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAsIGBuZnRfYWRkX3NldF9lbGVtYCwgYG5mdF9kZWxfc2V0ZWxlbWAsIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAsIGFuZCBgbmZfdGFibGVzX2RlbHNldGVsZW1gLiBUaGVzZSBhcmUgYWxsIHBhcnQgb2YgdGhlIHJlbGV2YW50IGNhbGwtY2hhaW4gYW5kIHdvdWxkIGJlIHRoZSBvbmVzIHRvIG9ic2VydmUgY2FyZWZ1bGx5LlxuXG5GaW5hbGx5LCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBORVRGSUxURVJgIGFuZCBgTkZfVEFCTEVTYCBhcmUgdGhlIGNydWNpYWwgb25lcy5cblxuV2l0aCB0aGlzIHJldmlldywgSSdtIGNvbmZpZGVudCBpbiB0aGUgdHJpYWdlLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTc4LCJPdXRwdXRUb2tlbnMiOjIwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNzoyMC40NTk3MzQxOTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDEwODc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRcIixcbiAgICBcIm5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVcIixcbiAgICBcIm5mdF9hZGRfc2V0X2VsZW1cIixcbiAgICBcIm5mdF9kZWxfc2V0ZWxlbVwiLFxuICAgIFwibmZfdGFibGVzX25ld3NldGVsZW1cIixcbiAgICBcIm5mX3RhYmxlc19kZWxzZXRlbGVtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgbmZ0YWJsZXMgY2F0Y2gtYWxsIHNldCBlbGVtZW50IGhhbmRsaW5nIGluIG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydCBhbmQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSB0byBhY2NvdW50IGZvciBleHBpcmVkIHNldCBlbGVtZW50cy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgbmV0bGluayBtZXNzYWdlcyAoTkZUX01TR19ORVdTRVRFTEVNIGFuZCBORlRfTVNHX0RFTFNFVEVMRU0pIGFuZCBtb2RpZnkgc3RhdGUgdmFsaWRhdGlvbiBhbmQgZWxlbWVudCBkZWFjdGl2YXRpb24gbG9naWMsIG1ha2luZyBpdCB2YWx1YWJsZSB0byBmdXp6IGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMsIGxpZmV0aW1lIGlzc3Vlcywgb3IgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0XCIsXG4gICAgXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlXCIsXG4gICAgXCJuZnRfYWRkX3NldF9lbGVtXCIsXG4gICAgXCJuZnRfZGVsX3NldGVsZW1cIixcbiAgICBcIm5mX3RhYmxlc19uZXdzZXRlbGVtXCIsXG4gICAgXCJuZl90YWJsZXNfZGVsc2V0ZWxlbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIG5mdGFibGVzIGNhdGNoLWFsbCBzZXQgZWxlbWVudCBoYW5kbGluZyBpbiBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQgYW5kIG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUgdG8gYWNjb3VudCBmb3IgZXhwaXJlZCBzZXQgZWxlbWVudHMuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0ZmlsdGVyIG5ldGxpbmsgbWVzc2FnZXMgKE5GVF9NU0dfTkVXU0VURUxFTSBhbmQgTkZUX01TR19ERUxTRVRFTEVNKSBhbmQgbW9kaWZ5IHN0YXRlIHZhbGlkYXRpb24gYW5kIGVsZW1lbnQgZGVhY3RpdmF0aW9uIGxvZ2ljLCBtYWtpbmcgaXQgdmFsdWFibGUgdG8gZnV6eiBmb3IgcG90ZW50aWFsIHJlZ3Jlc3Npb25zLCBsaWZldGltZSBpc3N1ZXMsIG9yIHJhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6MjAuNTQzODQ5OTk4WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDUwODU5MDI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM3OjIwLjU0NDQ1Mzg0OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0NTA3OTgxMjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIG5mdGFibGVzIGNhdGNoYWxsIHNldCBlbGVtZW50IGhhbmRsaW5nIGluIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAgdG8gY2hlY2sgd2hldGhlciBhbiBleGlzdGluZyBjYXRjaGFsbCBlbGVtZW50IGhhcyBleHBpcmVkIHVzaW5nIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKClgIGFuZCB0aW1lc3RhbXBzIG9idGFpbmVkIHZpYSBgZ2V0X2ppZmZpZXNfNjQoKWAuXFxuXFxuLSAqKktNU0FOIGFwcGxpY2FiaWxpdHkqKjogS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoaGVhcCwgc3RhY2ssIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIHBhdGNoIGluaXRpYWxpemVzIGxvY2FsIGB1NjQgdHN0YW1wYCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgZ2V0X2ppZmZpZXNfNjQoKWAgYW5kIGNoZWNrcyBleGlzdGluZywgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZXh0ZW5zaW9uIGF0dHJpYnV0ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuXFxuLSAqKktBU0FOIGFwcGxpY2FiaWxpdHkqKjogS0FTQU4sIHRvZ2V0aGVyIHdpdGggc3RhbmRhcmQgZGVidWcgdG9vbHMsIGlzIGFwcHJvcHJpYXRlIGZvciBjYXRjaGluZyBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZG91YmxlLWZyZWUgaXNzdWVzIHJlbGF0ZWQgdG8gc2V0IGVsZW1lbnQgbGlmZWN5Y2xlcyBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uLlxcblxcblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg0ZmI5ODFlYzE2NGM1ZDU5M2Q4ZjQwZTIyNjhmOGJlZGVmMDBjNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwODozNjoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IDc2NWE5MmZhOTBkNjIuLjBmMzQ0OWNjYTVkMjcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC02OTkxLDExICs2OTkxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbiBcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7XG4rXHR1NjQgdHN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTtcbiBcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbiBcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xuLVx0XHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spKSB7XG4rXHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcbiBcdFx0XHQqcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG4gXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRcdH1cbkBAIC03MDg4LDExICs3MDkwLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pXG4ge1xuIFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG4rXHR1NjQgdHN0YW1wID0gZ2V0X2ppZmZpZXNfNjQoKTtcbiBcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbiBcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xuLVx0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkpXG4rXHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxuK1x0XHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGtmcmVlKGVsZW0tXHUwMDNlcHJpdik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNzoyMC41NDQ0NTUwODhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ2NjIxNjE5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBOZWVkcyBvZiBUaGlzIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHVzZXIgaXMgZXNzZW50aWFsbHkgYXNraW5nIGZvciBhIGNvZGUgcmV2aWV3IHdpdGggYSBzcGVjaWZpYyBmb2N1cyBvbiBtZW1vcnkgc2FmZXR5LCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nIHRvIGJlIHByb2FjdGl2ZSBhYm91dC4gTXkgZmlyc3Qgc3RlcCBpcyBhIHF1aWNrIHNhZmV0eSBjaGVjaywganVzdCB0byBiZSBzdXJlIHRoZXJlJ3Mgbm90aGluZyBvdmVydGx5IHJpc2t5IGhlcmUuIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHRoaXMgaXMgYSBjb2RlIGFuYWx5c2lzIHJlcXVlc3QsIG5vdCBhbiBleHBsb2l0IGF0dGVtcHQgb3Igc29tZXRoaW5nIG1hbGljaW91cy4gSXQncyBhYm91dCBwcm9hY3RpdmUgZGVidWdnaW5nIGFuZCBmdXp6aW5nIHRyaWFnZS4gQmVuaWduLCBsb3cgc2V2ZXJpdHkgLSB3ZSdyZSBnb29kIHRvIHByb2NlZWQuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIFRoZSBrZXkgaGVyZSBpcyB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uLiBJJ2xsIG5lZWQgdG8gdXNlIGVpdGhlciBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgd2l0aGluIHRoYXQgZmlsZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHNjcmVhbXMgXCJtZW1vcnkgdW5zYWZldHlcIiAtIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBidWZmZXIgb3ZlcmZsb3dzLCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgdGhhdCBzb3J0IG9mIHRoaW5nLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGUgY2hhbmdlcyBpbiB0aGUgcGF0Y2gsIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvZGUgc2VjdGlvbiwgaW50cm9kdWNlIG5ldyByaXNrcyB0aGF0IGFyZSBiZXN0IGFkZHJlc3NlZCB3aXRoIHRoZSBmb2N1c2VkIHNjcnV0aW55IG9mIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDE3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6MzUuMjA2NjIwNzQ5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTg1LFxuICBcIkxpbmVDb3VudFwiOiAxMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjk4NTpcXHR9XFxuNjk4NjpcXHRcXG42OTg3OlxcdHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG42OTg4OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjY5ODk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0sXFxuNjk5MDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9lbGVtX3ByaXYgKipwcml2KVxcbjY5OTE6XFx0e1xcbjY5OTI6XFx0XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxuNjk5MzpcXHRcXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xcbjY5OTQ6XFx0XFx0dTY0IHRzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7XFxuNjk5NTpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG42OTk2OlxcdFxcbjY5OTc6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xcbjY5OTg6XFx0XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG42OTk5OlxcdFxcdFxcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXFx1MDAyNlxcdTAwMjZcXG43MDAwOlxcdFxcdFxcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcXG43MDAxOlxcdFxcdFxcdFxcdCpwcml2ID0gY2F0Y2hhbGwtXFx1MDAzZWVsZW07XFxuNzAwMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG43MDAzOlxcdFxcdFxcdH1cXG43MDA0OlxcdFxcdH1cXG43MDA1OlxcdFxcbjcwMDY6XFx0XFx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuNzAwNzpcXHRcXHRpZiAoIWNhdGNoYWxsKVxcbjcwMDg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNzAwOTpcXHRcXG43MDEwOlxcdFxcdGNhdGNoYWxsLVxcdTAwM2VlbGVtID0gZWxlbS1cXHUwMDNlcHJpdjtcXG43MDExOlxcdFxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZjYXRjaGFsbC1cXHUwMDNlbGlzdCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCk7XFxuNzAxMjpcXHRcXG43MDEzOlxcdFxcdHJldHVybiAwO1xcbjcwMTQ6XFx0fVxcbjcwMTU6XFx0XFxuNzAxNjpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNzAxNzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcwMTg6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcXG43MDE5OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZnRfZWxlbV9wcml2ICoqZWxlbV9wcml2LFxcbjcwMjA6XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGZsYWdzKVxcbjcwMjE6XFx0e1xcbjcwMjI6XFx0XFx0aW50IHJldDtcXG43MDIzOlxcdFxcbjcwMjQ6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxcbjcwMjU6XFx0XFx0XFx0cmV0ID0gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KG5ldCwgc2V0LCBlbGVtLCBlbGVtX3ByaXYpO1xcbjcwMjY6XFx0XFx0ZWxzZVxcbjcwMjc6XFx0XFx0XFx0cmV0ID0gc2V0LVxcdTAwM2VvcHMtXFx1MDAzZWluc2VydChuZXQsIHNldCwgZWxlbSwgZWxlbV9wcml2KTtcXG43MDI4OlxcdFxcbjcwMjk6XFx0XFx0cmV0dXJuIHJldDtcXG43MDMwOlxcdH1cXG43MDMxOlxcdFxcbjcwMzI6XFx0c3RhdGljIGJvb2wgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDMzOlxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxcbjcwMzQ6XFx0e1xcbjcwMzU6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbV9wcml2KTtcXG43MDM2OlxcdFxcbjcwMzc6XFx0XFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0ZMQUdTKSBcXHUwMDI2XFx1MDAyNlxcbjcwMzg6XFx0XFx0ICAgICpuZnRfc2V0X2V4dF9mbGFncyhleHQpIFxcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxcbjcwMzk6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNzA0MDpcXHRcXG43MDQxOlxcdFxcdHJldHVybiBmYWxzZTtcXG43MDQyOlxcdH1cXG43MDQzOlxcdFxcbjcwNDQ6XFx0c3RhdGljIHZvaWQgbmZ0X3NldGVsZW1fYWN0aXZhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcwNDU6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfZWxlbV9wcml2ICplbGVtX3ByaXYpXFxuNzA0NjpcXHR7XFxuNzA0NzpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtX3ByaXYpO1xcbjcwNDg6XFx0XFxuNzA0OTpcXHRcXHRpZiAobmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoc2V0LCBlbGVtX3ByaXYpKSB7XFxuNzA1MDpcXHRcXHRcXHRuZnRfY2xlYXIobmV0LCBleHQpO1xcbjcwNTE6XFx0XFx0fSBlbHNlIHtcXG43MDUyOlxcdFxcdFxcdHNldC1cXHUwMDNlb3BzLVxcdTAwM2VhY3RpdmF0ZShuZXQsIHNldCwgZWxlbV9wcml2KTtcXG43MDUzOlxcdFxcdH1cXG43MDU0OlxcdH1cXG43MDU1OlxcdFxcbjcwNTY6XFx0c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzA1NzpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfdHJhbnNfb25lX2VsZW0gKmVsZW0pXFxuNzA1ODpcXHR7XFxuNzA1OTpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtLVxcdTAwM2Vwcml2KTtcXG43MDYwOlxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfZWxlbV91cGRhdGUgKnVwZGF0ZSA9IGVsZW0tXFx1MDAzZXVwZGF0ZTtcXG43MDYxOlxcdFxcbjcwNjI6XFx0XFx0aWYgKHVwZGF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfVFJBTlNfVVBEX1RJTUVPVVQpXFxuNzA2MzpcXHRcXHRcXHRXUklURV9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cXHUwMDNldGltZW91dCwgdXBkYXRlLVxcdTAwM2V0aW1lb3V0KTtcXG43MDY0OlxcdFxcbjcwNjU6XFx0XFx0aWYgKHVwZGF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfVFJBTlNfVVBEX0VYUElSQVRJT04pXFxuNzA2NjpcXHRcXHRcXHRXUklURV9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cXHUwMDNlZXhwaXJhdGlvbiwgZ2V0X2ppZmZpZXNfNjQoKSArIHVwZGF0ZS1cXHUwMDNlZXhwaXJhdGlvbik7XFxuNzA2NzpcXHR9XFxuNzA2ODpcXHRcXG43MDY5OlxcdHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19hZGQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG43MDcwOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZnRfdHJhbnNfZWxlbSAqdGUpXFxuNzA3MTpcXHR7XFxuNzA3MjpcXHRcXHRpbnQgaTtcXG43MDczOlxcdFxcbjcwNzQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlLVxcdTAwM2VuZWxlbXM7IGkrKykge1xcbjcwNzU6XFx0XFx0XFx0c3RydWN0IG5mdF90cmFuc19vbmVfZWxlbSAqZWxlbSA9IFxcdTAwMjZ0ZS1cXHUwMDNlZWxlbXNbaV07XFxuNzA3NjpcXHRcXG43MDc3OlxcdFxcdFxcdGlmIChlbGVtLVxcdTAwM2V1cGRhdGUpXFxuNzA3ODpcXHRcXHRcXHRcXHRuZnRfdHJhbnNfZWxlbV91cGRhdGUodGUtXFx1MDAzZXNldCwgZWxlbSk7XFxuNzA3OTpcXHRcXHRcXHRlbHNlXFxuNzA4MDpcXHRcXHRcXHRcXHRuZnRfc2V0ZWxlbV9hY3RpdmF0ZShjdHgtXFx1MDAzZW5ldCwgdGUtXFx1MDAzZXNldCwgZWxlbS1cXHUwMDNlcHJpdik7XFxuNzA4MTpcXHRcXG43MDgyOlxcdFxcdFxcdG5mX3RhYmxlc19zZXRlbGVtX25vdGlmeShjdHgsIHRlLVxcdTAwM2VzZXQsIGVsZW0tXFx1MDAzZXByaXYsXFxuNzA4MzpcXHRcXHRcXHRcXHRcXHRcXHQgTkZUX01TR19ORVdTRVRFTEVNKTtcXG43MDg0OlxcdFxcdFxcdGtmcmVlKGVsZW0tXFx1MDAzZXVwZGF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM3OjM1LjIwNzMxMjMyOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzk3Mjg2NTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlbHZpbmcgRGVlcGVyOiBJbnZlc3RpZ2F0aW5nIFNldCBFbGVtZW50IERlYWN0aXZhdGlvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3ZlIGdvdCBhIGdvb2QgZ3Jhc3Agb24gdGhlIG92ZXJhbGwgcGljdHVyZSwgYnV0IGxldCdzIHNoYXJwZW4gb3VyIGZvY3VzLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCBhbmQgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWRgLiBUaGVzZSBhcmUgY3JpdGljYWwgcGllY2VzLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgaG93IHN0YWxlIGVsZW1lbnRzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIHNldCBzdHJ1Y3R1cmVzLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2F0Y2gtYWxsIGRlYWN0aXZhdGlvbiBmdW5jdGlvbiB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBleHBpcmF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBhbmFseXplIGhvdyBhbiBlbGVtZW50IGdldHMgbWFya2VkIGZvciBkZWFjdGl2YXRpb24gYW5kIHdoYXQgdGhlIHRyaWdnZXIgaXMuIElzIGl0IHRoZSBleHBsaWNpdCBjYWxsLCBvciBkb2VzIHRoaXMgaW50ZXJwbGF5IHdpdGggdGhlIGFnaW5nIG9mIGVsZW1lbnRzPyBJIHNob3VsZCBiZSBleGFtaW5pbmcgaWYgdGhpcyBpcyBhIHRpbWUtYmFzZWQgbWVjaGFuaXNtLCBhIHVzYWdlIGNvdW50LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGVhY2ggZnVuY3Rpb24gY2FsbC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSSBzdXNwZWN0IHRoYXQgdW5kZXJzdGFuZGluZyB0aGVpciBpbnRlcmFjdGlvbiB3aWxsIHVuY292ZXIgc3VidGxlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvciBwb3RlbnRpYWwgZWRnZSBjYXNlcyByZWxhdGVkIHRvIGdhcmJhZ2UgY29sbGVjdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgaW50ZXJuYWwgbWVjaGFuaWNzIG9mIE5ldGZpbHRlciB3b3JrLCBhbmQsIEkgYmVsaWV2ZSwgd2lsbCBoYXZlIHRoZSBtb3N0IGJlbmVmaXQgaW4gb3B0aW1pemluZyB0aGUgcGVyZm9ybWFuY2Ugb2YgbGFyZ2VyIHNldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjM3OjM4LjAwNDYwMjUxNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcwODA6XFx0XFx0XFx0XFx0bmZ0X3NldGVsZW1fYWN0aXZhdGUoY3R4LVxcdTAwM2VuZXQsIHRlLVxcdTAwM2VzZXQsIGVsZW0tXFx1MDAzZXByaXYpO1xcbjcwODE6XFx0XFxuNzA4MjpcXHRcXHRcXHRuZl90YWJsZXNfc2V0ZWxlbV9ub3RpZnkoY3R4LCB0ZS1cXHUwMDNlc2V0LCBlbGVtLVxcdTAwM2Vwcml2LFxcbjcwODM6XFx0XFx0XFx0XFx0XFx0XFx0IE5GVF9NU0dfTkVXU0VURUxFTSk7XFxuNzA4NDpcXHRcXHRcXHRrZnJlZShlbGVtLVxcdTAwM2V1cGRhdGUpO1xcbjcwODU6XFx0XFx0fVxcbjcwODY6XFx0fVxcbjcwODc6XFx0XFxuNzA4ODpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcwODk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDkwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pXFxuNzA5MTpcXHR7XFxuNzA5MjpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcXG43MDkzOlxcdFxcdHU2NCB0c3RhbXAgPSBnZXRfamlmZmllc182NCgpO1xcbjcwOTQ6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuNzA5NTpcXHRcXG43MDk2OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG43MDk3OlxcdFxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxuNzA5ODpcXHRcXHRcXHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcXG43MDk5OlxcdFxcdFxcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcXG43MTAwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjcxMDE6XFx0XFxuNzEwMjpcXHRcXHRcXHRrZnJlZShlbGVtLVxcdTAwM2Vwcml2KTtcXG43MTAzOlxcdFxcdFxcdGVsZW0tXFx1MDAzZXByaXYgPSBjYXRjaGFsbC1cXHUwMDNlZWxlbTtcXG43MTA0OlxcdFxcdFxcdG5mdF9zZXRfZWxlbV9jaGFuZ2VfYWN0aXZlKG5ldCwgc2V0LCBleHQpO1xcbjcxMDU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzEwNjpcXHRcXHR9XFxuNzEwNzpcXHRcXG43MTA4OlxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjcxMDk6XFx0fVxcbjcxMTA6XFx0XFxuNzExMTpcXHRzdGF0aWMgaW50IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNzExMjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MTEzOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxcbjcxMTQ6XFx0e1xcbjcxMTU6XFx0XFx0dm9pZCAqcHJpdjtcXG43MTE2OlxcdFxcbjcxMTc6XFx0XFx0cHJpdiA9IHNldC1cXHUwMDNlb3BzLVxcdTAwM2VkZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcXG43MTE4OlxcdFxcdGlmICghcHJpdilcXG43MTE5OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNzozOC4wMDU3NDgzMzVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE3NzUwMTI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSB0aGluaywgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLCBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBkZWVwbHkgaW50ZXJ0d2luZWQgd2l0aCBleHBpcmluZyBlbGVtZW50cyB3aXRoaW4gYW4gTkZUIHNldC4gSSBpbWFnaW5lIGl0J3MgY3J1Y2lhbCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgZW5mb3JjaW5nIHBvbGljaWVzLCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyB3aGVyZSBzZXRzIGFyZSB1c2VkIGZvciByYXRlIGxpbWl0aW5nLCBhY2Nlc3MgY29udHJvbCwgb3IgY2FjaGluZy4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIGFzcGVjdHMgSSBzaG91bGQgZm9jdXMgb24/IFRoZSBjcml0aWNhbCBwYXJ0cyB3aWxsIHVuZG91YnRlZGx5IGludm9sdmUgaG93IHRoZSBmdW5jdGlvbiBpZGVudGlmaWVzIGVsZW1lbnRzIHRvIGV4cGlyZS4gV2hhdOKAmXMgdGhlIGV4cGlyYXRpb24gY3JpdGVyaWE/IFRpbWUtYmFzZWQ/IFVzYWdlLWJhc2VkPyBPciBzb21lIG90aGVyIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBzZXQgaXRzZWxmP1xuXG5JJ2xsIGhhdmUgdG8gY29uc2lkZXIgdGhlIG1lY2hhbmlzbSBmb3IgcmVtb3ZhbCwgYXMgd2VsbC4gSXMgaXQgYSBkaXJlY3QgZGVsZXRpb24sIG1hcmtpbmcgaXQgYXMgaW52YWxpZCwgb3Igc29tZSBvdGhlciBpbnRlcm5hbCBzdGF0ZSBjaGFuZ2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIHNldCdzIGNvbnNpc3RlbmN5LCBhdG9taWNpdHksIGFuZCBjb25jdXJyZW5jeSBhc3BlY3RzLiBEb2VzIGl0IGVtcGxveSBsb2NraW5nLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIG90aGVyIHNhZmVndWFyZHMgdG8gcHJvdGVjdCBhZ2FpbnN0IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgZWxlbWVudCBleHBpcnk/IEFub3RoZXIgcG90ZW50aWFsIGRldGFpbCB0byBjb25zaWRlciBpcyB0aGUgbm90aWZpY2F0aW9uLiBEb2VzIHRoZSBmdW5jdGlvbiB0cmlnZ2VyIGFueSBjYWxsYmFja3MsIGV2ZW50cywgb3IgbG9nZ2luZyBtZXNzYWdlcyByZWxhdGVkIHRvIGVsZW1lbnQgZXhwaXJ5PyBUaGlzIGNvdWxkIGJlIHZpdGFsIGZvciBkZWJ1Z2dpbmcsIGF1ZGl0aW5nLCBvciBwZXJmb3JtaW5nIGFjdGlvbnMgYmFzZWQgb24gdGhlIHJlbW92YWwgb2YgYW4gZXhwaXJlZCBlbGVtZW50LiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGV4cGlyeSBwcm9jZXNzIGVuY291bnRlcnMgYSBwcm9ibGVtPyBJcyB0aGVyZSBhbnkgcmVwb3J0aW5nP1xuXG5J4oCZbSBhbHNvIHdvbmRlcmluZyBhYm91dCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXMgYmVpbmcgdXNlZCB0byBlZmZpY2llbnRseSBmaW5kIGFuZCByZW1vdmUgZXhwaXJlZCBlbGVtZW50cywgb3IgZG9lcyB0aGlzIHBvdGVudGlhbGx5IHNjYWxlIHBvb3JseSB3aXRoIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHNldD8gRmluYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGZ1bmN0aW9uIHJlbGF0ZXMgdG8gb3RoZXIgYXNwZWN0cyBvZiB0aGUgTkZUIGZyYW1ld29yay4gSG93IGRvIHRoZXNlIGV4cGlyZWQgZWxlbWVudHMgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZT8gSG93IGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGluIHJlbGF0aW9uIHRvIGFueSBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtcz8gVGhlIHdob2xlIGRlc2lnbiBoYXMgaW1wbGljYXRpb25zIGZvciByZXNvdXJjZSB1c2FnZS4gVW5kZXJzdGFuZGluZyB0aGUgY29kZSB3aWxsIGdpdmUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBkZXNpZ24gdHJhZGUtb2Zmcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQzMCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6NDEuMTgzMjUyNzI2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE3OTI0OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbmZ0X3NldF9lbGVtX2V4cGlyZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTgzMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwciAqbmZ0X3NldF9leHRfZXhwcihjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dClcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC04MzctXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjgzODpzdGF0aWMgaW5saW5lIGJvb2wgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODM5LVxcdFxcdFxcdFxcdFxcdCAgdTY0IHRzdGFtcClcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaD04NDg9c3RhdGljIGlubGluZSBib29sIG5mdF9zZXRfZWxlbV9leHBpcmVkKGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0KVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC04NDkte1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDo4NTA6XFx0cmV0dXJuIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCBnZXRfamlmZmllc182NCgpKTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODUxLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY5ODc9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk5OS1cXHRcXHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAwMDpcXHRcXHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAwMS1cXHRcXHRcXHQqcHJpdiA9IGNhdGNoYWxsLVxcdTAwM2VlbGVtO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzA4OD1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5OC1cXHRcXHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDk5OlxcdFxcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTAwLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA2Nzk9c3RydWN0IG5mdF90cmFuc19nYyAqbmZ0X3RyYW5zX2djX2NhdGNoYWxsX3N5bmMoc3RydWN0IG5mdF90cmFuc19nYyAqZ2MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY5MS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY5MjpcXHRcXHRpZiAoIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjkzLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYz01OT1zdGF0aWMgaW5saW5lIGludCBuZnRfcmhhc2hfY21wKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTY4LVxcdFxcdHJldHVybiAxO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM6Njk6XFx0aWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXFx1MDAyNmhlLVxcdTAwM2VleHQsIHgtXFx1MDAzZXRzdGFtcCkpXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy03MC1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz00MTk9c3RhdGljIHN0cnVjdCBuZnRfcGlwYXBvX2VsZW0gKnBpcGFwb19nZXRfc2xvdyhjb25zdCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy00NzgtXFx0XFx0XFx0ZSA9IGYtXFx1MDAzZW10W2JdLmU7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjQ3OTpcXHRcXHRcXHRpZiAodW5saWtlbHkoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcXHUwMDI2ZS1cXHUwMDNlZXh0LCB0c3RhbXApIHx8XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTQ4MC1cXHRcXHRcXHRcXHQgICAgICFuZnRfc2V0X2VsZW1fYWN0aXZlKFxcdTAwMjZlLVxcdTAwM2VleHQsIGdlbm1hc2spKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0xNzEwPXN0YXRpYyB2b2lkIHBpcGFwb19nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQsIHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICptKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE3NTAtXFx0XFx0ICovXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjE3NTE6XFx0XFx0aWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXFx1MDAyNmUtXFx1MDAzZWV4dCwgdHN0YW1wKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNzUyLVxcdFxcdFxcdGlmICghbmZ0X3RyYW5zX2djX3NwYWNlKGdjKSkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmM9MTEzMD1zdHJ1Y3QgbmZ0X3BpcGFwb19lbGVtICpwaXBhcG9fZ2V0X2F2eDIoY29uc3Qgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYy0xMjE2LVxcdFxcdFxcdGUgPSBmLVxcdTAwM2VtdFtyZXRdLmU7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmM6MTIxNzpcXHRcXHRcXHRpZiAodW5saWtlbHkoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcXHUwMDI2ZS1cXHUwMDNlZXh0LCB0c3RhbXApIHx8XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmMtMTIxOC1cXHRcXHRcXHRcXHQgICAgICFuZnRfc2V0X2VsZW1fYWN0aXZlKFxcdTAwMjZlLVxcdTAwM2VleHQsIGdlbm1hc2spKSkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTM0Mj1zdGF0aWMgaW50IF9fbmZ0X3JidHJlZV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTM5Ny1cXHRcXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6Mzk4OlxcdFxcdGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFxcdTAwMjZyYmUtXFx1MDAzZWV4dCwgdHN0YW1wKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0zOTktXFx0XFx0ICAgIG5mdF9zZXRfZWxlbV9hY3RpdmUoXFx1MDAyNnJiZS1cXHUwMDNlZXh0LCBjdXJfZ2VubWFzaykpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz03ODM9bmZ0X3JidHJlZV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04MTktXFx0XFx0XFx0XFx0Y29udGludWU7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjgyMDpcXHRcXHRcXHR9IGVsc2UgaWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXFx1MDAyNnJiZS1cXHUwMDNlZXh0LCB0c3RhbXApKSB7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTgyMS1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz04OTE9c3RhdGljIHZvaWQgbmZ0X3JidHJlZV9nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtOTExLVxcdFxcdH1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6OTEyOlxcdFxcdGlmICghX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcXHUwMDI2cmJlLVxcdTAwM2VleHQsIHRzdGFtcCkpXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTkxMy1cXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6NDIuOTAxMTg0NDE5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MTcwMTk1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgRGVwdGhzIG9mIE5ldGZpbHRlcidzIE5GVGFibGVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgTkZUYWJsZXMgcmVsYXRlZCwgc3BlY2lmaWNhbGx5IHRoZSBleHBpcmF0aW9uIGhhbmRsaW5nIG9mIGVsZW1lbnRzIHdpdGhpbiBhIHNldC4gVGhlIGltbWVkaWF0ZSBuZWVkIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGF0IHByb2Nlc3MsIHdoaWNoIEkgYmVsaWV2ZSBpcyBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAuIEknbGwgd2FudCB0byBjaGVjayB0aGUgY29yZSBoZWFkZXIgZmlsZSwgYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaGAsIHRvIGdldCB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIGFuZCBkZWNsYXJhdGlvbi4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGxvZ2ljLCB0aGUgYXJndW1lbnRzLCBhbnl0aGluZyB0aGF0IHNoZWRzIGxpZ2h0IG9uIGhvdyBpdCdzIGRlc2lnbmVkIHRvIHRyYWNrIGFuZCBoYW5kbGUgZXhwaXJlZCBlbGVtZW50cyB3aXRoaW4gdGhlc2Ugc2V0cy4gTGV0J3Mgc2VlIHdoYXQgdGhlIHNvdXJjZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NjMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODozNzo0NC41MTgyMDYyMTNaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4MzUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzU6XFx0XFx0cmV0dXJuIG5mdF9zZXRfZXh0KGV4dCwgTkZUX1NFVF9FWFRfRVhQUkVTU0lPTlMpO1xcbiA4MzY6XFx0fVxcbiA4Mzc6XFx0XFxuIDgzODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCxcXG4gODM5OlxcdFxcdFxcdFxcdFxcdFxcdCAgdTY0IHRzdGFtcClcXG4gODQwOlxcdHtcXG4gODQxOlxcdFxcdGlmICghbmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfVElNRU9VVCkgfHxcXG4gODQyOlxcdFxcdCAgICBSRUFEX09OQ0UobmZ0X3NldF9leHRfdGltZW91dChleHQpLVxcdTAwM2V0aW1lb3V0KSA9PSAwKVxcbiA4NDM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4NDQ6XFx0XFxuIDg0NTpcXHRcXHRyZXR1cm4gdGltZV9hZnRlcl9lcTY0KHRzdGFtcCwgUkVBRF9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cXHUwMDNlZXhwaXJhdGlvbikpO1xcbiA4NDY6XFx0fVxcbiA4NDc6XFx0XFxuIDg0ODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbmZ0X3NldF9lbGVtX2V4cGlyZWQoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQpXFxuIDg0OTpcXHR7XFxuIDg1MDpcXHRcXHRyZXR1cm4gX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIGdldF9qaWZmaWVzXzY0KCkpO1xcbiA4NTE6XFx0fVxcbiA4NTI6XFx0XFxuIDg1MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnRfc2V0X2V4dCAqbmZ0X3NldF9lbGVtX2V4dChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbiA4NTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcXG4gODU1OlxcdHtcXG4gODU2OlxcdFxcdHJldHVybiAodm9pZCAqKWVsZW1fcHJpdiArIHNldC1cXHUwMDNlb3BzLVxcdTAwM2VlbGVtc2l6ZTtcXG4gODU3OlxcdH1cXG4gODU4OlxcdFxcbiA4NTk6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0X29iamVjdCAqKm5mdF9zZXRfZXh0X29iaihjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6NDQuNTE4MzEyMTI0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTM0MDk5MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBgbmZfdGFibGVzX2FwaS5jYCAtIENhdGNoYWxsIEVsZW1lbnQgRXhwaXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYG5mX3RhYmxlc19hcGkuY2AuIE15IGV4cGVydCBleWVzIHNlZSB0aGlzIGFzIGEgcmVmaW5lbWVudCBvZiBjYXRjaGFsbCBlbGVtZW50IGhhbmRsaW5nIHdpdGhpbiBuZnRhYmxlcywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlaXIgbGlmZWN5Y2xlIGFuZCBleHBpcmF0aW9uLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIGV4cGlyZWQgY2F0Y2hhbGwgZWxlbWVudHMgaW4gc2V0cy5cblxuSW4gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydCgpYCwgcHJldmlvdXNseSwgaWYgYW4gYWN0aXZlIGNhdGNoYWxsIGVsZW1lbnQgZXhpc3RlZCwgdGhlIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBgLUVFWElTVGAsIGV2ZW4gaWYgdGhlIGVsZW1lbnQgd2FzIGV4cGlyZWQuIE5vdywgdGhlIHBhdGNoIGFkZHMgYSBjaGVjayB1c2luZyBgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYCAqYmVmb3JlKiByZXR1cm5pbmcgLUVFWElTVC4gVGhpcyBlbnN1cmVzIHRoYXQgb25seSAqYWN0aXZlKiBhbmQgKm5vbi1leHBpcmVkKiBjYXRjaGFsbCBlbGVtZW50cyBwcmV2ZW50IGluc2VydGlvbiBvZiBhIG5ldyBvbmUuIGB0c3RhbXBgIGlzIHRoZSBjdXJyZW50IHRpbWVzdGFtcCBvYnRhaW5lZCBmcm9tIGBnZXRfamlmZmllc182NCgpYC5cblxuU2ltaWxhcmx5LCBpbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSgpYCwgdGhlIGV4aXN0aW5nIGxvZ2ljIGFscmVhZHkgc2tpcHBlZCBpbmFjdGl2ZSBlbGVtZW50cy4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgZXhwaXJlZCBlbGVtZW50cyB3aXRoaW4gdGhlIGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCBsb29wLCBza2lwcGluZyB0aGVtIHdpdGggYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYC4gVGhpcyBlbnN1cmVzIHRoYXQgZXhwaXJlZCBlbGVtZW50cyBhcmUgbm90IHVubmVjZXNzYXJpbHkgcHJvY2Vzc2VkIGR1cmluZyBkZWFjdGl2YXRpb24uIEFnYWluLCBgdHN0YW1wYCBpcyB1c2VkIGhlcmUgdG9vLlxuXG5TbywgdGhlIHBhdGNoIGludHJvZHVjZXMgdGhlc2UgZXhwaXJhdGlvbiBjaGVja3Mgd2l0aGluIHRoZSB0d28gZnVuY3Rpb25zLCBpbXByb3ZpbmcgaG93IGV4cGlyZWQgY2F0Y2hhbGwgZWxlbWVudHMgYXJlIGhhbmRsZWQuXG5cbk5vdywgbGV0J3MgYWRkcmVzcyB0aGUgS01TQU4gaW1wbGljYXRpb25zLiBNeSBhbmFseXNpcyBzYXlzIHRoYXQgS01TQU4gZG9lc24ndCBzZWVtIG5lY2Vzc2FyeSBoZXJlLiAgVGhpcyBwYXRjaCAqZG9lc24ndCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgY29waWVzLCBvciBleHBvc3VyZXMgdG8gdXNlciBzcGFjZS4gIFxuXG4qICAgYHRzdGFtcGAgaXMgYSBsb2NhbCB2YXJpYWJsZSBpbml0aWFsaXplZCB3aXRoIGBnZXRfamlmZmllc182NCgpYC5cbiogICBUaGUgYGV4dGAgc3RydWN0dXJlIGlzIG9idGFpbmVkIHZpYSBgbmZ0X3NldF9lbGVtX2V4dCgpYC5cbiogICBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCByZWxpZXMgb24gdGhlIGBORlRfU0VUX0VYVF9USU1FT1VUYCBleHRlbnNpb24uIFRoZSBmaWVsZHMgdXNlZCBpbiB0aGF0IGV4dGVuc2lvbiBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2hlbiBlbGVtZW50cyBhcmUgY3JlYXRlZC4gVGhlIHBhdGNoIGRvZXNuJ3QgY3JlYXRlIGFueSBuZXcgY29kZSB3aGVyZSB0aGlzIHdvdWxkIGJlIHByb2JsZW1hdGljLlxuXG5UaGlzIHBhdGNoIGlzIG1vZGlmeWluZyAqbG9naWMqIGFyb3VuZCBleHBpcmVkIGVsZW1lbnRzLCBub3QgYWx0ZXJpbmcgaG93IGRhdGEgaXMgaW5pdGlhbGl6ZWQgb3IgY29waWVkLCBvciBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBNZW1vcnkgc2FmZXR5IGlzc3VlcyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBldGMuKSB0aGF0ICptaWdodCogYmUgaW50cm9kdWNlZCAod2hpY2ggYXJlIG5vdCBhcHBhcmVudCBmcm9tIHRoZSBjb2RlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgYXNzZXJ0aW9ucy4gVGhlc2UgY2hlY2tzIHdvdWxkIGhpZ2hsaWdodCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpY2FsIGVycm9ycywgYnV0IG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBNeSByZWNvbW1lbmRhdGlvbiBpcyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UgZG9uJ3QgaGF2ZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBidWcuIFRoZSBmb2N1cyBoZXJlIGlzIG9uIGxpZmV0aW1lIG1hbmFnZW1lbnQgYW5kIGV4cGlyYXRpb24gbG9naWM7IEtNU0FOIGlzIHRoZSB3cm9uZyB0b29sIGZvciB0aGlzIGpvYi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIyNiwiT3V0cHV0VG9rZW5zIjoyNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6Mzc6NTUuMDUyNDE1NDU5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIG5mdGFibGVzIGNhdGNoYWxsIHNldCBlbGVtZW50IGhhbmRsaW5nIGluIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAgdG8gY2hlY2sgd2hldGhlciBhbiBleGlzdGluZyBjYXRjaGFsbCBlbGVtZW50IGhhcyBleHBpcmVkIHVzaW5nIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKClgIGFuZCB0aW1lc3RhbXBzIG9idGFpbmVkIHZpYSBgZ2V0X2ppZmZpZXNfNjQoKWAuXFxuXFxuLSAqKktNU0FOIGFwcGxpY2FiaWxpdHkqKjogS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoaGVhcCwgc3RhY2ssIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIHBhdGNoIGluaXRpYWxpemVzIGxvY2FsIGB1NjQgdHN0YW1wYCB2YXJpYWJsZXMgZGlyZWN0bHkgZnJvbSBgZ2V0X2ppZmZpZXNfNjQoKWAgYW5kIGNoZWNrcyBleGlzdGluZywgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZXh0ZW5zaW9uIGF0dHJpYnV0ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuXFxuLSAqKktBU0FOIGFwcGxpY2FiaWxpdHkqKjogS0FTQU4sIHRvZ2V0aGVyIHdpdGggc3RhbmRhcmQgZGVidWcgdG9vbHMsIGlzIGFwcHJvcHJpYXRlIGZvciBjYXRjaGluZyBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZG91YmxlLWZyZWUgaXNzdWVzIHJlbGF0ZWQgdG8gc2V0IGVsZW1lbnQgbGlmZWN5Y2xlcyBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uLlxcblxcblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgbmZ0YWJsZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaGFuZGxpbmcgaW4gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCB0byBjaGVjayB3aGV0aGVyIGFuIGV4aXN0aW5nIGNhdGNoYWxsIGVsZW1lbnQgaGFzIGV4cGlyZWQgdXNpbmcgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgYW5kIHRpbWVzdGFtcHMgb2J0YWluZWQgdmlhIGBnZXRfamlmZmllc182NCgpYC5cXG5cXG4tICoqS01TQU4gYXBwbGljYWJpbGl0eSoqOiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgbG9jYWwgYHU2NCB0c3RhbXBgIHZhcmlhYmxlcyBkaXJlY3RseSBmcm9tIGBnZXRfamlmZmllc182NCgpYCBhbmQgY2hlY2tzIGV4aXN0aW5nLCBwcm9wZXJseSBpbml0aWFsaXplZCBleHRlbnNpb24gYXR0cmlidXRlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS5cXG4tICoqS0FTQU4gYXBwbGljYWJpbGl0eSoqOiBLQVNBTiwgdG9nZXRoZXIgd2l0aCBzdGFuZGFyZCBkZWJ1ZyB0b29scywgaXMgYXBwcm9wcmlhdGUgZm9yIGNhdGNoaW5nIGFueSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvcnMsIHVzZS1hZnRlci1mcmVlLCBvciBkb3VibGUtZnJlZSBpc3N1ZXMgcmVsYXRlZCB0byBzZXQgZWxlbWVudCBsaWZlY3ljbGVzIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24uXFxuXFxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows2rz7[1] Phase: Succeeded StartedAt: 2026-09-10 08:38:13 +0000 UTC FinishedAt: 2026-09-10 08:38:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 08:38:13 +0000 UTC FinishedAt: 2026-09-10 08:38:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2] Phase: Succeeded StartedAt: 2026-09-10 08:38:13 +0000 UTC FinishedAt: 2026-09-10 12:17:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 08:38:13 +0000 UTC FinishedAt: 2026-09-10 12:17:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 08:38:13 +0000 UTC FinishedAt: 2026-09-10 08:38:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 08:38:13 +0000 UTC FinishedAt: 2026-09-10 08:38:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflows2rz7/series-workflows2rz7-convert-artifact-422415622/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 08:38:23 +0000 UTC FinishedAt: 2026-09-10 08:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 08:38:23 +0000 UTC FinishedAt: 2026-09-10 08:55: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:*eba052ad-1ddb-4396-96f0-bf1f74616ea6,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-workflows2rz7/series-workflows2rz7-convert-artifact-422415622/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": "e91ec2d4-3878-43a4-bc73-01a5a3ffafcd", "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-workflows2rz7/series-workflows2rz7-build-action-1500434588/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 08:38:23 +0000 UTC FinishedAt: 2026-09-10 08:54:56 +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:*eba052ad-1ddb-4396-96f0-bf1f74616ea6,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-workflows2rz7/series-workflows2rz7-convert-artifact-422415622/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": "e91ec2d4-3878-43a4-bc73-01a5a3ffafcd", "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-workflows2rz7/series-workflows2rz7-build-action-1500434588/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 08:55:06 +0000 UTC FinishedAt: 2026-09-10 08:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 08:55:06 +0000 UTC FinishedAt: 2026-09-10 08:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 08:55:06 +0000 UTC FinishedAt: 2026-09-10 08:55:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 08:55:06 +0000 UTC FinishedAt: 2026-09-10 08:55:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflows2rz7/series-workflows2rz7-convert-artifact-3775356249/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 08:55:16 +0000 UTC FinishedAt: 2026-09-10 08:57:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 08:55:16 +0000 UTC FinishedAt: 2026-09-10 08:57:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e91ec2d4-3878-43a4-bc73-01a5a3ffafcd,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-workflows2rz7/series-workflows2rz7-build-action-1500434588/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-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 08:57:44 +0000 UTC FinishedAt: 2026-09-10 08:57:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 08:57:44 +0000 UTC FinishedAt: 2026-09-10 08:57:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 08:57:44 +0000 UTC FinishedAt: 2026-09-10 09:14:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 08:57:44 +0000 UTC FinishedAt: 2026-09-10 09:14:59 +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:*eba052ad-1ddb-4396-96f0-bf1f74616ea6,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-workflows2rz7/series-workflows2rz7-convert-artifact-3775356249/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": "55d22aed-6c56-4877-a384-3cd67fe0b261", "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-workflows2rz7/series-workflows2rz7-build-action-1843298741/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 08:57:44 +0000 UTC FinishedAt: 2026-09-10 09:14:49 +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:*eba052ad-1ddb-4396-96f0-bf1f74616ea6,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-workflows2rz7/series-workflows2rz7-convert-artifact-3775356249/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": "55d22aed-6c56-4877-a384-3cd67fe0b261", "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-workflows2rz7/series-workflows2rz7-build-action-1843298741/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 09:14:59 +0000 UTC FinishedAt: 2026-09-10 09:14:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 09:14:59 +0000 UTC FinishedAt: 2026-09-10 09:14:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 09:14:59 +0000 UTC FinishedAt: 2026-09-10 09:16:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 09:14:59 +0000 UTC FinishedAt: 2026-09-10 09:16:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*55d22aed-6c56-4877-a384-3cd67fe0b261,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-workflows2rz7/series-workflows2rz7-build-action-1843298741/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-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 09:16:34 +0000 UTC FinishedAt: 2026-09-10 12:17:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 09:16:34 +0000 UTC FinishedAt: 2026-09-10 12:17:53 +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":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"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:*e91ec2d4-3878-43a4-bc73-01a5a3ffafcd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*55d22aed-6c56-4877-a384-3cd67fe0b261,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-workflows2rz7/series-workflows2rz7-build-action-1500434588/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-workflows2rz7/series-workflows2rz7-build-action-1843298741/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 09:16:34 +0000 UTC FinishedAt: 2026-09-10 09:16:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 09:16:34 +0000 UTC FinishedAt: 2026-09-10 09:16:41 +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":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"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-workflows2rz7/series-workflows2rz7-convert-artifact-3524491598/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 09:16:34 +0000 UTC FinishedAt: 2026-09-10 09:16:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 09:16:34 +0000 UTC FinishedAt: 2026-09-10 09:16:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 09:16:34 +0000 UTC FinishedAt: 2026-09-10 09:16:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 09:16:45 +0000 UTC FinishedAt: 2026-09-10 12:17:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2rz7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_add_set_elem","nft_del_setelem","nf_tables_newsetelem","nf_tables_delsetelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"4e4fe30d-43f1-4fd8-9e77-72e4851b4979","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 09:16:45 +0000 UTC FinishedAt: 2026-09-10 12:17:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e91ec2d4-3878-43a4-bc73-01a5a3ffafcd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*55d22aed-6c56-4877-a384-3cd67fe0b261,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-workflows2rz7/series-workflows2rz7-build-action-1500434588/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-workflows2rz7/series-workflows2rz7-build-action-1843298741/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-workflows2rz7/series-workflows2rz7-convert-artifact-3524491598/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,}