Name: series-workflowvgccv Phase: Succeeded StartedAt: 2026-09-14 20:08:47 +0000 UTC FinishedAt: 2026-09-15 00:39:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[0] Phase: Succeeded StartedAt: 2026-09-14 20:08:47 +0000 UTC FinishedAt: 2026-09-14 20:12:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 20:08:47 +0000 UTC FinishedAt: 2026-09-14 20:12:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "ee363e055895364039bf28348ff13c615afad4ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "ee363e055895364039bf28348ff13c615afad4ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_link_get_curr_or_next", "bpf_link_seq_start", "bpf_link_seq_next" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "ee363e055895364039bf28348ff13c615afad4ba", "base_tree": "bpf" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfbGlua19zZXFfc3RhcnQmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2VxX25leHQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIHZlcmlmeSB0aGF0IGBsaW5rLVx1MDAzZWlkYCBpcyBub24temVybyBiZWZvcmUgaW5jcmVtZW50aW5nIHRoZSBsaW5rIHJlZmNvdW50IGFuZCByZXR1cm5pbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGxpbmsgaXRlcmF0b3IgZnJvbSByZXR1cm5pbmcgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgb3IgdW5zZXR0bGVkIEJQRiBsaW5rIHRoYXQgd2FzIGFsbG9jYXRlZCBhbiBJRCBpbiBgbGlua19pZHJgIGJ1dCBoYXMgbm90IHlldCBiZWVuIHNldHRsZWQgdmlhIGBicGZfbGlua19zZXR0bGUoKWAuXG5cbmBsaW5rLVx1MDAzZWlkYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gMCBpbiBgYnBmX2xpbmtfaW5pdF9zbGVlcGFibGUoKWAgZHVyaW5nIGxpbmsgYWxsb2NhdGlvbiBhbmQgc2V0IHRvIGl0cyBJRCBvbmx5IHVwb24gYGJwZl9saW5rX3NldHRsZSgpYC4gVGhpcyBjaGFuZ2Ugb25seSBjaGVja3MgYW4gYWxyZWFkeS1pbml0aWFsaXplZCBmaWVsZCAoYGxpbmstXHUwMDNlaWRgKSB0byBoYW5kbGUgbGluayBsaWZlY3ljbGUvY29uY3VycmVuY3kgc3RhdGUsIGFuZCBkb2VzIG5vdCB0b3VjaCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoKSBpbiBrZXJuZWwvYnBmL3N5c2NhbGwuYyB0byBjaGVjayBpZiBsaW5rLVx1MDAzZWlkIGlzIG5vbi16ZXJvIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50LCByZXR1cm5pbmcgLUVBR0FJTiBvdGhlcndpc2Ugc28gdGhlIGl0ZXJhdGlvbiBza2lwcyB1bnNldHRsZWQgbGlua3MuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgQlBGIGl0ZXJhdG9yIGNvZGUgcGF0aHMgKGJwZl9saW5rIGl0ZXJhdG9yKSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTU1ZTAyODJiYjAwZWRlZWNmZjdiYWNjYTIzODkyMWFiODM5YzZiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDIwOjEwOjIwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDg1M2I0N2Y4MTM4NDIuLjI0NGE5MzliOWQyZGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC02MDQyLDcgJiM0Mzs2MDQyLDEwIEBAIHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxuIGFnYWluOlxuIFx0bGluayA9IGlkcl9nZXRfbmV4dChcdTAwMjZsaW5rX2lkciwgaWQpO1xuIFx0aWYgKGxpbmspIHtcbi1cdFx0bGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTtcbiYjNDM7XHRcdGlmIChsaW5rLVx1MDAzZWlkKVxuJiM0MztcdFx0XHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRsaW5rID0gRVJSX1BUUigtRUFHQUlOKTtcbiBcdFx0aWYgKElTX0VSUihsaW5rKSkge1xuIFx0XHRcdCgqaWQpJiM0MzsmIzQzOztcbiBcdFx0XHRnb3RvIGFnYWluO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfbGlua19zZXFfc3RhcnQmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2VxX25leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpIGluIGtlcm5lbC9icGYvc3lzY2FsbC5jIHRvIGNoZWNrIGlmIGxpbmstXHUwMDNlaWQgaXMgbm9uLXplcm8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQsIHJldHVybmluZyAtRUFHQUlOIG90aGVyd2lzZSBzbyB0aGUgaXRlcmF0aW9uIHNraXBzIHVuc2V0dGxlZCBsaW5rcy4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBCUEYgaXRlcmF0b3IgY29kZSBwYXRocyAoYnBmX2xpbmsgaXRlcmF0b3IpIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NTVlMDI4MmJiMDBlZGVlY2ZmN2JhY2NhMjM4OTIxYWI4MzljNmI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMjA6MTA6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDg1M2I0N2Y4MTM4NDIuLjI0NGE5MzliOWQyZGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC02MDQyLDcgJiM0Mzs2MDQyLDEwIEBAIHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKQogYWdhaW46CiAJbGluayA9IGlkcl9nZXRfbmV4dCgmYW1wO2xpbmtfaWRyLCBpZCk7CiAJaWYgKGxpbmspIHsKLQkJbGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTsKJiM0MzsJCWlmIChsaW5rLSZndDtpZCkKJiM0MzsJCQlsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspOwomIzQzOwkJZWxzZQomIzQzOwkJCWxpbmsgPSBFUlJfUFRSKC1FQUdBSU4pOwogCQlpZiAoSVNfRVJSKGxpbmspKSB7CiAJCQkoKmlkKSYjNDM7JiM0Mzs7CiAJCQlnb3RvIGFnYWluOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTAwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBhIEJQRiBMaW5rIElEUiBJdGVyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgdG8gYmUgd2l0aGluIHRoZSBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYGxpbmtfaWRyYC4gVGhlIGNvcmUgb2YgdGhpcyBmdW5jdGlvbiBpcyBhYm91dCBnZXR0aW5nIHRoZSBuZXh0IGBicGZfbGlua2AgaW4gYW4gSURSLgoKSSYjMzk7bSBub3RpY2luZyBhIHBvdGVudGlhbCBpc3N1ZSBvciBpbXByb3ZlbWVudCBoZXJlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgc2ltcGx5IGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBsaW5rIHVzaW5nIGBicGZfbGlua19pbmNfbm90X3plcm8obGluaylgLiBOb3csIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrOiBgaWYgKGxpbmstJmd0O2lkKWAuIFRoaXMgc3VnZ2VzdHMgYSBjb25kaXRpb24gd2hlcmUgYSBgYnBmX2xpbmtgIG1pZ2h0IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBJRFIgYnV0IG1pZ2h0IG5vdCB5ZXQgYmUgZnVsbHkgaW5pdGlhbGl6ZWQsIG9yIHBlcmhhcHMgaW4gc29tZSB0cmFuc2llbnQgc3RhdGUuCgpJZiBgbGluay0mZ3Q7aWRgIGlzIG5vbi16ZXJvLCB3ZSBwcm9jZWVkIGFzIGJlZm9yZSwgaW5jcmVtZW50aW5nIHRoZSByZWZlcmVuY2UgY291bnQuIEhvd2V2ZXIsIGlmIGBsaW5rLSZndDtpZGAgKmlzKiB6ZXJvLCB3aGljaCBwcmVzdW1hYmx5IGluZGljYXRlcyBhbiB1bmluaXRpYWxpemVkIG9yIGludmFsaWQgbGluayBlbnRyeSwgdGhlIHBhdGNoIHNldHMgYGxpbmtgIHRvIGBFUlJfUFRSKC1FQUdBSU4pYC4gVGhpcyBgLUVBR0FJTmAgc2VlbXMgbGlrZSBhIHNpZ25hbCB0byByZXRyeSB0aGUgaXRlcmF0aW9uLiBUaGUgY29kZSB0aGVuIGluY3JlbWVudHMgdGhlIElEIGFuZCBqdW1wcyBiYWNrIHRvIHRoZSBgYWdhaW5gIGxhYmVsLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYSBsaW5rIHdpdGggYW4gSUQgb2YgemVybyBzaG91bGQgYmUgc2tpcHBlZCB3aGVuIGl0ZXJhdGluZy4gVGhpcyBtYWtlcyBzZW5zZTogd2h5IHJldHVybiBhIGxpbmsgdGhhdCBoYXMgbm90IHlldCBiZWVuIGdpdmVuIGFuIElEPwoKU28sIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBhIGdvb2QgZGVmZW5zZSBhZ2FpbnN0IHJldHVybmluZyBpbnZhbGlkIG9yIHVuaW5pdGlhbGl6ZWQgQlBGIGxpbmtzIGR1cmluZyB0aGUgSURSIHRyYXZlcnNhbC4gSXQgcHJldmVudHMgYW4gaW5jcmVtZW50IG9mIHRoZSBsaW5rJiMzOTtzIHJlZmVyZW5jZSBjb3VudCBpZiB0aGUgSUQgaXMgMCwgc2tpcHBpbmcgdGhlIGxpbmsgYW5kIHJldHJ5aW5nLiBJJiMzOTtkIG5lZWQgdG8gZGlnIGRlZXBlciB0byBmdWxseSB1bmRlcnN0YW5kIHdoeSBhIGxpbmsgbWlnaHQgYmUgaW4gdGhpcyBzdGF0ZSwgYnV0IHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSBpbXBvcnRhbnQgcm9idXN0bmVzcyB0byB0aGUgSURSIGl0ZXJhdGlvbiBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MDMwOlx0XHR9IGVsc2Uge1xuNjAzMTpcdFx0XHRsaW5rID0gRVJSX1BUUigtRU5PRU5UKTtcbjYwMzI6XHRcdH1cbjYwMzM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xuNjAzNDpcdFx0cmV0dXJuIGxpbms7XG42MDM1Olx0fVxuNjAzNjpcdFxuNjAzNzpcdHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxuNjAzODpcdHtcbjYwMzk6XHRcdHN0cnVjdCBicGZfbGluayAqbGluaztcbjYwNDA6XHRcbjYwNDE6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbjYwNDI6XHRhZ2FpbjpcbjYwNDM6XHRcdGxpbmsgPSBpZHJfZ2V0X25leHQoXHUwMDI2bGlua19pZHIsIGlkKTtcbjYwNDQ6XHRcdGlmIChsaW5rKSB7XG42MDQ1Olx0XHRcdGlmIChsaW5rLVx1MDAzZWlkKVxuNjA0NjpcdFx0XHRcdGxpbmsgPSBicGZfbGlua19pbmNfbm90X3plcm8obGluayk7XG42MDQ3Olx0XHRcdGVsc2VcbjYwNDg6XHRcdFx0XHRsaW5rID0gRVJSX1BUUigtRUFHQUlOKTtcbjYwNDk6XHRcdFx0aWYgKElTX0VSUihsaW5rKSkge1xuNjA1MDpcdFx0XHRcdCgqaWQpJiM0MzsmIzQzOztcbjYwNTE6XHRcdFx0XHRnb3RvIGFnYWluO1xuNjA1MjpcdFx0XHR9XG42MDUzOlx0XHR9XG42MDU0Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbjYwNTU6XHRcbjYwNTY6XHRcdHJldHVybiBsaW5rO1xuNjA1NzpcdH1cbjYwNTg6XHRcbjYwNTk6XHQjZGVmaW5lIEJQRl9MSU5LX0dFVF9GRF9CWV9JRF9MQVNUX0ZJRUxEIGxpbmtfaWRcbjYwNjA6XHRcbjYwNjE6XHRzdGF0aWMgaW50IGJwZl9saW5rX2dldF9mZF9ieV9pZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbjYwNjI6XHR7XG42MDYzOlx0XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG42MDY0Olx0XHR1MzIgaWQgPSBhdHRyLVx1MDAzZWxpbmtfaWQ7XG42MDY1Olx0XHRpbnQgZmQ7XG42MDY2Olx0XG42MDY3Olx0XHRpZiAoQ0hFQ0tfQVRUUihCUEZfTElOS19HRVRfRkRfQllfSUQpKVxuNjA2ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjYwNjk6XHRcbjYwNzA6XHRcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbjYwNzE6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjYwNzI6XHRcbjYwNzM6XHRcdGxpbmsgPSBicGZfbGlua19ieV9pZChpZCk7XG42MDc0Olx0XHRpZiAoSVNfRVJSKGxpbmspKVxuNjA3NTpcdFx0XHRyZXR1cm4gUFRSX0VSUihsaW5rKTtcbjYwNzY6XHRcbjYwNzc6XHRcdGZkID0gYnBmX2xpbmtfbmV3X2ZkKGxpbmspO1xuNjA3ODpcdFx0aWYgKGZkIFx1MDAzYyAwKVxuNjA3OTpcdFx0XHRicGZfbGlua19wdXRfZGlyZWN0KGxpbmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YCBVc2FnZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBkaXJlY3Qgcm91dGUgaXMgdG8gZmlndXJlIG91dCB3aGVyZSBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgaXMgKmFjdHVhbGx5KiBiZWluZyBpbnZva2VkLiBTbywgSSBuZWVkIHRvIGZpbmQgYWxsIHRoZSBjYWxsIHNpdGVzLiBObyBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoaW5nczsgYSBnb29kIG9sZCBgZ3JlcGAgc2hvdWxkIGRvIHRoZSB0cmljay4gQSBxdWljayBgZ3JlcGAgZm9yIHRoYXQgc3ltYm9sIHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludHMuIFRoZW4sIEkgY2FuIHN0YXJ0IGFuYWx5emluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlIG9mIHRoZXNlIGNhbGxzLiBUaGUgZGV2aWwmIzM5O3MgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbGlua19nZXRfY3Vycl9vcl9uZXh0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MjkwNj1zdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2dldF9mcm9tX2ZkKHUzMiB1ZmQpO1xuaW5jbHVkZS9saW51eC9icGYuaDoyOTA3OnN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKTtcbmluY2x1ZGUvbGludXgvYnBmLmgtMjkwOC1cbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jPTEzPXN0YXRpYyB2b2lkICpicGZfbGlua19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuLS1cbmtlcm5lbC9icGYvbGlua19pdGVyLmMtMTctXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jOjE4Olx0bGluayA9IGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoXHUwMDI2aW5mby1cdTAwM2VsaW5rX2lkKTtcbmtlcm5lbC9icGYvbGlua19pdGVyLmMtMTktXHRpZiAoIWxpbmspXG4tLVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYz0yNz1zdGF0aWMgdm9pZCAqYnBmX2xpbmtfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuLS1cbmtlcm5lbC9icGYvbGlua19pdGVyLmMtMzMtXHRicGZfbGlua19wdXQoKHN0cnVjdCBicGZfbGluayAqKXYpO1xua2VybmVsL2JwZi9saW5rX2l0ZXIuYzozNDpcdHJldHVybiBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KFx1MDAyNmluZm8tXHUwMDNlbGlua19pZCk7XG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTM1LX1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MDE1PXN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfYnlfaWQodTMyIGlkKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMzYtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDM3OnN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAzOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAyMgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQlBGIExpbmsgSXRlcmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byBob3cgYGJwZl9saW5rYCBpdGVyYXRpb24gYWN0dWFsbHkgd29ya3MuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MgYmVoaW5kIHRyYXZlcnNpbmcgdGhlc2UgbGlua3MsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgZ2V0dGluZyB0aGUgbmV4dCBJRC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBsb29rIGZvciBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgcmVsYXRlZCB0byByZXRyaWV2aW5nIHRoZSBuZXh0IG9yIGN1cnJlbnQgSUQgaW4gYSBgYnBmX2xpbmtgIGNoYWluLiBTb21ldGhpbmcgbGlrZSBgYnBmX2xpbmtfZ2V0X25leHRfaWRgIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlLCBvciBwZXJoYXBzIGEgc2ltaWxhciBmdW5jdGlvbiBuYW1lIHRoYXQgaGFuZGxlcyBpdGVyYXRpb24gd2l0aGluIHRoZSBCUEYgbGluayBzdHJ1Y3R1cmUuCgpNeSBwbGFuIGlzIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHVzZXMgb2YgdGhhdCBzcGVjaWZpYyBuYW1lLCBhbmQgaWYgSSBjYW4mIzM5O3QgZmluZCB0aGF0IGV4YWN0IG5hbWUsIEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNlYXJjaCB3aXRoIHNvbWV0aGluZyBsaWtlIGBCUEZfTElOS19HRVRfTkVYVF9JRGAgdG8gY2FwdHVyZSBwb3RlbnRpYWwgY29uc3RhbnRzIG9yIG1hY3JvcyBpbnZvbHZlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24uIFRoaXMgYXBwcm9hY2ggc2hvdWxkIHJldmVhbCBob3cgZGV2ZWxvcGVycyBhcmUgYWN0dWFsbHkgdXNpbmcgdGhlc2UgaXRlcmF0b3IgZnVuY3Rpb25zIG9yIHJlbGF0ZWQgQlBGIGxpbmsgaXRlcmF0aW9uIHByb2Nlc3Nlcy4gSSBleHBlY3QgdGhhdCB0aGlzIHdpbGwgaGVscCBtZSBjbGFyaWZ5IHRoZSBtZWNoYW5pc21zIGVtcGxveWVkIHRvIG5hdmlnYXRlIGBicGZfbGlua2Agc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfTElOS19HRVRfTkVYVF9JRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTMyPXVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTgxNi0gKlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjgxNzogKiBCUEZfTElOS19HRVRfTkVYVF9JRFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTgxOC0gKlx0RGVzY3JpcHRpb25cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9OTU1PWVudW0gYnBmX2NtZCB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTk4Ny1cdEJQRl9MSU5LX0dFVF9GRF9CWV9JRCxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo5ODg6XHRCUEZfTElOS19HRVRfTkVYVF9JRCxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC05ODktXHRCUEZfRU5BQkxFX1NUQVRTLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDY9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NTItXHRcdGJyZWFrO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ1MzpcdGNhc2UgQlBGX0xJTktfR0VUX05FWFRfSUQ6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDU0LVx0XHRlcnIgPSBicGZfb2JqX2dldF9uZXh0X2lkKFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEzMj11bmlvbiBicGZfaXRlcl9saW5rX2luZm8ge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC04MTYtICpcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo4MTc6ICogQlBGX0xJTktfR0VUX05FWFRfSURcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC04MTgtICpcdERlc2NyaXB0aW9uXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTk1NT1lbnVtIGJwZl9jbWQge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC05ODctXHRCUEZfTElOS19HRVRfRkRfQllfSUQsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6OTg4Olx0QlBGX0xJTktfR0VUX05FWFRfSUQsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtOTg5LVx0QlBGX0VOQUJMRV9TVEFUUyxcbi0tXG50b29scy9saWIvYnBmL2JwZi5jPTExNTg9aW50IGJwZl9saW5rX2dldF9uZXh0X2lkKF9fdTMyIHN0YXJ0X2lkLCBfX3UzMiAqbmV4dF9pZClcbnRvb2xzL2xpYi9icGYvYnBmLmMtMTE1OS17XG50b29scy9saWIvYnBmL2JwZi5jOjExNjA6XHRyZXR1cm4gYnBmX29ial9nZXRfbmV4dF9pZChzdGFydF9pZCwgbmV4dF9pZCwgQlBGX0xJTktfR0VUX05FWFRfSUQpO1xudG9vbHMvbGliL2JwZi9icGYuYy0xMTYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgTGluayBJdGVyYXRvcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgdGhlIEJQRiBsaW5rIGl0ZXJhdG9yLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvYnBmL2xpbmtfaXRlci5jYC4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGlkZW50aWZ5aW5nIHRoZSBjb25maWd1cmF0aW9ucyBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGF0IGVuYWJsZSB0aGlzIGl0ZXJhdG9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIHRyb3VibGVzaG9vdCBhbmQgaW1wcm92ZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2xpbmtfaXRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qIENvcHlyaWdodCAoYykgMjAyMiBSZWQgSGF0LCBJbmMuICovXG4gICAzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZmlsdGVyLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuICAgODpcdFxuICAgOTpcdHN0cnVjdCBicGZfaXRlcl9zZXFfbGlua19pbmZvIHtcbiAgMTA6XHRcdHUzMiBsaW5rX2lkO1xuICAxMTpcdH07XG4gIDEyOlx0XG4gIDEzOlx0c3RhdGljIHZvaWQgKmJwZl9saW5rX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXG4gIDE0Olx0e1xuICAxNTpcdFx0c3RydWN0IGJwZl9pdGVyX3NlcV9saW5rX2luZm8gKmluZm8gPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbiAgMTY6XHRcdHN0cnVjdCBicGZfbGluayAqbGluaztcbiAgMTc6XHRcbiAgMTg6XHRcdGxpbmsgPSBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KFx1MDAyNmluZm8tXHUwMDNlbGlua19pZCk7XG4gIDE5Olx0XHRpZiAoIWxpbmspXG4gIDIwOlx0XHRcdHJldHVybiBOVUxMO1xuICAyMTpcdFxuICAyMjpcdFx0aWYgKCpwb3MgPT0gMClcbiAgMjM6XHRcdFx0JiM0MzsmIzQzOypwb3M7XG4gIDI0Olx0XHRyZXR1cm4gbGluaztcbiAgMjU6XHR9XG4gIDI2Olx0XG4gIDI3Olx0c3RhdGljIHZvaWQgKmJwZl9saW5rX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbiAgMjg6XHR7XG4gIDI5Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2xpbmtfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuICAzMDpcdFxuICAzMTpcdFx0JiM0MzsmIzQzOypwb3M7XG4gIDMyOlx0XHQmIzQzOyYjNDM7aW5mby1cdTAwM2VsaW5rX2lkO1xuICAzMzpcdFx0YnBmX2xpbmtfcHV0KChzdHJ1Y3QgYnBmX2xpbmsgKil2KTtcbiAgMzQ6XHRcdHJldHVybiBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KFx1MDAyNmluZm8tXHUwMDNlbGlua19pZCk7XG4gIDM1Olx0fVxuICAzNjpcdFxuICAzNzpcdHN0cnVjdCBicGZfaXRlcl9fYnBmX2xpbmsge1xuICAzODpcdFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfaXRlcl9tZXRhICosIG1ldGEpO1xuICAzOTpcdFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfbGluayAqLCBsaW5rKTtcbiAgNDA6XHR9O1xuICA0MTpcdFxuICA0MjpcdERFRklORV9CUEZfSVRFUl9GVU5DKGJwZl9saW5rLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxuICA0MzpcdFxuICA0NDpcdHN0YXRpYyBpbnQgX19icGZfbGlua19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgYm9vbCBpbl9zdG9wKVxuICA0NTpcdHtcbiAgNDY6XHRcdHN0cnVjdCBicGZfaXRlcl9fYnBmX2xpbmsgY3R4O1xuICA0NzpcdFx0c3RydWN0IGJwZl9pdGVyX21ldGEgbWV0YTtcbiAgNDg6XHRcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiAgNDk6XHRcdGludCByZXQgPSAwO1xuICA1MDpcdFxuICA1MTpcdFx0Y3R4Lm1ldGEgPSBcdTAwMjZtZXRhO1xuICA1MjpcdFx0Y3R4LmxpbmsgPSB2O1xuICA1MzpcdFx0bWV0YS5zZXEgPSBzZXE7XG4gIDU0Olx0XHRwcm9nID0gYnBmX2l0ZXJfZ2V0X2luZm8oXHUwMDI2bWV0YSwgaW5fc3RvcCk7XG4gIDU1Olx0XHRpZiAocHJvZylcbiAgNTY6XHRcdFx0cmV0ID0gYnBmX2l0ZXJfcnVuX3Byb2cocHJvZywgXHUwMDI2Y3R4KTtcbiAgNTc6XHRcbiAgNTg6XHRcdHJldHVybiByZXQ7XG4gIDU5Olx0fVxuICA2MDpcdFxuICA2MTpcdHN0YXRpYyBpbnQgYnBmX2xpbmtfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gIDYyOlx0e1xuICA2MzpcdFx0cmV0dXJuIF9fYnBmX2xpbmtfc2VxX3Nob3coc2VxLCB2LCBmYWxzZSk7XG4gIDY0Olx0fVxuICA2NTpcdFxuICA2NjpcdHN0YXRpYyB2b2lkIGJwZl9saW5rX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuICA2NzpcdHtcbiAgNjg6XHRcdGlmICghdilcbiAgNjk6XHRcdFx0KHZvaWQpX19icGZfbGlua19zZXFfc2hvdyhzZXEsIHYsIHRydWUpO1xuICA3MDpcdFx0ZWxzZVxuICA3MTpcdFx0XHRicGZfbGlua19wdXQoKHN0cnVjdCBicGZfbGluayAqKXYpO1xuICA3MjpcdH1cbiAgNzM6XHRcbiAgNzQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9saW5rX3NlcV9vcHMgPSB7XG4gIDc1Olx0XHQuc3RhcnRcdD0gYnBmX2xpbmtfc2VxX3N0YXJ0LFxuICA3NjpcdFx0Lm5leHRcdD0gYnBmX2xpbmtfc2VxX25leHQsXG4gIDc3Olx0XHQuc3RvcFx0PSBicGZfbGlua19zZXFfc3RvcCxcbiAgNzg6XHRcdC5zaG93XHQ9IGJwZl9saW5rX3NlcV9zaG93LFxuICA3OTpcdH07XG4gIDgwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSYjMzk7ZCBhcnRpY3VsYXRlIGl0LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipUcm91Ymxlc2hvb3RpbmcgYSBQb3RlbnRpYWwgQlBGIElEUiBJc3N1ZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc29tZXRoaW5nIGZlZWxzIG9mZi4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gZ2V0IHRoZSBjb21taXQgaGlzdG9yeS4gSSB3YW50IHRvIHNlZSB0aGUgYGdpdCBsb2dgIHRvIHByb3ZpZGUgY29udGV4dC4gV2hhdCYjMzk7cyB0aGUgcHJvYmxlbSB0aGlzIGNoYW5nZSB3YXMgaW50ZW5kZWQgdG8gZml4PyBUaGF0JiMzOTtzIGFsd2F5cyBzdGVwIG9uZS4KCk9rYXksIGxldCYjMzk7cyBmaXJlIHVwIGBncmVwcGVyYCBvciBqdXN0IHF1aWNrbHkgY2hlY2sgd2hhdCBgbGluay0mZ3Q7aWRgIGFjdHVhbGx5ICpyZXByZXNlbnRzKiBpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYW5kIHRoZSBzZW1hbnRpY3MgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQgaXQgbWVhbnMgdG8gaGF2ZSBhIHplcm8gSUQgaW4gYSBgbGlua19pZHJgIGNvbnRleHQuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgc3VzcGljaW91cy4gV2h5IHdvdWxkIHdlIGJlIGhpdHRpbmcgdGhhdD8gWmVybyBpcyB1c3VhbGx5IGEgc2VudGluZWwgdmFsdWUsIG9yIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUuCgpXYWl0IGEgc2Vjb25k4oCmIGBsaW5rLSZndDtpZGAgYmVpbmcgemVybyB3aGlsZSBpbiBhbiBJRFI/IFRoYXQgZG9lc24mIzM5O3QgbWFrZSBpbnR1aXRpdmUgc2Vuc2UuIE15IGtub3dsZWRnZSBvZiBJRFJzIHRlbGxzIG1lIHRoYXQgaXNuJiMzOTt0IHZhbGlkLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBoYXBwZW5pbmcuIFRoZSBJRFIgaXMgc3VwcG9zZWQgdG8gbWFuYWdlIG5vbi16ZXJvIElEcywgYW5kIHVzdWFsbHksIHRoZXJlIGFyZSBhbGxvY2F0aW9uIG9yIHJlbGVhc2UgcGF0aHMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIFNvIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIHNlYXJjaGluZyBmb3IgYGxpbmtfaWRyYCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBJJiMzOTtsbCBmb2N1cyBvbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGluaXRpYWxseSwgYmVjYXVzZSB0aGF0IHNlZW1zIGxpa2UgYSBsaWtlbHkgcGxhY2UgZm9yIEJQRi1yZWxhdGVkIElEUiBpbnRlcmFjdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBjYWxsIHBhdGggYW5kIHNlZSB3aGVyZSB0aGlzIGBsaW5rLSZndDtpZGAgaXMgYmVpbmcgc2V0LCBhbmQgKndoeSogaXQgbWlnaHQgYmUgemVybyBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaW5rX2lkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTY0PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWFwX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY1OnN0YXRpYyBERUZJTkVfSURSKGxpbmtfaWRyKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY2OnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGlua19pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Ny1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zMjU5PXN0YXRpYyB2b2lkIGJwZl9saW5rX2ZyZWVfaWQoaW50IGlkKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyNjMtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjY0Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzI2NTpcdGlkcl9yZW1vdmUoXHUwMDI2bGlua19pZHIsIGlkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNjY6XHRzcGluX3VubG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyNjctfVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM0NzY9c3RhdGljIGludCBicGZfbGlua19hbGxvY19pZChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ4MC1cdGlkcl9wcmVsb2FkKEdGUF9LRVJORUwpO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ4MTpcdHNwaW5fbG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0ODI6XHRpZCA9IGlkcl9hbGxvY19jeWNsaWMoXHUwMDI2bGlua19pZHIsIGxpbmssIDEsIElOVF9NQVgsIEdGUF9BVE9NSUMpO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ4MzpcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ4NC1cdGlkcl9wcmVsb2FkX2VuZCgpO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0ODktLyogUHJlcGFyZSBicGZfbGluayB0byBiZSBleHBvc2VkIHRvIHVzZXItc3BhY2UgYnkgYWxsb2NhdGluZyBhbm9uX2lub2RlIGZpbGUsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDkwOiAqIHJlc2VydmluZyB1bnVzZWQgRkQgYW5kIGFsbG9jYXRpbmcgSUQgZnJvbSBsaW5rX2lkci4gVGhpcyBpcyB0byBiZSBwYWlyZWRcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0OTEtICogd2l0aCBicGZfbGlua19zZXR0bGUoKSB0byBpbnN0YWxsIEZEIGFuZCBJRCBhbmQgZXhwb3NlIGJwZl9saW5rIHRvXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzUzMz1pbnQgYnBmX2xpbmtfc2V0dGxlKHN0cnVjdCBicGZfbGlua19wcmltZXIgKnByaW1lcilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTM1LVx0LyogbWFrZSBicGZfbGluayBmZXRjaGFibGUgYnkgSUQgKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM1MzY6XHRzcGluX2xvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTM3LVx0cHJpbWVyLVx1MDAzZWxpbmstXHUwMDNlaWQgPSBwcmltZXItXHUwMDNlaWQ7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTM4Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTM5LVx0LyogbWFrZSBicGZfbGluayBmZXRjaGFibGUgYnkgRkQgKi9cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MDE1PXN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfYnlfaWQodTMyIGlkKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIyOlx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyMy1cdC8qIGJlZm9yZSBsaW5rIGlzIFwmIzM0O3NldHRsZWRcJiMzNDssIElEIGlzIDAsIHByZXRlbmQgaXQgZG9lc24mIzM5O3QgZXhpc3QgeWV0ICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDI0Olx0bGluayA9IGlkcl9maW5kKFx1MDAyNmxpbmtfaWRyLCBpZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDI1LVx0aWYgKGxpbmspIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDMyLVx0fVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAzMzpcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAzNC1cdHJldHVybiBsaW5rO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYwMzc9c3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjA0MC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwNDE6XHRzcGluX2xvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDQyLWFnYWluOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjA0MzpcdGxpbmsgPSBpZHJfZ2V0X25leHQoXHUwMDI2bGlua19pZHIsIGlkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNDQtXHRpZiAobGluaykge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNTMtXHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDU0Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDU1LVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDY9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NTQtXHRcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NTU6XHRcdFx0XHRcdCAgXHUwMDI2bGlua19pZHIsIFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJQRiBMaW5rIElEIFJldHJpZXZhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCBob3cgQlBGIGxpbmsgSURzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGJwZl9saW5rX2J5X2lkYC4gUmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGUgYGJwZl9saW5rX2J5X2lkYCBmdW5jdGlvbiBpdHNlbGYuIFRoZSBmdW5jdGlvbiB0YWtlcyBhIGxpbmsgSUQgYXMgaW5wdXQuIElmIHRoZSBJRCBpcyB6ZXJvLCBpdCBpbW1lZGlhdGVseSByZXR1cm5zIGFuIGVycm9yLCBpbmRpY2F0aW5nIG5vIHN1Y2ggbGluay4gU2VlbXMgbG9naWNhbCwgZ2l2ZW4gaG93IHRoZSBJRCBpcyBhc3NpZ25lZC4gVGhlbiwgYSBzcGlubG9jayBpcyBhY3F1aXJlZCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBgbGlua19pZHJgLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGBpZHJfZmluZGAgY2FsbCBhdHRlbXB0cyB0byBmaW5kIHRoZSBCUEYgbGluayBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgSUQgd2l0aGluIHRoZSBJRFIgKEludGVnZXIgSUQgUmVnaXN0cnkpLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydDogIGlmIGEgbGluayBpcyBmb3VuZCwgdGhlcmUmIzM5O3MgYSBjaGVjayBvbiBgbGluay0mZ3Q7aWRgLiBJZiBgbGluay0mZ3Q7aWRgIGlzIHplcm8sIHdlIHJldHVybiBgRUFHQUlOYC4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIHRoYXQgdGhlIGxpbmsgaXMgaW4gYW4gaW50ZXJtZWRpYXRlIHN0YXRlLCBub3QgZnVsbHkgaW5pdGlhbGl6ZWQgb3IgJiMzNDtzZXR0bGVkJiMzNDsgeWV0LCBzbyBhY2Nlc3NpbmcgaXQgaXNuJiMzOTt0IGFsbG93ZWQuIFRoZSBgYnBmX2xpbmtfaW5jX25vdF96ZXJvYCBjYWxsIGlzIGludGVyZXN0aW5nLCBsZXQgbWUgbG9vayBpbnRvIHdoYXQgdGhhdCBpcyBhYm91dCwgYnV0IEkgZXhwZWN0IGl0IHByb3ZpZGVzIHNvbWUga2luZCBvZiByZWZlcmVuY2UgY291bnRpbmcsIHByZXN1bWFibHkgdG8gbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGxpbmsgb2JqZWN0LgoKSWYgdGhlIGxpbmsgaXNuJiMzOTt0IGZvdW5kIGF0IGFsbCwgd2UgcmV0dXJuIGBFTk9FTlRgLiBGaW5hbGx5LCB0aGUgc3BpbmxvY2sgaXMgcmVsZWFzZWQsIGFuZCB0aGUgbGluayBwb2ludGVyIChvciBlcnJvciBwb2ludGVyKSBpcyByZXR1cm5lZC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IHN0YW5kYXJkIGFuZCByb2J1c3QgYXBwcm9hY2gsIHByb3RlY3RpbmcgdGhlIElEUiB3aXRoIGEgbG9jayBhbmQgaGFuZGxpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoIHRoZSBgbGluay0mZ3Q7aWRgIGNoZWNrLiBJdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IHNvbWV0aGluZyBlbHNlIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgd2hpY2ggbWlnaHQgYWxzbyBtYWtlIHVzZSBvZiBhIHJlZmVyZW5jZSBjb3VudGVyLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBpbnZlc3RpZ2F0ZSBgYnBmX29ial9nZXRfbmV4dF9pZGAuICBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgZmlsZSB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gSSB3aWxsIHNlZSBpZiB0aGVyZSBpcyBhbnkgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MDIwOlx0XHRpbmZvLVx1MDAzZXBlcmZfZXZlbnQua3Byb2JlLmNvb2tpZSA9IGV2ZW50LVx1MDAzZWJwZl9jb29raWU7XG40MDIxOlx0XHRyZXR1cm4gMDtcbjQwMjI6XHR9XG40MDIzOlx0XG40MDI0Olx0c3RhdGljIHZvaWQgYnBmX3BlcmZfbGlua19mZGluZm9fa3Byb2JlKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbjQwMjU6XHRcdFx0XHRcdFx0c3RydWN0IHNlcV9maWxlICpzZXEpXG40MDI2Olx0e1xuNDAyNzpcdFx0Y29uc3QgY2hhciAqbmFtZTtcbjQwMjg6XHRcdGludCBlcnI7XG40MDI5Olx0XHR1MzIgcHJvZ19pZCwgdHlwZTtcbjQwMzA6XHRcdHU2NCBvZmZzZXQsIGFkZHI7XG40MDMxOlx0XHR1bnNpZ25lZCBsb25nIG1pc3NlZDtcbjQwMzI6XHRcbjQwMzM6XHRcdGVyciA9IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGV2ZW50LCBcdTAwMjZwcm9nX2lkLCBcdTAwMjZ0eXBlLCBcdTAwMjZuYW1lLFxuNDAzNDpcdFx0XHRcdFx0ICAgICAgXHUwMDI2b2Zmc2V0LCBcdTAwMjZhZGRyLCBcdTAwMjZtaXNzZWQpO1xuNDAzNTpcdFx0aWYgKGVycilcbjQwMzY6XHRcdFx0cmV0dXJuO1xuNDAzNzpcdFxuNDAzODpcdFx0c2VxX3ByaW50ZihzZXEsXG40MDM5Olx0XHRcdCAgIFwmIzM0O25hbWU6XFx0JXNcXG5cJiMzNDtcbjQwNDA6XHRcdFx0ICAgXCYjMzQ7b2Zmc2V0OlxcdCUjbGx4XFxuXCYjMzQ7XG40MDQxOlx0XHRcdCAgIFwmIzM0O21pc3NlZDpcXHQlbHVcXG5cJiMzNDtcbjQwNDI6XHRcdFx0ICAgXCYjMzQ7YWRkcjpcXHQlI2xseFxcblwmIzM0O1xuNDA0MzpcdFx0XHQgICBcJiMzNDtldmVudF90eXBlOlxcdCVzXFxuXCYjMzQ7XG40MDQ0Olx0XHRcdCAgIFwmIzM0O2Nvb2tpZTpcXHQlbGx1XFxuXCYjMzQ7LFxuNDA0NTpcdFx0XHQgICBuYW1lLCBvZmZzZXQsIG1pc3NlZCwgYWRkcixcbjQwNDY6XHRcdFx0ICAgdHlwZSA9PSBCUEZfRkRfVFlQRV9LUkVUUFJPQkUgPyAgXCYjMzQ7a3JldHByb2JlXCYjMzQ7IDogXCYjMzQ7a3Byb2JlXCYjMzQ7LFxuNDA0NzpcdFx0XHQgICBldmVudC1cdTAwM2VicGZfY29va2llKTtcbjQwNDg6XHR9XG40MDQ5Olx0I2VuZGlmXG40MDUwOlx0XG40MDUxOlx0I2lmZGVmIENPTkZJR19VUFJPQkVfRVZFTlRTXG40MDUyOlx0c3RhdGljIGludCBicGZfcGVyZl9saW5rX2ZpbGxfdXByb2JlKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbjQwNTM6XHRcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG40MDU0Olx0e1xuNDA1NTpcdFx0dTY0IHJlZl9jdHJfb2Zmc2V0LCBvZmZzZXQ7XG40MDU2Olx0XHRjaGFyIF9fdXNlciAqdW5hbWU7XG40MDU3Olx0XHR1MzIgdWxlbiwgdHlwZTtcbjQwNTg6XHRcdGludCBlcnI7XG40MDU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDg4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gYGJwZl9vYmpfZ2V0X25leHRfaWRgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfb2JqX2dldF9uZXh0X2lkYC4gUmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGlzIGRvd24uIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyBnb2luZyB0byBiZSBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgZm9yIHRoZSBjb3JlIEJQRiBzeXNjYWxsIGltcGxlbWVudGF0aW9ucy4gSXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBhbnl0aGluZyByZWxhdGVkIHRvIG9iamVjdCByZXRyaWV2YWwgYW5kIG1hbmlwdWxhdGlvbiBmcm9tIHVzZXJzcGFjZS4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCAtIHByb2JhYmx5IGxvb2sgYXQgcmVsYXRlZCBzb3VyY2UgZmlsZXMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBvciBtYXliZSBldmVuIHJlbGF0ZWQgaGVhZGVyIGZpbGVzIGlmIGl0IGlzIGEgbWFjcm8gb3IgaW5saW5lIGZ1bmN0aW9uLiBCdXQsIG15IG1vbmV5IGlzIG9uIGBzeXNjYWxsLmNgIGZvciBzdGFydGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX29ial9nZXRfbmV4dF9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTQ3ODI9c3RhdGljIGludCBicGZfcHJvZ190ZXN0X3J1bihjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00ODExLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDgxMjpzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00ODEzLVx0XHRcdCAgICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDY9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTAtXHRjYXNlIEJQRl9QUk9HX0dFVF9ORVhUX0lEOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjM5MTpcdFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcdTAwMjZhdHRyLCB1YXR0ci51c2VyLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5Mi1cdFx0XHRcdFx0ICBcdTAwMjZwcm9nX2lkciwgXHUwMDI2cHJvZ19pZHJfbG9jayk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5NC1cdGNhc2UgQlBGX01BUF9HRVRfTkVYVF9JRDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTU6XHRcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTYtXHRcdFx0XHRcdCAgXHUwMDI2bWFwX2lkciwgXHUwMDI2bWFwX2lkcl9sb2NrKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mzk4LVx0Y2FzZSBCUEZfQlRGX0dFVF9ORVhUX0lEOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjM5OTpcdFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcdTAwMjZhdHRyLCB1YXR0ci51c2VyLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQwMC1cdFx0XHRcdFx0ICBcdTAwMjZidGZfaWRyLCBcdTAwMjZidGZfaWRyX2xvY2spO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NTMtXHRjYXNlIEJQRl9MSU5LX0dFVF9ORVhUX0lEOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ1NDpcdFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcdTAwMjZhdHRyLCB1YXR0ci51c2VyLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1NS1cdFx0XHRcdFx0ICBcdTAwMjZsaW5rX2lkciwgXHUwMDI2bGlua19pZHJfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIE9iamVjdCBJRCBSZXRyaWV2YWwqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgYnBmX29ial9nZXRfbmV4dF9pZGAgYXJvdW5kIGxpbmUgNDgxMiBpbiB0aGUgcmVsZXZhbnQgY29kZWJhc2UuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBCUEYgb2JqZWN0IElEIG1hbmFnZW1lbnQgaXMgaGFuZGxlZCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJRCBhbGxvY2F0aW9uIG9yIHJldHJpZXZhbCBpcyBpbXBsZW1lbnRlZC4gSSB3YW50IHRvIGZpZ3VyZSBvdXQgdGhlIElEIGVudW1lcmF0aW9uIHByb2Nlc3MuIElzIGl0IHRocmVhZC1zYWZlLCBhbmQgZG9lcyBpdCBhdm9pZCBjb250ZW50aW9uPyBEb2VzIGl0IHVzZSBhIHNpbXBsZSBjb3VudGVyLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIGxpa2UgYSBiaXRtYXAgb3IgYSBoYXNoIHRhYmxlPyBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBjcnVjaWFsIGZvciBhbnkgd29yayB0aGF0IGludGVyYWN0cyB3aXRoIGFuZCByZWxpZXMgb24gb2JqZWN0IElEIHJldHJpZXZhbCBpbiBCUEYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ4MTI6XHRzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG40ODEzOlx0XHRcdFx0ICAgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIsXG40ODE0Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZHIgKmlkcixcbjQ4MTU6XHRcdFx0XHQgICAgICAgc3BpbmxvY2tfdCAqbG9jaylcbjQ4MTY6XHR7XG40ODE3Olx0XHR1MzIgbmV4dF9pZCA9IGF0dHItXHUwMDNlc3RhcnRfaWQ7XG40ODE4Olx0XHRpbnQgZXJyID0gMDtcbjQ4MTk6XHRcbjQ4MjA6XHRcdGlmIChDSEVDS19BVFRSKEJQRl9PQkpfR0VUX05FWFRfSUQpIHx8IG5leHRfaWQgXHUwMDNlPSBJTlRfTUFYKVxuNDgyMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ4MjI6XHRcbjQ4MjM6XHRcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbjQ4MjQ6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjQ4MjU6XHRcbjQ4MjY6XHRcdG5leHRfaWQmIzQzOyYjNDM7O1xuNDgyNzpcdFx0c3Bpbl9sb2NrX2JoKGxvY2spO1xuNDgyODpcdFx0aWYgKCFpZHJfZ2V0X25leHQoaWRyLCBcdTAwMjZuZXh0X2lkKSlcbjQ4Mjk6XHRcdFx0ZXJyID0gLUVOT0VOVDtcbjQ4MzA6XHRcdHNwaW5fdW5sb2NrX2JoKGxvY2spO1xuNDgzMTpcdFxuNDgzMjpcdFx0aWYgKCFlcnIpXG40ODMzOlx0XHRcdGVyciA9IHB1dF91c2VyKG5leHRfaWQsIFx1MDAyNnVhdHRyLVx1MDAzZW5leHRfaWQpO1xuNDgzNDpcdFxuNDgzNTpcdFx0cmV0dXJuIGVycjtcbjQ4MzY6XHR9XG40ODM3Olx0XG40ODM4Olx0c3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxuNDgzOTpcdHtcbjQ4NDA6XHRcdHN0cnVjdCBicGZfbWFwICptYXA7XG40ODQxOlx0XG40ODQyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bWFwX2lkcl9sb2NrKTtcbjQ4NDM6XHRhZ2FpbjpcbjQ4NDQ6XHRcdG1hcCA9IGlkcl9nZXRfbmV4dChcdTAwMjZtYXBfaWRyLCBpZCk7XG40ODQ1Olx0XHRpZiAobWFwKSB7XG40ODQ2Olx0XHRcdG1hcCA9IF9fYnBmX21hcF9pbmNfbm90X3plcm8obWFwLCBmYWxzZSk7XG40ODQ3Olx0XHRcdGlmIChJU19FUlIobWFwKSkge1xuNDg0ODpcdFx0XHRcdCgqaWQpJiM0MzsmIzQzOztcbjQ4NDk6XHRcdFx0XHRnb3RvIGFnYWluO1xuNDg1MDpcdFx0XHR9XG40ODUxOlx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTIyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgQlBGIExpbmsgSXRlcmF0b3IgUmFjZSBDb25kaXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YC4gIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXaHkgYXJlIHRoZXkgYWRkaW5nIHRoaXMgY2hlY2sgZm9yIGBsaW5rLSZndDtpZGA/JiMzNDsuIEkgc2VlIHRoZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmQgdGhlIGNvcmUgZGlmZmVyZW5jZSBpcyB0aGlzIGFkZGVkIGNvbmRpdGlvbmFsOiBgaWYgKGxpbmstJmd0O2lkKWAuICBUaGF0IHNpZ25hbHMgYSByYWNlIGNvbmRpdGlvbiBvciBzb21lIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGhvdyBsaW5rcyBhcmUgYmVpbmcgaGFuZGxlZCBkdXJpbmcgY3JlYXRpb24gYW5kIGl0ZXJhdGlvbi4KCk15IGV4cGVydGlzZSBpbW1lZGlhdGVseSB0ZWxscyBtZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGxpbmsgY3JlYXRpb24gcHJvY2Vzcy4gIEkgc2VlIHRoYXQgYGJwZl9saW5rX3ByaW1lYCBhbGxvY2F0ZXMgYW4gSUQgaW4gdGhlIGBsaW5rX2lkcmAsIGJ1dCBjcnVjaWFsbHksIGl0ICpkb2VzbiYjMzk7dCogaW1tZWRpYXRlbHkgc2V0IHRoZSBgbGluay0mZ3Q7aWRgIGZpZWxkIGl0c2VsZi4gVGhhdCYjMzk7cyBvbmx5IGhhcHBlbmluZyBpbiBgYnBmX2xpbmtfc2V0dGxlKClgLiAgVGhpcyBpcyB0aGUga2V5LiAgQmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zLCB0aGVyZSYjMzk7cyBhIHdpbmRvdyBvZiB2dWxuZXJhYmlsaXR5LgoKSWYgYSBCUEYgbGluayBpdGVyYXRvciDigJMgdGhlIHBhcnQgb2YgdGhlIGtlcm5lbCByZXNwb25zaWJsZSBmb3IgdHJhdmVyc2luZyB0aGVzZSBsaW5rcyDigJMgaXMgcnVubmluZyBjb25jdXJyZW50bHksIGl0IGNvdWxkIHBvdGVudGlhbGx5IHBpY2sgdXAgYSBsaW5rIHdob3NlIGBpZGAgaGFzbiYjMzk7dCBiZWVuIHNldCB5ZXQgKGkuZS4sIGBsaW5rLSZndDtpZGAgaXMgc3RpbGwgMCkuIFRoaXMgKmlzKiBhIHJhY2UgY29uZGl0aW9uLiBJbiBgYnBmX2xpbmtfYnlfaWRgLCB0aGUgY29kZSBhbHJlYWR5IGhhbmRsZWQgdGhpcy4gSWYgYGxpbmstJmd0O2lkYCBpcyAwLCBpdCBrbm93cyB0byB0cmVhdCB0aGUgbGluayBhcyBpZiBpdCBkb2VzbiYjMzk7dCBleGlzdC4gTm93LCBpdCBzZWVtcywgdGhhdCYjMzk7cyBiZWluZyBleHRlbmRlZCB0byB0aGUgaXRlcmF0b3IuCgpNeSBicmFpbiBpcyByYWNpbmcsIHRoaW5raW5nIG9mIHRoZSBjb25zZXF1ZW5jZXMuICBJZiB0aGUgaXRlcmF0b3IgZ3JhYnMgYSBsaW5rIHdpdGggYGxpbmstJmd0O2lkID09IDBgLCB0aGUgaXRlcmF0b3IgY2FuIGV4cG9zZSB0aGlzIHBhcnRpYWxseSBpbml0aWFsaXplZCBsaW5rIHRvIHVzZXJzcGFjZSBvciB0aGUgQlBGIHByb2dyYW0sIGFuZCBpdCBleHBvc2VzIHdpdGggSUQgMC4gRnVydGhlciwgSSBpbW1lZGlhdGVseSBjb25zaWRlciB3aGF0IGhhcHBlbnMgaWYgYGJwZl9saW5rX2NsZWFudXBgIHJ1bnMgKmFmdGVyKiB0aGUgaXRlcmF0b3Igc2VlcyB0aGUgdW5pbml0aWFsaXplZCBsaW5rLiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIGVudHJ5IGZyb20gdGhlIGBJRFJgIGFuZCBmcmVlcyB0aGUgZmlsZSBhbmQgZmlsZSBkZXNjcmlwdG9yLiBUaGUgZmFjdCB0aGF0IHRoZSBpdGVyYXRvciAqaW5jJiMzOTtkKiB0aGUgbGluayBpcyBub3cgY29uY2VybmluZy4gVGhlIGxpbmsgd2FzIG5vdCBmdWxseSBpbml0aWFsaXplZCEgVGhpcyBwb3RlbnRpYWxseSBpbnRyb2R1Y2VzIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uCgpUaGUgb3JpZ2luYWwgY29kZSBpbiBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgKmRpZG4mIzM5O3QqIGhhdmUgdGhpcyBjaGVjaywgbWVhbmluZyBpdCB3YXMgdnVsbmVyYWJsZS4gIFRoZSBwYXRjaCBmaXhlcyB0aGUgcmFjZSEKSSBkb24mIzM5O3QgbmVlZCB0byBzZWUgdGhlIGNvbW1pdCBtZXNzYWdlLCB0aGUgY29kZSByZXZlYWxzIHRoZSBpbnRlbnQgcGVyZmVjdGx5LiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBjcml0aWNhbCBmaXggaW4gYSBjcml0aWNhbCBrZXJuZWwgc3Vic3lzdGVtLgpUaGUgc3Vic3lzdGVtIGlzIEJQRiBjb3JlLiBUaGUgZnVuY3Rpb24gaXMgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dC4KCk5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgaXRlcmF0b3IgaXMgY3JlYXRlZCBhbmQgZXhlY3V0ZWQsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCwgYnV0IG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBhIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgQlBGIGxpbmtzIGFuZCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGl0ZXJhdGlvbiBoYXMgYmVlbiByZXNvbHZlZCBieSB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9saW5rX3NlcV9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9saW5rX2l0ZXIuYz02Nj1zdGF0aWMgdm9pZCBicGZfbGlua19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTczLVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzo3NDpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9saW5rX3NlcV9vcHMgPSB7XG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTc1LVx0LnN0YXJ0XHQ9IGJwZl9saW5rX3NlcV9zdGFydCxcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jPTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gYnBmX2xpbmtfc2VxX2luZm8gPSB7XG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jOjg0Olx0LnNlcV9vcHNcdFx0PSBcdTAwMjZicGZfbGlua19zZXFfb3BzLFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy04NS1cdC5pbml0X3NlcV9wcml2YXRlXHQ9IE5VTEwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTMxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbGlua19pdGVyLmNgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEJQRiBsaW5rIGl0ZXJhdG9yIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIHRoaW5raW5nIHRoZSBpc3N1ZSBJJiMzOTttIGNoYXNpbmcgaXMgcHJvYmFibHkgYXJvdW5kIHdoZXJlIHRoZSBsaW5rcyBhcmUgYWN0dWFsbHkgaXRlcmF0ZWQsIHdoaWNoIGlzIG9mdGVuIGEgc291cmNlIG9mIHN1YnRsZSBCUEYgcHJvZ3JhbSBlcnJvcnMuIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGtlcm5lbC9icGYvbGlua19pdGVyLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgODMuIEhvcGVmdWxseSwgdGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gd2hhdGV2ZXIgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbGlua19pdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0XHRlbHNlXG4gIDcxOlx0XHRcdGJwZl9saW5rX3B1dCgoc3RydWN0IGJwZl9saW5rICopdik7XG4gIDcyOlx0fVxuICA3MzpcdFxuICA3NDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX2xpbmtfc2VxX29wcyA9IHtcbiAgNzU6XHRcdC5zdGFydFx0PSBicGZfbGlua19zZXFfc3RhcnQsXG4gIDc2Olx0XHQubmV4dFx0PSBicGZfbGlua19zZXFfbmV4dCxcbiAgNzc6XHRcdC5zdG9wXHQ9IGJwZl9saW5rX3NlcV9zdG9wLFxuICA3ODpcdFx0LnNob3dcdD0gYnBmX2xpbmtfc2VxX3Nob3csXG4gIDc5Olx0fTtcbiAgODA6XHRcbiAgODE6XHRCVEZfSURfTElTVF9TSU5HTEUoYnRmX2JwZl9saW5rX2lkLCBzdHJ1Y3QsIGJwZl9saW5rKVxuICA4MjpcdFxuICA4MzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gYnBmX2xpbmtfc2VxX2luZm8gPSB7XG4gIDg0Olx0XHQuc2VxX29wc1x0XHQ9IFx1MDAyNmJwZl9saW5rX3NlcV9vcHMsXG4gIDg1Olx0XHQuaW5pdF9zZXFfcHJpdmF0ZVx0PSBOVUxMLFxuICA4NjpcdFx0LmZpbmlfc2VxX3ByaXZhdGVcdD0gTlVMTCxcbiAgODc6XHRcdC5zZXFfcHJpdl9zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBicGZfaXRlcl9zZXFfbGlua19pbmZvKSxcbiAgODg6XHR9O1xuICA4OTpcdFxuICA5MDpcdHN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9saW5rX3JlZ19pbmZvID0ge1xuICA5MTpcdFx0LnRhcmdldFx0XHRcdD0gXCYjMzQ7YnBmX2xpbmtcJiMzNDssXG4gIDkyOlx0XHQuY3R4X2FyZ19pbmZvX3NpemVcdD0gMSxcbiAgOTM6XHRcdC5jdHhfYXJnX2luZm9cdFx0PSB7XG4gIDk0Olx0XHRcdHsgb2Zmc2V0b2Yoc3RydWN0IGJwZl9pdGVyX19icGZfbGluaywgbGluayksXG4gIDk1Olx0XHRcdCAgUFRSX1RPX0JURl9JRF9PUl9OVUxMIH0sXG4gIDk2Olx0XHR9LFxuICA5NzpcdFx0LnNlcV9pbmZvXHRcdD0gXHUwMDI2YnBmX2xpbmtfc2VxX2luZm8sXG4gIDk4Olx0fTtcbiAgOTk6XHRcbiAxMDA6XHRzdGF0aWMgaW50IF9faW5pdCBicGZfbGlua19pdGVyX2luaXQodm9pZClcbiAxMDE6XHR7XG4gMTAyOlx0XHRicGZfbGlua19yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gKmJ0Zl9icGZfbGlua19pZDtcbiAxMDM6XHRcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFx1MDAyNmJwZl9saW5rX3JlZ19pbmZvKTtcbiAxMDQ6XHR9XG4gMTA1Olx0XG4gMTA2Olx0bGF0ZV9pbml0Y2FsbChicGZfbGlua19pdGVyX2luaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk1NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgQlBGIEl0ZXJhdG9ycyoqCgpPa2F5LCBzbyBCUEYgaXRlcmF0b3JzIGFyZSBjcmVhdGVkIHVzaW5nIGBicGYoQlBGX0xJTktfQ1JFQVRFKWAgd2l0aCB0aGUgYEJQRl9UUkFDRV9JVEVSYCBvcHRpb24sIGdlbmVyYXRpbmcgYSBgc2VxX2ZpbGVgLiBUaGF0IG1lYW5zIHVzZXJzcGFjZSBjYW4gYWNjZXNzIHRoaXMgdGhyb3VnaCBhIHN0YW5kYXJkIGByZWFkKDIpYCBjYWxsIC0gdGhhdCYjMzk7cyBleGNlbGxlbnQhIFRoaXMgb3BlbnMgdXAgYSB3aG9sZSBuZXcgYXJlYSBvZiBvYnNlcnZhYmlsaXR5IGFuZCBtYW5pcHVsYXRpb24uIE5vdywgYmVmb3JlIEkgZ2V0IHRvbyBleGNpdGVkLCBsZXQmIzM5O3Mgc2VlIGlmIHN5emthbGxlciBoYXMgc3VwcG9ydCBmb3IgZnV6emVyIG9yIGFueSBjb3ZlcmFnZSBmb3IgQlBGIGl0ZXJhdG9ycywgb3IgaWYgaXQgY2FuIGJlIGZ1enplZCB1c2luZyB0aGlzIG1ldGhvZC4gWWVzLCBncmVhdCwgaXQgbG9va3MgbGlrZSBzeXprYWxsZXIgb2ZmZXJzIGNvbXByZWhlbnNpdmUgQlBGIHN5c2NhbGwgY292ZXJhZ2UsIGluY2x1ZGluZyBgYnBmJEJQRl9MSU5LX0NSRUFURWAgYW5kIHRoZSBvdGhlciBrZXkgb25lcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gVG8gY29uZmlybSBldmVyeXRoaW5nLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYGtlcm5lbC9icGYvbGlua19pdGVyLmNgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIGVuc3VyZSB0aGV5JiMzOTtyZSBjb3JyZWN0bHkgZW5hYmxlZC4gSSB3aWxsIGFsc28gaGF2ZSB0byBsb29rIGluIGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBjb25maXJtIHdoZXJlIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gcGxhY2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaW5rX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG4tLVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYz05MD1zdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfbGlua19yZWdfaW5mbyA9IHtcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTk5LVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzoxMDA6c3RhdGljIGludCBfX2luaXQgYnBmX2xpbmtfaXRlcl9pbml0KHZvaWQpXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTEwMS17XG4tLVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0xMDUtXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jOjEwNjpsYXRlX2luaXRjYWxsKGJwZl9saW5rX2l0ZXJfaW5pdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzA1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS2VybmVsIENvbXBpbGF0aW9uIE11c2luZ3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYnVpbGQgcHJvY2VzcyBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgb2JqZWN0IGZpbGVzIGBzeXNjYWxsLm9gLCBgLi4uYCwgYW5kIGBsaW5rX2l0ZXIub2AgYXJlIGJlaW5nIGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBzZXR0aW5nLiBSaWdodCwgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIHRoZSAqb25seSogcmVxdWlyZWQgY29uZmlnLCBiZWNhdXNlIHRoaW5ncyBpbiB0aGUga2VybmVsIGNhbiBnZXQuLi5jb21wbGV4LgoKTm93LCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgYEJQRl9TWVNDQUxMYCB1c3VhbGx5IHJpZGVzIG9uIHRoZSBjb2F0dGFpbHMgb2YgYEJQRmAuIExldCYjMzk7cyBjb25maXJtIHRoYXQgZGVwZW5kZW5jeSDigJMgZG91YmxlLWNoZWNraW5nIGlzIGFsd2F5cyBnb29kIHByYWN0aWNlLiBUaW1lIHRvIGdvIHBlZWsgaW50byBga2VybmVsL2JwZi9LY29uZmlnYCBhbmQgbWFrZSBzdXJlIG15IG1lbW9yeSBzZXJ2ZXMgbWUgY29ycmVjdGx5IGFuZCBjb25maXJtIGFueSBvdGhlciByZWxldmFudCBzZXR0aW5ncyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgbG9vayBpbnRvIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvbmZpZ3VyYXRpb24uIEkgcmVtZW1iZXIgd29ya2luZyB3aXRoIGBLY29uZmlnYCBmaWxlcyBiZWZvcmU7IHRoZXkmIzM5O3JlIHRoZSBicmVhZCBhbmQgYnV0dGVyIGZvciBjb250cm9sbGluZyBrZXJuZWwgZmVhdHVyZXMuIExldCYjMzk7cyBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLCBJJiMzOTttIHRoaW5raW5nIHNvbWV3aGVyZSBhcm91bmQgbGluZSAyNy4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGRlYWwgd2l0aCB0aGUgY29yZSBlbmFibGluZyBvcHRpb25zIGZvciBCUEYsIG9yIHBlcmhhcHMgY29uZmlndXJhdGlvbiBvZiBzb21lIG9mIHRoZSBCUEYgc3Vic3lzdGVtcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLiBGcm9tIGhlcmUgSSYjMzk7bGwgc2VlIHdoYXQgdGhlIG9wdGlvbnMgYXJlIGFuZCB3aGF0IG15IHVuZGVyc3RhbmRpbmcgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzgzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQlBGIFN5c2NhbGwgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBgQlBGX1NZU0NBTExgIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQgZG9lc24mIzM5O3QgaGF2ZSBhbnkgZXhwbGljaXQgYGRlcGVuZHMgb25gIHJlcXVpcmVtZW50cywgYnV0IGl0ICpkb2VzKiBzZWxlY3QgQlBGLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgc2ltcGxpZmllcyB0aGluZ3Mgc29tZXdoYXQuIE5vdywgSSBuZWVkIHRvIGludmVzdGlnYXRlIGEgc3BlY2lmaWMgZnVuY3Rpb246IGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YC4gSSYjMzk7bSBjdXJpb3VzIGlmIGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBtYXliZSBiZWhpbmQgc29tZSBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlOyBzcGVjaWZpY2FsbHksIGxldCBtZSBqdW1wIHRvIGxpbmUgNjAzNyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgdGhhdCBsaW5lLCBqdXN0IHRvIGdldCBhIGJyb2FkZXIgY29udGV4dCBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4gQWxyaWdodCwgSSYjMzk7bSByZWFkaW5nIHRoZSBjb2RlIG5vdy4uLiBsZXQmIzM5O3Mgc2VlLCBpcyBpdCBpbnNpZGUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2Nrcz8gSSBuZWVkIHRvIGNoZWNrIGNhcmVmdWxseSwgc28gSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhhdCBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MDEwOlx0e1xuNjAxMTpcdFx0cmV0dXJuIGF0b21pYzY0X2ZldGNoX2FkZF91bmxlc3MoXHUwMDI2bGluay1cdTAwM2VyZWZjbnQsIDEsIDApID8gbGluayA6IEVSUl9QVFIoLUVOT0VOVCk7XG42MDEyOlx0fVxuNjAxMzpcdEVYUE9SVF9TWU1CT0woYnBmX2xpbmtfaW5jX25vdF96ZXJvKTtcbjYwMTQ6XHRcbjYwMTU6XHRzdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2J5X2lkKHUzMiBpZClcbjYwMTY6XHR7XG42MDE3Olx0XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG42MDE4Olx0XG42MDE5Olx0XHRpZiAoIWlkKVxuNjAyMDpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbjYwMjE6XHRcbjYwMjI6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbjYwMjM6XHRcdC8qIGJlZm9yZSBsaW5rIGlzIFwmIzM0O3NldHRsZWRcJiMzNDssIElEIGlzIDAsIHByZXRlbmQgaXQgZG9lc24mIzM5O3QgZXhpc3QgeWV0ICovXG42MDI0Olx0XHRsaW5rID0gaWRyX2ZpbmQoXHUwMDI2bGlua19pZHIsIGlkKTtcbjYwMjU6XHRcdGlmIChsaW5rKSB7XG42MDI2Olx0XHRcdGlmIChsaW5rLVx1MDAzZWlkKVxuNjAyNzpcdFx0XHRcdGxpbmsgPSBicGZfbGlua19pbmNfbm90X3plcm8obGluayk7XG42MDI4Olx0XHRcdGVsc2VcbjYwMjk6XHRcdFx0XHRsaW5rID0gRVJSX1BUUigtRUFHQUlOKTtcbjYwMzA6XHRcdH0gZWxzZSB7XG42MDMxOlx0XHRcdGxpbmsgPSBFUlJfUFRSKC1FTk9FTlQpO1xuNjAzMjpcdFx0fVxuNjAzMzpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG42MDM0Olx0XHRyZXR1cm4gbGluaztcbjYwMzU6XHR9XG42MDM2Olx0XG42MDM3Olx0c3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpXG42MDM4Olx0e1xuNjAzOTpcdFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuNjA0MDpcdFxuNjA0MTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xuNjA0MjpcdGFnYWluOlxuNjA0MzpcdFx0bGluayA9IGlkcl9nZXRfbmV4dChcdTAwMjZsaW5rX2lkciwgaWQpO1xuNjA0NDpcdFx0aWYgKGxpbmspIHtcbjYwNDU6XHRcdFx0aWYgKGxpbmstXHUwMDNlaWQpXG42MDQ2Olx0XHRcdFx0bGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTtcbjYwNDc6XHRcdFx0ZWxzZVxuNjA0ODpcdFx0XHRcdGxpbmsgPSBFUlJfUFRSKC1FQUdBSU4pO1xuNjA0OTpcdFx0XHRpZiAoSVNfRVJSKGxpbmspKSB7XG42MDUwOlx0XHRcdFx0KCppZCkmIzQzOyYjNDM7O1xuNjA1MTpcdFx0XHRcdGdvdG8gYWdhaW47XG42MDUyOlx0XHRcdH1cbjYwNTM6XHRcdH1cbjYwNTQ6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xuNjA1NTpcdFxuNjA1NjpcdFx0cmV0dXJuIGxpbms7XG42MDU3Olx0fVxuNjA1ODpcdFxuNjA1OTpcdCNkZWZpbmUgQlBGX0xJTktfR0VUX0ZEX0JZX0lEX0xBU1RfRklFTEQgbGlua19pZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg2MQoJCQkJCQkJb3V0cHV0OiAxNTcKCQkJCQkJCXRob3VnaHRzOiA4MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGZvciBGb2N1cyBTeW1ib2wgRGV0ZXJtaW5hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbWFraW5nIHN1cmUgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjb3JyZWN0LiBGaXJzdCB0aGluZyBJIG5vdGljZWQgaXMgdGhhdCB0aGVyZSBhcmUgbm8gYCNpZmRlZmAgZ3VhcmRzIGFyb3VuZCBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAsIHdoaWNoIGlzIHJlbGV2YW50IHRvIG15IGFuYWx5c2lzLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCBzeW1ib2xzIHdlIHNob3VsZCBpbmNsdWRlLgoKVGhlIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGlzIGRlZmluaXRlbHkgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgLiAgSSBjaGVja2VkIGl0cyBjYWxsZXJzOyB0aGV5IGFyZSBgYnBmX2xpbmtfc2VxX3N0YXJ0YCBhbmQgYGJwZl9saW5rX3NlcV9uZXh0YC4gSW1wb3J0YW50bHksIEkgc2VlIHRoYXQgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGlzIGEgbm9uLXN0YXRpYywgZXhwb3J0ZWQgc3ltYm9sIGluIGB2bWxpbnV4YC4KCkkgdGhlbiBkb3VibGUgY2hlY2tlZCwgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGlzIG5vdCBzdGF0aWMsIHdoaWxlIGl0cyBjYWxsZXJzLCBgYnBmX2xpbmtfc2VxX3N0YXJ0YCBhbmQgYGJwZl9saW5rX3NlcV9uZXh0YCwgYXJlIHN0YXRpYyBgc2VxX29wZXJhdGlvbnNgIGluIGBrZXJuZWwvYnBmL2xpbmtfaXRlci5jYC4gSSBjb25zaWRlcmVkIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYGJwZl9saW5rX3NldHRsZWAsIGBicGZfbGlua19wcmltZWAsIGBicGZfbGlua19hbGxvY19pZGAsIGFuZCBgYnBmX2xpbmtfYnlfaWRgLCBidXQgSSBjb25maXJtZWQgdGhhdCBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgaXMgc3BlY2lmaWMgdG8gdGhlIEJQRiBsaW5rIGl0ZXJhdGlvbiBsb2dpYywgc28gSSBjYW4gZXhjbHVkZSB0aGVtLgoKSSB0aGVuIHJldmlzaXRlZCB0aGUgc2VjdGlvbiA0IGd1aWRlbGluZXMuIFRoZXkgZW1waGFzaXplIGxpc3RpbmcgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhbHRlcmVkIG9yIGRpcmVjdCBBUEkgZW50cnkgcG9pbnRzLCB3aGlsZSBhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuICBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgaXMsIGluIGZhY3QsIHRoZSBmdW5jdGlvbiBiZWluZyBhbHRlcmVkLiBBbmQgdGhlIGNhbGxlcnMgYXJlIGBicGZfbGlua19zZXFfc3RhcnRgIGFuZCBgYnBmX2xpbmtfc2VxX25leHRgLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIGRpZCBhIGBncmVwYCBzZWFyY2guIEFuZCwgeXVwLCB0aGUgb25seSBjYWxscyB0byBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgYXJlIGluIGBrZXJuZWwvYnBmL2xpbmtfaXRlci5jOjE4YCBhbmQgYGtlcm5lbC9icGYvbGlua19pdGVyLmM6MzRgLiBTbyB0aG9zZSB0aHJlZSBhcmUgdGhlIHJlbGV2YW50IHN5bWJvbHMuCgpOZXh0LCBJIGxvb2tlZCBhdCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiBJdCYjMzk7cyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIChga2VybmVsL2JwZi9zeXNjYWxsLmNgKSwgYW5kIGl0IG1vZGlmaWVzIGxpbmsgcmV0cmlldmFsIGxvZ2ljIGR1cmluZyBpdGVyYXRpb24gdG8gc2tpcCB1bnNldHRsZWQgbGlua3MuIFRoYXQgbWFrZXMgaXQgZnV6emluZy1yZWxldmFudC4gIEkgY29uZmlybWVkICYjMzQ7V29ydGhGdXp6aW5nOiB0cnVlJiMzNDsuCgpJIHRoZW4gbG9va2VkIGF0IHRoZSBlbmFibGUgY29uZmlndXJhdGlvbnMsIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIHByaW1hcnkgY29uZmlnIG5lZWRlZCBmb3IgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgYGtlcm5lbC9icGYvbGlua19pdGVyLmNgLiBXaGlsZSBgQlBGYCBpcyBzZWxlY3RlZCBieSBgQlBGX1NZU0NBTExgLCBleHBsaWNpdGx5IHNwZWNpZnlpbmcgYEJQRl9TWVNDQUxMYCAoYW5kIGBCUEZgIGlmIGRlc2lyZWQpIGlzIGlkZWFsLiAgYEJQRl9TWVNDQUxMYCBpcyB0aGUgc3RhbmRhcmQgZmxhZy4KCk5vdyB0byBmaW5hbGl6ZSB0aGUgYEZvY3VzU3ltYm9sc2A6CiogICBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAKKiAgIGBicGZfbGlua19zZXFfc3RhcnRgCiogICBgYnBmX2xpbmtfc2VxX25leHRgCgpJIHdlbnQgYmFjayBvbmUgbW9yZSB0aW1lLCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZnVuY3Rpb25zIHRvIGFkZCBvciBpZiB0aGUgZXhpc3Rpbmcgb25lcyBhcmUgcGVyZmVjdC4gVGhlc2UgdGhyZWUgYXJlIHRoZSBvbmx5IGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IHBpbnBvaW50IHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIG1vZGlmaWVkIGFuZCBpdHMgaXRlcmF0aW9uIGVudHJ5cG9pbnRzLgoKQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0IGFuZCBpcyB2ZXJpZmllZC4gTm93IEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfbGlua19zZXFfc3RhcnQmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2VxX25leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpIGluIGtlcm5lbC9icGYvc3lzY2FsbC5jIHRvIGNoZWNrIGlmIGxpbmstXHUwMDNlaWQgaXMgbm9uLXplcm8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQsIHJldHVybmluZyAtRUFHQUlOIG90aGVyd2lzZSBzbyB0aGUgaXRlcmF0aW9uIHNraXBzIHVuc2V0dGxlZCBsaW5rcy4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBCUEYgaXRlcmF0b3IgY29kZSBwYXRocyAoYnBmX2xpbmsgaXRlcmF0b3IpIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfbGlua19zZXFfc3RhcnQmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2VxX25leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpIGluIGtlcm5lbC9icGYvc3lzY2FsbC5jIHRvIGNoZWNrIGlmIGxpbmstXHUwMDNlaWQgaXMgbm9uLXplcm8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQsIHJldHVybmluZyAtRUFHQUlOIG90aGVyd2lzZSBzbyB0aGUgaXRlcmF0aW9uIHNraXBzIHVuc2V0dGxlZCBsaW5rcy4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBCUEYgaXRlcmF0b3IgY29kZSBwYXRocyAoYnBmX2xpbmsgaXRlcmF0b3IpIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIHZlcmlmeSB0aGF0IGBsaW5rLVx1MDAzZWlkYCBpcyBub24temVybyBiZWZvcmUgaW5jcmVtZW50aW5nIHRoZSBsaW5rIHJlZmNvdW50IGFuZCByZXR1cm5pbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGxpbmsgaXRlcmF0b3IgZnJvbSByZXR1cm5pbmcgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgb3IgdW5zZXR0bGVkIEJQRiBsaW5rIHRoYXQgd2FzIGFsbG9jYXRlZCBhbiBJRCBpbiBgbGlua19pZHJgIGJ1dCBoYXMgbm90IHlldCBiZWVuIHNldHRsZWQgdmlhIGBicGZfbGlua19zZXR0bGUoKWAuXG5cbmBsaW5rLVx1MDAzZWlkYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gMCBpbiBgYnBmX2xpbmtfaW5pdF9zbGVlcGFibGUoKWAgZHVyaW5nIGxpbmsgYWxsb2NhdGlvbiBhbmQgc2V0IHRvIGl0cyBJRCBvbmx5IHVwb24gYGJwZl9saW5rX3NldHRsZSgpYC4gVGhpcyBjaGFuZ2Ugb25seSBjaGVja3MgYW4gYWxyZWFkeS1pbml0aWFsaXplZCBmaWVsZCAoYGxpbmstXHUwMDNlaWRgKSB0byBoYW5kbGUgbGluayBsaWZlY3ljbGUvY29uY3VycmVuY3kgc3RhdGUsIGFuZCBkb2VzIG5vdCB0b3VjaCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NTVlMDI4MmJiMDBlZGVlY2ZmN2JhY2NhMjM4OTIxYWI4MzljNmI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMjA6MTA6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDg1M2I0N2Y4MTM4NDIuLjI0NGE5MzliOWQyZGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC02MDQyLDcgJiM0Mzs2MDQyLDEwIEBAIHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKQogYWdhaW46CiAJbGluayA9IGlkcl9nZXRfbmV4dCgmYW1wO2xpbmtfaWRyLCBpZCk7CiAJaWYgKGxpbmspIHsKLQkJbGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTsKJiM0MzsJCWlmIChsaW5rLSZndDtpZCkKJiM0MzsJCQlsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspOwomIzQzOwkJZWxzZQomIzQzOwkJCWxpbmsgPSBFUlJfUFRSKC1FQUdBSU4pOwogCQlpZiAoSVNfRVJSKGxpbmspKSB7CiAJCQkoKmlkKSYjNDM7JiM0Mzs7CiAJCQlnb3RvIGFnYWluOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBMaW5rIElEUiBJdGVyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgZnVuY3Rpb24gYXJvdW5kIGxpbmUgNjA0Mi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBzZWN0aW9uIGlzIHJlbGF0ZWQgdG8gaXRlcmF0aW5nIHRocm91Z2ggdGhlIGBicGZfbGlua2Agb2JqZWN0cyBzdG9yZWQgaW4gdGhlIGBsaW5rX2lkcmAgKElEUiAtIElEIFJhZGl4IFRyZWUpLgoKVGhlIGNvZGUgc25pcHBldCBzZWVtcyB0byBiZSBkZWFsaW5nIHdpdGggYSBsb29wIHVzaW5nIGBpZHJfZ2V0X25leHRgLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIHRyeWluZyB0byBmaW5kIHRoZSBuZXh0IGF2YWlsYWJsZSBgYnBmX2xpbmtgIGdpdmVuIGFuIElELiBUaGUgYGJwZl9saW5rX2luY19ub3RfemVyb2AgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgbGluayBpZiBpdCYjMzk7cyBmb3VuZC4gVGhlIGFkZGVkIGBpZiAobGluay0mZ3Q7aWQpYCBjaGVjayBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgY29uZGl0aW9uOiAgaWYgYSBgYnBmX2xpbmtgJiMzOTtzIElEIGlzICpub3QqIHNldCAoaS5lLiwgYGxpbmstJmd0O2lkYCBpcyAwKSwgdGhlbiBpdCByZXR1cm5zIGAtRUFHQUlOYCBhbmQgc2tpcHMgdGhhdCBsaW5rIGR1cmluZyBpdGVyYXRpb24uCgpNeSBodW5jaCBpcyB0aGF0IHRoaXMgaXMgcmVsYXRlZCB0byBhIHJhY2UgY29uZGl0aW9uIG9yIGEgdGVtcG9yYXJ5IHN0YXRlIHdoZXJlIGEgYGJwZl9saW5rYCBpcyBiZWluZyBjcmVhdGVkL2Rlc3Ryb3llZC4gSWYgdGhlIGBsaW5rLSZndDtpZGAgaXMgemVybywgdGhlbiBtYXliZSBpdCBtZWFucyB0aGUgbGluayBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlIGFuZCBub3QgcmVhZHkgdG8gYmUgdXNlZCBvciB0aGUgYGlkcmAgbWlnaHQgc3RpbGwgaGF2ZSBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBlbGVtZW50LiBSZXR1cm5pbmcgYC1FQUdBSU5gIHNpZ25hbHMgdG8gdGhlIGNhbGxlciB0byB0cnkgYWdhaW4sIHBvdGVudGlhbGx5IHNraXBwaW5nIG92ZXIgYW4gaW5jb21wbGV0ZSBlbnRyeSBpbiB0aGUgSURSLgoKTGV0JiMzOTtzIHVzZSBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgbGluZSA2MDQyIGFuZCBzZWUgaWYgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHB1cnBvc2Ugb2YgdGhlIGl0ZXJhdGlvbiBhbmQgdGhlIGAtRUFHQUlOYCBlcnJvciBhcmUgY29ycmVjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyogdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHdoeSB0aGlzIGNoZWNrIHdhcyBpbnRyb2R1Y2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MDI1Olx0XHRpZiAobGluaykge1xuNjAyNjpcdFx0XHRpZiAobGluay1cdTAwM2VpZClcbjYwMjc6XHRcdFx0XHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xuNjAyODpcdFx0XHRlbHNlXG42MDI5Olx0XHRcdFx0bGluayA9IEVSUl9QVFIoLUVBR0FJTik7XG42MDMwOlx0XHR9IGVsc2Uge1xuNjAzMTpcdFx0XHRsaW5rID0gRVJSX1BUUigtRU5PRU5UKTtcbjYwMzI6XHRcdH1cbjYwMzM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xuNjAzNDpcdFx0cmV0dXJuIGxpbms7XG42MDM1Olx0fVxuNjAzNjpcdFxuNjAzNzpcdHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxuNjAzODpcdHtcbjYwMzk6XHRcdHN0cnVjdCBicGZfbGluayAqbGluaztcbjYwNDA6XHRcbjYwNDE6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbjYwNDI6XHRhZ2FpbjpcbjYwNDM6XHRcdGxpbmsgPSBpZHJfZ2V0X25leHQoXHUwMDI2bGlua19pZHIsIGlkKTtcbjYwNDQ6XHRcdGlmIChsaW5rKSB7XG42MDQ1Olx0XHRcdGlmIChsaW5rLVx1MDAzZWlkKVxuNjA0NjpcdFx0XHRcdGxpbmsgPSBicGZfbGlua19pbmNfbm90X3plcm8obGluayk7XG42MDQ3Olx0XHRcdGVsc2VcbjYwNDg6XHRcdFx0XHRsaW5rID0gRVJSX1BUUigtRUFHQUlOKTtcbjYwNDk6XHRcdFx0aWYgKElTX0VSUihsaW5rKSkge1xuNjA1MDpcdFx0XHRcdCgqaWQpJiM0MzsmIzQzOztcbjYwNTE6XHRcdFx0XHRnb3RvIGFnYWluO1xuNjA1MjpcdFx0XHR9XG42MDUzOlx0XHR9XG42MDU0Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbjYwNTU6XHRcbjYwNTY6XHRcdHJldHVybiBsaW5rO1xuNjA1NzpcdH1cbjYwNTg6XHRcbjYwNTk6XHQjZGVmaW5lIEJQRl9MSU5LX0dFVF9GRF9CWV9JRF9MQVNUX0ZJRUxEIGxpbmtfaWRcbjYwNjA6XHRcbjYwNjE6XHRzdGF0aWMgaW50IGJwZl9saW5rX2dldF9mZF9ieV9pZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbjYwNjI6XHR7XG42MDYzOlx0XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG42MDY0Olx0XHR1MzIgaWQgPSBhdHRyLVx1MDAzZWxpbmtfaWQ7XG42MDY1Olx0XHRpbnQgZmQ7XG42MDY2Olx0XG42MDY3Olx0XHRpZiAoQ0hFQ0tfQVRUUihCUEZfTElOS19HRVRfRkRfQllfSUQpKVxuNjA2ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjYwNjk6XHRcbjYwNzA6XHRcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbjYwNzE6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjYwNzI6XHRcbjYwNzM6XHRcdGxpbmsgPSBicGZfbGlua19ieV9pZChpZCk7XG42MDc0Olx0XHRpZiAoSVNfRVJSKGxpbmspKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTUwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgYnBmX2xpbmtfYnlfaWRgKioKCk9rYXksIHRpbWUgdG8gZ2V0IGludG8gdGhlIHdlZWRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGEgQlBGIGxpbmsgSUQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgYnBmX2xpbmtfYnlfaWRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGxldCYjMzk7cyBncmFiIHRoZSByZWxldmFudCBjb2RlIGJsb2NrLCBsaW5lcyA2MDEwLTYwMzUuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYW5kLCBjcnVjaWFsbHksIHRyYWNlIGJhY2sgaG93IGBsaW5rLSZndDtpZGAgZ2V0cyBwb3B1bGF0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHNvdXJjZSBvZiB0aGUgbGluayBJRCBpcyBnb2luZyB0byBiZSBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjAxMDpcdHtcbjYwMTE6XHRcdHJldHVybiBhdG9taWM2NF9mZXRjaF9hZGRfdW5sZXNzKFx1MDAyNmxpbmstXHUwMDNlcmVmY250LCAxLCAwKSA/IGxpbmsgOiBFUlJfUFRSKC1FTk9FTlQpO1xuNjAxMjpcdH1cbjYwMTM6XHRFWFBPUlRfU1lNQk9MKGJwZl9saW5rX2luY19ub3RfemVybyk7XG42MDE0Olx0XG42MDE1Olx0c3RydWN0IGJwZl9saW5rICpicGZfbGlua19ieV9pZCh1MzIgaWQpXG42MDE2Olx0e1xuNjAxNzpcdFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuNjAxODpcdFxuNjAxOTpcdFx0aWYgKCFpZClcbjYwMjA6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG42MDIxOlx0XG42MDIyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG42MDIzOlx0XHQvKiBiZWZvcmUgbGluayBpcyBcJiMzNDtzZXR0bGVkXCYjMzQ7LCBJRCBpcyAwLCBwcmV0ZW5kIGl0IGRvZXNuJiMzOTt0IGV4aXN0IHlldCAqL1xuNjAyNDpcdFx0bGluayA9IGlkcl9maW5kKFx1MDAyNmxpbmtfaWRyLCBpZCk7XG42MDI1Olx0XHRpZiAobGluaykge1xuNjAyNjpcdFx0XHRpZiAobGluay1cdTAwM2VpZClcbjYwMjc6XHRcdFx0XHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xuNjAyODpcdFx0XHRlbHNlXG42MDI5Olx0XHRcdFx0bGluayA9IEVSUl9QVFIoLUVBR0FJTik7XG42MDMwOlx0XHR9IGVsc2Uge1xuNjAzMTpcdFx0XHRsaW5rID0gRVJSX1BUUigtRU5PRU5UKTtcbjYwMzI6XHRcdH1cbjYwMzM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xuNjAzNDpcdFx0cmV0dXJuIGxpbms7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJQRiBMaW5rIElEIE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIEJQRiBsaW5rIElEIGhhbmRsaW5nLiBGaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgYnBmX2xpbmtfYnlfaWRgIGhhbmRsZXMgbGluayBsb29rdXBzLiBJdCBzZWVtcyBsaWtlIHRoZSBJRCBpcyBjaGVja2VkLCBhbmQgaWYgaXQmIzM5O3MgemVybywgdGhlIGxpbmsgaXMgY29uc2lkZXJlZCAmIzM0O3Vuc2V0dGxlZCYjMzQ7IGFuZCBkb2VzbiYjMzk7dCBleGlzdCB5ZXQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJZiBgbGluay0mZ3Q7aWRgIGlzIHplcm8sIHdlIHJldHVybiBgLUVBR0FJTmAuIE90aGVyd2lzZSwgd2UgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRlciB1c2luZyBgYnBmX2xpbmtfaW5jX25vdF96ZXJvYC4KCk5leHQsIEkgc2VlIGEgY29tcGFyaXNvbiB3aXRoIGhvdyBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgaGFuZGxlZCB0aGluZ3MgcHJldmlvdXNseSwgYW5kIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgYWRkaXRpb24gb2YgYSBzaW1pbGFyIGNoZWNrIGZvciBgbGluay0mZ3Q7aWRgICpiZWZvcmUqIHRoZSByZWZlcmVuY2UgY291bnQgaXMgaW5jcmVtZW50ZWQuIElmIGl0JiMzOTtzIHplcm8sIHdlIHJldHVybiBgLUVBR0FJTmAsIGFuZCByZXRyeS4gVGhpcyBsb29rcyBsaWtlIGEgcmFjZSBjb25kaXRpb24gcHJvdGVjdGlvbiwgb3IgcG9zc2libHkgYW4gYXR0ZW1wdCB0byBwcmV2ZW50IGdyYWJiaW5nIGFuIGluLWZsaWdodCBsaW5rLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IHRoZSBJRCBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCAmIzM0O3NldHRsZWQuJiMzNDsgTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhhdCBgYnBmX2xpbmtfYWxsb2NfaWRgIGFuZCBgYnBmX2xpbmtfc2V0dGxlYCBhcmUgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBoZXJlLCBhbmQgSSYjMzk7bGwgdXNlIGBncmVwYCB0byBmaW5kIHRoZW0gaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBzZWUgaG93IHRob3NlIG9wZXJhdGlvbnMgaW50ZXJhY3Qgd2l0aCBgbGlua19pZHJgLiBUaGF0IHNob3VsZCBnaXZlIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlua19pZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz02ND1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1hcF9pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NTpzdGF0aWMgREVGSU5FX0lEUihsaW5rX2lkcik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NjpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjctXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzI1OT1zdGF0aWMgdm9pZCBicGZfbGlua19mcmVlX2lkKGludCBpZClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjYzLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzI2NDpcdHNwaW5fbG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNjU6XHRpZHJfcmVtb3ZlKFx1MDAyNmxpbmtfaWRyLCBpZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjY2Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjY3LX1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNDc2PXN0YXRpYyBpbnQgYnBmX2xpbmtfYWxsb2NfaWQoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0ODAtXHRpZHJfcHJlbG9hZChHRlBfS0VSTkVMKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0ODE6XHRzcGluX2xvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDgyOlx0aWQgPSBpZHJfYWxsb2NfY3ljbGljKFx1MDAyNmxpbmtfaWRyLCBsaW5rLCAxLCBJTlRfTUFYLCBHRlBfQVRPTUlDKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0ODM6XHRzcGluX3VubG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0ODQtXHRpZHJfcHJlbG9hZF9lbmQoKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDg5LS8qIFByZXBhcmUgYnBmX2xpbmsgdG8gYmUgZXhwb3NlZCB0byB1c2VyLXNwYWNlIGJ5IGFsbG9jYXRpbmcgYW5vbl9pbm9kZSBmaWxlLFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ5MDogKiByZXNlcnZpbmcgdW51c2VkIEZEIGFuZCBhbGxvY2F0aW5nIElEIGZyb20gbGlua19pZHIuIFRoaXMgaXMgdG8gYmUgcGFpcmVkXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDkxLSAqIHdpdGggYnBmX2xpbmtfc2V0dGxlKCkgdG8gaW5zdGFsbCBGRCBhbmQgSUQgYW5kIGV4cG9zZSBicGZfbGluayB0b1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM1MzM9aW50IGJwZl9saW5rX3NldHRsZShzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyICpwcmltZXIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzNS1cdC8qIG1ha2UgYnBmX2xpbmsgZmV0Y2hhYmxlIGJ5IElEICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTM2Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzNy1cdHByaW1lci1cdTAwM2VsaW5rLVx1MDAzZWlkID0gcHJpbWVyLVx1MDAzZWlkO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUzODpcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzOS1cdC8qIG1ha2UgYnBmX2xpbmsgZmV0Y2hhYmxlIGJ5IEZEICovXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjAxNT1zdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2J5X2lkKHUzMiBpZClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDIxLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyMjpcdHNwaW5fbG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjMtXHQvKiBiZWZvcmUgbGluayBpcyBcJiMzNDtzZXR0bGVkXCYjMzQ7LCBJRCBpcyAwLCBwcmV0ZW5kIGl0IGRvZXNuJiMzOTt0IGV4aXN0IHlldCAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyNDpcdGxpbmsgPSBpZHJfZmluZChcdTAwMjZsaW5rX2lkciwgaWQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyNS1cdGlmIChsaW5rKSB7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAzMi1cdH1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMzM6XHRzcGluX3VubG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMzQtXHRyZXR1cm4gbGluaztcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MDM3PXN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNDAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDQxOlx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjA0Mi1hZ2Fpbjpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwNDM6XHRsaW5rID0gaWRyX2dldF9uZXh0KFx1MDAyNmxpbmtfaWRyLCBpZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDQ0LVx0aWYgKGxpbmspIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDUzLVx0fVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjA1NDpcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjA1NS1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzA2PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDU0LVx0XHRlcnIgPSBicGZfb2JqX2dldF9uZXh0X2lkKFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDU1Olx0XHRcdFx0XHQgIFx1MDAyNmxpbmtfaWRyLCBcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NTYtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTkzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIFVzYWdlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgLiBVbmRlcnN0YW5kaW5nIHdoZXJlIGl0JiMzOTtzICp1c2VkKiB3aWxsIGdpdmUgbWUgY3JpdGljYWwgaW5zaWdodHMgaW50byBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGguIEtub3dpbmcgdGhlIHNwZWNpZmljIGNvbnRleHRzIHdpbGwgaGVscCBtZSByYXBpZGx5IHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVudCBzY2VuYXJpb3MgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBlbXBsb3llZC4gSXMgaXQgZm9yIGVudW1lcmF0aW9uLCBpdGVyYXRpb24sIHNvbWUgZm9ybSBvZiBzdGF0ZSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gbGlua3MsIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgZXhwbG9yYXRpb24gb2YgaXRzIGNhbGwgc2l0ZXMgd2lsbCBjdXQgdGhyb3VnaCBwb3RlbnRpYWwgY29uZnVzaW9uIGFuZCBoZWxwIGZvY3VzIG15IGF0dGVudGlvbiBlZmZpY2llbnRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTI5MDY9c3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfZnJvbV9mZCh1MzIgdWZkKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MjkwNzpzdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2dldF9jdXJyX29yX25leHQodTMyICppZCk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI5MDgtXG4tLVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYz0xMz1zdGF0aWMgdm9pZCAqYnBmX2xpbmtfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTE3LVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzoxODpcdGxpbmsgPSBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KFx1MDAyNmluZm8tXHUwMDNlbGlua19pZCk7XG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTE5LVx0aWYgKCFsaW5rKVxuLS1cbmtlcm5lbC9icGYvbGlua19pdGVyLmM9Mjc9c3RhdGljIHZvaWQgKmJwZl9saW5rX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTMzLVx0YnBmX2xpbmtfcHV0KChzdHJ1Y3QgYnBmX2xpbmsgKil2KTtcbmtlcm5lbC9icGYvbGlua19pdGVyLmM6MzQ6XHRyZXR1cm4gYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dChcdTAwMjZpbmZvLVx1MDAzZWxpbmtfaWQpO1xua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0zNS19XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjAxNT1zdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2J5X2lkKHUzMiBpZClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDM2LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAzNzpzdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2dldF9jdXJyX29yX25leHQodTMyICppZClcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODczCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBMaW5rIEl0ZXJhdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgQlBGIGxpbmtzIGFyZSBiZWluZyBpdGVyYXRlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYGtlcm5lbC9icGYvbGlua19pdGVyLmNgIGZpbGUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCB0aGUgaXRlcmF0b3IgdXNlZCBieSBgYnBmX2xpbmtfc2VxX3N0YXJ0YCBhbmQgYGJwZl9saW5rX3NlcV9uZXh0YC4gVGhlc2UgZnVuY3Rpb24gbmFtZXMgc3VnZ2VzdCBhIHNlcXVlbmNlLWJhc2VkIHRyYXZlcnNhbCBvZiBCUEYgbGlua3MsIGxpa2VseSB1c2VkIHRvIHByZXNlbnQgYSBsaXN0IG9mIGxpbmtzLCBwZXJoYXBzIGZvciB1c2Vyc3BhY2UgY29uc3VtcHRpb24gb3IgYW5vdGhlciBrZXJuZWwgc3Vic3lzdGVtLiBUaGUgY29yZSBvZiBteSBpbnZlc3RpZ2F0aW9uIHdpbGwgdGhlcmVmb3JlIGZvY3VzIG9uIGhvdyB0aGlzIGl0ZXJhdG9yIGlzIGltcGxlbWVudGVkLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCB1dGlsaXplcyBpbnRlcm5hbGx5IHRvIG1hbmFnZSB0aGUgdHJhdmVyc2FsLCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIGZvciBwZXJmb3JtYW5jZSBvciBzeW5jaHJvbml6YXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbGlua19pdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LyogQ29weXJpZ2h0IChjKSAyMDIyIFJlZCBIYXQsIEluYy4gKi9cbiAgIDM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnRmX2lkcy5oXHUwMDNlXG4gICA4Olx0XG4gICA5Olx0c3RydWN0IGJwZl9pdGVyX3NlcV9saW5rX2luZm8ge1xuICAxMDpcdFx0dTMyIGxpbmtfaWQ7XG4gIDExOlx0fTtcbiAgMTI6XHRcbiAgMTM6XHRzdGF0aWMgdm9pZCAqYnBmX2xpbmtfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbiAgMTQ6XHR7XG4gIDE1Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2xpbmtfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuICAxNjpcdFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuICAxNzpcdFxuICAxODpcdFx0bGluayA9IGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoXHUwMDI2aW5mby1cdTAwM2VsaW5rX2lkKTtcbiAgMTk6XHRcdGlmICghbGluaylcbiAgMjA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDIxOlx0XG4gIDIyOlx0XHRpZiAoKnBvcyA9PSAwKVxuICAyMzpcdFx0XHQmIzQzOyYjNDM7KnBvcztcbiAgMjQ6XHRcdHJldHVybiBsaW5rO1xuICAyNTpcdH1cbiAgMjY6XHRcbiAgMjc6XHRzdGF0aWMgdm9pZCAqYnBmX2xpbmtfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuICAyODpcdHtcbiAgMjk6XHRcdHN0cnVjdCBicGZfaXRlcl9zZXFfbGlua19pbmZvICppbmZvID0gc2VxLVx1MDAzZXByaXZhdGU7XG4gIDMwOlx0XG4gIDMxOlx0XHQmIzQzOyYjNDM7KnBvcztcbiAgMzI6XHRcdCYjNDM7JiM0MztpbmZvLVx1MDAzZWxpbmtfaWQ7XG4gIDMzOlx0XHRicGZfbGlua19wdXQoKHN0cnVjdCBicGZfbGluayAqKXYpO1xuICAzNDpcdFx0cmV0dXJuIGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoXHUwMDI2aW5mby1cdTAwM2VsaW5rX2lkKTtcbiAgMzU6XHR9XG4gIDM2Olx0XG4gIDM3Olx0c3RydWN0IGJwZl9pdGVyX19icGZfbGluayB7XG4gIDM4Olx0XHRfX2JwZl9tZF9wdHIoc3RydWN0IGJwZl9pdGVyX21ldGEgKiwgbWV0YSk7XG4gIDM5Olx0XHRfX2JwZl9tZF9wdHIoc3RydWN0IGJwZl9saW5rICosIGxpbmspO1xuICA0MDpcdH07XG4gIDQxOlx0XG4gIDQyOlx0REVGSU5FX0JQRl9JVEVSX0ZVTkMoYnBmX2xpbmssIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gIDQzOlx0XG4gIDQ0Olx0c3RhdGljIGludCBfX2JwZl9saW5rX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBib29sIGluX3N0b3ApXG4gIDQ1Olx0e1xuICA0NjpcdFx0c3RydWN0IGJwZl9pdGVyX19icGZfbGluayBjdHg7XG4gIDQ3Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xuICA0ODpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuICA0OTpcdFx0aW50IHJldCA9IDA7XG4gIDUwOlx0XG4gIDUxOlx0XHRjdHgubWV0YSA9IFx1MDAyNm1ldGE7XG4gIDUyOlx0XHRjdHgubGluayA9IHY7XG4gIDUzOlx0XHRtZXRhLnNlcSA9IHNlcTtcbiAgNTQ6XHRcdHByb2cgPSBicGZfaXRlcl9nZXRfaW5mbyhcdTAwMjZtZXRhLCBpbl9zdG9wKTtcbiAgNTU6XHRcdGlmIChwcm9nKVxuICA1NjpcdFx0XHRyZXQgPSBicGZfaXRlcl9ydW5fcHJvZyhwcm9nLCBcdTAwMjZjdHgpO1xuICA1NzpcdFxuICA1ODpcdFx0cmV0dXJuIHJldDtcbiAgNTk6XHR9XG4gIDYwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBMaW5rIElEIEFsbG9jYXRpb24gYW5kIFJldHJpZXZhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IEJQRiBsaW5rcyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHRoZSBJRCBhbGxvY2F0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGxpZmVjeWNsZSBvZiBhIGxpbmsuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgpJbml0aWFsbHksIHdoZW4gYSBsaW5rIGlzIGJlaW5nIGNyZWF0ZWQsIGBicGZfbGlua19hbGxvY19pZGAgaXMgY2FsbGVkLCBhbmQgYW4gSUQgaXMgYWxsb2NhdGVkIGZyb20gYGxpbmtfaWRyYCB1c2luZyBgaWRyX2FsbG9jX2N5Y2xpY2AuIE5vdywgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIOKAkyB0aGUgbGluayBpcyAqaW5zZXJ0ZWQqIGludG8gYGxpbmtfaWRyYCwgYnV0IHRoZSBgbGluay0mZ3Q7aWRgIGZpZWxkICppc24mIzM5O3QqIHNldCB5ZXQuIEl0IHJlbWFpbnMgemVyby4gVGhpcyBtZWFucywgdGhlcmUmIzM5O3MgYSBwZXJpb2Qgd2hlcmUgdGhlIGxpbmsgZXhpc3RzIGluIHRoZSBJRFIgYnV0IGlzbiYjMzk7dCBjb25zaWRlcmVkICYjMzQ7c2V0dGxlZC4mIzM0OyBUaGUgYWN0dWFsIElEIGFzc2lnbm1lbnQgaGFwcGVucyBsYXRlciBpbiBgYnBmX2xpbmtfc2V0dGxlYCwgd2hlcmUgYGxpbmstJmd0O2lkYCBpcyBmaW5hbGx5IHBvcHVsYXRlZCB3aXRoIHRoZSBhbGxvY2F0ZWQgSUQuIElmIGxpbmsgY3JlYXRpb24gZmFpbHMsIGBicGZfbGlua19jbGVhbnVwKClgIGlzIGNhbGxlZCB3aGljaCB3aWxsIGNhbGwgYGJwZl9saW5rX2ZyZWVfaWQoKWAgdG8gdGVhciBpdCBkb3duLgoKTm93LCBpbiBgYnBmX2xpbmtfYnlfaWRgLCB0aGUgY29kZSAqY29ycmVjdGx5KiBjaGVja3MgYGxpbmstJmd0O2lkYCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBsaW5rLiBJZiBpdCYjMzk7cyB6ZXJvLCBpdCBtZWFucyB0aGUgbGluayBpc24mIzM5O3QgcmVhZHksIGFuZCBpdCYjMzk7cyB0cmVhdGVkIGFzIGlmIGl0IGRvZXNuJiMzOTt0IGV4aXN0IOKAkyByZXR1cm5pbmcgYW4gYC1FQUdBSU5gIGVycm9yLiBHb29kLiBUaGF0IHByZXZlbnRzIHJldHVybmluZyBoYWxmLWJha2VkIGxpbmtzLgoKSG93ZXZlciwgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIHByZXNlbnRzIGEgcG90ZW50aWFsIGlzc3VlLiBCZWZvcmUgdGhlIHBhdGNoLCBpdCBzZWVtcyBsaWtlIGlmIGl0IHN0dW1ibGVkIHVwb24gYW4gdW5zZXR0bGVkIGxpbmsgKHdoZXJlIGBsaW5rLSZndDtpZGAgaXMgc3RpbGwgMCksIGl0IHdvdWxkIGNhbGwgYGJwZl9saW5rX2luY19ub3RfemVybygpYCwgcG90ZW50aWFsbHkgcmV0dXJuaW5nIGFuIHVuc2V0dGxlZCBsaW5rLiBUaGF0JiMzOTtzIGNsZWFybHkgYSBidWcuIEl0JiMzOTtzIHBvc3NpYmxlIGZvciBzb21lb25lIHRvIGl0ZXJhdGUgaXQgd2hpbGUgaXQmIzM5O3MgYmVpbmcgY3JlYXRlZCwgdG9ybiBkb3duLCBvciBpZiB0aGUgaW5pdGlhbGl6YXRpb24gaGFkIGlzc3Vlcy4KClRoZSBwYXRjaCBjb3JyZWN0cyB0aGlzLiBOb3csIGlmIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YCBmaW5kcyBhIGxpbmsgd2l0aCBgbGluay0mZ3Q7aWQgPT0gMGAsIGl0IGFzc2lnbnMgYEVSUl9QVFIoLUVBR0FJTilgIHRvIGBsaW5rYCwgd2hpY2ggaXMgdGhlbiBjYXVnaHQgYnkgYElTX0VSUihsaW5rKWAsIGFuZCB0aGUgY29kZSBjb3JyZWN0bHkgaW5jcmVtZW50cyB0aGUgSUQgYW5kIGNvbnRpbnVlcyBpdGVyYXRpb24uCgpJIG5lZWQgdG8gY29uZmlybSBpZiBJIG5lZWQgdG8gd29ycnkgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBsaW5rLSZndDtpZGAgKml0c2VsZiogaXMgdW5pbml0aWFsaXplZCB3aGVuIHRoZSBgYnBmX2xpbmtgIHN0cnVjdCBpcyBhbGxvY2F0ZWQuIFNvLCBJIHdpbGwgc2VhcmNoIGZvciB3aGVyZSBgYnBmX2xpbmtgIGlzIGFsbG9jYXRlZCBhbmQgaG93IHRoZSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byByZXZpZXcgYGJwZl9saW5rX2luaXRgIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIHRoaXMgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2xpbmtfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRraXQuYz05ODg9c3RhdGljIGludCBuZXRraXRfbGlua19pbml0KHN0cnVjdCBuZXRraXRfbGluayAqbmtsLFxuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jLTk5My17XG5kcml2ZXJzL25ldC9uZXRraXQuYzo5OTQ6XHRicGZfbGlua19pbml0KFx1MDAyNm5rbC1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX05FVEtJVCxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTk5NS1cdFx0ICAgICAgXHUwMDI2bmV0a2l0X2xpbmtfbG9wcywgcHJvZywgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0yODg4PWludCBicGZfcHJvZ19uZXdfZmQoc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbmluY2x1ZGUvbGludXgvYnBmLmgtMjg4OS1cbmluY2x1ZGUvbGludXgvYnBmLmg6Mjg5MDp2b2lkIGJwZl9saW5rX2luaXQoc3RydWN0IGJwZl9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjg5MS1cdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyAqb3BzLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI4OTItXHRcdCAgIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6Mjg5Mzp2b2lkIGJwZl9saW5rX2luaXRfc2xlZXBhYmxlKHN0cnVjdCBicGZfbGluayAqbGluaywgZW51bSBicGZfbGlua190eXBlIHR5cGUsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI4OTQtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTMzMDQ9YnBmX3Byb2dfaW5jX25vdF96ZXJvKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMzMDgtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMzMDk6c3RhdGljIGlubGluZSB2b2lkIGJwZl9saW5rX2luaXQoc3RydWN0IGJwZl9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzMxMC1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zMzE0LVxuaW5jbHVkZS9saW51eC9icGYuaDozMzE1OnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfbGlua19pbml0X3NsZWVwYWJsZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxuaW5jbHVkZS9saW51eC9icGYuaC0zMzE2LVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NTA0PWludCBicGZfaXRlcl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTU1NC1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo1NTU6XHRicGZfbGlua19pbml0KFx1MDAyNmxpbmstXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9JVEVSLCBcdTAwMjZicGZfaXRlcl9saW5rX2xvcHMsIHByb2csXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTU2LVx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTQzNz1pbnQgYnBmX3N0cnVjdF9vcHNfbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0NjAtXHR9XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQ2MTpcdGJwZl9saW5rX2luaXQoXHUwMDI2bGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNmJwZl9zdHJ1Y3Rfb3BzX21hcF9sb3BzLCBOVUxMLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0NjItXHRcdCAgICAgIGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTU0MD1pbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU1OC1cdH1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTU1OTpcdGJwZl9saW5rX2luaXQoXHUwMDI2bGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX0NHUk9VUCwgXHUwMDI2YnBmX2Nncm91cF9saW5rX2xvcHMsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NjAtXHRcdCAgICAgIHByb2csIGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTQ3MT1pbnQgbmV0bnNfYnBmX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDk2LVx0fVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6NDk3Olx0YnBmX2xpbmtfaW5pdChcdTAwMjZuZXRfbGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX05FVE5TLFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDk4LVx0XHQgICAgICBcdTAwMjZicGZfbmV0bnNfbGlua19vcHMsIHByb2csIHR5cGUpO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTMyMDQ9c3RhdGljIGludCBicGZfb2JqX2dldChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjIwLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzIyMTovKiBicGZfbGlua19pbml0X3NsZWVwYWJsZSgpIGFsbG93cyB0byBzcGVjaWZ5IHdoZXRoZXIgQlBGIGxpbmsgaXRzZWxmIGhhc1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzIyMi0gKiBcJiMzNDtzbGVlcGFibGVcJiMzNDsgc2VtYW50aWNzLCB3aGljaCBub3JtYWxseSB3b3VsZCBtZWFuIHRoYXQgQlBGIGxpbmsmIzM5O3MgYXR0YWNoXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzIyOC0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyMjk6dm9pZCBicGZfbGlua19pbml0X3NsZWVwYWJsZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzIzMC1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgKm9wcywgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyNDItXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjQzOnZvaWQgYnBmX2xpbmtfaW5pdChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI0NC1cdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyAqb3BzLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI0Ni17XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjQ3Olx0YnBmX2xpbmtfaW5pdF9zbGVlcGFibGUobGluaywgdHlwZSwgb3BzLCBwcm9nLCBhdHRhY2hfdHlwZSwgZmFsc2UpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI0OC19XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzI1MD12b2lkIGJwZl90cmFtcF9saW5rX2luaXQoc3RydWN0IGJwZl90cmFtcF9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjUzLXtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNTQ6XHRicGZfbGlua19pbml0KFx1MDAyNmxpbmstXHUwMDNlbGluaywgdHlwZSwgb3BzLCBwcm9nLCBhdHRhY2hfdHlwZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjU1LVx0bGluay1cdTAwM2Vub2RlLmxpbmsgPSBcdTAwMjZsaW5rLVx1MDAzZWxpbms7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDI0NT1zdGF0aWMgaW50IGJwZl9wZXJmX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDI2NC1cdH1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQyNjU6XHRicGZfbGlua19pbml0KFx1MDAyNmxpbmstXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9QRVJGX0VWRU5ULCBcdTAwMjZicGZfcGVyZl9saW5rX2xvcHMsIHByb2csXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MjY2LVx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00Mjk3PXN0YXRpYyBpbnQgYnBmX3Jhd190cF9saW5rX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM0Ny1cdH1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQzNDg6XHRicGZfbGlua19pbml0X3NsZWVwYWJsZShcdTAwMjZsaW5rLVx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfUkFXX1RSQUNFUE9JTlQsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MzQ5LVx0XHRcdFx0XHUwMDI2YnBmX3Jhd190cF9saW5rX2xvcHMsIHByb2csIGF0dGFjaF90eXBlLFxuLS1cbmtlcm5lbC9icGYvdGN4LmM9Mjk4PXN0YXRpYyBpbnQgdGN4X2xpbmtfaW5pdChzdHJ1Y3QgdGN4X2xpbmsgKnRjeCxcbi0tXG5rZXJuZWwvYnBmL3RjeC5jLTMwMy17XG5rZXJuZWwvYnBmL3RjeC5jOjMwNDpcdGJwZl9saW5rX2luaXQoXHUwMDI2dGN4LVx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfVENYLCBcdTAwMjZ0Y3hfbGlua19sb3BzLCBwcm9nLFxua2VybmVsL2JwZi90Y3guYy0zMDUtXHRcdCAgICAgIGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNzgwPWludCBicGZfa3Byb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI4ODAtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mjg4MTpcdGJwZl9saW5rX2luaXQoXHUwMDI2bGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX0tQUk9CRV9NVUxUSSxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yODgyLVx0XHQgICAgICBcdTAwMjZicGZfa3Byb2JlX211bHRpX2xpbmtfbG9wcywgcHJvZywgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMyNTE9aW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzM2OC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozMzY5Olx0YnBmX2xpbmtfaW5pdChcdTAwMjZsaW5rLVx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfVVBST0JFX01VTFRJLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMzNzAtXHRcdCAgICAgIFx1MDAyNmJwZl91cHJvYmVfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mzg0MD1pbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MDAtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkwMTpcdGJwZl9saW5rX2luaXQoXHUwMDI2bGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEksXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkwMi1cdFx0ICAgICAgXHUwMDI2YnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMDczMT1pbnQgYnBmX3hkcF9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNzUyLVxubmV0L2NvcmUvZGV2LmM6MTA3NTM6XHRicGZfbGlua19pbml0KFx1MDAyNmxpbmstXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9YRFAsIFx1MDAyNmJwZl94ZHBfbGlua19sb3BzLCBwcm9nLFxubmV0L2NvcmUvZGV2LmMtMTA3NTQtXHRcdCAgICAgIGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTg3NT1pbnQgc29ja19tYXBfbGlua19jcmVhdGUoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MDAtXHRhdHRhY2hfdHlwZSA9IGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGU7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE5MDE6XHRicGZfbGlua19pbml0KFx1MDAyNnNvY2ttYXBfbGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1NPQ0tNQVAsIFx1MDAyNnNvY2tfbWFwX2xpbmtfb3BzLCBwcm9nLFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTAyLVx0XHQgICAgICBhdHRhY2hfdHlwZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jPTIxMD1pbnQgYnBmX25mX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jLTIyNy1cbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYzoyMjg6XHRicGZfbGlua19pbml0KFx1MDAyNmxpbmstXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9ORVRGSUxURVIsIFx1MDAyNmJwZl9uZl9saW5rX2xvcHMsIHByb2csXG5uZXQvbmV0ZmlsdGVyL25mX2JwZl9saW5rLmMtMjI5LVx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIGBicGZfbGlua19pbml0X3NsZWVwYWJsZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkaXNzZWN0IHRoaXMgZnVuY3Rpb24sIGBicGZfbGlua19pbml0X3NsZWVwYWJsZWAsIHJlc2lkaW5nIGluIHRoZSBoZWFydCBvZiB0aGUgQlBGIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7U2xlZXBhYmxlPyYjMzQ7IEludGVyZXN0aW5nLi4uIHRoaXMgaW1wbGllcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgQlBGIGxpbmsgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB0aGF0LCBmb3Igc29tZSByZWFzb24sIG1pZ2h0IGJsb2NrIG9yIHJlcXVpcmUgYXN5bmNocm9ub3VzIGhhbmRsaW5nLiBUaGF0IGluc3RhbnRseSByYWlzZXMgYSBmbGFnOiB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgYWNxdWlyZWQgaGVyZSwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBtaWdodCB0aGV5IG5vdCBiZSBpbW1lZGlhdGVseSBhdmFpbGFibGU/IFdlJiMzOTtyZSBwb3RlbnRpYWxseSBlbnRlcmluZyBhIGRvbWFpbiB3aGVyZSBjb25jdXJyZW5jeSBhbmQgbG9jayBjb250ZW50aW9uIGFyZSBjcml0aWNhbCBjb25zaWRlcmF0aW9ucy4KCkkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgaW50byB0aGUgc3BlY2lmaWMgY29kZSB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBvZiB0aGUgJiMzNDtzbGVlcGFibGUmIzM0OyBhc3BlY3QuIElzIHRoaXMgcmVsYXRlZCB0byBsb2FkaW5nIGEgQlBGIHByb2dyYW0sIGF0dGFjaGluZyBpdCB0byBhIHNwZWNpZmljIGhvb2sgb3IgdHJhY2Vwb2ludCwgb3IgcGVyaGFwcyBpbml0aWFsaXppbmcgc29tZSBmb3JtIG9mIHNoYXJlZCBkYXRhIHN0cnVjdHVyZT8gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2Ugc3VnZ2VzdHMgd2UmIzM5O3JlIGxpa2VseSBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBCUEYgbGluaywgcmF0aGVyIHRoYW4gaGFuZGxpbmcgdGhlIGFjdHVhbCBleGVjdXRpb24gb3IgZGF0YSB0cmFuc2Zlci4gVGhhdCYjMzk7cyBhIGtleSBkaXN0aW5jdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBjbG9zZWx5IGZvciBtZW1vcnkgYWxsb2NhdGlvbnMsIHBvdGVudGlhbCBkZXZpY2UgaW50ZXJhY3Rpb25zLCBvciBhbnkgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGludm9sdmUgd2FpdGluZyBvbiBleHRlcm5hbCBldmVudHMuIE15IGd1dCBmZWVsaW5nIGlzIHRoaXMgd2lsbCBiZSByZWxhdGVkIHRvIGEgQlBGLXRvLUJQRiAob3IgcGVyaGFwcyBCUEYtdG8tdXNlcikgY29tbXVuaWNhdGlvbiBjaGFubmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMjI1Olx0ICogQlBGIHByb2dyYW0gaXRzZWxmIGNhbiBiZSBub24tc2xlZXBhYmxlLCB5ZXQsIGJlY2F1c2UgaXQmIzM5O3MgdHJhbnNpdGl2ZWx5XG4zMjI2Olx0ICogcmVhY2hhYmxlIHRocm91Z2ggQlBGIGxpbmssIGl0cyBmcmVlaW5nIGhhcyB0byBiZSBkZWxheWVkIHVudGlsIGFmdGVyIFJDVVxuMzIyNzpcdCAqIFRhc2tzIFRyYWNlIEdQLlxuMzIyODpcdCAqL1xuMzIyOTpcdHZvaWQgYnBmX2xpbmtfaW5pdF9zbGVlcGFibGUoc3RydWN0IGJwZl9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcbjMyMzA6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgKm9wcywgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuMzIzMTpcdFx0XHRcdCAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIGJvb2wgc2xlZXBhYmxlKVxuMzIzMjpcdHtcbjMyMzM6XHRcdFdBUk5fT04ob3BzLVx1MDAzZWRlYWxsb2MgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VkZWFsbG9jX2RlZmVycmVkKTtcbjMyMzQ6XHRcdGF0b21pYzY0X3NldChcdTAwMjZsaW5rLVx1MDAzZXJlZmNudCwgMSk7XG4zMjM1Olx0XHRsaW5rLVx1MDAzZXR5cGUgPSB0eXBlO1xuMzIzNjpcdFx0bGluay1cdTAwM2VzbGVlcGFibGUgPSBzbGVlcGFibGU7XG4zMjM3Olx0XHRsaW5rLVx1MDAzZWlkID0gMDtcbjMyMzg6XHRcdGxpbmstXHUwMDNlb3BzID0gb3BzO1xuMzIzOTpcdFx0bGluay1cdTAwM2Vwcm9nID0gcHJvZztcbjMyNDA6XHRcdGxpbmstXHUwMDNlYXR0YWNoX3R5cGUgPSBhdHRhY2hfdHlwZTtcbjMyNDE6XHR9XG4zMjQyOlx0XG4zMjQzOlx0dm9pZCBicGZfbGlua19pbml0KHN0cnVjdCBicGZfbGluayAqbGluaywgZW51bSBicGZfbGlua190eXBlIHR5cGUsXG4zMjQ0Olx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgKm9wcywgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuMzI0NTpcdFx0XHQgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcbjMyNDY6XHR7XG4zMjQ3Olx0XHRicGZfbGlua19pbml0X3NsZWVwYWJsZShsaW5rLCB0eXBlLCBvcHMsIHByb2csIGF0dGFjaF90eXBlLCBmYWxzZSk7XG4zMjQ4Olx0fVxuMzI0OTpcdFxuMzI1MDpcdHZvaWQgYnBmX3RyYW1wX2xpbmtfaW5pdChzdHJ1Y3QgYnBmX3RyYW1wX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxuMzI1MTpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbjMyNTI6XHRcdFx0XHQgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIHU2NCBjb29raWUpXG4zMjUzOlx0e1xuMzI1NDpcdFx0YnBmX2xpbmtfaW5pdChcdTAwMjZsaW5rLVx1MDAzZWxpbmssIHR5cGUsIG9wcywgcHJvZywgYXR0YWNoX3R5cGUpO1xuMzI1NTpcdFx0bGluay1cdTAwM2Vub2RlLmxpbmsgPSBcdTAwMjZsaW5rLVx1MDAzZWxpbms7XG4zMjU2Olx0XHRsaW5rLVx1MDAzZW5vZGUuY29va2llID0gY29va2llO1xuMzI1NzpcdH1cbjMyNTg6XHRcbjMyNTk6XHRzdGF0aWMgdm9pZCBicGZfbGlua19mcmVlX2lkKGludCBpZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgTGluayBJRCBJbml0aWFsaXphdGlvbiBhbmQgSXRlcmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIExpbmUgMzIzNzogYGxpbmstJmd0O2lkID0gMDtgIFRoYXQmIzM5O3Mgd2hlcmUgaXQgc3RhcnRzLCBpbml0aWFsaXplZCB0byB6ZXJvIGluIGBicGZfbGlua19pbml0X3NsZWVwYWJsZWAhIEFuZCB0aGVuLCB3ZSBoYXZlIHRoaXMgYXNzaWdubWVudCBpbiBgYnBmX2xpbmtfc2V0dGxlKClgOiBgcHJpbWVyLSZndDtsaW5rLSZndDtpZCA9IHByaW1lci0mZ3Q7aWQ7YCBTbywgY29uZmlybWVkLCBgbGluay0mZ3Q7aWRgIGlzICphbHdheXMqIGluaXRpYWxpemVkIHRvIHplcm8gdXBvbiBjcmVhdGlvbi4gVGhpcyBpcyBrZXkuCgpUaGUgaXNzdWUgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgaXMgaW4gYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgLiBXaGVuIHRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggbGlua3MgdXNpbmcgdGhlIElEUiAoYGlkcl9nZXRfbmV4dGApLCBpdCB3YXMgZ3JhYmJpbmcgcmVmZXJlbmNlcyB0byBsaW5rcyB0aGF0IHdlcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZC4gTWVhbmluZywgdGhleSBoYWQgYmVlbiBhbGxvY2F0ZWQgYW4gSUQgaW4gYGxpbmtfaWRyYCwgYnV0IGhhZG4mIzM5O3QgeWV0IGJlZW4gJiMzNDtzZXR0bGVkLCYjMzQ7IHNvIHRoZWlyIGBsaW5rLSZndDtpZGAgd2FzIHN0aWxsIHplcm8uIFRoaXMgaXMgYSBwcm9ibGVtISBJdCB3YXMgcmV0dXJuaW5nIHRoaXMgbGluayB3aXRoIGBsaW5rLSZndDtpZGAgb2YgMC4gV2FpdCwgdGhpcyBjb3VsZCBtZWFuIHRoYXQgbGluayBjcmVhdGlvbiBmYWlscywgb3IgaXRlcmF0aW5nIGFuIHVuc2V0dGxlZCBsaW5rIGNhdXNlcyBwcm9ibGVtcywgbGlrZSBhIHVzZXIgc2VlaW5nIGEgbGluayB3aXRoIGFuIElEIG9mIDAsIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIHNpbXBsZSBidXQgZWZmZWN0aXZlOgpgYGBkaWZmCiAJbGluayA9IGlkcl9nZXRfbmV4dCgmYW1wO2xpbmtfaWRyLCBpZCk7CiAJaWYgKGxpbmspIHsKLQkJbGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTsKJiM0MzsJCWlmIChsaW5rLSZndDtpZCkKJiM0MzsJCQlsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspOwomIzQzOwkJZWxzZQomIzQzOwkJCWxpbmsgPSBFUlJfUFRSKC1FQUdBSU4pOwogCQlpZiAoSVNfRVJSKGxpbmspKSB7CiAJCQkoKmlkKSYjNDM7JiM0Mzs7CiAJCQlnb3RvIGFnYWluOwpgYGAKSWYgYGxpbmstJmd0O2lkID09IDBgLCB0aGUgY29kZSBub3cgc2V0cyBgbGlua2AgdG8gYEVSUl9QVFIoLUVBR0FJTilgLiBUaGlzIGlzIGNsZXZlciEgVGhlbiBgSVNfRVJSKGxpbmspYCBiZWNvbWVzIHRydWUsIGFuZCBpdCBkb2VzIGAoKmlkKSYjNDM7JiM0MztgIGFuZCBza2lwcyB0byB0aGUgbmV4dCBJRCAoYGdvdG8gYWdhaW47YCksIGFjdGluZyAqZXhhY3RseSogbGlrZSBpZiBgYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspYCBoYWQgZmFpbGVkLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBpcyBuZWVkZWQuIEl0IGF2b2lkcyB0aGUgcHJvYmxlbXMgb2YgcmV0dXJuaW5nIGxpbmtzIHRoYXQgYXJlIG5vdCByZWFkeS4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBicGZfb2JqX2dldF9uZXh0X2lkYCBmb3IgY29tcGFyaXNvbi4KTGV0JiMzOTtzIHNlZSBob3cgdGhhdCB3b3JrcyB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgcmlnaHQgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9vYmpfZ2V0X25leHRfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz00NzgyPXN0YXRpYyBpbnQgYnBmX3Byb2dfdGVzdF9ydW4oY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDgxMS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ4MTI6c3RhdGljIGludCBicGZfb2JqX2dldF9uZXh0X2lkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDgxMy1cdFx0XHQgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzA2PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzkwLVx0Y2FzZSBCUEZfUFJPR19HRVRfTkVYVF9JRDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTE6XHRcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTItXHRcdFx0XHRcdCAgXHUwMDI2cHJvZ19pZHIsIFx1MDAyNnByb2dfaWRyX2xvY2spO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTQtXHRjYXNlIEJQRl9NQVBfR0VUX05FWFRfSUQ6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2Mzk1Olx0XHRlcnIgPSBicGZfb2JqX2dldF9uZXh0X2lkKFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mzk2LVx0XHRcdFx0XHQgIFx1MDAyNm1hcF9pZHIsIFx1MDAyNm1hcF9pZHJfbG9jayk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5OC1cdGNhc2UgQlBGX0JURl9HRVRfTkVYVF9JRDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTk6XHRcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MDAtXHRcdFx0XHRcdCAgXHUwMDI2YnRmX2lkciwgXHUwMDI2YnRmX2lkcl9sb2NrKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDUzLVx0Y2FzZSBCUEZfTElOS19HRVRfTkVYVF9JRDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NTQ6XHRcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NTUtXHRcdFx0XHRcdCAgXHUwMDI2bGlua19pZHIsIFx1MDAyNmxpbmtfaWRyX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA0NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgYGJwZl9vYmpfZ2V0X25leHRfaWRgOgoKKipEaXZpbmcgaW50byBicGZfb2JqX2dldF9uZXh0X2lkKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgYnBmX29ial9nZXRfbmV4dF9pZGAuIFJpZ2h0LCB0aGlzIGlzIGEgY29yZSBCUEYgZnVuY3Rpb24sIGxpa2VseSBjcnVjaWFsIGZvciBpdGVyYXRpbmcgdGhyb3VnaCBvYmplY3QgSURzIHdpdGhpbiB0aGUgQlBGIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGRlc2lnbmVkIHRvIHJldHVybiB0aGUgbmV4dCBhdmFpbGFibGUgSUQuIElzIHRoaXMgZnVuY3Rpb24gZ29pbmcgdG8gbWFpbnRhaW4gYW4gaW50ZXJuYWwgaXRlcmF0b3IsIG9yIHJlbHkgb24gc29tZSBleHRlcm5hbCBkYXRhIHN0cnVjdHVyZSB0byBtYW5hZ2Ugb2JqZWN0IElEcz8gRG9lcyBpdCB1c2UgYSBsaW5lYXIgc2Nhbiwgb3IgaXMgdGhlcmUgc29tZSBtb3JlIHNvcGhpc3RpY2F0ZWQgaW5kZXhpbmcgaW52b2x2ZWQsIHdoaWNoIGNvdWxkIGFmZmVjdCBwZXJmb3JtYW5jZSBkcmFzdGljYWxseSwgZXNwZWNpYWxseSB3aXRoIG1hbnkgQlBGIHByb2dyYW1zIGFuZCBtYXBzPyBJJiMzOTttIGN1cmlvdXMgdG8gc2VlIGhvdyBjb25jdXJyZW5jeSBpcyBoYW5kbGVkLCBvciBpZiBpdCYjMzk7cyBoYW5kbGVkIGF0IGFsbC4gV2hhdCBraW5kIG9mIGxvY2tpbmcgaXMgdXNlZCwgaWYgYW55PyBBbHNvLCBJIHdpbGwgbG9vayBhdCBlcnJvciBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBob3cgZG9lcyBpdCBzaWduYWwgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBJRHMsIG9yIGluIHRoZSBjYXNlIG9mIGEgY29uY3VycmVudCBtb2RpZmljYXRpb24gb2YgdGhlIElEIGxpc3QuIEFueSBlZGdlIGNhc2VzIEkgc2hvdWxkIGNvbnNpZGVyPyBJIGhvcGUgaXQmIzM5O3Mgd2VsbC1kb2N1bWVudGVkISBUaW1lIHRvIGRpc3NlY3QgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ4MTI6XHRzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG40ODEzOlx0XHRcdFx0ICAgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIsXG40ODE0Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZHIgKmlkcixcbjQ4MTU6XHRcdFx0XHQgICAgICAgc3BpbmxvY2tfdCAqbG9jaylcbjQ4MTY6XHR7XG40ODE3Olx0XHR1MzIgbmV4dF9pZCA9IGF0dHItXHUwMDNlc3RhcnRfaWQ7XG40ODE4Olx0XHRpbnQgZXJyID0gMDtcbjQ4MTk6XHRcbjQ4MjA6XHRcdGlmIChDSEVDS19BVFRSKEJQRl9PQkpfR0VUX05FWFRfSUQpIHx8IG5leHRfaWQgXHUwMDNlPSBJTlRfTUFYKVxuNDgyMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ4MjI6XHRcbjQ4MjM6XHRcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbjQ4MjQ6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjQ4MjU6XHRcbjQ4MjY6XHRcdG5leHRfaWQmIzQzOyYjNDM7O1xuNDgyNzpcdFx0c3Bpbl9sb2NrX2JoKGxvY2spO1xuNDgyODpcdFx0aWYgKCFpZHJfZ2V0X25leHQoaWRyLCBcdTAwMjZuZXh0X2lkKSlcbjQ4Mjk6XHRcdFx0ZXJyID0gLUVOT0VOVDtcbjQ4MzA6XHRcdHNwaW5fdW5sb2NrX2JoKGxvY2spO1xuNDgzMTpcdFxuNDgzMjpcdFx0aWYgKCFlcnIpXG40ODMzOlx0XHRcdGVyciA9IHB1dF91c2VyKG5leHRfaWQsIFx1MDAyNnVhdHRyLVx1MDAzZW5leHRfaWQpO1xuNDgzNDpcdFxuNDgzNTpcdFx0cmV0dXJuIGVycjtcbjQ4MzY6XHR9XG40ODM3Olx0XG40ODM4Olx0c3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxuNDgzOTpcdHtcbjQ4NDA6XHRcdHN0cnVjdCBicGZfbWFwICptYXA7XG40ODQxOlx0XG40ODQyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bWFwX2lkcl9sb2NrKTtcbjQ4NDM6XHRhZ2FpbjpcbjQ4NDQ6XHRcdG1hcCA9IGlkcl9nZXRfbmV4dChcdTAwMjZtYXBfaWRyLCBpZCk7XG40ODQ1Olx0XHRpZiAobWFwKSB7XG40ODQ2Olx0XHRcdG1hcCA9IF9fYnBmX21hcF9pbmNfbm90X3plcm8obWFwLCBmYWxzZSk7XG40ODQ3Olx0XHRcdGlmIChJU19FUlIobWFwKSkge1xuNDg0ODpcdFx0XHRcdCgqaWQpJiM0MzsmIzQzOztcbjQ4NDk6XHRcdFx0XHRnb3RvIGFnYWluO1xuNDg1MDpcdFx0XHR9XG40ODUxOlx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTI4CgkJCQkJCQlvdXRwdXQ6IDIzNQoJCQkJCQkJdGhvdWdodHM6IDQxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gSSYjMzk7bGwgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmQgY2hlY2tzLCBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBrZXJuZWwgc3RydWN0dXJlcywgY29uZGl0aW9uYWwgbG9naWMsIGFuZCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi4KCkZpcnN0LCBkb2VzIHRoaXMgcGF0Y2ggdG91Y2ggYW55dGhpbmcgdGhhdCBjb3VsZCBzZW5kIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZT8gTm8sIG5vdGhpbmcgaXMgbW9kaWZpZWQgcmVnYXJkaW5nIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIFNLQiBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gVGhhdCYjMzk7cyBhIGNsZWFuIHNsYXRlLgoKTmV4dCwgYXJlIHRoZXJlIGFueSBjaGFuZ2VzIHRvIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvciBsb2dpYyB0aGF0IGNvdWxkIHJlbHkgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gIE5vLiBUaGUga2V5IHZhcmlhYmxlLCBgbGluay0mZ3Q7aWRgLCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgd2l0aGluIGBicGZfbGlua19pbml0X3NsZWVwYWJsZWAsIGFuZCBhbnl0aGluZyBjb250YWluaW5nIGEgYGJwZl9saW5rYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLiBTbywgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkuCgpOb3csIHdoYXQgYWJvdXQgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBsYXRlciBiZSByZWFkPyBBZ2Fpbiwgbm8gY2hhbmdlcyBoZXJlLiBObyBuZXcgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBwYXR0ZXJucyBhcmUgaW50cm9kdWNlZCB0aGF0IEkgY2FuIHNlZS4KCkFuZCBmaW5hbGx5LCBkb2VzIHRoaXMgcGF0Y2ggbW9kaWZ5IGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0ICptaWdodCogYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycz8gTm9wZS4KClNvLCAqaXMqIHRoZXJlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzPyBCYXNlZCBvbiBteSByZXZpZXcsIHRoZSBwYXRjaCAqcHJldmVudHMqIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KClgIGZyb20gcmV0dXJuaW5nIGxpbmtzIHRoYXQgYXJlIHN0aWxsIGJlaW5nIGNyZWF0ZWQgKHdoZXJlIGBsaW5rLSZndDtpZCA9PSAwYCkuICBUaGlzIGZpeGVzIGEgY29uY3VycmVuY3kgaXNzdWUsIHByZXZlbnRpbmcgYW4gdW5zZXR0bGVkIGxpbmsgZnJvbSBiZWluZyByZXR1cm5lZCBieSB0aGUgaXRlcmF0b3IuIFRoaXMgaXMgYSBjb25jdXJyZW5jeSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgc3RhdGUgdmFsaWRpdHkgZml4LiBLTVNBTiBpcyBteSBwcmltYXJ5IHRvb2wgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIGFuZCBwYWdlKSwgYW5kIGFueSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiAgS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBteSBnby10byBmb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKFVBRiwgb3V0LW9mLWJvdW5kcywgcmFjZSBjb25kaXRpb25zKS4gIEhlcmUsIEkgc2VlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCB0aHVzIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIEnigJlsbCBub3cgZG91YmxlLWNoZWNrIG15IHJlYXNvbmluZyB0byBtYWtlIGNlcnRhaW4gdGhpcyBhc3Nlc3NtZW50IGlzIGNvbXByZWhlbnNpdmUgYW5kIHByZWNpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KClgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gdmVyaWZ5IHRoYXQgYGxpbmstXHUwMDNlaWRgIGlzIG5vbi16ZXJvIGJlZm9yZSBpbmNyZW1lbnRpbmcgdGhlIGxpbmsgcmVmY291bnQgYW5kIHJldHVybmluZyBpdC4gVGhpcyBwcmV2ZW50cyB0aGUgbGluayBpdGVyYXRvciBmcm9tIHJldHVybmluZyBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBvciB1bnNldHRsZWQgQlBGIGxpbmsgdGhhdCB3YXMgYWxsb2NhdGVkIGFuIElEIGluIGBsaW5rX2lkcmAgYnV0IGhhcyBub3QgeWV0IGJlZW4gc2V0dGxlZCB2aWEgYGJwZl9saW5rX3NldHRsZSgpYC5cblxuYGxpbmstXHUwMDNlaWRgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byAwIGluIGBicGZfbGlua19pbml0X3NsZWVwYWJsZSgpYCBkdXJpbmcgbGluayBhbGxvY2F0aW9uIGFuZCBzZXQgdG8gaXRzIElEIG9ubHkgdXBvbiBgYnBmX2xpbmtfc2V0dGxlKClgLiBUaGlzIGNoYW5nZSBvbmx5IGNoZWNrcyBhbiBhbHJlYWR5LWluaXRpYWxpemVkIGZpZWxkIChgbGluay1cdTAwM2VpZGApIHRvIGhhbmRsZSBsaW5rIGxpZmVjeWNsZS9jb25jdXJyZW5jeSBzdGF0ZSwgYW5kIGRvZXMgbm90IHRvdWNoIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KClgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gdmVyaWZ5IHRoYXQgYGxpbmstXHUwMDNlaWRgIGlzIG5vbi16ZXJvIGJlZm9yZSBpbmNyZW1lbnRpbmcgdGhlIGxpbmsgcmVmY291bnQgYW5kIHJldHVybmluZyBpdC4gVGhpcyBwcmV2ZW50cyB0aGUgbGluayBpdGVyYXRvciBmcm9tIHJldHVybmluZyBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBvciB1bnNldHRsZWQgQlBGIGxpbmsgdGhhdCB3YXMgYWxsb2NhdGVkIGFuIElEIGluIGBsaW5rX2lkcmAgYnV0IGhhcyBub3QgeWV0IGJlZW4gc2V0dGxlZCB2aWEgYGJwZl9saW5rX3NldHRsZSgpYC5cblxuYGxpbmstXHUwMDNlaWRgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byAwIGluIGBicGZfbGlua19pbml0X3NsZWVwYWJsZSgpYCBkdXJpbmcgbGluayBhbGxvY2F0aW9uIGFuZCBzZXQgdG8gaXRzIElEIG9ubHkgdXBvbiBgYnBmX2xpbmtfc2V0dGxlKClgLiBUaGlzIGNoYW5nZSBvbmx5IGNoZWNrcyBhbiBhbHJlYWR5LWluaXRpYWxpemVkIGZpZWxkIChgbGluay1cdTAwM2VpZGApIHRvIGhhbmRsZSBsaW5rIGxpZmVjeWNsZS9jb25jdXJyZW5jeSBzdGF0ZSwgYW5kIGRvZXMgbm90IHRvdWNoIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTA6MjEuNzg1MzAwNDk4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NzUwNjE1NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dFwiLFxuICAgIFwiYnBmX2xpbmtfc2VxX3N0YXJ0XCIsXG4gICAgXCJicGZfbGlua19zZXFfbmV4dFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoKWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byB2ZXJpZnkgdGhhdCBgbGluay1cXHUwMDNlaWRgIGlzIG5vbi16ZXJvIGJlZm9yZSBpbmNyZW1lbnRpbmcgdGhlIGxpbmsgcmVmY291bnQgYW5kIHJldHVybmluZyBpdC4gVGhpcyBwcmV2ZW50cyB0aGUgbGluayBpdGVyYXRvciBmcm9tIHJldHVybmluZyBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBvciB1bnNldHRsZWQgQlBGIGxpbmsgdGhhdCB3YXMgYWxsb2NhdGVkIGFuIElEIGluIGBsaW5rX2lkcmAgYnV0IGhhcyBub3QgeWV0IGJlZW4gc2V0dGxlZCB2aWEgYGJwZl9saW5rX3NldHRsZSgpYC5cXG5cXG5gbGluay1cXHUwMDNlaWRgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byAwIGluIGBicGZfbGlua19pbml0X3NsZWVwYWJsZSgpYCBkdXJpbmcgbGluayBhbGxvY2F0aW9uIGFuZCBzZXQgdG8gaXRzIElEIG9ubHkgdXBvbiBgYnBmX2xpbmtfc2V0dGxlKClgLiBUaGlzIGNoYW5nZSBvbmx5IGNoZWNrcyBhbiBhbHJlYWR5LWluaXRpYWxpemVkIGZpZWxkIChgbGluay1cXHUwMDNlaWRgKSB0byBoYW5kbGUgbGluayBsaWZlY3ljbGUvY29uY3VycmVuY3kgc3RhdGUsIGFuZCBkb2VzIG5vdCB0b3VjaCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpIGluIGtlcm5lbC9icGYvc3lzY2FsbC5jIHRvIGNoZWNrIGlmIGxpbmstXFx1MDAzZWlkIGlzIG5vbi16ZXJvIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50LCByZXR1cm5pbmcgLUVBR0FJTiBvdGhlcndpc2Ugc28gdGhlIGl0ZXJhdGlvbiBza2lwcyB1bnNldHRsZWQgbGlua3MuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgQlBGIGl0ZXJhdG9yIGNvZGUgcGF0aHMgKGJwZl9saW5rIGl0ZXJhdG9yKSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMDoyMS43ODUzMDU2OThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDAzNTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk1NWUwMjgyYmIwMGVkZWVjZmY3YmFjY2EyMzg5MjFhYjgzOWM2YjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjA6MTA6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbmluZGV4IDg1M2I0N2Y4MTM4NDIuLjI0NGE5MzliOWQyZGEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbkBAIC02MDQyLDcgKzYwNDIsMTAgQEAgc3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpXFxuIGFnYWluOlxcbiBcXHRsaW5rID0gaWRyX2dldF9uZXh0KFxcdTAwMjZsaW5rX2lkciwgaWQpO1xcbiBcXHRpZiAobGluaykge1xcbi1cXHRcXHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xcbitcXHRcXHRpZiAobGluay1cXHUwMDNlaWQpXFxuK1xcdFxcdFxcdGxpbmsgPSBicGZfbGlua19pbmNfbm90X3plcm8obGluayk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bGluayA9IEVSUl9QVFIoLUVBR0FJTik7XFxuIFxcdFxcdGlmIChJU19FUlIobGluaykpIHtcXG4gXFx0XFx0XFx0KCppZCkrKztcXG4gXFx0XFx0XFx0Z290byBhZ2FpbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTA6MjIuMzM5OTg3ODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc3MTgyMTc4ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dFwiLFxuICAgIFwiYnBmX2xpbmtfc2VxX3N0YXJ0XCIsXG4gICAgXCJicGZfbGlua19zZXFfbmV4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoKSBpbiBrZXJuZWwvYnBmL3N5c2NhbGwuYyB0byBjaGVjayBpZiBsaW5rLVxcdTAwM2VpZCBpcyBub24temVybyBiZWZvcmUgYXR0ZW1wdGluZyB0byBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCwgcmV0dXJuaW5nIC1FQUdBSU4gb3RoZXJ3aXNlIHNvIHRoZSBpdGVyYXRpb24gc2tpcHMgdW5zZXR0bGVkIGxpbmtzLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIEJQRiBpdGVyYXRvciBjb2RlIHBhdGhzIChicGZfbGluayBpdGVyYXRvcikgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NTVlMDI4MmJiMDBlZGVlY2ZmN2JhY2NhMjM4OTIxYWI4MzljNmI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjA6MTA6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA4NTNiNDdmODEzODQyLi4yNDRhOTM5YjlkMmRhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtNjA0Miw3ICs2MDQyLDEwIEBAIHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxuIGFnYWluOlxuIFx0bGluayA9IGlkcl9nZXRfbmV4dChcdTAwMjZsaW5rX2lkciwgaWQpO1xuIFx0aWYgKGxpbmspIHtcbi1cdFx0bGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTtcbitcdFx0aWYgKGxpbmstXHUwMDNlaWQpXG4rXHRcdFx0bGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGxpbmsgPSBFUlJfUFRSKC1FQUdBSU4pO1xuIFx0XHRpZiAoSVNfRVJSKGxpbmspKSB7XG4gXHRcdFx0KCppZCkrKztcbiBcdFx0XHRnb3RvIGFnYWluO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTA6MjIuMzM5OTg5NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk3ODIzOTM0ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIGEgQlBGIExpbmsgSURSIEl0ZXJhdGlvbioqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgdG8gYmUgd2l0aGluIHRoZSBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYGxpbmtfaWRyYC4gVGhlIGNvcmUgb2YgdGhpcyBmdW5jdGlvbiBpcyBhYm91dCBnZXR0aW5nIHRoZSBuZXh0IGBicGZfbGlua2AgaW4gYW4gSURSLlxuXG5JJ20gbm90aWNpbmcgYSBwb3RlbnRpYWwgaXNzdWUgb3IgaW1wcm92ZW1lbnQgaGVyZS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHNpbXBseSBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgbGluayB1c2luZyBgYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspYC4gTm93LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjazogYGlmIChsaW5rLVx1MDAzZWlkKWAuIFRoaXMgc3VnZ2VzdHMgYSBjb25kaXRpb24gd2hlcmUgYSBgYnBmX2xpbmtgIG1pZ2h0IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBJRFIgYnV0IG1pZ2h0IG5vdCB5ZXQgYmUgZnVsbHkgaW5pdGlhbGl6ZWQsIG9yIHBlcmhhcHMgaW4gc29tZSB0cmFuc2llbnQgc3RhdGUuXG5cbklmIGBsaW5rLVx1MDAzZWlkYCBpcyBub24temVybywgd2UgcHJvY2VlZCBhcyBiZWZvcmUsIGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50LiBIb3dldmVyLCBpZiBgbGluay1cdTAwM2VpZGAgKmlzKiB6ZXJvLCB3aGljaCBwcmVzdW1hYmx5IGluZGljYXRlcyBhbiB1bmluaXRpYWxpemVkIG9yIGludmFsaWQgbGluayBlbnRyeSwgdGhlIHBhdGNoIHNldHMgYGxpbmtgIHRvIGBFUlJfUFRSKC1FQUdBSU4pYC4gVGhpcyBgLUVBR0FJTmAgc2VlbXMgbGlrZSBhIHNpZ25hbCB0byByZXRyeSB0aGUgaXRlcmF0aW9uLiBUaGUgY29kZSB0aGVuIGluY3JlbWVudHMgdGhlIElEIGFuZCBqdW1wcyBiYWNrIHRvIHRoZSBgYWdhaW5gIGxhYmVsLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYSBsaW5rIHdpdGggYW4gSUQgb2YgemVybyBzaG91bGQgYmUgc2tpcHBlZCB3aGVuIGl0ZXJhdGluZy4gVGhpcyBtYWtlcyBzZW5zZTogd2h5IHJldHVybiBhIGxpbmsgdGhhdCBoYXMgbm90IHlldCBiZWVuIGdpdmVuIGFuIElEP1xuXG5TbywgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGEgZ29vZCBkZWZlbnNlIGFnYWluc3QgcmV0dXJuaW5nIGludmFsaWQgb3IgdW5pbml0aWFsaXplZCBCUEYgbGlua3MgZHVyaW5nIHRoZSBJRFIgdHJhdmVyc2FsLiBJdCBwcmV2ZW50cyBhbiBpbmNyZW1lbnQgb2YgdGhlIGxpbmsncyByZWZlcmVuY2UgY291bnQgaWYgdGhlIElEIGlzIDAsIHNraXBwaW5nIHRoZSBsaW5rIGFuZCByZXRyeWluZy4gSSdkIG5lZWQgdG8gZGlnIGRlZXBlciB0byBmdWxseSB1bmRlcnN0YW5kIHdoeSBhIGxpbmsgbWlnaHQgYmUgaW4gdGhpcyBzdGF0ZSwgYnV0IHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIGFkZGluZyBzb21lIGltcG9ydGFudCByb2J1c3RuZXNzIHRvIHRoZSBJRFIgaXRlcmF0aW9uIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTA6MzIuMTIyMzg2MTgyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYwMzA6XFx0XFx0fSBlbHNlIHtcXG42MDMxOlxcdFxcdFxcdGxpbmsgPSBFUlJfUFRSKC1FTk9FTlQpO1xcbjYwMzI6XFx0XFx0fVxcbjYwMzM6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbjYwMzQ6XFx0XFx0cmV0dXJuIGxpbms7XFxuNjAzNTpcXHR9XFxuNjAzNjpcXHRcXG42MDM3OlxcdHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxcbjYwMzg6XFx0e1xcbjYwMzk6XFx0XFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbjYwNDA6XFx0XFxuNjA0MTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbjYwNDI6XFx0YWdhaW46XFxuNjA0MzpcXHRcXHRsaW5rID0gaWRyX2dldF9uZXh0KFxcdTAwMjZsaW5rX2lkciwgaWQpO1xcbjYwNDQ6XFx0XFx0aWYgKGxpbmspIHtcXG42MDQ1OlxcdFxcdFxcdGlmIChsaW5rLVxcdTAwM2VpZClcXG42MDQ2OlxcdFxcdFxcdFxcdGxpbmsgPSBicGZfbGlua19pbmNfbm90X3plcm8obGluayk7XFxuNjA0NzpcXHRcXHRcXHRlbHNlXFxuNjA0ODpcXHRcXHRcXHRcXHRsaW5rID0gRVJSX1BUUigtRUFHQUlOKTtcXG42MDQ5OlxcdFxcdFxcdGlmIChJU19FUlIobGluaykpIHtcXG42MDUwOlxcdFxcdFxcdFxcdCgqaWQpKys7XFxuNjA1MTpcXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcbjYwNTI6XFx0XFx0XFx0fVxcbjYwNTM6XFx0XFx0fVxcbjYwNTQ6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbjYwNTU6XFx0XFxuNjA1NjpcXHRcXHRyZXR1cm4gbGluaztcXG42MDU3OlxcdH1cXG42MDU4OlxcdFxcbjYwNTk6XFx0I2RlZmluZSBCUEZfTElOS19HRVRfRkRfQllfSURfTEFTVF9GSUVMRCBsaW5rX2lkXFxuNjA2MDpcXHRcXG42MDYxOlxcdHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2ZkX2J5X2lkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbjYwNjI6XFx0e1xcbjYwNjM6XFx0XFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbjYwNjQ6XFx0XFx0dTMyIGlkID0gYXR0ci1cXHUwMDNlbGlua19pZDtcXG42MDY1OlxcdFxcdGludCBmZDtcXG42MDY2OlxcdFxcbjYwNjc6XFx0XFx0aWYgKENIRUNLX0FUVFIoQlBGX0xJTktfR0VUX0ZEX0JZX0lEKSlcXG42MDY4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjYwNjk6XFx0XFxuNjA3MDpcXHRcXHRpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXFxuNjA3MTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjYwNzI6XFx0XFxuNjA3MzpcXHRcXHRsaW5rID0gYnBmX2xpbmtfYnlfaWQoaWQpO1xcbjYwNzQ6XFx0XFx0aWYgKElTX0VSUihsaW5rKSlcXG42MDc1OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGxpbmspO1xcbjYwNzY6XFx0XFxuNjA3NzpcXHRcXHRmZCA9IGJwZl9saW5rX25ld19mZChsaW5rKTtcXG42MDc4OlxcdFxcdGlmIChmZCBcXHUwMDNjIDApXFxuNjA3OTpcXHRcXHRcXHRicGZfbGlua19wdXRfZGlyZWN0KGxpbmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMDozMi4xMjI4ODg1NjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTMwMzk2OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YCBVc2FnZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQncyBzZWUuLi4gdGhlIG1vc3QgZGlyZWN0IHJvdXRlIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGlzICphY3R1YWxseSogYmVpbmcgaW52b2tlZC4gU28sIEkgbmVlZCB0byBmaW5kIGFsbCB0aGUgY2FsbCBzaXRlcy4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGluZ3M7IGEgZ29vZCBvbGQgYGdyZXBgIHNob3VsZCBkbyB0aGUgdHJpY2suIEEgcXVpY2sgYGdyZXBgIGZvciB0aGF0IHN5bWJvbCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzLiBUaGVuLCBJIGNhbiBzdGFydCBhbmFseXppbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGVzZSBjYWxscy4gVGhlIGRldmlsJ3MgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjEwOjM0LjI1MzI4ODQ0MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODUzMjAyODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9saW5rX2dldF9jdXJyX29yX25leHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0yOTA2PXN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2Zyb21fZmQodTMyIHVmZCk7XFxuaW5jbHVkZS9saW51eC9icGYuaDoyOTA3OnN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI5MDgtXFxuLS1cXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jPTEzPXN0YXRpYyB2b2lkICpicGZfbGlua19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxcbi0tXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0xNy1cXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jOjE4OlxcdGxpbmsgPSBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KFxcdTAwMjZpbmZvLVxcdTAwM2VsaW5rX2lkKTtcXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTE5LVxcdGlmICghbGluaylcXG4tLVxcbmtlcm5lbC9icGYvbGlua19pdGVyLmM9Mjc9c3RhdGljIHZvaWQgKmJwZl9saW5rX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4tLVxcbmtlcm5lbC9icGYvbGlua19pdGVyLmMtMzMtXFx0YnBmX2xpbmtfcHV0KChzdHJ1Y3QgYnBmX2xpbmsgKil2KTtcXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jOjM0OlxcdHJldHVybiBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KFxcdTAwMjZpbmZvLVxcdTAwM2VsaW5rX2lkKTtcXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTM1LX1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYwMTU9c3RydWN0IGJwZl9saW5rICpicGZfbGlua19ieV9pZCh1MzIgaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDM2LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMzc6c3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAzOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjEwOjM2LjEwNjQ5ODkzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0ODExOTczNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBCUEYgTGluayBJdGVyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gaG93IGBicGZfbGlua2AgaXRlcmF0aW9uIGFjdHVhbGx5IHdvcmtzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIGJlaGluZCB0cmF2ZXJzaW5nIHRoZXNlIGxpbmtzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGdldHRpbmcgdGhlIG5leHQgSUQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayBmb3Igc3lzdGVtIGNhbGxzIHRoYXQgYXJlIHJlbGF0ZWQgdG8gcmV0cmlldmluZyB0aGUgbmV4dCBvciBjdXJyZW50IElEIGluIGEgYGJwZl9saW5rYCBjaGFpbi4gU29tZXRoaW5nIGxpa2UgYGJwZl9saW5rX2dldF9uZXh0X2lkYCBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSwgb3IgcGVyaGFwcyBhIHNpbWlsYXIgZnVuY3Rpb24gbmFtZSB0aGF0IGhhbmRsZXMgaXRlcmF0aW9uIHdpdGhpbiB0aGUgQlBGIGxpbmsgc3RydWN0dXJlLlxuXG5NeSBwbGFuIGlzIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHVzZXMgb2YgdGhhdCBzcGVjaWZpYyBuYW1lLCBhbmQgaWYgSSBjYW4ndCBmaW5kIHRoYXQgZXhhY3QgbmFtZSwgSSdsbCBicm9hZGVuIHRoZSBzZWFyY2ggd2l0aCBzb21ldGhpbmcgbGlrZSBgQlBGX0xJTktfR0VUX05FWFRfSURgIHRvIGNhcHR1cmUgcG90ZW50aWFsIGNvbnN0YW50cyBvciBtYWNyb3MgaW52b2x2ZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzIGFwcHJvYWNoIHNob3VsZCByZXZlYWwgaG93IGRldmVsb3BlcnMgYXJlIGFjdHVhbGx5IHVzaW5nIHRoZXNlIGl0ZXJhdG9yIGZ1bmN0aW9ucyBvciByZWxhdGVkIEJQRiBsaW5rIGl0ZXJhdGlvbiBwcm9jZXNzZXMuIEkgZXhwZWN0IHRoYXQgdGhpcyB3aWxsIGhlbHAgbWUgY2xhcmlmeSB0aGUgbWVjaGFuaXNtcyBlbXBsb3llZCB0byBuYXZpZ2F0ZSBgYnBmX2xpbmtgIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMjIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMDozOS41ODc2OTg0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQyNDM3MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9MSU5LX0dFVF9ORVhUX0lEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMzI9dW5pb24gYnBmX2l0ZXJfbGlua19pbmZvIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC04MTYtICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6ODE3OiAqIEJQRl9MSU5LX0dFVF9ORVhUX0lEXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTgxOC0gKlxcdERlc2NyaXB0aW9uXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9OTU1PWVudW0gYnBmX2NtZCB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtOTg3LVxcdEJQRl9MSU5LX0dFVF9GRF9CWV9JRCxcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6OTg4OlxcdEJQRl9MSU5LX0dFVF9ORVhUX0lELFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC05ODktXFx0QlBGX0VOQUJMRV9TVEFUUyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDY9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1Mi1cXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDUzOlxcdGNhc2UgQlBGX0xJTktfR0VUX05FWFRfSUQ6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1NC1cXHRcXHRlcnIgPSBicGZfb2JqX2dldF9uZXh0X2lkKFxcdTAwMjZhdHRyLCB1YXR0ci51c2VyLFxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEzMj11bmlvbiBicGZfaXRlcl9saW5rX2luZm8ge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTgxNi0gKlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo4MTc6ICogQlBGX0xJTktfR0VUX05FWFRfSURcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtODE4LSAqXFx0RGVzY3JpcHRpb25cXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD05NTU9ZW51bSBicGZfY21kIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC05ODctXFx0QlBGX0xJTktfR0VUX0ZEX0JZX0lELFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo5ODg6XFx0QlBGX0xJTktfR0VUX05FWFRfSUQsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTk4OS1cXHRCUEZfRU5BQkxFX1NUQVRTLFxcbi0tXFxudG9vbHMvbGliL2JwZi9icGYuYz0xMTU4PWludCBicGZfbGlua19nZXRfbmV4dF9pZChfX3UzMiBzdGFydF9pZCwgX191MzIgKm5leHRfaWQpXFxudG9vbHMvbGliL2JwZi9icGYuYy0xMTU5LXtcXG50b29scy9saWIvYnBmL2JwZi5jOjExNjA6XFx0cmV0dXJuIGJwZl9vYmpfZ2V0X25leHRfaWQoc3RhcnRfaWQsIG5leHRfaWQsIEJQRl9MSU5LX0dFVF9ORVhUX0lEKTtcXG50b29scy9saWIvYnBmL2JwZi5jLTExNjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMDo0MS4yMzAxNTUwMjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzY4Mjg3NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBMaW5rIEl0ZXJhdG9yKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIHdvcmtpbmdzIG9mIHRoZSBCUEYgbGluayBpdGVyYXRvci4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBga2VybmVsL2JwZi9saW5rX2l0ZXIuY2AuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQncyBpbXBsZW1lbnRlZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyB0aGUgY29uZmlndXJhdGlvbnMgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBlbmFibGUgdGhpcyBpdGVyYXRvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byB0cm91Ymxlc2hvb3QgYW5kIGltcHJvdmUgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMDo0Mi45OTg0NTkzMTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9saW5rX2l0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qIENvcHlyaWdodCAoYykgMjAyMiBSZWQgSGF0LCBJbmMuICovXFxuICAgMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWx0ZXIuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGZfaWRzLmhcXHUwMDNlXFxuICAgODpcXHRcXG4gICA5OlxcdHN0cnVjdCBicGZfaXRlcl9zZXFfbGlua19pbmZvIHtcXG4gIDEwOlxcdFxcdHUzMiBsaW5rX2lkO1xcbiAgMTE6XFx0fTtcXG4gIDEyOlxcdFxcbiAgMTM6XFx0c3RhdGljIHZvaWQgKmJwZl9saW5rX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuICAxNDpcXHR7XFxuICAxNTpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2xpbmtfaW5mbyAqaW5mbyA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4gIDE2OlxcdFxcdHN0cnVjdCBicGZfbGluayAqbGluaztcXG4gIDE3OlxcdFxcbiAgMTg6XFx0XFx0bGluayA9IGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoXFx1MDAyNmluZm8tXFx1MDAzZWxpbmtfaWQpO1xcbiAgMTk6XFx0XFx0aWYgKCFsaW5rKVxcbiAgMjA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdGlmICgqcG9zID09IDApXFxuICAyMzpcXHRcXHRcXHQrKypwb3M7XFxuICAyNDpcXHRcXHRyZXR1cm4gbGluaztcXG4gIDI1OlxcdH1cXG4gIDI2OlxcdFxcbiAgMjc6XFx0c3RhdGljIHZvaWQgKmJwZl9saW5rX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4gIDI4OlxcdHtcXG4gIDI5OlxcdFxcdHN0cnVjdCBicGZfaXRlcl9zZXFfbGlua19pbmZvICppbmZvID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQrKypwb3M7XFxuICAzMjpcXHRcXHQrK2luZm8tXFx1MDAzZWxpbmtfaWQ7XFxuICAzMzpcXHRcXHRicGZfbGlua19wdXQoKHN0cnVjdCBicGZfbGluayAqKXYpO1xcbiAgMzQ6XFx0XFx0cmV0dXJuIGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoXFx1MDAyNmluZm8tXFx1MDAzZWxpbmtfaWQpO1xcbiAgMzU6XFx0fVxcbiAgMzY6XFx0XFxuICAzNzpcXHRzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9saW5rIHtcXG4gIDM4OlxcdFxcdF9fYnBmX21kX3B0cihzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqLCBtZXRhKTtcXG4gIDM5OlxcdFxcdF9fYnBmX21kX3B0cihzdHJ1Y3QgYnBmX2xpbmsgKiwgbGluayk7XFxuICA0MDpcXHR9O1xcbiAgNDE6XFx0XFxuICA0MjpcXHRERUZJTkVfQlBGX0lURVJfRlVOQyhicGZfbGluaywgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsIHN0cnVjdCBicGZfbGluayAqbGluaylcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0c3RhdGljIGludCBfX2JwZl9saW5rX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBib29sIGluX3N0b3ApXFxuICA0NTpcXHR7XFxuICA0NjpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9saW5rIGN0eDtcXG4gIDQ3OlxcdFxcdHN0cnVjdCBicGZfaXRlcl9tZXRhIG1ldGE7XFxuICA0ODpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuICA0OTpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gIDUwOlxcdFxcbiAgNTE6XFx0XFx0Y3R4Lm1ldGEgPSBcXHUwMDI2bWV0YTtcXG4gIDUyOlxcdFxcdGN0eC5saW5rID0gdjtcXG4gIDUzOlxcdFxcdG1ldGEuc2VxID0gc2VxO1xcbiAgNTQ6XFx0XFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFxcdTAwMjZtZXRhLCBpbl9zdG9wKTtcXG4gIDU1OlxcdFxcdGlmIChwcm9nKVxcbiAgNTY6XFx0XFx0XFx0cmV0ID0gYnBmX2l0ZXJfcnVuX3Byb2cocHJvZywgXFx1MDAyNmN0eCk7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdHJldHVybiByZXQ7XFxuICA1OTpcXHR9XFxuICA2MDpcXHRcXG4gIDYxOlxcdHN0YXRpYyBpbnQgYnBmX2xpbmtfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuICA2MjpcXHR7XFxuICA2MzpcXHRcXHRyZXR1cm4gX19icGZfbGlua19zZXFfc2hvdyhzZXEsIHYsIGZhbHNlKTtcXG4gIDY0OlxcdH1cXG4gIDY1OlxcdFxcbiAgNjY6XFx0c3RhdGljIHZvaWQgYnBmX2xpbmtfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuICA2NzpcXHR7XFxuICA2ODpcXHRcXHRpZiAoIXYpXFxuICA2OTpcXHRcXHRcXHQodm9pZClfX2JwZl9saW5rX3NlcV9zaG93KHNlcSwgdiwgdHJ1ZSk7XFxuICA3MDpcXHRcXHRlbHNlXFxuICA3MTpcXHRcXHRcXHRicGZfbGlua19wdXQoKHN0cnVjdCBicGZfbGluayAqKXYpO1xcbiAgNzI6XFx0fVxcbiAgNzM6XFx0XFxuICA3NDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9saW5rX3NlcV9vcHMgPSB7XFxuICA3NTpcXHRcXHQuc3RhcnRcXHQ9IGJwZl9saW5rX3NlcV9zdGFydCxcXG4gIDc2OlxcdFxcdC5uZXh0XFx0PSBicGZfbGlua19zZXFfbmV4dCxcXG4gIDc3OlxcdFxcdC5zdG9wXFx0PSBicGZfbGlua19zZXFfc3RvcCxcXG4gIDc4OlxcdFxcdC5zaG93XFx0PSBicGZfbGlua19zZXFfc2hvdyxcXG4gIDc5OlxcdH07XFxuICA4MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTA6NDIuOTk4NTM2NjI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5NDc5MzA4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSdkIGFydGljdWxhdGUgaXQsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqVHJvdWJsZXNob290aW5nIGEgUG90ZW50aWFsIEJQRiBJRFIgSXNzdWUqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byBnZXQgdGhlIGNvbW1pdCBoaXN0b3J5LiBJIHdhbnQgdG8gc2VlIHRoZSBgZ2l0IGxvZ2AgdG8gcHJvdmlkZSBjb250ZXh0LiBXaGF0J3MgdGhlIHByb2JsZW0gdGhpcyBjaGFuZ2Ugd2FzIGludGVuZGVkIHRvIGZpeD8gVGhhdCdzIGFsd2F5cyBzdGVwIG9uZS5cblxuT2theSwgbGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAgb3IganVzdCBxdWlja2x5IGNoZWNrIHdoYXQgYGxpbmstXHUwMDNlaWRgIGFjdHVhbGx5ICpyZXByZXNlbnRzKiBpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYW5kIHRoZSBzZW1hbnRpY3MgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCBtZWFucyB0byBoYXZlIGEgemVybyBJRCBpbiBhIGBsaW5rX2lkcmAgY29udGV4dC4gVGhhdCdzIGltbWVkaWF0ZWx5IHN1c3BpY2lvdXMuIFdoeSB3b3VsZCB3ZSBiZSBoaXR0aW5nIHRoYXQ/IFplcm8gaXMgdXN1YWxseSBhIHNlbnRpbmVsIHZhbHVlLCBvciBhbiB1bmluaXRpYWxpemVkIHN0YXRlLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBsaW5rLVx1MDAzZWlkYCBiZWluZyB6ZXJvIHdoaWxlIGluIGFuIElEUj8gVGhhdCBkb2Vzbid0IG1ha2UgaW50dWl0aXZlIHNlbnNlLiBNeSBrbm93bGVkZ2Ugb2YgSURScyB0ZWxscyBtZSB0aGF0IGlzbid0IHZhbGlkLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBoYXBwZW5pbmcuIFRoZSBJRFIgaXMgc3VwcG9zZWQgdG8gbWFuYWdlIG5vbi16ZXJvIElEcywgYW5kIHVzdWFsbHksIHRoZXJlIGFyZSBhbGxvY2F0aW9uIG9yIHJlbGVhc2UgcGF0aHMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIFNvIEknbGwgZ28gc3RyYWlnaHQgdG8gc2VhcmNoaW5nIGZvciBgbGlua19pZHJgIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEknbGwgZm9jdXMgb24gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBpbml0aWFsbHksIGJlY2F1c2UgdGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIGZvciBCUEYtcmVsYXRlZCBJRFIgaW50ZXJhY3Rpb25zLiBUaGlzIHdpbGwgaGVscCBtZSB0cmFjZSB0aGUgY2FsbCBwYXRoIGFuZCBzZWUgd2hlcmUgdGhpcyBgbGluay1cdTAwM2VpZGAgaXMgYmVpbmcgc2V0LCBhbmQgKndoeSogaXQgbWlnaHQgYmUgemVybyBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzY1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMDo0NS45NDY0NzA5OTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDk2ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpbmtfaWRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTY0PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWFwX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NTpzdGF0aWMgREVGSU5FX0lEUihsaW5rX2lkcik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjY6c3RhdGljIERFRklORV9TUElOTE9DSyhsaW5rX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Ny1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTMyNTk9c3RhdGljIHZvaWQgYnBmX2xpbmtfZnJlZV9pZChpbnQgaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjYzLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNjQ6XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjY1OlxcdGlkcl9yZW1vdmUoXFx1MDAyNmxpbmtfaWRyLCBpZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzI2NjpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI2Ny19XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNDc2PXN0YXRpYyBpbnQgYnBmX2xpbmtfYWxsb2NfaWQoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ4MC1cXHRpZHJfcHJlbG9hZChHRlBfS0VSTkVMKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDgxOlxcdHNwaW5fbG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ4MjpcXHRpZCA9IGlkcl9hbGxvY19jeWNsaWMoXFx1MDAyNmxpbmtfaWRyLCBsaW5rLCAxLCBJTlRfTUFYLCBHRlBfQVRPTUlDKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDgzOlxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDg0LVxcdGlkcl9wcmVsb2FkX2VuZCgpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ4OS0vKiBQcmVwYXJlIGJwZl9saW5rIHRvIGJlIGV4cG9zZWQgdG8gdXNlci1zcGFjZSBieSBhbGxvY2F0aW5nIGFub25faW5vZGUgZmlsZSxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDkwOiAqIHJlc2VydmluZyB1bnVzZWQgRkQgYW5kIGFsbG9jYXRpbmcgSUQgZnJvbSBsaW5rX2lkci4gVGhpcyBpcyB0byBiZSBwYWlyZWRcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDkxLSAqIHdpdGggYnBmX2xpbmtfc2V0dGxlKCkgdG8gaW5zdGFsbCBGRCBhbmQgSUQgYW5kIGV4cG9zZSBicGZfbGluayB0b1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzUzMz1pbnQgYnBmX2xpbmtfc2V0dGxlKHN0cnVjdCBicGZfbGlua19wcmltZXIgKnByaW1lcilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MzUtXFx0LyogbWFrZSBicGZfbGluayBmZXRjaGFibGUgYnkgSUQgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTM2OlxcdHNwaW5fbG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzNy1cXHRwcmltZXItXFx1MDAzZWxpbmstXFx1MDAzZWlkID0gcHJpbWVyLVxcdTAwM2VpZDtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTM4OlxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTM5LVxcdC8qIG1ha2UgYnBmX2xpbmsgZmV0Y2hhYmxlIGJ5IEZEICovXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MDE1PXN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfYnlfaWQodTMyIGlkKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyMS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIyOlxcdHNwaW5fbG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyMy1cXHQvKiBiZWZvcmUgbGluayBpcyBcXFwic2V0dGxlZFxcXCIsIElEIGlzIDAsIHByZXRlbmQgaXQgZG9lc24ndCBleGlzdCB5ZXQgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDI0OlxcdGxpbmsgPSBpZHJfZmluZChcXHUwMDI2bGlua19pZHIsIGlkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDI1LVxcdGlmIChsaW5rKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDMyLVxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDMzOlxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDM0LVxcdHJldHVybiBsaW5rO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjAzNz1zdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2dldF9jdXJyX29yX25leHQodTMyICppZClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNDAtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjA0MTpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNDItYWdhaW46XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjA0MzpcXHRsaW5rID0gaWRyX2dldF9uZXh0KFxcdTAwMjZsaW5rX2lkciwgaWQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNDQtXFx0aWYgKGxpbmspIHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNTMtXFx0fVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwNTQ6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNTUtXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzA2PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NTQtXFx0XFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDU1OlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmxpbmtfaWRyLCBcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1Ni1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTA6NDUuOTkyOTcyODI0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyOTQyNDEzMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBCUEYgTGluayBJRCBSZXRyaWV2YWwqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IGhvdyBCUEYgbGluayBJRHMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgYnBmX2xpbmtfYnlfaWRgLiBSaWdodCwgdGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoZSBgYnBmX2xpbmtfYnlfaWRgIGZ1bmN0aW9uIGl0c2VsZi4gVGhlIGZ1bmN0aW9uIHRha2VzIGEgbGluayBJRCBhcyBpbnB1dC4gSWYgdGhlIElEIGlzIHplcm8sIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYW4gZXJyb3IsIGluZGljYXRpbmcgbm8gc3VjaCBsaW5rLiBTZWVtcyBsb2dpY2FsLCBnaXZlbiBob3cgdGhlIElEIGlzIGFzc2lnbmVkLiBUaGVuLCBhIHNwaW5sb2NrIGlzIGFjcXVpcmVkIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGBsaW5rX2lkcmAsIHdoaWNoIGlzIGV4cGVjdGVkLiBUaGUgYGlkcl9maW5kYCBjYWxsIGF0dGVtcHRzIHRvIGZpbmQgdGhlIEJQRiBsaW5rIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBJRCB3aXRoaW4gdGhlIElEUiAoSW50ZWdlciBJRCBSZWdpc3RyeSkuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQ6ICBpZiBhIGxpbmsgaXMgZm91bmQsIHRoZXJlJ3MgYSBjaGVjayBvbiBgbGluay1cdTAwM2VpZGAuIElmIGBsaW5rLVx1MDAzZWlkYCBpcyB6ZXJvLCB3ZSByZXR1cm4gYEVBR0FJTmAuIFRoaXMgbGlrZWx5IGluZGljYXRlcyB0aGF0IHRoZSBsaW5rIGlzIGluIGFuIGludGVybWVkaWF0ZSBzdGF0ZSwgbm90IGZ1bGx5IGluaXRpYWxpemVkIG9yIFwic2V0dGxlZFwiIHlldCwgc28gYWNjZXNzaW5nIGl0IGlzbid0IGFsbG93ZWQuIFRoZSBgYnBmX2xpbmtfaW5jX25vdF96ZXJvYCBjYWxsIGlzIGludGVyZXN0aW5nLCBsZXQgbWUgbG9vayBpbnRvIHdoYXQgdGhhdCBpcyBhYm91dCwgYnV0IEkgZXhwZWN0IGl0IHByb3ZpZGVzIHNvbWUga2luZCBvZiByZWZlcmVuY2UgY291bnRpbmcsIHByZXN1bWFibHkgdG8gbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGxpbmsgb2JqZWN0LlxuXG5JZiB0aGUgbGluayBpc24ndCBmb3VuZCBhdCBhbGwsIHdlIHJldHVybiBgRU5PRU5UYC4gRmluYWxseSwgdGhlIHNwaW5sb2NrIGlzIHJlbGVhc2VkLCBhbmQgdGhlIGxpbmsgcG9pbnRlciAob3IgZXJyb3IgcG9pbnRlcikgaXMgcmV0dXJuZWQuIFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSBzdGFuZGFyZCBhbmQgcm9idXN0IGFwcHJvYWNoLCBwcm90ZWN0aW5nIHRoZSBJRFIgd2l0aCBhIGxvY2sgYW5kIGhhbmRsaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aCB0aGUgYGxpbmstXHUwMDNlaWRgIGNoZWNrLiBJdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IHNvbWV0aGluZyBlbHNlIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgd2hpY2ggbWlnaHQgYWxzbyBtYWtlIHVzZSBvZiBhIHJlZmVyZW5jZSBjb3VudGVyLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgaW52ZXN0aWdhdGUgYGJwZl9vYmpfZ2V0X25leHRfaWRgLiAgSSdsbCBkaXZlIGludG8gdGhlIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgZmlsZSB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGltcGxlbWVudGVkLiBJIHdpbGwgc2VlIGlmIHRoZXJlIGlzIGFueSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTA6NTguOTM1Mzg4NTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ3MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQwMjA6XFx0XFx0aW5mby1cXHUwMDNlcGVyZl9ldmVudC5rcHJvYmUuY29va2llID0gZXZlbnQtXFx1MDAzZWJwZl9jb29raWU7XFxuNDAyMTpcXHRcXHRyZXR1cm4gMDtcXG40MDIyOlxcdH1cXG40MDIzOlxcdFxcbjQwMjQ6XFx0c3RhdGljIHZvaWQgYnBmX3BlcmZfbGlua19mZGluZm9fa3Byb2JlKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG40MDI1OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbjQwMjY6XFx0e1xcbjQwMjc6XFx0XFx0Y29uc3QgY2hhciAqbmFtZTtcXG40MDI4OlxcdFxcdGludCBlcnI7XFxuNDAyOTpcXHRcXHR1MzIgcHJvZ19pZCwgdHlwZTtcXG40MDMwOlxcdFxcdHU2NCBvZmZzZXQsIGFkZHI7XFxuNDAzMTpcXHRcXHR1bnNpZ25lZCBsb25nIG1pc3NlZDtcXG40MDMyOlxcdFxcbjQwMzM6XFx0XFx0ZXJyID0gYnBmX2dldF9wZXJmX2V2ZW50X2luZm8oZXZlbnQsIFxcdTAwMjZwcm9nX2lkLCBcXHUwMDI2dHlwZSwgXFx1MDAyNm5hbWUsXFxuNDAzNDpcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2b2Zmc2V0LCBcXHUwMDI2YWRkciwgXFx1MDAyNm1pc3NlZCk7XFxuNDAzNTpcXHRcXHRpZiAoZXJyKVxcbjQwMzY6XFx0XFx0XFx0cmV0dXJuO1xcbjQwMzc6XFx0XFxuNDAzODpcXHRcXHRzZXFfcHJpbnRmKHNlcSxcXG40MDM5OlxcdFxcdFxcdCAgIFxcXCJuYW1lOlxcXFx0JXNcXFxcblxcXCJcXG40MDQwOlxcdFxcdFxcdCAgIFxcXCJvZmZzZXQ6XFxcXHQlI2xseFxcXFxuXFxcIlxcbjQwNDE6XFx0XFx0XFx0ICAgXFxcIm1pc3NlZDpcXFxcdCVsdVxcXFxuXFxcIlxcbjQwNDI6XFx0XFx0XFx0ICAgXFxcImFkZHI6XFxcXHQlI2xseFxcXFxuXFxcIlxcbjQwNDM6XFx0XFx0XFx0ICAgXFxcImV2ZW50X3R5cGU6XFxcXHQlc1xcXFxuXFxcIlxcbjQwNDQ6XFx0XFx0XFx0ICAgXFxcImNvb2tpZTpcXFxcdCVsbHVcXFxcblxcXCIsXFxuNDA0NTpcXHRcXHRcXHQgICBuYW1lLCBvZmZzZXQsIG1pc3NlZCwgYWRkcixcXG40MDQ2OlxcdFxcdFxcdCAgIHR5cGUgPT0gQlBGX0ZEX1RZUEVfS1JFVFBST0JFID8gIFxcXCJrcmV0cHJvYmVcXFwiIDogXFxcImtwcm9iZVxcXCIsXFxuNDA0NzpcXHRcXHRcXHQgICBldmVudC1cXHUwMDNlYnBmX2Nvb2tpZSk7XFxuNDA0ODpcXHR9XFxuNDA0OTpcXHQjZW5kaWZcXG40MDUwOlxcdFxcbjQwNTE6XFx0I2lmZGVmIENPTkZJR19VUFJPQkVfRVZFTlRTXFxuNDA1MjpcXHRzdGF0aWMgaW50IGJwZl9wZXJmX2xpbmtfZmlsbF91cHJvYmUoY29uc3Qgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbjQwNTM6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcXG40MDU0OlxcdHtcXG40MDU1OlxcdFxcdHU2NCByZWZfY3RyX29mZnNldCwgb2Zmc2V0O1xcbjQwNTY6XFx0XFx0Y2hhciBfX3VzZXIgKnVuYW1lO1xcbjQwNTc6XFx0XFx0dTMyIHVsZW4sIHR5cGU7XFxuNDA1ODpcXHRcXHRpbnQgZXJyO1xcbjQwNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjEwOjU4LjkzNTczOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTY2MjE3OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBgYnBmX29ial9nZXRfbmV4dF9pZGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX29ial9nZXRfbmV4dF9pZGAuIFJpZ2h0LCBsZXQncyB0cmFjZSB0aGlzIGRvd24uIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGdvaW5nIHRvIGJlIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIGZvciB0aGUgY29yZSBCUEYgc3lzY2FsbCBpbXBsZW1lbnRhdGlvbnMuIEl0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gb2JqZWN0IHJldHJpZXZhbCBhbmQgbWFuaXB1bGF0aW9uIGZyb20gdXNlcnNwYWNlLiBMZXQncyBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIElmIGl0J3Mgbm90IHRoZXJlLCBJJ2xsIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2VhcmNoIC0gcHJvYmFibHkgbG9vayBhdCByZWxhdGVkIHNvdXJjZSBmaWxlcyB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIG9yIG1heWJlIGV2ZW4gcmVsYXRlZCBoZWFkZXIgZmlsZXMgaWYgaXQgaXMgYSBtYWNybyBvciBpbmxpbmUgZnVuY3Rpb24uIEJ1dCwgbXkgbW9uZXkgaXMgb24gYHN5c2NhbGwuY2AgZm9yIHN0YXJ0ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MDAuOTAxOTYyMzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTY4NTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfb2JqX2dldF9uZXh0X2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTQ3ODI9c3RhdGljIGludCBicGZfcHJvZ190ZXN0X3J1bihjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ4MTEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDgxMjpzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDgxMy1cXHRcXHRcXHQgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDY9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5MC1cXHRjYXNlIEJQRl9QUk9HX0dFVF9ORVhUX0lEOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTE6XFx0XFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzkyLVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnByb2dfaWRyLCBcXHUwMDI2cHJvZ19pZHJfbG9jayk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mzk0LVxcdGNhc2UgQlBGX01BUF9HRVRfTkVYVF9JRDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2Mzk1OlxcdFxcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5Ni1cXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZtYXBfaWRyLCBcXHUwMDI2bWFwX2lkcl9sb2NrKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTgtXFx0Y2FzZSBCUEZfQlRGX0dFVF9ORVhUX0lEOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTk6XFx0XFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDAwLVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmJ0Zl9pZHIsIFxcdTAwMjZidGZfaWRyX2xvY2spO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1My1cXHRjYXNlIEJQRl9MSU5LX0dFVF9ORVhUX0lEOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NTQ6XFx0XFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDU1LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmxpbmtfaWRyLCBcXHUwMDI2bGlua19pZHJfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjExOjAxLjM0NzY1Mjk0M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDE2ODk1MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgT2JqZWN0IElEIFJldHJpZXZhbCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBicGZfb2JqX2dldF9uZXh0X2lkYCBhcm91bmQgbGluZSA0ODEyIGluIHRoZSByZWxldmFudCBjb2RlYmFzZS4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgQlBGIG9iamVjdCBJRCBtYW5hZ2VtZW50IGlzIGhhbmRsZWQgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSUQgYWxsb2NhdGlvbiBvciByZXRyaWV2YWwgaXMgaW1wbGVtZW50ZWQuIEkgd2FudCB0byBmaWd1cmUgb3V0IHRoZSBJRCBlbnVtZXJhdGlvbiBwcm9jZXNzLiBJcyBpdCB0aHJlYWQtc2FmZSwgYW5kIGRvZXMgaXQgYXZvaWQgY29udGVudGlvbj8gRG9lcyBpdCB1c2UgYSBzaW1wbGUgY291bnRlciwgb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBsaWtlIGEgYml0bWFwIG9yIGEgaGFzaCB0YWJsZT8gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgY3J1Y2lhbCBmb3IgYW55IHdvcmsgdGhhdCBpbnRlcmFjdHMgd2l0aCBhbmQgcmVsaWVzIG9uIG9iamVjdCBJRCByZXRyaWV2YWwgaW4gQlBGLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjExOjAzLjM2NDU1MTMxM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDgxMixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDgxMjpcXHRzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuNDgxMzpcXHRcXHRcXHRcXHQgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcXG40ODE0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWRyICppZHIsXFxuNDgxNTpcXHRcXHRcXHRcXHQgICAgICAgc3BpbmxvY2tfdCAqbG9jaylcXG40ODE2OlxcdHtcXG40ODE3OlxcdFxcdHUzMiBuZXh0X2lkID0gYXR0ci1cXHUwMDNlc3RhcnRfaWQ7XFxuNDgxODpcXHRcXHRpbnQgZXJyID0gMDtcXG40ODE5OlxcdFxcbjQ4MjA6XFx0XFx0aWYgKENIRUNLX0FUVFIoQlBGX09CSl9HRVRfTkVYVF9JRCkgfHwgbmV4dF9pZCBcXHUwMDNlPSBJTlRfTUFYKVxcbjQ4MjE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDgyMjpcXHRcXG40ODIzOlxcdFxcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcXG40ODI0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuNDgyNTpcXHRcXG40ODI2OlxcdFxcdG5leHRfaWQrKztcXG40ODI3OlxcdFxcdHNwaW5fbG9ja19iaChsb2NrKTtcXG40ODI4OlxcdFxcdGlmICghaWRyX2dldF9uZXh0KGlkciwgXFx1MDAyNm5leHRfaWQpKVxcbjQ4Mjk6XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG40ODMwOlxcdFxcdHNwaW5fdW5sb2NrX2JoKGxvY2spO1xcbjQ4MzE6XFx0XFxuNDgzMjpcXHRcXHRpZiAoIWVycilcXG40ODMzOlxcdFxcdFxcdGVyciA9IHB1dF91c2VyKG5leHRfaWQsIFxcdTAwMjZ1YXR0ci1cXHUwMDNlbmV4dF9pZCk7XFxuNDgzNDpcXHRcXG40ODM1OlxcdFxcdHJldHVybiBlcnI7XFxuNDgzNjpcXHR9XFxuNDgzNzpcXHRcXG40ODM4OlxcdHN0cnVjdCBicGZfbWFwICpicGZfbWFwX2dldF9jdXJyX29yX25leHQodTMyICppZClcXG40ODM5OlxcdHtcXG40ODQwOlxcdFxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuNDg0MTpcXHRcXG40ODQyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bWFwX2lkcl9sb2NrKTtcXG40ODQzOlxcdGFnYWluOlxcbjQ4NDQ6XFx0XFx0bWFwID0gaWRyX2dldF9uZXh0KFxcdTAwMjZtYXBfaWRyLCBpZCk7XFxuNDg0NTpcXHRcXHRpZiAobWFwKSB7XFxuNDg0NjpcXHRcXHRcXHRtYXAgPSBfX2JwZl9tYXBfaW5jX25vdF96ZXJvKG1hcCwgZmFsc2UpO1xcbjQ4NDc6XFx0XFx0XFx0aWYgKElTX0VSUihtYXApKSB7XFxuNDg0ODpcXHRcXHRcXHRcXHQoKmlkKSsrO1xcbjQ4NDk6XFx0XFx0XFx0XFx0Z290byBhZ2FpbjtcXG40ODUwOlxcdFxcdFxcdH1cXG40ODUxOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MDMuMzY0NzY3NzIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY3NjkzMzc4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJQRiBMaW5rIEl0ZXJhdG9yIFJhY2UgQ29uZGl0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldoeSBhcmUgdGhleSBhZGRpbmcgdGhpcyBjaGVjayBmb3IgYGxpbmstXHUwMDNlaWRgP1wiLiBJIHNlZSB0aGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kIHRoZSBjb3JlIGRpZmZlcmVuY2UgaXMgdGhpcyBhZGRlZCBjb25kaXRpb25hbDogYGlmIChsaW5rLVx1MDAzZWlkKWAuICBUaGF0IHNpZ25hbHMgYSByYWNlIGNvbmRpdGlvbiBvciBzb21lIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGhvdyBsaW5rcyBhcmUgYmVpbmcgaGFuZGxlZCBkdXJpbmcgY3JlYXRpb24gYW5kIGl0ZXJhdGlvbi5cblxuTXkgZXhwZXJ0aXNlIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgbGluayBjcmVhdGlvbiBwcm9jZXNzLiAgSSBzZWUgdGhhdCBgYnBmX2xpbmtfcHJpbWVgIGFsbG9jYXRlcyBhbiBJRCBpbiB0aGUgYGxpbmtfaWRyYCwgYnV0IGNydWNpYWxseSwgaXQgKmRvZXNuJ3QqIGltbWVkaWF0ZWx5IHNldCB0aGUgYGxpbmstXHUwMDNlaWRgIGZpZWxkIGl0c2VsZi4gVGhhdCdzIG9ubHkgaGFwcGVuaW5nIGluIGBicGZfbGlua19zZXR0bGUoKWAuICBUaGlzIGlzIHRoZSBrZXkuICBCZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMsIHRoZXJlJ3MgYSB3aW5kb3cgb2YgdnVsbmVyYWJpbGl0eS5cblxuSWYgYSBCUEYgbGluayBpdGVyYXRvciDigJMgdGhlIHBhcnQgb2YgdGhlIGtlcm5lbCByZXNwb25zaWJsZSBmb3IgdHJhdmVyc2luZyB0aGVzZSBsaW5rcyDigJMgaXMgcnVubmluZyBjb25jdXJyZW50bHksIGl0IGNvdWxkIHBvdGVudGlhbGx5IHBpY2sgdXAgYSBsaW5rIHdob3NlIGBpZGAgaGFzbid0IGJlZW4gc2V0IHlldCAoaS5lLiwgYGxpbmstXHUwMDNlaWRgIGlzIHN0aWxsIDApLiBUaGlzICppcyogYSByYWNlIGNvbmRpdGlvbi4gSW4gYGJwZl9saW5rX2J5X2lkYCwgdGhlIGNvZGUgYWxyZWFkeSBoYW5kbGVkIHRoaXMuIElmIGBsaW5rLVx1MDAzZWlkYCBpcyAwLCBpdCBrbm93cyB0byB0cmVhdCB0aGUgbGluayBhcyBpZiBpdCBkb2Vzbid0IGV4aXN0LiBOb3csIGl0IHNlZW1zLCB0aGF0J3MgYmVpbmcgZXh0ZW5kZWQgdG8gdGhlIGl0ZXJhdG9yLlxuXG5NeSBicmFpbiBpcyByYWNpbmcsIHRoaW5raW5nIG9mIHRoZSBjb25zZXF1ZW5jZXMuICBJZiB0aGUgaXRlcmF0b3IgZ3JhYnMgYSBsaW5rIHdpdGggYGxpbmstXHUwMDNlaWQgPT0gMGAsIHRoZSBpdGVyYXRvciBjYW4gZXhwb3NlIHRoaXMgcGFydGlhbGx5IGluaXRpYWxpemVkIGxpbmsgdG8gdXNlcnNwYWNlIG9yIHRoZSBCUEYgcHJvZ3JhbSwgYW5kIGl0IGV4cG9zZXMgd2l0aCBJRCAwLiBGdXJ0aGVyLCBJIGltbWVkaWF0ZWx5IGNvbnNpZGVyIHdoYXQgaGFwcGVucyBpZiBgYnBmX2xpbmtfY2xlYW51cGAgcnVucyAqYWZ0ZXIqIHRoZSBpdGVyYXRvciBzZWVzIHRoZSB1bmluaXRpYWxpemVkIGxpbmsuIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgZW50cnkgZnJvbSB0aGUgYElEUmAgYW5kIGZyZWVzIHRoZSBmaWxlIGFuZCBmaWxlIGRlc2NyaXB0b3IuIFRoZSBmYWN0IHRoYXQgdGhlIGl0ZXJhdG9yICppbmMnZCogdGhlIGxpbmsgaXMgbm93IGNvbmNlcm5pbmcuIFRoZSBsaW5rIHdhcyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQhIFRoaXMgcG90ZW50aWFsbHkgaW50cm9kdWNlcyBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLlxuXG5UaGUgb3JpZ2luYWwgY29kZSBpbiBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgKmRpZG4ndCogaGF2ZSB0aGlzIGNoZWNrLCBtZWFuaW5nIGl0IHdhcyB2dWxuZXJhYmxlLiAgVGhlIHBhdGNoIGZpeGVzIHRoZSByYWNlIVxuSSBkb24ndCBuZWVkIHRvIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2UsIHRoZSBjb2RlIHJldmVhbHMgdGhlIGludGVudCBwZXJmZWN0bHkuIFRoaXMgaXMgYSBzdWJ0bGUgYnV0IGNyaXRpY2FsIGZpeCBpbiBhIGNyaXRpY2FsIGtlcm5lbCBzdWJzeXN0ZW0uXG5UaGUgc3Vic3lzdGVtIGlzIEJQRiBjb3JlLiBUaGUgZnVuY3Rpb24gaXMgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dC5cblxuTm93IEkgbmVlZCB0byBzZWUgaG93IHRoZSBpdGVyYXRvciBpcyBjcmVhdGVkIGFuZCBleGVjdXRlZCwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LCBidXQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGEgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIHBhcnRpYWxseSBpbml0aWFsaXplZCBCUEYgbGlua3MgYW5kIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgaXRlcmF0aW9uIGhhcyBiZWVuIHJlc29sdmVkIGJ5IHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMjIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MTAuMTM0MTA4NDYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY5MDk4NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9saW5rX3NlcV9vcHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9saW5rX2l0ZXIuYz02Nj1zdGF0aWMgdm9pZCBicGZfbGlua19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbmtlcm5lbC9icGYvbGlua19pdGVyLmMtNzMtXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzo3NDpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9saW5rX3NlcV9vcHMgPSB7XFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy03NS1cXHQuc3RhcnRcXHQ9IGJwZl9saW5rX3NlcV9zdGFydCxcXG4tLVxcbmtlcm5lbC9icGYvbGlua19pdGVyLmM9ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBicGZfbGlua19zZXFfaW5mbyA9IHtcXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jOjg0OlxcdC5zZXFfb3BzXFx0XFx0PSBcXHUwMDI2YnBmX2xpbmtfc2VxX29wcyxcXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTg1LVxcdC5pbml0X3NlcV9wcml2YXRlXFx0PSBOVUxMLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMToxMS43MDMyMTU4ODhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAwNzA0NjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbGlua19pdGVyLmNgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQlBGIGxpbmsgaXRlcmF0b3IgaW1wbGVtZW50YXRpb24uIEknbSB0aGlua2luZyB0aGUgaXNzdWUgSSdtIGNoYXNpbmcgaXMgcHJvYmFibHkgYXJvdW5kIHdoZXJlIHRoZSBsaW5rcyBhcmUgYWN0dWFsbHkgaXRlcmF0ZWQsIHdoaWNoIGlzIG9mdGVuIGEgc291cmNlIG9mIHN1YnRsZSBCUEYgcHJvZ3JhbSBlcnJvcnMuIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBga2VybmVsL2JwZi9saW5rX2l0ZXIuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4My4gSG9wZWZ1bGx5LCB0aGF0J2xsIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHdoYXRldmVyIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMToxMy43MTAyNjU0ODhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9saW5rX2l0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHRcXHRlbHNlXFxuICA3MTpcXHRcXHRcXHRicGZfbGlua19wdXQoKHN0cnVjdCBicGZfbGluayAqKXYpO1xcbiAgNzI6XFx0fVxcbiAgNzM6XFx0XFxuICA3NDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9saW5rX3NlcV9vcHMgPSB7XFxuICA3NTpcXHRcXHQuc3RhcnRcXHQ9IGJwZl9saW5rX3NlcV9zdGFydCxcXG4gIDc2OlxcdFxcdC5uZXh0XFx0PSBicGZfbGlua19zZXFfbmV4dCxcXG4gIDc3OlxcdFxcdC5zdG9wXFx0PSBicGZfbGlua19zZXFfc3RvcCxcXG4gIDc4OlxcdFxcdC5zaG93XFx0PSBicGZfbGlua19zZXFfc2hvdyxcXG4gIDc5OlxcdH07XFxuICA4MDpcXHRcXG4gIDgxOlxcdEJURl9JRF9MSVNUX1NJTkdMRShidGZfYnBmX2xpbmtfaWQsIHN0cnVjdCwgYnBmX2xpbmspXFxuICA4MjpcXHRcXG4gIDgzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gYnBmX2xpbmtfc2VxX2luZm8gPSB7XFxuICA4NDpcXHRcXHQuc2VxX29wc1xcdFxcdD0gXFx1MDAyNmJwZl9saW5rX3NlcV9vcHMsXFxuICA4NTpcXHRcXHQuaW5pdF9zZXFfcHJpdmF0ZVxcdD0gTlVMTCxcXG4gIDg2OlxcdFxcdC5maW5pX3NlcV9wcml2YXRlXFx0PSBOVUxMLFxcbiAgODc6XFx0XFx0LnNlcV9wcml2X3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2xpbmtfaW5mbyksXFxuICA4ODpcXHR9O1xcbiAgODk6XFx0XFxuICA5MDpcXHRzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfbGlua19yZWdfaW5mbyA9IHtcXG4gIDkxOlxcdFxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJicGZfbGlua1xcXCIsXFxuICA5MjpcXHRcXHQuY3R4X2FyZ19pbmZvX3NpemVcXHQ9IDEsXFxuICA5MzpcXHRcXHQuY3R4X2FyZ19pbmZvXFx0XFx0PSB7XFxuICA5NDpcXHRcXHRcXHR7IG9mZnNldG9mKHN0cnVjdCBicGZfaXRlcl9fYnBmX2xpbmssIGxpbmspLFxcbiAgOTU6XFx0XFx0XFx0ICBQVFJfVE9fQlRGX0lEX09SX05VTEwgfSxcXG4gIDk2OlxcdFxcdH0sXFxuICA5NzpcXHRcXHQuc2VxX2luZm9cXHRcXHQ9IFxcdTAwMjZicGZfbGlua19zZXFfaW5mbyxcXG4gIDk4OlxcdH07XFxuICA5OTpcXHRcXG4gMTAwOlxcdHN0YXRpYyBpbnQgX19pbml0IGJwZl9saW5rX2l0ZXJfaW5pdCh2b2lkKVxcbiAxMDE6XFx0e1xcbiAxMDI6XFx0XFx0YnBmX2xpbmtfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9ICpidGZfYnBmX2xpbmtfaWQ7XFxuIDEwMzpcXHRcXHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcXHUwMDI2YnBmX2xpbmtfcmVnX2luZm8pO1xcbiAxMDQ6XFx0fVxcbiAxMDU6XFx0XFxuIDEwNjpcXHRsYXRlX2luaXRjYWxsKGJwZl9saW5rX2l0ZXJfaW5pdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjExOjEzLjcxMDM0MDcyOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjY3ODI3MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBCUEYgSXRlcmF0b3JzKipcblxuT2theSwgc28gQlBGIGl0ZXJhdG9ycyBhcmUgY3JlYXRlZCB1c2luZyBgYnBmKEJQRl9MSU5LX0NSRUFURSlgIHdpdGggdGhlIGBCUEZfVFJBQ0VfSVRFUmAgb3B0aW9uLCBnZW5lcmF0aW5nIGEgYHNlcV9maWxlYC4gVGhhdCBtZWFucyB1c2Vyc3BhY2UgY2FuIGFjY2VzcyB0aGlzIHRocm91Z2ggYSBzdGFuZGFyZCBgcmVhZCgyKWAgY2FsbCAtIHRoYXQncyBleGNlbGxlbnQhIFRoaXMgb3BlbnMgdXAgYSB3aG9sZSBuZXcgYXJlYSBvZiBvYnNlcnZhYmlsaXR5IGFuZCBtYW5pcHVsYXRpb24uIE5vdywgYmVmb3JlIEkgZ2V0IHRvbyBleGNpdGVkLCBsZXQncyBzZWUgaWYgc3l6a2FsbGVyIGhhcyBzdXBwb3J0IGZvciBmdXp6ZXIgb3IgYW55IGNvdmVyYWdlIGZvciBCUEYgaXRlcmF0b3JzLCBvciBpZiBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIHRoaXMgbWV0aG9kLiBZZXMsIGdyZWF0LCBpdCBsb29rcyBsaWtlIHN5emthbGxlciBvZmZlcnMgY29tcHJlaGVuc2l2ZSBCUEYgc3lzY2FsbCBjb3ZlcmFnZSwgaW5jbHVkaW5nIGBicGYkQlBGX0xJTktfQ1JFQVRFYCBhbmQgdGhlIG90aGVyIGtleSBvbmVzLiBUaGF0J3MgYSBnb29kIHNpZ24uIFRvIGNvbmZpcm0gZXZlcnl0aGluZywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIGBrZXJuZWwvYnBmL2xpbmtfaXRlci5jYCBhbmQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBlbnN1cmUgdGhleSdyZSBjb3JyZWN0bHkgZW5hYmxlZC4gSSB3aWxsIGFsc28gaGF2ZSB0byBsb29rIGluIGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBjb25maXJtIHdoZXJlIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gcGxhY2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk1NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjExOjE2LjM3ODE3NTA1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyNzQ2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGlua19pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbi0tXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYz05MD1zdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfbGlua19yZWdfaW5mbyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvbGlua19pdGVyLmMtOTktXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzoxMDA6c3RhdGljIGludCBfX2luaXQgYnBmX2xpbmtfaXRlcl9pbml0KHZvaWQpXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0xMDEte1xcbi0tXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0xMDUtXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzoxMDY6bGF0ZV9pbml0Y2FsbChicGZfbGlua19pdGVyX2luaXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMToxNi40Mzg0NTY4NjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzQyMzE1MzI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLZXJuZWwgQ29tcGlsYXRpb24gTXVzaW5ncyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYnVpbGQgcHJvY2VzcyBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgb2JqZWN0IGZpbGVzIGBzeXNjYWxsLm9gLCBgLi4uYCwgYW5kIGBsaW5rX2l0ZXIub2AgYXJlIGJlaW5nIGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBzZXR0aW5nLiBSaWdodCwgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIHRoZSAqb25seSogcmVxdWlyZWQgY29uZmlnLCBiZWNhdXNlIHRoaW5ncyBpbiB0aGUga2VybmVsIGNhbiBnZXQuLi5jb21wbGV4LlxuXG5Ob3csIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCBgQlBGX1NZU0NBTExgIHVzdWFsbHkgcmlkZXMgb24gdGhlIGNvYXR0YWlscyBvZiBgQlBGYC4gTGV0J3MgY29uZmlybSB0aGF0IGRlcGVuZGVuY3kg4oCTIGRvdWJsZS1jaGVja2luZyBpcyBhbHdheXMgZ29vZCBwcmFjdGljZS4gVGltZSB0byBnbyBwZWVrIGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AgYW5kIG1ha2Ugc3VyZSBteSBtZW1vcnkgc2VydmVzIG1lIGNvcnJlY3RseSBhbmQgY29uZmlybSBhbnkgb3RoZXIgcmVsZXZhbnQgc2V0dGluZ3MhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzA1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MTkuODYxNjEzNDY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzIzODU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMToxOS45MTg4NTk0OTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDcyMjI3MzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgbG9vayBpbnRvIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvbmZpZ3VyYXRpb24uIEkgcmVtZW1iZXIgd29ya2luZyB3aXRoIGBLY29uZmlnYCBmaWxlcyBiZWZvcmU7IHRoZXkncmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIGNvbnRyb2xsaW5nIGtlcm5lbCBmZWF0dXJlcy4gTGV0J3Mgc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZSwgSSdtIHRoaW5raW5nIHNvbWV3aGVyZSBhcm91bmQgbGluZSAyNy4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGRlYWwgd2l0aCB0aGUgY29yZSBlbmFibGluZyBvcHRpb25zIGZvciBCUEYsIG9yIHBlcmhhcHMgY29uZmlndXJhdGlvbiBvZiBzb21lIG9mIHRoZSBCUEYgc3Vic3lzdGVtcy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB0aGVyZS4gRnJvbSBoZXJlIEknbGwgc2VlIHdoYXQgdGhlIG9wdGlvbnMgYXJlIGFuZCB3aGF0IG15IHVuZGVyc3RhbmRpbmcgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDY0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MjQuNjQxMTM2MjI0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA0NjpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA0OTpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTA6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuICA1MTpcXHRcXHQgIHByb2dyYW1zLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxcbiAgNTQ6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDU1OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxcbiAgNTY6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbiAgNTk6XFx0XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjExOjI0LjY0MTMxMzc2NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MDEwNjA1MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQlBGIFN5c2NhbGwgRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIGBCUEZfU1lTQ0FMTGAgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpdCBkb2Vzbid0IGhhdmUgYW55IGV4cGxpY2l0IGBkZXBlbmRzIG9uYCByZXF1aXJlbWVudHMsIGJ1dCBpdCAqZG9lcyogc2VsZWN0IEJQRi4gVGhhdCdzIGdvb2QgdG8ga25vdywgc2ltcGxpZmllcyB0aGluZ3Mgc29tZXdoYXQuIE5vdywgSSBuZWVkIHRvIGludmVzdGlnYXRlIGEgc3BlY2lmaWMgZnVuY3Rpb246IGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YC4gSSdtIGN1cmlvdXMgaWYgaXRzIGltcGxlbWVudGF0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIG1heWJlIGJlaGluZCBzb21lIGAjaWZkZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBzb3VyY2UgY29kZTsgc3BlY2lmaWNhbGx5LCBsZXQgbWUganVtcCB0byBsaW5lIDYwMzcgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIHRoYXQgbGluZSwganVzdCB0byBnZXQgYSBicm9hZGVyIGNvbnRleHQgb2Ygd2hhdCdzIGhhcHBlbmluZy4gQWxyaWdodCwgSSdtIHJlYWRpbmcgdGhlIGNvZGUgbm93Li4uIGxldCdzIHNlZSwgaXMgaXQgaW5zaWRlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3M/IEkgbmVlZCB0byBjaGVjayBjYXJlZnVsbHksIHNvIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gTGV0J3Mgc3RhcnQgd2l0aCB0aGF0IHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzgzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MzIuNjUxOTIzMDEzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MDEwOlxcdHtcXG42MDExOlxcdFxcdHJldHVybiBhdG9taWM2NF9mZXRjaF9hZGRfdW5sZXNzKFxcdTAwMjZsaW5rLVxcdTAwM2VyZWZjbnQsIDEsIDApID8gbGluayA6IEVSUl9QVFIoLUVOT0VOVCk7XFxuNjAxMjpcXHR9XFxuNjAxMzpcXHRFWFBPUlRfU1lNQk9MKGJwZl9saW5rX2luY19ub3RfemVybyk7XFxuNjAxNDpcXHRcXG42MDE1OlxcdHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfYnlfaWQodTMyIGlkKVxcbjYwMTY6XFx0e1xcbjYwMTc6XFx0XFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbjYwMTg6XFx0XFxuNjAxOTpcXHRcXHRpZiAoIWlkKVxcbjYwMjA6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuNjAyMTpcXHRcXG42MDIyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxuNjAyMzpcXHRcXHQvKiBiZWZvcmUgbGluayBpcyBcXFwic2V0dGxlZFxcXCIsIElEIGlzIDAsIHByZXRlbmQgaXQgZG9lc24ndCBleGlzdCB5ZXQgKi9cXG42MDI0OlxcdFxcdGxpbmsgPSBpZHJfZmluZChcXHUwMDI2bGlua19pZHIsIGlkKTtcXG42MDI1OlxcdFxcdGlmIChsaW5rKSB7XFxuNjAyNjpcXHRcXHRcXHRpZiAobGluay1cXHUwMDNlaWQpXFxuNjAyNzpcXHRcXHRcXHRcXHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xcbjYwMjg6XFx0XFx0XFx0ZWxzZVxcbjYwMjk6XFx0XFx0XFx0XFx0bGluayA9IEVSUl9QVFIoLUVBR0FJTik7XFxuNjAzMDpcXHRcXHR9IGVsc2Uge1xcbjYwMzE6XFx0XFx0XFx0bGluayA9IEVSUl9QVFIoLUVOT0VOVCk7XFxuNjAzMjpcXHRcXHR9XFxuNjAzMzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxuNjAzNDpcXHRcXHRyZXR1cm4gbGluaztcXG42MDM1OlxcdH1cXG42MDM2OlxcdFxcbjYwMzc6XFx0c3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpXFxuNjAzODpcXHR7XFxuNjAzOTpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XFxuNjA0MDpcXHRcXG42MDQxOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxuNjA0MjpcXHRhZ2FpbjpcXG42MDQzOlxcdFxcdGxpbmsgPSBpZHJfZ2V0X25leHQoXFx1MDAyNmxpbmtfaWRyLCBpZCk7XFxuNjA0NDpcXHRcXHRpZiAobGluaykge1xcbjYwNDU6XFx0XFx0XFx0aWYgKGxpbmstXFx1MDAzZWlkKVxcbjYwNDY6XFx0XFx0XFx0XFx0bGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTtcXG42MDQ3OlxcdFxcdFxcdGVsc2VcXG42MDQ4OlxcdFxcdFxcdFxcdGxpbmsgPSBFUlJfUFRSKC1FQUdBSU4pO1xcbjYwNDk6XFx0XFx0XFx0aWYgKElTX0VSUihsaW5rKSkge1xcbjYwNTA6XFx0XFx0XFx0XFx0KCppZCkrKztcXG42MDUxOlxcdFxcdFxcdFxcdGdvdG8gYWdhaW47XFxuNjA1MjpcXHRcXHRcXHR9XFxuNjA1MzpcXHRcXHR9XFxuNjA1NDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxuNjA1NTpcXHRcXG42MDU2OlxcdFxcdHJldHVybiBsaW5rO1xcbjYwNTc6XFx0fVxcbjYwNTg6XFx0XFxuNjA1OTpcXHQjZGVmaW5lIEJQRl9MSU5LX0dFVF9GRF9CWV9JRF9MQVNUX0ZJRUxEIGxpbmtfaWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MzIuNjUyMTg2MzA0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY3OTY1OTI2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGZvciBGb2N1cyBTeW1ib2wgRGV0ZXJtaW5hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG1ha2luZyBzdXJlIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY29ycmVjdC4gRmlyc3QgdGhpbmcgSSBub3RpY2VkIGlzIHRoYXQgdGhlcmUgYXJlIG5vIGAjaWZkZWZgIGd1YXJkcyBhcm91bmQgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgLCB3aGljaCBpcyByZWxldmFudCB0byBteSBhbmFseXNpcy4gTm93LCBsZXQncyBuYWlsIGRvd24gd2hhdCBzeW1ib2xzIHdlIHNob3VsZCBpbmNsdWRlLlxuXG5UaGUgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgaXMgZGVmaW5pdGVseSBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAuICBJIGNoZWNrZWQgaXRzIGNhbGxlcnM7IHRoZXkgYXJlIGBicGZfbGlua19zZXFfc3RhcnRgIGFuZCBgYnBmX2xpbmtfc2VxX25leHRgLiBJbXBvcnRhbnRseSwgSSBzZWUgdGhhdCBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgaXMgYSBub24tc3RhdGljLCBleHBvcnRlZCBzeW1ib2wgaW4gYHZtbGludXhgLlxuXG5JIHRoZW4gZG91YmxlIGNoZWNrZWQsIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YCBpcyBub3Qgc3RhdGljLCB3aGlsZSBpdHMgY2FsbGVycywgYGJwZl9saW5rX3NlcV9zdGFydGAgYW5kIGBicGZfbGlua19zZXFfbmV4dGAsIGFyZSBzdGF0aWMgYHNlcV9vcGVyYXRpb25zYCBpbiBga2VybmVsL2JwZi9saW5rX2l0ZXIuY2AuIEkgY29uc2lkZXJlZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBicGZfbGlua19zZXR0bGVgLCBgYnBmX2xpbmtfcHJpbWVgLCBgYnBmX2xpbmtfYWxsb2NfaWRgLCBhbmQgYGJwZl9saW5rX2J5X2lkYCwgYnV0IEkgY29uZmlybWVkIHRoYXQgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGlzIHNwZWNpZmljIHRvIHRoZSBCUEYgbGluayBpdGVyYXRpb24gbG9naWMsIHNvIEkgY2FuIGV4Y2x1ZGUgdGhlbS5cblxuSSB0aGVuIHJldmlzaXRlZCB0aGUgc2VjdGlvbiA0IGd1aWRlbGluZXMuIFRoZXkgZW1waGFzaXplIGxpc3RpbmcgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhbHRlcmVkIG9yIGRpcmVjdCBBUEkgZW50cnkgcG9pbnRzLCB3aGlsZSBhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuICBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgaXMsIGluIGZhY3QsIHRoZSBmdW5jdGlvbiBiZWluZyBhbHRlcmVkLiBBbmQgdGhlIGNhbGxlcnMgYXJlIGBicGZfbGlua19zZXFfc3RhcnRgIGFuZCBgYnBmX2xpbmtfc2VxX25leHRgLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgZGlkIGEgYGdyZXBgIHNlYXJjaC4gQW5kLCB5dXAsIHRoZSBvbmx5IGNhbGxzIHRvIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YCBhcmUgaW4gYGtlcm5lbC9icGYvbGlua19pdGVyLmM6MThgIGFuZCBga2VybmVsL2JwZi9saW5rX2l0ZXIuYzozNGAuIFNvIHRob3NlIHRocmVlIGFyZSB0aGUgcmVsZXZhbnQgc3ltYm9scy5cblxuTmV4dCwgSSBsb29rZWQgYXQgXCJXb3J0aEZ1enppbmdcIi4gSXQncyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIChga2VybmVsL2JwZi9zeXNjYWxsLmNgKSwgYW5kIGl0IG1vZGlmaWVzIGxpbmsgcmV0cmlldmFsIGxvZ2ljIGR1cmluZyBpdGVyYXRpb24gdG8gc2tpcCB1bnNldHRsZWQgbGlua3MuIFRoYXQgbWFrZXMgaXQgZnV6emluZy1yZWxldmFudC4gIEkgY29uZmlybWVkIFwiV29ydGhGdXp6aW5nOiB0cnVlXCIuXG5cbkkgdGhlbiBsb29rZWQgYXQgdGhlIGVuYWJsZSBjb25maWd1cmF0aW9ucywgYEJQRl9TWVNDQUxMYCBpcyB0aGUgcHJpbWFyeSBjb25maWcgbmVlZGVkIGZvciBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCBga2VybmVsL2JwZi9saW5rX2l0ZXIuY2AuIFdoaWxlIGBCUEZgIGlzIHNlbGVjdGVkIGJ5IGBCUEZfU1lTQ0FMTGAsIGV4cGxpY2l0bHkgc3BlY2lmeWluZyBgQlBGX1NZU0NBTExgIChhbmQgYEJQRmAgaWYgZGVzaXJlZCkgaXMgaWRlYWwuICBgQlBGX1NZU0NBTExgIGlzIHRoZSBzdGFuZGFyZCBmbGFnLlxuXG5Ob3cgdG8gZmluYWxpemUgdGhlIGBGb2N1c1N5bWJvbHNgOlxuKiAgIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YFxuKiAgIGBicGZfbGlua19zZXFfc3RhcnRgXG4qICAgYGJwZl9saW5rX3NlcV9uZXh0YFxuXG5JIHdlbnQgYmFjayBvbmUgbW9yZSB0aW1lLCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgdG8gYWRkIG9yIGlmIHRoZSBleGlzdGluZyBvbmVzIGFyZSBwZXJmZWN0LiBUaGVzZSB0aHJlZSBhcmUgdGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgcGlucG9pbnQgdGhlIGZ1bmN0aW9uIHRoYXQncyBtb2RpZmllZCBhbmQgaXRzIGl0ZXJhdGlvbiBlbnRyeXBvaW50cy5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0IGFuZCBpcyB2ZXJpZmllZC4gTm93IEknbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg2MSwiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMTozOS40NDg3ODI3NTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM4MDE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0XCIsXG4gICAgXCJicGZfbGlua19zZXFfc3RhcnRcIixcbiAgICBcImJwZl9saW5rX3NlcV9uZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpIGluIGtlcm5lbC9icGYvc3lzY2FsbC5jIHRvIGNoZWNrIGlmIGxpbmstXFx1MDAzZWlkIGlzIG5vbi16ZXJvIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50LCByZXR1cm5pbmcgLUVBR0FJTiBvdGhlcndpc2Ugc28gdGhlIGl0ZXJhdGlvbiBza2lwcyB1bnNldHRsZWQgbGlua3MuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgQlBGIGl0ZXJhdG9yIGNvZGUgcGF0aHMgKGJwZl9saW5rIGl0ZXJhdG9yKSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dFwiLFxuICAgIFwiYnBmX2xpbmtfc2VxX3N0YXJ0XCIsXG4gICAgXCJicGZfbGlua19zZXFfbmV4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoKSBpbiBrZXJuZWwvYnBmL3N5c2NhbGwuYyB0byBjaGVjayBpZiBsaW5rLVxcdTAwM2VpZCBpcyBub24temVybyBiZWZvcmUgYXR0ZW1wdGluZyB0byBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCwgcmV0dXJuaW5nIC1FQUdBSU4gb3RoZXJ3aXNlIHNvIHRoZSBpdGVyYXRpb24gc2tpcHMgdW5zZXR0bGVkIGxpbmtzLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIEJQRiBpdGVyYXRvciBjb2RlIHBhdGhzIChicGZfbGluayBpdGVyYXRvcikgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MzkuNTIyMTcwNDVaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDEzNzM0NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MzkuNTIyNzg2MTAxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjEwMTMxMTM2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KClgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gdmVyaWZ5IHRoYXQgYGxpbmstXFx1MDAzZWlkYCBpcyBub24temVybyBiZWZvcmUgaW5jcmVtZW50aW5nIHRoZSBsaW5rIHJlZmNvdW50IGFuZCByZXR1cm5pbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGxpbmsgaXRlcmF0b3IgZnJvbSByZXR1cm5pbmcgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgb3IgdW5zZXR0bGVkIEJQRiBsaW5rIHRoYXQgd2FzIGFsbG9jYXRlZCBhbiBJRCBpbiBgbGlua19pZHJgIGJ1dCBoYXMgbm90IHlldCBiZWVuIHNldHRsZWQgdmlhIGBicGZfbGlua19zZXR0bGUoKWAuXFxuXFxuYGxpbmstXFx1MDAzZWlkYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gMCBpbiBgYnBmX2xpbmtfaW5pdF9zbGVlcGFibGUoKWAgZHVyaW5nIGxpbmsgYWxsb2NhdGlvbiBhbmQgc2V0IHRvIGl0cyBJRCBvbmx5IHVwb24gYGJwZl9saW5rX3NldHRsZSgpYC4gVGhpcyBjaGFuZ2Ugb25seSBjaGVja3MgYW4gYWxyZWFkeS1pbml0aWFsaXplZCBmaWVsZCAoYGxpbmstXFx1MDAzZWlkYCkgdG8gaGFuZGxlIGxpbmsgbGlmZWN5Y2xlL2NvbmN1cnJlbmN5IHN0YXRlLCBhbmQgZG9lcyBub3QgdG91Y2ggb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbHRlciBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk1NWUwMjgyYmIwMGVkZWVjZmY3YmFjY2EyMzg5MjFhYjgzOWM2YjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAyMDoxMDoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDg1M2I0N2Y4MTM4NDIuLjI0NGE5MzliOWQyZGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC02MDQyLDcgKzYwNDIsMTAgQEAgc3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpXG4gYWdhaW46XG4gXHRsaW5rID0gaWRyX2dldF9uZXh0KFx1MDAyNmxpbmtfaWRyLCBpZCk7XG4gXHRpZiAobGluaykge1xuLVx0XHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xuK1x0XHRpZiAobGluay1cdTAwM2VpZClcbitcdFx0XHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xuK1x0XHRlbHNlXG4rXHRcdFx0bGluayA9IEVSUl9QVFIoLUVBR0FJTik7XG4gXHRcdGlmIChJU19FUlIobGluaykpIHtcbiBcdFx0XHQoKmlkKSsrO1xuIFx0XHRcdGdvdG8gYWdhaW47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMTozOS41MjI3ODczNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDY1NTY5MzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBMaW5rIElEUiBJdGVyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgZnVuY3Rpb24gYXJvdW5kIGxpbmUgNjA0Mi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBzZWN0aW9uIGlzIHJlbGF0ZWQgdG8gaXRlcmF0aW5nIHRocm91Z2ggdGhlIGBicGZfbGlua2Agb2JqZWN0cyBzdG9yZWQgaW4gdGhlIGBsaW5rX2lkcmAgKElEUiAtIElEIFJhZGl4IFRyZWUpLlxuXG5UaGUgY29kZSBzbmlwcGV0IHNlZW1zIHRvIGJlIGRlYWxpbmcgd2l0aCBhIGxvb3AgdXNpbmcgYGlkcl9nZXRfbmV4dGAuIFRoaXMgc3VnZ2VzdHMgaXQncyB0cnlpbmcgdG8gZmluZCB0aGUgbmV4dCBhdmFpbGFibGUgYGJwZl9saW5rYCBnaXZlbiBhbiBJRC4gVGhlIGBicGZfbGlua19pbmNfbm90X3plcm9gIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgaW5jcmVtZW50aW5nIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGxpbmsgaWYgaXQncyBmb3VuZC4gVGhlIGFkZGVkIGBpZiAobGluay1cdTAwM2VpZClgIGNoZWNrIGlzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBjb25kaXRpb246ICBpZiBhIGBicGZfbGlua2AncyBJRCBpcyAqbm90KiBzZXQgKGkuZS4sIGBsaW5rLVx1MDAzZWlkYCBpcyAwKSwgdGhlbiBpdCByZXR1cm5zIGAtRUFHQUlOYCBhbmQgc2tpcHMgdGhhdCBsaW5rIGR1cmluZyBpdGVyYXRpb24uXG5cbk15IGh1bmNoIGlzIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIGEgcmFjZSBjb25kaXRpb24gb3IgYSB0ZW1wb3Jhcnkgc3RhdGUgd2hlcmUgYSBgYnBmX2xpbmtgIGlzIGJlaW5nIGNyZWF0ZWQvZGVzdHJveWVkLiBJZiB0aGUgYGxpbmstXHUwMDNlaWRgIGlzIHplcm8sIHRoZW4gbWF5YmUgaXQgbWVhbnMgdGhlIGxpbmsgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZSBhbmQgbm90IHJlYWR5IHRvIGJlIHVzZWQgb3IgdGhlIGBpZHJgIG1pZ2h0IHN0aWxsIGhhdmUgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZWxlbWVudC4gUmV0dXJuaW5nIGAtRUFHQUlOYCBzaWduYWxzIHRvIHRoZSBjYWxsZXIgdG8gdHJ5IGFnYWluLCBwb3RlbnRpYWxseSBza2lwcGluZyBvdmVyIGFuIGluY29tcGxldGUgZW50cnkgaW4gdGhlIElEUi5cblxuTGV0J3MgdXNlIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBjb250ZXh0IGFyb3VuZCBsaW5lIDYwNDIgYW5kIHNlZSBpZiBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcHVycG9zZSBvZiB0aGUgaXRlcmF0aW9uIGFuZCB0aGUgYC1FQUdBSU5gIGVycm9yIGFyZSBjb3JyZWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKmRvaW5nKiB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2Ygd2h5IHRoaXMgY2hlY2sgd2FzIGludHJvZHVjZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMTo1NC4xNzg0ODQwMDFaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMjUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYwMjU6XFx0XFx0aWYgKGxpbmspIHtcXG42MDI2OlxcdFxcdFxcdGlmIChsaW5rLVxcdTAwM2VpZClcXG42MDI3OlxcdFxcdFxcdFxcdGxpbmsgPSBicGZfbGlua19pbmNfbm90X3plcm8obGluayk7XFxuNjAyODpcXHRcXHRcXHRlbHNlXFxuNjAyOTpcXHRcXHRcXHRcXHRsaW5rID0gRVJSX1BUUigtRUFHQUlOKTtcXG42MDMwOlxcdFxcdH0gZWxzZSB7XFxuNjAzMTpcXHRcXHRcXHRsaW5rID0gRVJSX1BUUigtRU5PRU5UKTtcXG42MDMyOlxcdFxcdH1cXG42MDMzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG42MDM0OlxcdFxcdHJldHVybiBsaW5rO1xcbjYwMzU6XFx0fVxcbjYwMzY6XFx0XFxuNjAzNzpcXHRzdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2dldF9jdXJyX29yX25leHQodTMyICppZClcXG42MDM4OlxcdHtcXG42MDM5OlxcdFxcdHN0cnVjdCBicGZfbGluayAqbGluaztcXG42MDQwOlxcdFxcbjYwNDE6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG42MDQyOlxcdGFnYWluOlxcbjYwNDM6XFx0XFx0bGluayA9IGlkcl9nZXRfbmV4dChcXHUwMDI2bGlua19pZHIsIGlkKTtcXG42MDQ0OlxcdFxcdGlmIChsaW5rKSB7XFxuNjA0NTpcXHRcXHRcXHRpZiAobGluay1cXHUwMDNlaWQpXFxuNjA0NjpcXHRcXHRcXHRcXHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xcbjYwNDc6XFx0XFx0XFx0ZWxzZVxcbjYwNDg6XFx0XFx0XFx0XFx0bGluayA9IEVSUl9QVFIoLUVBR0FJTik7XFxuNjA0OTpcXHRcXHRcXHRpZiAoSVNfRVJSKGxpbmspKSB7XFxuNjA1MDpcXHRcXHRcXHRcXHQoKmlkKSsrO1xcbjYwNTE6XFx0XFx0XFx0XFx0Z290byBhZ2FpbjtcXG42MDUyOlxcdFxcdFxcdH1cXG42MDUzOlxcdFxcdH1cXG42MDU0OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG42MDU1OlxcdFxcbjYwNTY6XFx0XFx0cmV0dXJuIGxpbms7XFxuNjA1NzpcXHR9XFxuNjA1ODpcXHRcXG42MDU5OlxcdCNkZWZpbmUgQlBGX0xJTktfR0VUX0ZEX0JZX0lEX0xBU1RfRklFTEQgbGlua19pZFxcbjYwNjA6XFx0XFxuNjA2MTpcXHRzdGF0aWMgaW50IGJwZl9saW5rX2dldF9mZF9ieV9pZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG42MDYyOlxcdHtcXG42MDYzOlxcdFxcdHN0cnVjdCBicGZfbGluayAqbGluaztcXG42MDY0OlxcdFxcdHUzMiBpZCA9IGF0dHItXFx1MDAzZWxpbmtfaWQ7XFxuNjA2NTpcXHRcXHRpbnQgZmQ7XFxuNjA2NjpcXHRcXG42MDY3OlxcdFxcdGlmIChDSEVDS19BVFRSKEJQRl9MSU5LX0dFVF9GRF9CWV9JRCkpXFxuNjA2ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42MDY5OlxcdFxcbjYwNzA6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbjYwNzE6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG42MDcyOlxcdFxcbjYwNzM6XFx0XFx0bGluayA9IGJwZl9saW5rX2J5X2lkKGlkKTtcXG42MDc0OlxcdFxcdGlmIChJU19FUlIobGluaykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjExOjU0LjE3ODY5Mzk3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE1NTg3ODA1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYGJwZl9saW5rX2J5X2lkYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGludG8gdGhlIHdlZWRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGEgQlBGIGxpbmsgSUQuIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBicGZfbGlua19ieV9pZGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgbGV0J3MgZ3JhYiB0aGUgcmVsZXZhbnQgY29kZSBibG9jaywgbGluZXMgNjAxMC02MDM1LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFuZCwgY3J1Y2lhbGx5LCB0cmFjZSBiYWNrIGhvdyBgbGluay1cdTAwM2VpZGAgZ2V0cyBwb3B1bGF0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHNvdXJjZSBvZiB0aGUgbGluayBJRCBpcyBnb2luZyB0byBiZSBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTUwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMTo1NS43Mzc0Nzc5NDdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYwMTA6XFx0e1xcbjYwMTE6XFx0XFx0cmV0dXJuIGF0b21pYzY0X2ZldGNoX2FkZF91bmxlc3MoXFx1MDAyNmxpbmstXFx1MDAzZXJlZmNudCwgMSwgMCkgPyBsaW5rIDogRVJSX1BUUigtRU5PRU5UKTtcXG42MDEyOlxcdH1cXG42MDEzOlxcdEVYUE9SVF9TWU1CT0woYnBmX2xpbmtfaW5jX25vdF96ZXJvKTtcXG42MDE0OlxcdFxcbjYwMTU6XFx0c3RydWN0IGJwZl9saW5rICpicGZfbGlua19ieV9pZCh1MzIgaWQpXFxuNjAxNjpcXHR7XFxuNjAxNzpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XFxuNjAxODpcXHRcXG42MDE5OlxcdFxcdGlmICghaWQpXFxuNjAyMDpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG42MDIxOlxcdFxcbjYwMjI6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG42MDIzOlxcdFxcdC8qIGJlZm9yZSBsaW5rIGlzIFxcXCJzZXR0bGVkXFxcIiwgSUQgaXMgMCwgcHJldGVuZCBpdCBkb2Vzbid0IGV4aXN0IHlldCAqL1xcbjYwMjQ6XFx0XFx0bGluayA9IGlkcl9maW5kKFxcdTAwMjZsaW5rX2lkciwgaWQpO1xcbjYwMjU6XFx0XFx0aWYgKGxpbmspIHtcXG42MDI2OlxcdFxcdFxcdGlmIChsaW5rLVxcdTAwM2VpZClcXG42MDI3OlxcdFxcdFxcdFxcdGxpbmsgPSBicGZfbGlua19pbmNfbm90X3plcm8obGluayk7XFxuNjAyODpcXHRcXHRcXHRlbHNlXFxuNjAyOTpcXHRcXHRcXHRcXHRsaW5rID0gRVJSX1BUUigtRUFHQUlOKTtcXG42MDMwOlxcdFxcdH0gZWxzZSB7XFxuNjAzMTpcXHRcXHRcXHRsaW5rID0gRVJSX1BUUigtRU5PRU5UKTtcXG42MDMyOlxcdFxcdH1cXG42MDMzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG42MDM0OlxcdFxcdHJldHVybiBsaW5rO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMTo1NS43Mzc2ODM0MTdaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjc4NTkwMzU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgQlBGIExpbmsgSUQgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIEJQRiBsaW5rIElEIGhhbmRsaW5nLiBGaXJzdCwgSSdtIGxvb2tpbmcgYXQgaG93IGBicGZfbGlua19ieV9pZGAgaGFuZGxlcyBsaW5rIGxvb2t1cHMuIEl0IHNlZW1zIGxpa2UgdGhlIElEIGlzIGNoZWNrZWQsIGFuZCBpZiBpdCdzIHplcm8sIHRoZSBsaW5rIGlzIGNvbnNpZGVyZWQgXCJ1bnNldHRsZWRcIiBhbmQgZG9lc24ndCBleGlzdCB5ZXQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJZiBgbGluay1cdTAwM2VpZGAgaXMgemVybywgd2UgcmV0dXJuIGAtRUFHQUlOYC4gT3RoZXJ3aXNlLCB3ZSBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudGVyIHVzaW5nIGBicGZfbGlua19pbmNfbm90X3plcm9gLlxuXG5OZXh0LCBJIHNlZSBhIGNvbXBhcmlzb24gd2l0aCBob3cgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGhhbmRsZWQgdGhpbmdzIHByZXZpb3VzbHksIGFuZCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIGEgc2ltaWxhciBjaGVjayBmb3IgYGxpbmstXHUwMDNlaWRgICpiZWZvcmUqIHRoZSByZWZlcmVuY2UgY291bnQgaXMgaW5jcmVtZW50ZWQuIElmIGl0J3MgemVybywgd2UgcmV0dXJuIGAtRUFHQUlOYCwgYW5kIHJldHJ5LiBUaGlzIGxvb2tzIGxpa2UgYSByYWNlIGNvbmRpdGlvbiBwcm90ZWN0aW9uLCBvciBwb3NzaWJseSBhbiBhdHRlbXB0IHRvIHByZXZlbnQgZ3JhYmJpbmcgYW4gaW4tZmxpZ2h0IGxpbmsuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IHRoZSBJRCBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBcInNldHRsZWQuXCIgTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhhdCBgYnBmX2xpbmtfYWxsb2NfaWRgIGFuZCBgYnBmX2xpbmtfc2V0dGxlYCBhcmUgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBoZXJlLCBhbmQgSSdsbCB1c2UgYGdyZXBgIHRvIGZpbmQgdGhlbSBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIHNlZSBob3cgdGhvc2Ugb3BlcmF0aW9ucyBpbnRlcmFjdCB3aXRoIGBsaW5rX2lkcmAuIFRoYXQgc2hvdWxkIGdpdmUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHN0YXRlIHRyYW5zaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTY5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6NTguNTIzNTg5Mjk1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDgwMTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaW5rX2lkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz02ND1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1hcF9pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjU6c3RhdGljIERFRklORV9JRFIobGlua19pZHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY2OnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjctXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zMjU5PXN0YXRpYyB2b2lkIGJwZl9saW5rX2ZyZWVfaWQoaW50IGlkKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI2My1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjY0OlxcdHNwaW5fbG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzI2NTpcXHRpZHJfcmVtb3ZlKFxcdTAwMjZsaW5rX2lkciwgaWQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNjY6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyNjctfVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzQ3Nj1zdGF0aWMgaW50IGJwZl9saW5rX2FsbG9jX2lkKHN0cnVjdCBicGZfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0ODAtXFx0aWRyX3ByZWxvYWQoR0ZQX0tFUk5FTCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ4MTpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0ODI6XFx0aWQgPSBpZHJfYWxsb2NfY3ljbGljKFxcdTAwMjZsaW5rX2lkciwgbGluaywgMSwgSU5UX01BWCwgR0ZQX0FUT01JQyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ4MzpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ4NC1cXHRpZHJfcHJlbG9hZF9lbmQoKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0ODktLyogUHJlcGFyZSBicGZfbGluayB0byBiZSBleHBvc2VkIHRvIHVzZXItc3BhY2UgYnkgYWxsb2NhdGluZyBhbm9uX2lub2RlIGZpbGUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ5MDogKiByZXNlcnZpbmcgdW51c2VkIEZEIGFuZCBhbGxvY2F0aW5nIElEIGZyb20gbGlua19pZHIuIFRoaXMgaXMgdG8gYmUgcGFpcmVkXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ5MS0gKiB3aXRoIGJwZl9saW5rX3NldHRsZSgpIHRvIGluc3RhbGwgRkQgYW5kIElEIGFuZCBleHBvc2UgYnBmX2xpbmsgdG9cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM1MzM9aW50IGJwZl9saW5rX3NldHRsZShzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyICpwcmltZXIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTM1LVxcdC8qIG1ha2UgYnBmX2xpbmsgZmV0Y2hhYmxlIGJ5IElEICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUzNjpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MzctXFx0cHJpbWVyLVxcdTAwM2VsaW5rLVxcdTAwM2VpZCA9IHByaW1lci1cXHUwMDNlaWQ7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUzODpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzOS1cXHQvKiBtYWtlIGJwZl9saW5rIGZldGNoYWJsZSBieSBGRCAqL1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjAxNT1zdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2J5X2lkKHUzMiBpZClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyMjpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjMtXFx0LyogYmVmb3JlIGxpbmsgaXMgXFxcInNldHRsZWRcXFwiLCBJRCBpcyAwLCBwcmV0ZW5kIGl0IGRvZXNuJ3QgZXhpc3QgeWV0ICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyNDpcXHRsaW5rID0gaWRyX2ZpbmQoXFx1MDAyNmxpbmtfaWRyLCBpZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyNS1cXHRpZiAobGluaykge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAzMi1cXHR9XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAzMzpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAzNC1cXHRyZXR1cm4gbGluaztcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYwMzc9c3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDQwLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwNDE6XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDQyLWFnYWluOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwNDM6XFx0bGluayA9IGlkcl9nZXRfbmV4dChcXHUwMDI2bGlua19pZHIsIGlkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDQ0LVxcdGlmIChsaW5rKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDUzLVxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDU0OlxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDU1LVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjMwNj1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDU0LVxcdFxcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ1NTpcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZsaW5rX2lkciwgXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NTYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjExOjU4LjU5ODQwMDc5NFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODcyMDU5NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgVXNhZ2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBjb250ZXh0IG9mIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YC4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCdzICp1c2VkKiB3aWxsIGdpdmUgbWUgY3JpdGljYWwgaW5zaWdodHMgaW50byBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGguIEtub3dpbmcgdGhlIHNwZWNpZmljIGNvbnRleHRzIHdpbGwgaGVscCBtZSByYXBpZGx5IHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVudCBzY2VuYXJpb3MgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBlbXBsb3llZC4gSXMgaXQgZm9yIGVudW1lcmF0aW9uLCBpdGVyYXRpb24sIHNvbWUgZm9ybSBvZiBzdGF0ZSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gbGlua3MsIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgZXhwbG9yYXRpb24gb2YgaXRzIGNhbGwgc2l0ZXMgd2lsbCBjdXQgdGhyb3VnaCBwb3RlbnRpYWwgY29uZnVzaW9uIGFuZCBoZWxwIGZvY3VzIG15IGF0dGVudGlvbiBlZmZpY2llbnRseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjEyOjAwLjQ3MDQ2MzU2N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMjI4ODE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MjkwNj1zdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2dldF9mcm9tX2ZkKHUzMiB1ZmQpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MjkwNzpzdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2dldF9jdXJyX29yX25leHQodTMyICppZCk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0yOTA4LVxcbi0tXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYz0xMz1zdGF0aWMgdm9pZCAqYnBmX2xpbmtfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcXG4tLVxcbmtlcm5lbC9icGYvbGlua19pdGVyLmMtMTctXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzoxODpcXHRsaW5rID0gYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dChcXHUwMDI2aW5mby1cXHUwMDNlbGlua19pZCk7XFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0xOS1cXHRpZiAoIWxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jPTI3PXN0YXRpYyB2b2lkICpicGZfbGlua19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXFxuLS1cXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTMzLVxcdGJwZl9saW5rX3B1dCgoc3RydWN0IGJwZl9saW5rICopdik7XFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzozNDpcXHRyZXR1cm4gYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dChcXHUwMDI2aW5mby1cXHUwMDNlbGlua19pZCk7XFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0zNS19XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MDE1PXN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfYnlfaWQodTMyIGlkKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAzNi1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDM3OnN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMjowMi4wMDI3NjA0ODRaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTkxNDA3NDM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBMaW5rIEl0ZXJhdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBCUEYgbGlua3MgYXJlIGJlaW5nIGl0ZXJhdGVkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBga2VybmVsL2JwZi9saW5rX2l0ZXIuY2AgZmlsZS4gSXQncyBjbGVhciB0aGF0IHRoaXMgZmlsZSBjb250YWlucyB0aGUgY29yZSBsb2dpYyBiZWhpbmQgdGhlIGl0ZXJhdG9yIHVzZWQgYnkgYGJwZl9saW5rX3NlcV9zdGFydGAgYW5kIGBicGZfbGlua19zZXFfbmV4dGAuIFRoZXNlIGZ1bmN0aW9uIG5hbWVzIHN1Z2dlc3QgYSBzZXF1ZW5jZS1iYXNlZCB0cmF2ZXJzYWwgb2YgQlBGIGxpbmtzLCBsaWtlbHkgdXNlZCB0byBwcmVzZW50IGEgbGlzdCBvZiBsaW5rcywgcGVyaGFwcyBmb3IgdXNlcnNwYWNlIGNvbnN1bXB0aW9uIG9yIGFub3RoZXIga2VybmVsIHN1YnN5c3RlbS4gVGhlIGNvcmUgb2YgbXkgaW52ZXN0aWdhdGlvbiB3aWxsIHRoZXJlZm9yZSBmb2N1cyBvbiBob3cgdGhpcyBpdGVyYXRvciBpcyBpbXBsZW1lbnRlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgdXRpbGl6ZXMgaW50ZXJuYWxseSB0byBtYW5hZ2UgdGhlIHRyYXZlcnNhbCwgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiBmb3IgcGVyZm9ybWFuY2Ugb3Igc3luY2hyb25pemF0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg3MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjEyOjAzLjkxNjgzNzA4NVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2xpbmtfaXRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChjKSAyMDIyIFJlZCBIYXQsIEluYy4gKi9cXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbHRlci5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0c3RydWN0IGJwZl9pdGVyX3NlcV9saW5rX2luZm8ge1xcbiAgMTA6XFx0XFx0dTMyIGxpbmtfaWQ7XFxuICAxMTpcXHR9O1xcbiAgMTI6XFx0XFxuICAxMzpcXHRzdGF0aWMgdm9pZCAqYnBmX2xpbmtfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcXG4gIDE0OlxcdHtcXG4gIDE1OlxcdFxcdHN0cnVjdCBicGZfaXRlcl9zZXFfbGlua19pbmZvICppbmZvID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbiAgMTY6XFx0XFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbiAgMTc6XFx0XFxuICAxODpcXHRcXHRsaW5rID0gYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dChcXHUwMDI2aW5mby1cXHUwMDNlbGlua19pZCk7XFxuICAxOTpcXHRcXHRpZiAoIWxpbmspXFxuICAyMDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0aWYgKCpwb3MgPT0gMClcXG4gIDIzOlxcdFxcdFxcdCsrKnBvcztcXG4gIDI0OlxcdFxcdHJldHVybiBsaW5rO1xcbiAgMjU6XFx0fVxcbiAgMjY6XFx0XFxuICAyNzpcXHRzdGF0aWMgdm9pZCAqYnBmX2xpbmtfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbiAgMjg6XFx0e1xcbiAgMjk6XFx0XFx0c3RydWN0IGJwZl9pdGVyX3NlcV9saW5rX2luZm8gKmluZm8gPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCsrKnBvcztcXG4gIDMyOlxcdFxcdCsraW5mby1cXHUwMDNlbGlua19pZDtcXG4gIDMzOlxcdFxcdGJwZl9saW5rX3B1dCgoc3RydWN0IGJwZl9saW5rICopdik7XFxuICAzNDpcXHRcXHRyZXR1cm4gYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dChcXHUwMDI2aW5mby1cXHUwMDNlbGlua19pZCk7XFxuICAzNTpcXHR9XFxuICAzNjpcXHRcXG4gIDM3OlxcdHN0cnVjdCBicGZfaXRlcl9fYnBmX2xpbmsge1xcbiAgMzg6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfaXRlcl9tZXRhICosIG1ldGEpO1xcbiAgMzk6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfbGluayAqLCBsaW5rKTtcXG4gIDQwOlxcdH07XFxuICA0MTpcXHRcXG4gIDQyOlxcdERFRklORV9CUEZfSVRFUl9GVU5DKGJwZl9saW5rLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbiAgNDM6XFx0XFxuICA0NDpcXHRzdGF0aWMgaW50IF9fYnBmX2xpbmtfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGJvb2wgaW5fc3RvcClcXG4gIDQ1OlxcdHtcXG4gIDQ2OlxcdFxcdHN0cnVjdCBicGZfaXRlcl9fYnBmX2xpbmsgY3R4O1xcbiAgNDc6XFx0XFx0c3RydWN0IGJwZl9pdGVyX21ldGEgbWV0YTtcXG4gIDQ4OlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4gIDQ5OlxcdFxcdGludCByZXQgPSAwO1xcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHRjdHgubWV0YSA9IFxcdTAwMjZtZXRhO1xcbiAgNTI6XFx0XFx0Y3R4LmxpbmsgPSB2O1xcbiAgNTM6XFx0XFx0bWV0YS5zZXEgPSBzZXE7XFxuICA1NDpcXHRcXHRwcm9nID0gYnBmX2l0ZXJfZ2V0X2luZm8oXFx1MDAyNm1ldGEsIGluX3N0b3ApO1xcbiAgNTU6XFx0XFx0aWYgKHByb2cpXFxuICA1NjpcXHRcXHRcXHRyZXQgPSBicGZfaXRlcl9ydW5fcHJvZyhwcm9nLCBcXHUwMDI2Y3R4KTtcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0cmV0dXJuIHJldDtcXG4gIDU5OlxcdH1cXG4gIDYwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMjowMy45MTY5MDA3NjVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODk0MjAwMTg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIExpbmsgSUQgQWxsb2NhdGlvbiBhbmQgUmV0cmlldmFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IEJQRiBsaW5rcyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHRoZSBJRCBhbGxvY2F0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGxpZmVjeWNsZSBvZiBhIGxpbmsuIExldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuSW5pdGlhbGx5LCB3aGVuIGEgbGluayBpcyBiZWluZyBjcmVhdGVkLCBgYnBmX2xpbmtfYWxsb2NfaWRgIGlzIGNhbGxlZCwgYW5kIGFuIElEIGlzIGFsbG9jYXRlZCBmcm9tIGBsaW5rX2lkcmAgdXNpbmcgYGlkcl9hbGxvY19jeWNsaWNgLiBOb3csIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyDigJMgdGhlIGxpbmsgaXMgKmluc2VydGVkKiBpbnRvIGBsaW5rX2lkcmAsIGJ1dCB0aGUgYGxpbmstXHUwMDNlaWRgIGZpZWxkICppc24ndCogc2V0IHlldC4gSXQgcmVtYWlucyB6ZXJvLiBUaGlzIG1lYW5zLCB0aGVyZSdzIGEgcGVyaW9kIHdoZXJlIHRoZSBsaW5rIGV4aXN0cyBpbiB0aGUgSURSIGJ1dCBpc24ndCBjb25zaWRlcmVkIFwic2V0dGxlZC5cIiBUaGUgYWN0dWFsIElEIGFzc2lnbm1lbnQgaGFwcGVucyBsYXRlciBpbiBgYnBmX2xpbmtfc2V0dGxlYCwgd2hlcmUgYGxpbmstXHUwMDNlaWRgIGlzIGZpbmFsbHkgcG9wdWxhdGVkIHdpdGggdGhlIGFsbG9jYXRlZCBJRC4gSWYgbGluayBjcmVhdGlvbiBmYWlscywgYGJwZl9saW5rX2NsZWFudXAoKWAgaXMgY2FsbGVkIHdoaWNoIHdpbGwgY2FsbCBgYnBmX2xpbmtfZnJlZV9pZCgpYCB0byB0ZWFyIGl0IGRvd24uXG5cbk5vdywgaW4gYGJwZl9saW5rX2J5X2lkYCwgdGhlIGNvZGUgKmNvcnJlY3RseSogY2hlY2tzIGBsaW5rLVx1MDAzZWlkYCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBsaW5rLiBJZiBpdCdzIHplcm8sIGl0IG1lYW5zIHRoZSBsaW5rIGlzbid0IHJlYWR5LCBhbmQgaXQncyB0cmVhdGVkIGFzIGlmIGl0IGRvZXNuJ3QgZXhpc3Qg4oCTIHJldHVybmluZyBhbiBgLUVBR0FJTmAgZXJyb3IuIEdvb2QuIFRoYXQgcHJldmVudHMgcmV0dXJuaW5nIGhhbGYtYmFrZWQgbGlua3MuXG5cbkhvd2V2ZXIsIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YCBwcmVzZW50cyBhIHBvdGVudGlhbCBpc3N1ZS4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgc2VlbXMgbGlrZSBpZiBpdCBzdHVtYmxlZCB1cG9uIGFuIHVuc2V0dGxlZCBsaW5rICh3aGVyZSBgbGluay1cdTAwM2VpZGAgaXMgc3RpbGwgMCksIGl0IHdvdWxkIGNhbGwgYGJwZl9saW5rX2luY19ub3RfemVybygpYCwgcG90ZW50aWFsbHkgcmV0dXJuaW5nIGFuIHVuc2V0dGxlZCBsaW5rLiBUaGF0J3MgY2xlYXJseSBhIGJ1Zy4gSXQncyBwb3NzaWJsZSBmb3Igc29tZW9uZSB0byBpdGVyYXRlIGl0IHdoaWxlIGl0J3MgYmVpbmcgY3JlYXRlZCwgdG9ybiBkb3duLCBvciBpZiB0aGUgaW5pdGlhbGl6YXRpb24gaGFkIGlzc3Vlcy5cblxuVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMuIE5vdywgaWYgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGZpbmRzIGEgbGluayB3aXRoIGBsaW5rLVx1MDAzZWlkID09IDBgLCBpdCBhc3NpZ25zIGBFUlJfUFRSKC1FQUdBSU4pYCB0byBgbGlua2AsIHdoaWNoIGlzIHRoZW4gY2F1Z2h0IGJ5IGBJU19FUlIobGluaylgLCBhbmQgdGhlIGNvZGUgY29ycmVjdGx5IGluY3JlbWVudHMgdGhlIElEIGFuZCBjb250aW51ZXMgaXRlcmF0aW9uLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBJIG5lZWQgdG8gd29ycnkgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBsaW5rLVx1MDAzZWlkYCAqaXRzZWxmKiBpcyB1bmluaXRpYWxpemVkIHdoZW4gdGhlIGBicGZfbGlua2Agc3RydWN0IGlzIGFsbG9jYXRlZC4gU28sIEkgd2lsbCBzZWFyY2ggZm9yIHdoZXJlIGBicGZfbGlua2AgaXMgYWxsb2NhdGVkIGFuZCBob3cgdGhlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4gSSBuZWVkIHRvIHJldmlldyBgYnBmX2xpbmtfaW5pdGAgYW5kIGFueSBvdGhlciByZWxldmFudCBpbml0aWFsaXphdGlvbiBwYXRocy4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMDIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMjoxMi44NTg5MDU2ODFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDQwMzA4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2xpbmtfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRraXQuYz05ODg9c3RhdGljIGludCBuZXRraXRfbGlua19pbml0KHN0cnVjdCBuZXRraXRfbGluayAqbmtsLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtOTkzLXtcXG5kcml2ZXJzL25ldC9uZXRraXQuYzo5OTQ6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bmtsLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX05FVEtJVCxcXG5kcml2ZXJzL25ldC9uZXRraXQuYy05OTUtXFx0XFx0ICAgICAgXFx1MDAyNm5ldGtpdF9saW5rX2xvcHMsIHByb2csIGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9Mjg4OD1pbnQgYnBmX3Byb2dfbmV3X2ZkKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0yODg5LVxcbmluY2x1ZGUvbGludXgvYnBmLmg6Mjg5MDp2b2lkIGJwZl9saW5rX2luaXQoc3RydWN0IGJwZl9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI4OTEtXFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyAqb3BzLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuaW5jbHVkZS9saW51eC9icGYuaC0yODkyLVxcdFxcdCAgIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjI4OTM6dm9pZCBicGZfbGlua19pbml0X3NsZWVwYWJsZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjg5NC1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgKm9wcywgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zMzA0PWJwZl9wcm9nX2luY19ub3RfemVybyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMzMDgtXFxuaW5jbHVkZS9saW51eC9icGYuaDozMzA5OnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfbGlua19pbml0KHN0cnVjdCBicGZfbGluayAqbGluaywgZW51bSBicGZfbGlua190eXBlIHR5cGUsXFxuaW5jbHVkZS9saW51eC9icGYuaC0zMzEwLVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMzMTQtXFxuaW5jbHVkZS9saW51eC9icGYuaDozMzE1OnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfbGlua19pbml0X3NsZWVwYWJsZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzMxNi1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYz01MDQ9aW50IGJwZl9pdGVyX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy01NTQtXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjU1NTpcXHRicGZfbGlua19pbml0KFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX0lURVIsIFxcdTAwMjZicGZfaXRlcl9saW5rX2xvcHMsIHByb2csXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTU1Ni1cXHRcXHQgICAgICBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTQzNz1pbnQgYnBmX3N0cnVjdF9vcHNfbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ2MC1cXHR9XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0NjE6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bGluay1cXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2YnBmX3N0cnVjdF9vcHNfbWFwX2xvcHMsIE5VTEwsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0NjItXFx0XFx0ICAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNTQwPWludCBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NTgtXFx0fVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTU1OTpcXHRicGZfbGlua19pbml0KFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX0NHUk9VUCwgXFx1MDAyNmJwZl9jZ3JvdXBfbGlua19sb3BzLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU2MC1cXHRcXHQgICAgICBwcm9nLCBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz00NzE9aW50IG5ldG5zX2JwZl9saW5rX2NyZWF0ZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDk2LVxcdH1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzo0OTc6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bmV0X2xpbmstXFx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfTkVUTlMsXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDk4LVxcdFxcdCAgICAgIFxcdTAwMjZicGZfbmV0bnNfbGlua19vcHMsIHByb2csIHR5cGUpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzIwND1zdGF0aWMgaW50IGJwZl9vYmpfZ2V0KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzIyMC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjIxOi8qIGJwZl9saW5rX2luaXRfc2xlZXBhYmxlKCkgYWxsb3dzIHRvIHNwZWNpZnkgd2hldGhlciBCUEYgbGluayBpdHNlbGYgaGFzXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzIyMi0gKiBcXFwic2xlZXBhYmxlXFxcIiBzZW1hbnRpY3MsIHdoaWNoIG5vcm1hbGx5IHdvdWxkIG1lYW4gdGhhdCBCUEYgbGluaydzIGF0dGFjaFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzIyOC0gKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjI5OnZvaWQgYnBmX2xpbmtfaW5pdF9zbGVlcGFibGUoc3RydWN0IGJwZl9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjMwLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyAqb3BzLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjQyLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNDM6dm9pZCBicGZfbGlua19pbml0KHN0cnVjdCBicGZfbGluayAqbGluaywgZW51bSBicGZfbGlua190eXBlIHR5cGUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI0NC1cXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyNDYte1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNDc6XFx0YnBmX2xpbmtfaW5pdF9zbGVlcGFibGUobGluaywgdHlwZSwgb3BzLCBwcm9nLCBhdHRhY2hfdHlwZSwgZmFsc2UpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyNDgtfVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzI1MD12b2lkIGJwZl90cmFtcF9saW5rX2luaXQoc3RydWN0IGJwZl90cmFtcF9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyNTMte1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNTQ6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bGluay1cXHUwMDNlbGluaywgdHlwZSwgb3BzLCBwcm9nLCBhdHRhY2hfdHlwZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI1NS1cXHRsaW5rLVxcdTAwM2Vub2RlLmxpbmsgPSBcXHUwMDI2bGluay1cXHUwMDNlbGluaztcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQyNDU9c3RhdGljIGludCBicGZfcGVyZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDI2NC1cXHR9XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDI2NTpcXHRicGZfbGlua19pbml0KFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1BFUkZfRVZFTlQsIFxcdTAwMjZicGZfcGVyZl9saW5rX2xvcHMsIHByb2csXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDI2Ni1cXHRcXHQgICAgICBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00Mjk3PXN0YXRpYyBpbnQgYnBmX3Jhd190cF9saW5rX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MzQ3LVxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0MzQ4OlxcdGJwZl9saW5rX2luaXRfc2xlZXBhYmxlKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1JBV19UUkFDRVBPSU5ULFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQzNDktXFx0XFx0XFx0XFx0XFx1MDAyNmJwZl9yYXdfdHBfbGlua19sb3BzLCBwcm9nLCBhdHRhY2hfdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvdGN4LmM9Mjk4PXN0YXRpYyBpbnQgdGN4X2xpbmtfaW5pdChzdHJ1Y3QgdGN4X2xpbmsgKnRjeCxcXG4tLVxcbmtlcm5lbC9icGYvdGN4LmMtMzAzLXtcXG5rZXJuZWwvYnBmL3RjeC5jOjMwNDpcXHRicGZfbGlua19pbml0KFxcdTAwMjZ0Y3gtXFx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfVENYLCBcXHUwMDI2dGN4X2xpbmtfbG9wcywgcHJvZyxcXG5rZXJuZWwvYnBmL3RjeC5jLTMwNS1cXHRcXHQgICAgICBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mjc4MD1pbnQgYnBmX2twcm9iZV9tdWx0aV9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI4ODAtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI4ODE6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bGluay1cXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9LUFJPQkVfTVVMVEksXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI4ODItXFx0XFx0ICAgICAgXFx1MDAyNmJwZl9rcHJvYmVfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzI1MT1pbnQgYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMzNjgtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjMzNjk6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bGluay1cXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9VUFJPQkVfTVVMVEksXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMzNzAtXFx0XFx0ICAgICAgXFx1MDAyNmJwZl91cHJvYmVfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mzg0MD1pbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkwMC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkwMTpcXHRicGZfbGlua19pbml0KFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEksXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MDItXFx0XFx0ICAgICAgXFx1MDAyNmJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcywgcHJvZywgcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTA3MzE9aW50IGJwZl94ZHBfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNzUyLVxcbm5ldC9jb3JlL2Rldi5jOjEwNzUzOlxcdGJwZl9saW5rX2luaXQoXFx1MDAyNmxpbmstXFx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfWERQLCBcXHUwMDI2YnBmX3hkcF9saW5rX2xvcHMsIHByb2csXFxubmV0L2NvcmUvZGV2LmMtMTA3NTQtXFx0XFx0ICAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xODc1PWludCBzb2NrX21hcF9saW5rX2NyZWF0ZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTAwLVxcdGF0dGFjaF90eXBlID0gYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGU7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxOTAxOlxcdGJwZl9saW5rX2luaXQoXFx1MDAyNnNvY2ttYXBfbGluay1cXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9TT0NLTUFQLCBcXHUwMDI2c29ja19tYXBfbGlua19vcHMsIHByb2csXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTAyLVxcdFxcdCAgICAgIGF0dGFjaF90eXBlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYz0yMTA9aW50IGJwZl9uZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jLTIyNy1cXG5uZXQvbmV0ZmlsdGVyL25mX2JwZl9saW5rLmM6MjI4OlxcdGJwZl9saW5rX2luaXQoXFx1MDAyNmxpbmstXFx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfTkVURklMVEVSLCBcXHUwMDI2YnBmX25mX2xpbmtfbG9wcywgcHJvZyxcXG5uZXQvbmV0ZmlsdGVyL25mX2JwZl9saW5rLmMtMjI5LVxcdFxcdCAgICAgIGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTI6MTQuOTAyOTQyMzhaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI4NTI1NTY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIGBicGZfbGlua19pbml0X3NsZWVwYWJsZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCB0aGlzIGZ1bmN0aW9uLCBgYnBmX2xpbmtfaW5pdF9zbGVlcGFibGVgLCByZXNpZGluZyBpbiB0aGUgaGVhcnQgb2YgdGhlIEJQRiBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlNsZWVwYWJsZT9cIiBJbnRlcmVzdGluZy4uLiB0aGlzIGltcGxpZXMgd2UncmUgZGVhbGluZyB3aXRoIGEgQlBGIGxpbmsgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB0aGF0LCBmb3Igc29tZSByZWFzb24sIG1pZ2h0IGJsb2NrIG9yIHJlcXVpcmUgYXN5bmNocm9ub3VzIGhhbmRsaW5nLiBUaGF0IGluc3RhbnRseSByYWlzZXMgYSBmbGFnOiB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgYWNxdWlyZWQgaGVyZSwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBtaWdodCB0aGV5IG5vdCBiZSBpbW1lZGlhdGVseSBhdmFpbGFibGU/IFdlJ3JlIHBvdGVudGlhbGx5IGVudGVyaW5nIGEgZG9tYWluIHdoZXJlIGNvbmN1cnJlbmN5IGFuZCBsb2NrIGNvbnRlbnRpb24gYXJlIGNyaXRpY2FsIGNvbnNpZGVyYXRpb25zLlxuXG5JJ2xsIG5lZWQgdG8gZHJpbGwgaW50byB0aGUgc3BlY2lmaWMgY29kZSB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBvZiB0aGUgXCJzbGVlcGFibGVcIiBhc3BlY3QuIElzIHRoaXMgcmVsYXRlZCB0byBsb2FkaW5nIGEgQlBGIHByb2dyYW0sIGF0dGFjaGluZyBpdCB0byBhIHNwZWNpZmljIGhvb2sgb3IgdHJhY2Vwb2ludCwgb3IgcGVyaGFwcyBpbml0aWFsaXppbmcgc29tZSBmb3JtIG9mIHNoYXJlZCBkYXRhIHN0cnVjdHVyZT8gVGhlIGZhY3QgdGhhdCBpdCdzIGluIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSBzdWdnZXN0cyB3ZSdyZSBsaWtlbHkgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGZvciB0aGUgQlBGIGxpbmssIHJhdGhlciB0aGFuIGhhbmRsaW5nIHRoZSBhY3R1YWwgZXhlY3V0aW9uIG9yIGRhdGEgdHJhbnNmZXIuIFRoYXQncyBhIGtleSBkaXN0aW5jdGlvbi4gSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucywgcG90ZW50aWFsIGRldmljZSBpbnRlcmFjdGlvbnMsIG9yIGFueSBvcGVyYXRpb25zIHRoYXQgbWlnaHQgaW52b2x2ZSB3YWl0aW5nIG9uIGV4dGVybmFsIGV2ZW50cy4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhpcyB3aWxsIGJlIHJlbGF0ZWQgdG8gYSBCUEYtdG8tQlBGIChvciBwZXJoYXBzIEJQRi10by11c2VyKSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDA1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTI6MTguMTg4MjAwODgxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjI1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMjI1OlxcdCAqIEJQRiBwcm9ncmFtIGl0c2VsZiBjYW4gYmUgbm9uLXNsZWVwYWJsZSwgeWV0LCBiZWNhdXNlIGl0J3MgdHJhbnNpdGl2ZWx5XFxuMzIyNjpcXHQgKiByZWFjaGFibGUgdGhyb3VnaCBCUEYgbGluaywgaXRzIGZyZWVpbmcgaGFzIHRvIGJlIGRlbGF5ZWQgdW50aWwgYWZ0ZXIgUkNVXFxuMzIyNzpcXHQgKiBUYXNrcyBUcmFjZSBHUC5cXG4zMjI4OlxcdCAqL1xcbjMyMjk6XFx0dm9pZCBicGZfbGlua19pbml0X3NsZWVwYWJsZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxcbjMyMzA6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4zMjMxOlxcdFxcdFxcdFxcdCAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIGJvb2wgc2xlZXBhYmxlKVxcbjMyMzI6XFx0e1xcbjMyMzM6XFx0XFx0V0FSTl9PTihvcHMtXFx1MDAzZWRlYWxsb2MgXFx1MDAyNlxcdTAwMjYgb3BzLVxcdTAwM2VkZWFsbG9jX2RlZmVycmVkKTtcXG4zMjM0OlxcdFxcdGF0b21pYzY0X3NldChcXHUwMDI2bGluay1cXHUwMDNlcmVmY250LCAxKTtcXG4zMjM1OlxcdFxcdGxpbmstXFx1MDAzZXR5cGUgPSB0eXBlO1xcbjMyMzY6XFx0XFx0bGluay1cXHUwMDNlc2xlZXBhYmxlID0gc2xlZXBhYmxlO1xcbjMyMzc6XFx0XFx0bGluay1cXHUwMDNlaWQgPSAwO1xcbjMyMzg6XFx0XFx0bGluay1cXHUwMDNlb3BzID0gb3BzO1xcbjMyMzk6XFx0XFx0bGluay1cXHUwMDNlcHJvZyA9IHByb2c7XFxuMzI0MDpcXHRcXHRsaW5rLVxcdTAwM2VhdHRhY2hfdHlwZSA9IGF0dGFjaF90eXBlO1xcbjMyNDE6XFx0fVxcbjMyNDI6XFx0XFxuMzI0MzpcXHR2b2lkIGJwZl9saW5rX2luaXQoc3RydWN0IGJwZl9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcXG4zMjQ0OlxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgKm9wcywgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbjMyNDU6XFx0XFx0XFx0ICAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXFxuMzI0NjpcXHR7XFxuMzI0NzpcXHRcXHRicGZfbGlua19pbml0X3NsZWVwYWJsZShsaW5rLCB0eXBlLCBvcHMsIHByb2csIGF0dGFjaF90eXBlLCBmYWxzZSk7XFxuMzI0ODpcXHR9XFxuMzI0OTpcXHRcXG4zMjUwOlxcdHZvaWQgYnBmX3RyYW1wX2xpbmtfaW5pdChzdHJ1Y3QgYnBmX3RyYW1wX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxcbjMyNTE6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgKm9wcywgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbjMyNTI6XFx0XFx0XFx0XFx0IGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLCB1NjQgY29va2llKVxcbjMyNTM6XFx0e1xcbjMyNTQ6XFx0XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bGluay1cXHUwMDNlbGluaywgdHlwZSwgb3BzLCBwcm9nLCBhdHRhY2hfdHlwZSk7XFxuMzI1NTpcXHRcXHRsaW5rLVxcdTAwM2Vub2RlLmxpbmsgPSBcXHUwMDI2bGluay1cXHUwMDNlbGluaztcXG4zMjU2OlxcdFxcdGxpbmstXFx1MDAzZW5vZGUuY29va2llID0gY29va2llO1xcbjMyNTc6XFx0fVxcbjMyNTg6XFx0XFxuMzI1OTpcXHRzdGF0aWMgdm9pZCBicGZfbGlua19mcmVlX2lkKGludCBpZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTI6MTguMTg4NDY3NjIxWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzNzUxNDU3MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIExpbmsgSUQgSW5pdGlhbGl6YXRpb24gYW5kIEl0ZXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTGluZSAzMjM3OiBgbGluay1cdTAwM2VpZCA9IDA7YCBUaGF0J3Mgd2hlcmUgaXQgc3RhcnRzLCBpbml0aWFsaXplZCB0byB6ZXJvIGluIGBicGZfbGlua19pbml0X3NsZWVwYWJsZWAhIEFuZCB0aGVuLCB3ZSBoYXZlIHRoaXMgYXNzaWdubWVudCBpbiBgYnBmX2xpbmtfc2V0dGxlKClgOiBgcHJpbWVyLVx1MDAzZWxpbmstXHUwMDNlaWQgPSBwcmltZXItXHUwMDNlaWQ7YCBTbywgY29uZmlybWVkLCBgbGluay1cdTAwM2VpZGAgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgdG8gemVybyB1cG9uIGNyZWF0aW9uLiBUaGlzIGlzIGtleS5cblxuVGhlIGlzc3VlIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGlzIGluIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YC4gV2hlbiB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIGxpbmtzIHVzaW5nIHRoZSBJRFIgKGBpZHJfZ2V0X25leHRgKSwgaXQgd2FzIGdyYWJiaW5nIHJlZmVyZW5jZXMgdG8gbGlua3MgdGhhdCB3ZXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQuIE1lYW5pbmcsIHRoZXkgaGFkIGJlZW4gYWxsb2NhdGVkIGFuIElEIGluIGBsaW5rX2lkcmAsIGJ1dCBoYWRuJ3QgeWV0IGJlZW4gXCJzZXR0bGVkLFwiIHNvIHRoZWlyIGBsaW5rLVx1MDAzZWlkYCB3YXMgc3RpbGwgemVyby4gVGhpcyBpcyBhIHByb2JsZW0hIEl0IHdhcyByZXR1cm5pbmcgdGhpcyBsaW5rIHdpdGggYGxpbmstXHUwMDNlaWRgIG9mIDAuIFdhaXQsIHRoaXMgY291bGQgbWVhbiB0aGF0IGxpbmsgY3JlYXRpb24gZmFpbHMsIG9yIGl0ZXJhdGluZyBhbiB1bnNldHRsZWQgbGluayBjYXVzZXMgcHJvYmxlbXMsIGxpa2UgYSB1c2VyIHNlZWluZyBhIGxpbmsgd2l0aCBhbiBJRCBvZiAwLCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIHNpbXBsZSBidXQgZWZmZWN0aXZlOlxuYGBgZGlmZlxuIFx0bGluayA9IGlkcl9nZXRfbmV4dChcdTAwMjZsaW5rX2lkciwgaWQpO1xuIFx0aWYgKGxpbmspIHtcbi1cdFx0bGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTtcbitcdFx0aWYgKGxpbmstXHUwMDNlaWQpXG4rXHRcdFx0bGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGxpbmsgPSBFUlJfUFRSKC1FQUdBSU4pO1xuIFx0XHRpZiAoSVNfRVJSKGxpbmspKSB7XG4gXHRcdFx0KCppZCkrKztcbiBcdFx0XHRnb3RvIGFnYWluO1xuYGBgXG5JZiBgbGluay1cdTAwM2VpZCA9PSAwYCwgdGhlIGNvZGUgbm93IHNldHMgYGxpbmtgIHRvIGBFUlJfUFRSKC1FQUdBSU4pYC4gVGhpcyBpcyBjbGV2ZXIhIFRoZW4gYElTX0VSUihsaW5rKWAgYmVjb21lcyB0cnVlLCBhbmQgaXQgZG9lcyBgKCppZCkrK2AgYW5kIHNraXBzIHRvIHRoZSBuZXh0IElEIChgZ290byBhZ2FpbjtgKSwgYWN0aW5nICpleGFjdGx5KiBsaWtlIGlmIGBicGZfbGlua19pbmNfbm90X3plcm8obGluaylgIGhhZCBmYWlsZWQuIFRoaXMgaXMgZXhhY3RseSB3aGF0IGlzIG5lZWRlZC4gSXQgYXZvaWRzIHRoZSBwcm9ibGVtcyBvZiByZXR1cm5pbmcgbGlua3MgdGhhdCBhcmUgbm90IHJlYWR5LlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IGBicGZfb2JqX2dldF9uZXh0X2lkYCBmb3IgY29tcGFyaXNvbi5cbkxldCdzIHNlZSBob3cgdGhhdCB3b3JrcyB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgcmlnaHQgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDMyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTI6MzEuOTM5OTI4Nzg0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjY5NDEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfb2JqX2dldF9uZXh0X2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTQ3ODI9c3RhdGljIGludCBicGZfcHJvZ190ZXN0X3J1bihjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ4MTEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDgxMjpzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDgxMy1cXHRcXHRcXHQgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDY9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5MC1cXHRjYXNlIEJQRl9QUk9HX0dFVF9ORVhUX0lEOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTE6XFx0XFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzkyLVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnByb2dfaWRyLCBcXHUwMDI2cHJvZ19pZHJfbG9jayk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mzk0LVxcdGNhc2UgQlBGX01BUF9HRVRfTkVYVF9JRDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2Mzk1OlxcdFxcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5Ni1cXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZtYXBfaWRyLCBcXHUwMDI2bWFwX2lkcl9sb2NrKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTgtXFx0Y2FzZSBCUEZfQlRGX0dFVF9ORVhUX0lEOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTk6XFx0XFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDAwLVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmJ0Zl9pZHIsIFxcdTAwMjZidGZfaWRyX2xvY2spO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1My1cXHRjYXNlIEJQRl9MSU5LX0dFVF9ORVhUX0lEOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NTQ6XFx0XFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDU1LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmxpbmtfaWRyLCBcXHUwMDI2bGlua19pZHJfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjEyOjMyLjAwMjYzMTUxM1oiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTU2NzM1MzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyBgYnBmX29ial9nZXRfbmV4dF9pZGA6XG5cbioqRGl2aW5nIGludG8gYnBmX29ial9nZXRfbmV4dF9pZCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IGBicGZfb2JqX2dldF9uZXh0X2lkYC4gUmlnaHQsIHRoaXMgaXMgYSBjb3JlIEJQRiBmdW5jdGlvbiwgbGlrZWx5IGNydWNpYWwgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIG9iamVjdCBJRHMgd2l0aGluIHRoZSBCUEYgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBkZXNpZ25lZCB0byByZXR1cm4gdGhlIG5leHQgYXZhaWxhYmxlIElELiBJcyB0aGlzIGZ1bmN0aW9uIGdvaW5nIHRvIG1haW50YWluIGFuIGludGVybmFsIGl0ZXJhdG9yLCBvciByZWx5IG9uIHNvbWUgZXh0ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgdG8gbWFuYWdlIG9iamVjdCBJRHM/IERvZXMgaXQgdXNlIGEgbGluZWFyIHNjYW4sIG9yIGlzIHRoZXJlIHNvbWUgbW9yZSBzb3BoaXN0aWNhdGVkIGluZGV4aW5nIGludm9sdmVkLCB3aGljaCBjb3VsZCBhZmZlY3QgcGVyZm9ybWFuY2UgZHJhc3RpY2FsbHksIGVzcGVjaWFsbHkgd2l0aCBtYW55IEJQRiBwcm9ncmFtcyBhbmQgbWFwcz8gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyBjb25jdXJyZW5jeSBpcyBoYW5kbGVkLCBvciBpZiBpdCdzIGhhbmRsZWQgYXQgYWxsLiBXaGF0IGtpbmQgb2YgbG9ja2luZyBpcyB1c2VkLCBpZiBhbnk/IEFsc28sIEkgd2lsbCBsb29rIGF0IGVycm9yIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGhvdyBkb2VzIGl0IHNpZ25hbCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIElEcywgb3IgaW4gdGhlIGNhc2Ugb2YgYSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBvZiB0aGUgSUQgbGlzdC4gQW55IGVkZ2UgY2FzZXMgSSBzaG91bGQgY29uc2lkZXI/IEkgaG9wZSBpdCdzIHdlbGwtZG9jdW1lbnRlZCEgVGltZSB0byBkaXNzZWN0IHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA0NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjEyOjM0LjE1OTM2OTY0MVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDgxMixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDgxMjpcXHRzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuNDgxMzpcXHRcXHRcXHRcXHQgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcXG40ODE0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWRyICppZHIsXFxuNDgxNTpcXHRcXHRcXHRcXHQgICAgICAgc3BpbmxvY2tfdCAqbG9jaylcXG40ODE2OlxcdHtcXG40ODE3OlxcdFxcdHUzMiBuZXh0X2lkID0gYXR0ci1cXHUwMDNlc3RhcnRfaWQ7XFxuNDgxODpcXHRcXHRpbnQgZXJyID0gMDtcXG40ODE5OlxcdFxcbjQ4MjA6XFx0XFx0aWYgKENIRUNLX0FUVFIoQlBGX09CSl9HRVRfTkVYVF9JRCkgfHwgbmV4dF9pZCBcXHUwMDNlPSBJTlRfTUFYKVxcbjQ4MjE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDgyMjpcXHRcXG40ODIzOlxcdFxcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcXG40ODI0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuNDgyNTpcXHRcXG40ODI2OlxcdFxcdG5leHRfaWQrKztcXG40ODI3OlxcdFxcdHNwaW5fbG9ja19iaChsb2NrKTtcXG40ODI4OlxcdFxcdGlmICghaWRyX2dldF9uZXh0KGlkciwgXFx1MDAyNm5leHRfaWQpKVxcbjQ4Mjk6XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG40ODMwOlxcdFxcdHNwaW5fdW5sb2NrX2JoKGxvY2spO1xcbjQ4MzE6XFx0XFxuNDgzMjpcXHRcXHRpZiAoIWVycilcXG40ODMzOlxcdFxcdFxcdGVyciA9IHB1dF91c2VyKG5leHRfaWQsIFxcdTAwMjZ1YXR0ci1cXHUwMDNlbmV4dF9pZCk7XFxuNDgzNDpcXHRcXG40ODM1OlxcdFxcdHJldHVybiBlcnI7XFxuNDgzNjpcXHR9XFxuNDgzNzpcXHRcXG40ODM4OlxcdHN0cnVjdCBicGZfbWFwICpicGZfbWFwX2dldF9jdXJyX29yX25leHQodTMyICppZClcXG40ODM5OlxcdHtcXG40ODQwOlxcdFxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuNDg0MTpcXHRcXG40ODQyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bWFwX2lkcl9sb2NrKTtcXG40ODQzOlxcdGFnYWluOlxcbjQ4NDQ6XFx0XFx0bWFwID0gaWRyX2dldF9uZXh0KFxcdTAwMjZtYXBfaWRyLCBpZCk7XFxuNDg0NTpcXHRcXHRpZiAobWFwKSB7XFxuNDg0NjpcXHRcXHRcXHRtYXAgPSBfX2JwZl9tYXBfaW5jX25vdF96ZXJvKG1hcCwgZmFsc2UpO1xcbjQ4NDc6XFx0XFx0XFx0aWYgKElTX0VSUihtYXApKSB7XFxuNDg0ODpcXHRcXHRcXHRcXHQoKmlkKSsrO1xcbjQ4NDk6XFx0XFx0XFx0XFx0Z290byBhZ2FpbjtcXG40ODUwOlxcdFxcdFxcdH1cXG40ODUxOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTI6MzQuMTU5NjE4ODYxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYzNzYyNTY5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBNZW1vcnkgU2FmZXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mb3JtYXRpb24gbGVha3MuIEknbGwgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmQgY2hlY2tzLCBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBrZXJuZWwgc3RydWN0dXJlcywgY29uZGl0aW9uYWwgbG9naWMsIGFuZCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi5cblxuRmlyc3QsIGRvZXMgdGhpcyBwYXRjaCB0b3VjaCBhbnl0aGluZyB0aGF0IGNvdWxkIHNlbmQgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlPyBObywgbm90aGluZyBpcyBtb2RpZmllZCByZWdhcmRpbmcgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgU0tCIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCwgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzLiBUaGF0J3MgYSBjbGVhbiBzbGF0ZS5cblxuTmV4dCwgYXJlIHRoZXJlIGFueSBjaGFuZ2VzIHRvIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvciBsb2dpYyB0aGF0IGNvdWxkIHJlbHkgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gIE5vLiBUaGUga2V5IHZhcmlhYmxlLCBgbGluay1cdTAwM2VpZGAsIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCB3aXRoaW4gYGJwZl9saW5rX2luaXRfc2xlZXBhYmxlYCwgYW5kIGFueXRoaW5nIGNvbnRhaW5pbmcgYSBgYnBmX2xpbmtgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AuIFNvLCBpbml0aWFsaXphdGlvbiBpcyBoYW5kbGVkIGNvcnJlY3RseS5cblxuTm93LCB3aGF0IGFib3V0IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgbGF0ZXIgYmUgcmVhZD8gQWdhaW4sIG5vIGNoYW5nZXMgaGVyZS4gTm8gbmV3IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gcGF0dGVybnMgYXJlIGludHJvZHVjZWQgdGhhdCBJIGNhbiBzZWUuXG5cbkFuZCBmaW5hbGx5LCBkb2VzIHRoaXMgcGF0Y2ggbW9kaWZ5IGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0ICptaWdodCogYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycz8gTm9wZS5cblxuU28sICppcyogdGhlcmUgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3M/IEJhc2VkIG9uIG15IHJldmlldywgdGhlIHBhdGNoICpwcmV2ZW50cyogYGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoKWAgZnJvbSByZXR1cm5pbmcgbGlua3MgdGhhdCBhcmUgc3RpbGwgYmVpbmcgY3JlYXRlZCAod2hlcmUgYGxpbmstXHUwMDNlaWQgPT0gMGApLiAgVGhpcyBmaXhlcyBhIGNvbmN1cnJlbmN5IGlzc3VlLCBwcmV2ZW50aW5nIGFuIHVuc2V0dGxlZCBsaW5rIGZyb20gYmVpbmcgcmV0dXJuZWQgYnkgdGhlIGl0ZXJhdG9yLiBUaGlzIGlzIGEgY29uY3VycmVuY3ksIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHN0YXRlIHZhbGlkaXR5IGZpeC4gS01TQU4gaXMgbXkgcHJpbWFyeSB0b29sIGZvciBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBhbmQgcGFnZSksIGFuZCBhbnkga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gIEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyBhcmUgbXkgZ28tdG8gZm9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIChVQUYsIG91dC1vZi1ib3VuZHMsIHJhY2UgY29uZGl0aW9ucykuICBIZXJlLCBJIHNlZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIHRodXMgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSeKAmWxsIG5vdyBkb3VibGUtY2hlY2sgbXkgcmVhc29uaW5nIHRvIG1ha2UgY2VydGFpbiB0aGlzIGFzc2Vzc21lbnQgaXMgY29tcHJlaGVuc2l2ZSBhbmQgcHJlY2lzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MjgsIk91dHB1dFRva2VucyI6MjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTI6NDAuNTM1ODc5NzM1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIHZlcmlmeSB0aGF0IGBsaW5rLVxcdTAwM2VpZGAgaXMgbm9uLXplcm8gYmVmb3JlIGluY3JlbWVudGluZyB0aGUgbGluayByZWZjb3VudCBhbmQgcmV0dXJuaW5nIGl0LiBUaGlzIHByZXZlbnRzIHRoZSBsaW5rIGl0ZXJhdG9yIGZyb20gcmV0dXJuaW5nIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIG9yIHVuc2V0dGxlZCBCUEYgbGluayB0aGF0IHdhcyBhbGxvY2F0ZWQgYW4gSUQgaW4gYGxpbmtfaWRyYCBidXQgaGFzIG5vdCB5ZXQgYmVlbiBzZXR0bGVkIHZpYSBgYnBmX2xpbmtfc2V0dGxlKClgLlxcblxcbmBsaW5rLVxcdTAwM2VpZGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIHRvIDAgaW4gYGJwZl9saW5rX2luaXRfc2xlZXBhYmxlKClgIGR1cmluZyBsaW5rIGFsbG9jYXRpb24gYW5kIHNldCB0byBpdHMgSUQgb25seSB1cG9uIGBicGZfbGlua19zZXR0bGUoKWAuIFRoaXMgY2hhbmdlIG9ubHkgY2hlY2tzIGFuIGFscmVhZHktaW5pdGlhbGl6ZWQgZmllbGQgKGBsaW5rLVxcdTAwM2VpZGApIHRvIGhhbmRsZSBsaW5rIGxpZmVjeWNsZS9jb25jdXJyZW5jeSBzdGF0ZSwgYW5kIGRvZXMgbm90IHRvdWNoIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIHZlcmlmeSB0aGF0IGBsaW5rLVxcdTAwM2VpZGAgaXMgbm9uLXplcm8gYmVmb3JlIGluY3JlbWVudGluZyB0aGUgbGluayByZWZjb3VudCBhbmQgcmV0dXJuaW5nIGl0LiBUaGlzIHByZXZlbnRzIHRoZSBsaW5rIGl0ZXJhdG9yIGZyb20gcmV0dXJuaW5nIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIG9yIHVuc2V0dGxlZCBCUEYgbGluayB0aGF0IHdhcyBhbGxvY2F0ZWQgYW4gSUQgaW4gYGxpbmtfaWRyYCBidXQgaGFzIG5vdCB5ZXQgYmVlbiBzZXR0bGVkIHZpYSBgYnBmX2xpbmtfc2V0dGxlKClgLlxcblxcbmBsaW5rLVxcdTAwM2VpZGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIHRvIDAgaW4gYGJwZl9saW5rX2luaXRfc2xlZXBhYmxlKClgIGR1cmluZyBsaW5rIGFsbG9jYXRpb24gYW5kIHNldCB0byBpdHMgSUQgb25seSB1cG9uIGBicGZfbGlua19zZXR0bGUoKWAuIFRoaXMgY2hhbmdlIG9ubHkgY2hlY2tzIGFuIGFscmVhZHktaW5pdGlhbGl6ZWQgZmllbGQgKGBsaW5rLVxcdTAwM2VpZGApIHRvIGhhbmRsZSBsaW5rIGxpZmVjeWNsZS9jb25jdXJyZW5jeSBzdGF0ZSwgYW5kIGRvZXMgbm90IHRvdWNoIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgccv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 20:08:47 +0000 UTC FinishedAt: 2026-09-14 20:12:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "ee363e055895364039bf28348ff13c615afad4ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "ee363e055895364039bf28348ff13c615afad4ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_link_get_curr_or_next", "bpf_link_seq_start", "bpf_link_seq_next" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "ee363e055895364039bf28348ff13c615afad4ba", "base_tree": "bpf" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfbGlua19zZXFfc3RhcnQmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2VxX25leHQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIHZlcmlmeSB0aGF0IGBsaW5rLVx1MDAzZWlkYCBpcyBub24temVybyBiZWZvcmUgaW5jcmVtZW50aW5nIHRoZSBsaW5rIHJlZmNvdW50IGFuZCByZXR1cm5pbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGxpbmsgaXRlcmF0b3IgZnJvbSByZXR1cm5pbmcgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgb3IgdW5zZXR0bGVkIEJQRiBsaW5rIHRoYXQgd2FzIGFsbG9jYXRlZCBhbiBJRCBpbiBgbGlua19pZHJgIGJ1dCBoYXMgbm90IHlldCBiZWVuIHNldHRsZWQgdmlhIGBicGZfbGlua19zZXR0bGUoKWAuXG5cbmBsaW5rLVx1MDAzZWlkYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gMCBpbiBgYnBmX2xpbmtfaW5pdF9zbGVlcGFibGUoKWAgZHVyaW5nIGxpbmsgYWxsb2NhdGlvbiBhbmQgc2V0IHRvIGl0cyBJRCBvbmx5IHVwb24gYGJwZl9saW5rX3NldHRsZSgpYC4gVGhpcyBjaGFuZ2Ugb25seSBjaGVja3MgYW4gYWxyZWFkeS1pbml0aWFsaXplZCBmaWVsZCAoYGxpbmstXHUwMDNlaWRgKSB0byBoYW5kbGUgbGluayBsaWZlY3ljbGUvY29uY3VycmVuY3kgc3RhdGUsIGFuZCBkb2VzIG5vdCB0b3VjaCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoKSBpbiBrZXJuZWwvYnBmL3N5c2NhbGwuYyB0byBjaGVjayBpZiBsaW5rLVx1MDAzZWlkIGlzIG5vbi16ZXJvIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50LCByZXR1cm5pbmcgLUVBR0FJTiBvdGhlcndpc2Ugc28gdGhlIGl0ZXJhdGlvbiBza2lwcyB1bnNldHRsZWQgbGlua3MuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgQlBGIGl0ZXJhdG9yIGNvZGUgcGF0aHMgKGJwZl9saW5rIGl0ZXJhdG9yKSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTU1ZTAyODJiYjAwZWRlZWNmZjdiYWNjYTIzODkyMWFiODM5YzZiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDIwOjEwOjIwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDg1M2I0N2Y4MTM4NDIuLjI0NGE5MzliOWQyZGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC02MDQyLDcgJiM0Mzs2MDQyLDEwIEBAIHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxuIGFnYWluOlxuIFx0bGluayA9IGlkcl9nZXRfbmV4dChcdTAwMjZsaW5rX2lkciwgaWQpO1xuIFx0aWYgKGxpbmspIHtcbi1cdFx0bGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTtcbiYjNDM7XHRcdGlmIChsaW5rLVx1MDAzZWlkKVxuJiM0MztcdFx0XHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRsaW5rID0gRVJSX1BUUigtRUFHQUlOKTtcbiBcdFx0aWYgKElTX0VSUihsaW5rKSkge1xuIFx0XHRcdCgqaWQpJiM0MzsmIzQzOztcbiBcdFx0XHRnb3RvIGFnYWluO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfbGlua19zZXFfc3RhcnQmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2VxX25leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpIGluIGtlcm5lbC9icGYvc3lzY2FsbC5jIHRvIGNoZWNrIGlmIGxpbmstXHUwMDNlaWQgaXMgbm9uLXplcm8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQsIHJldHVybmluZyAtRUFHQUlOIG90aGVyd2lzZSBzbyB0aGUgaXRlcmF0aW9uIHNraXBzIHVuc2V0dGxlZCBsaW5rcy4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBCUEYgaXRlcmF0b3IgY29kZSBwYXRocyAoYnBmX2xpbmsgaXRlcmF0b3IpIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NTVlMDI4MmJiMDBlZGVlY2ZmN2JhY2NhMjM4OTIxYWI4MzljNmI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMjA6MTA6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDg1M2I0N2Y4MTM4NDIuLjI0NGE5MzliOWQyZGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC02MDQyLDcgJiM0Mzs2MDQyLDEwIEBAIHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKQogYWdhaW46CiAJbGluayA9IGlkcl9nZXRfbmV4dCgmYW1wO2xpbmtfaWRyLCBpZCk7CiAJaWYgKGxpbmspIHsKLQkJbGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTsKJiM0MzsJCWlmIChsaW5rLSZndDtpZCkKJiM0MzsJCQlsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspOwomIzQzOwkJZWxzZQomIzQzOwkJCWxpbmsgPSBFUlJfUFRSKC1FQUdBSU4pOwogCQlpZiAoSVNfRVJSKGxpbmspKSB7CiAJCQkoKmlkKSYjNDM7JiM0Mzs7CiAJCQlnb3RvIGFnYWluOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTAwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBhIEJQRiBMaW5rIElEUiBJdGVyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgdG8gYmUgd2l0aGluIHRoZSBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYGxpbmtfaWRyYC4gVGhlIGNvcmUgb2YgdGhpcyBmdW5jdGlvbiBpcyBhYm91dCBnZXR0aW5nIHRoZSBuZXh0IGBicGZfbGlua2AgaW4gYW4gSURSLgoKSSYjMzk7bSBub3RpY2luZyBhIHBvdGVudGlhbCBpc3N1ZSBvciBpbXByb3ZlbWVudCBoZXJlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgc2ltcGx5IGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBsaW5rIHVzaW5nIGBicGZfbGlua19pbmNfbm90X3plcm8obGluaylgLiBOb3csIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrOiBgaWYgKGxpbmstJmd0O2lkKWAuIFRoaXMgc3VnZ2VzdHMgYSBjb25kaXRpb24gd2hlcmUgYSBgYnBmX2xpbmtgIG1pZ2h0IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBJRFIgYnV0IG1pZ2h0IG5vdCB5ZXQgYmUgZnVsbHkgaW5pdGlhbGl6ZWQsIG9yIHBlcmhhcHMgaW4gc29tZSB0cmFuc2llbnQgc3RhdGUuCgpJZiBgbGluay0mZ3Q7aWRgIGlzIG5vbi16ZXJvLCB3ZSBwcm9jZWVkIGFzIGJlZm9yZSwgaW5jcmVtZW50aW5nIHRoZSByZWZlcmVuY2UgY291bnQuIEhvd2V2ZXIsIGlmIGBsaW5rLSZndDtpZGAgKmlzKiB6ZXJvLCB3aGljaCBwcmVzdW1hYmx5IGluZGljYXRlcyBhbiB1bmluaXRpYWxpemVkIG9yIGludmFsaWQgbGluayBlbnRyeSwgdGhlIHBhdGNoIHNldHMgYGxpbmtgIHRvIGBFUlJfUFRSKC1FQUdBSU4pYC4gVGhpcyBgLUVBR0FJTmAgc2VlbXMgbGlrZSBhIHNpZ25hbCB0byByZXRyeSB0aGUgaXRlcmF0aW9uLiBUaGUgY29kZSB0aGVuIGluY3JlbWVudHMgdGhlIElEIGFuZCBqdW1wcyBiYWNrIHRvIHRoZSBgYWdhaW5gIGxhYmVsLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYSBsaW5rIHdpdGggYW4gSUQgb2YgemVybyBzaG91bGQgYmUgc2tpcHBlZCB3aGVuIGl0ZXJhdGluZy4gVGhpcyBtYWtlcyBzZW5zZTogd2h5IHJldHVybiBhIGxpbmsgdGhhdCBoYXMgbm90IHlldCBiZWVuIGdpdmVuIGFuIElEPwoKU28sIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBhIGdvb2QgZGVmZW5zZSBhZ2FpbnN0IHJldHVybmluZyBpbnZhbGlkIG9yIHVuaW5pdGlhbGl6ZWQgQlBGIGxpbmtzIGR1cmluZyB0aGUgSURSIHRyYXZlcnNhbC4gSXQgcHJldmVudHMgYW4gaW5jcmVtZW50IG9mIHRoZSBsaW5rJiMzOTtzIHJlZmVyZW5jZSBjb3VudCBpZiB0aGUgSUQgaXMgMCwgc2tpcHBpbmcgdGhlIGxpbmsgYW5kIHJldHJ5aW5nLiBJJiMzOTtkIG5lZWQgdG8gZGlnIGRlZXBlciB0byBmdWxseSB1bmRlcnN0YW5kIHdoeSBhIGxpbmsgbWlnaHQgYmUgaW4gdGhpcyBzdGF0ZSwgYnV0IHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSBpbXBvcnRhbnQgcm9idXN0bmVzcyB0byB0aGUgSURSIGl0ZXJhdGlvbiBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MDMwOlx0XHR9IGVsc2Uge1xuNjAzMTpcdFx0XHRsaW5rID0gRVJSX1BUUigtRU5PRU5UKTtcbjYwMzI6XHRcdH1cbjYwMzM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xuNjAzNDpcdFx0cmV0dXJuIGxpbms7XG42MDM1Olx0fVxuNjAzNjpcdFxuNjAzNzpcdHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxuNjAzODpcdHtcbjYwMzk6XHRcdHN0cnVjdCBicGZfbGluayAqbGluaztcbjYwNDA6XHRcbjYwNDE6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbjYwNDI6XHRhZ2FpbjpcbjYwNDM6XHRcdGxpbmsgPSBpZHJfZ2V0X25leHQoXHUwMDI2bGlua19pZHIsIGlkKTtcbjYwNDQ6XHRcdGlmIChsaW5rKSB7XG42MDQ1Olx0XHRcdGlmIChsaW5rLVx1MDAzZWlkKVxuNjA0NjpcdFx0XHRcdGxpbmsgPSBicGZfbGlua19pbmNfbm90X3plcm8obGluayk7XG42MDQ3Olx0XHRcdGVsc2VcbjYwNDg6XHRcdFx0XHRsaW5rID0gRVJSX1BUUigtRUFHQUlOKTtcbjYwNDk6XHRcdFx0aWYgKElTX0VSUihsaW5rKSkge1xuNjA1MDpcdFx0XHRcdCgqaWQpJiM0MzsmIzQzOztcbjYwNTE6XHRcdFx0XHRnb3RvIGFnYWluO1xuNjA1MjpcdFx0XHR9XG42MDUzOlx0XHR9XG42MDU0Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbjYwNTU6XHRcbjYwNTY6XHRcdHJldHVybiBsaW5rO1xuNjA1NzpcdH1cbjYwNTg6XHRcbjYwNTk6XHQjZGVmaW5lIEJQRl9MSU5LX0dFVF9GRF9CWV9JRF9MQVNUX0ZJRUxEIGxpbmtfaWRcbjYwNjA6XHRcbjYwNjE6XHRzdGF0aWMgaW50IGJwZl9saW5rX2dldF9mZF9ieV9pZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbjYwNjI6XHR7XG42MDYzOlx0XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG42MDY0Olx0XHR1MzIgaWQgPSBhdHRyLVx1MDAzZWxpbmtfaWQ7XG42MDY1Olx0XHRpbnQgZmQ7XG42MDY2Olx0XG42MDY3Olx0XHRpZiAoQ0hFQ0tfQVRUUihCUEZfTElOS19HRVRfRkRfQllfSUQpKVxuNjA2ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjYwNjk6XHRcbjYwNzA6XHRcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbjYwNzE6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjYwNzI6XHRcbjYwNzM6XHRcdGxpbmsgPSBicGZfbGlua19ieV9pZChpZCk7XG42MDc0Olx0XHRpZiAoSVNfRVJSKGxpbmspKVxuNjA3NTpcdFx0XHRyZXR1cm4gUFRSX0VSUihsaW5rKTtcbjYwNzY6XHRcbjYwNzc6XHRcdGZkID0gYnBmX2xpbmtfbmV3X2ZkKGxpbmspO1xuNjA3ODpcdFx0aWYgKGZkIFx1MDAzYyAwKVxuNjA3OTpcdFx0XHRicGZfbGlua19wdXRfZGlyZWN0KGxpbmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YCBVc2FnZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBkaXJlY3Qgcm91dGUgaXMgdG8gZmlndXJlIG91dCB3aGVyZSBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgaXMgKmFjdHVhbGx5KiBiZWluZyBpbnZva2VkLiBTbywgSSBuZWVkIHRvIGZpbmQgYWxsIHRoZSBjYWxsIHNpdGVzLiBObyBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoaW5nczsgYSBnb29kIG9sZCBgZ3JlcGAgc2hvdWxkIGRvIHRoZSB0cmljay4gQSBxdWljayBgZ3JlcGAgZm9yIHRoYXQgc3ltYm9sIHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludHMuIFRoZW4sIEkgY2FuIHN0YXJ0IGFuYWx5emluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlIG9mIHRoZXNlIGNhbGxzLiBUaGUgZGV2aWwmIzM5O3MgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbGlua19nZXRfY3Vycl9vcl9uZXh0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MjkwNj1zdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2dldF9mcm9tX2ZkKHUzMiB1ZmQpO1xuaW5jbHVkZS9saW51eC9icGYuaDoyOTA3OnN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKTtcbmluY2x1ZGUvbGludXgvYnBmLmgtMjkwOC1cbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jPTEzPXN0YXRpYyB2b2lkICpicGZfbGlua19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuLS1cbmtlcm5lbC9icGYvbGlua19pdGVyLmMtMTctXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jOjE4Olx0bGluayA9IGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoXHUwMDI2aW5mby1cdTAwM2VsaW5rX2lkKTtcbmtlcm5lbC9icGYvbGlua19pdGVyLmMtMTktXHRpZiAoIWxpbmspXG4tLVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYz0yNz1zdGF0aWMgdm9pZCAqYnBmX2xpbmtfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuLS1cbmtlcm5lbC9icGYvbGlua19pdGVyLmMtMzMtXHRicGZfbGlua19wdXQoKHN0cnVjdCBicGZfbGluayAqKXYpO1xua2VybmVsL2JwZi9saW5rX2l0ZXIuYzozNDpcdHJldHVybiBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KFx1MDAyNmluZm8tXHUwMDNlbGlua19pZCk7XG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTM1LX1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MDE1PXN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfYnlfaWQodTMyIGlkKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMzYtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDM3OnN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAzOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAyMgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQlBGIExpbmsgSXRlcmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byBob3cgYGJwZl9saW5rYCBpdGVyYXRpb24gYWN0dWFsbHkgd29ya3MuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MgYmVoaW5kIHRyYXZlcnNpbmcgdGhlc2UgbGlua3MsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgZ2V0dGluZyB0aGUgbmV4dCBJRC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBsb29rIGZvciBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgcmVsYXRlZCB0byByZXRyaWV2aW5nIHRoZSBuZXh0IG9yIGN1cnJlbnQgSUQgaW4gYSBgYnBmX2xpbmtgIGNoYWluLiBTb21ldGhpbmcgbGlrZSBgYnBmX2xpbmtfZ2V0X25leHRfaWRgIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlLCBvciBwZXJoYXBzIGEgc2ltaWxhciBmdW5jdGlvbiBuYW1lIHRoYXQgaGFuZGxlcyBpdGVyYXRpb24gd2l0aGluIHRoZSBCUEYgbGluayBzdHJ1Y3R1cmUuCgpNeSBwbGFuIGlzIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHVzZXMgb2YgdGhhdCBzcGVjaWZpYyBuYW1lLCBhbmQgaWYgSSBjYW4mIzM5O3QgZmluZCB0aGF0IGV4YWN0IG5hbWUsIEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNlYXJjaCB3aXRoIHNvbWV0aGluZyBsaWtlIGBCUEZfTElOS19HRVRfTkVYVF9JRGAgdG8gY2FwdHVyZSBwb3RlbnRpYWwgY29uc3RhbnRzIG9yIG1hY3JvcyBpbnZvbHZlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24uIFRoaXMgYXBwcm9hY2ggc2hvdWxkIHJldmVhbCBob3cgZGV2ZWxvcGVycyBhcmUgYWN0dWFsbHkgdXNpbmcgdGhlc2UgaXRlcmF0b3IgZnVuY3Rpb25zIG9yIHJlbGF0ZWQgQlBGIGxpbmsgaXRlcmF0aW9uIHByb2Nlc3Nlcy4gSSBleHBlY3QgdGhhdCB0aGlzIHdpbGwgaGVscCBtZSBjbGFyaWZ5IHRoZSBtZWNoYW5pc21zIGVtcGxveWVkIHRvIG5hdmlnYXRlIGBicGZfbGlua2Agc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfTElOS19HRVRfTkVYVF9JRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTMyPXVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTgxNi0gKlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjgxNzogKiBCUEZfTElOS19HRVRfTkVYVF9JRFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTgxOC0gKlx0RGVzY3JpcHRpb25cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9OTU1PWVudW0gYnBmX2NtZCB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTk4Ny1cdEJQRl9MSU5LX0dFVF9GRF9CWV9JRCxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo5ODg6XHRCUEZfTElOS19HRVRfTkVYVF9JRCxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC05ODktXHRCUEZfRU5BQkxFX1NUQVRTLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDY9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NTItXHRcdGJyZWFrO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ1MzpcdGNhc2UgQlBGX0xJTktfR0VUX05FWFRfSUQ6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDU0LVx0XHRlcnIgPSBicGZfb2JqX2dldF9uZXh0X2lkKFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEzMj11bmlvbiBicGZfaXRlcl9saW5rX2luZm8ge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC04MTYtICpcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo4MTc6ICogQlBGX0xJTktfR0VUX05FWFRfSURcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC04MTgtICpcdERlc2NyaXB0aW9uXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTk1NT1lbnVtIGJwZl9jbWQge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC05ODctXHRCUEZfTElOS19HRVRfRkRfQllfSUQsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6OTg4Olx0QlBGX0xJTktfR0VUX05FWFRfSUQsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtOTg5LVx0QlBGX0VOQUJMRV9TVEFUUyxcbi0tXG50b29scy9saWIvYnBmL2JwZi5jPTExNTg9aW50IGJwZl9saW5rX2dldF9uZXh0X2lkKF9fdTMyIHN0YXJ0X2lkLCBfX3UzMiAqbmV4dF9pZClcbnRvb2xzL2xpYi9icGYvYnBmLmMtMTE1OS17XG50b29scy9saWIvYnBmL2JwZi5jOjExNjA6XHRyZXR1cm4gYnBmX29ial9nZXRfbmV4dF9pZChzdGFydF9pZCwgbmV4dF9pZCwgQlBGX0xJTktfR0VUX05FWFRfSUQpO1xudG9vbHMvbGliL2JwZi9icGYuYy0xMTYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgTGluayBJdGVyYXRvcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgdGhlIEJQRiBsaW5rIGl0ZXJhdG9yLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvYnBmL2xpbmtfaXRlci5jYC4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGlkZW50aWZ5aW5nIHRoZSBjb25maWd1cmF0aW9ucyBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGF0IGVuYWJsZSB0aGlzIGl0ZXJhdG9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIHRyb3VibGVzaG9vdCBhbmQgaW1wcm92ZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2xpbmtfaXRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qIENvcHlyaWdodCAoYykgMjAyMiBSZWQgSGF0LCBJbmMuICovXG4gICAzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZmlsdGVyLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuICAgODpcdFxuICAgOTpcdHN0cnVjdCBicGZfaXRlcl9zZXFfbGlua19pbmZvIHtcbiAgMTA6XHRcdHUzMiBsaW5rX2lkO1xuICAxMTpcdH07XG4gIDEyOlx0XG4gIDEzOlx0c3RhdGljIHZvaWQgKmJwZl9saW5rX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXG4gIDE0Olx0e1xuICAxNTpcdFx0c3RydWN0IGJwZl9pdGVyX3NlcV9saW5rX2luZm8gKmluZm8gPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbiAgMTY6XHRcdHN0cnVjdCBicGZfbGluayAqbGluaztcbiAgMTc6XHRcbiAgMTg6XHRcdGxpbmsgPSBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KFx1MDAyNmluZm8tXHUwMDNlbGlua19pZCk7XG4gIDE5Olx0XHRpZiAoIWxpbmspXG4gIDIwOlx0XHRcdHJldHVybiBOVUxMO1xuICAyMTpcdFxuICAyMjpcdFx0aWYgKCpwb3MgPT0gMClcbiAgMjM6XHRcdFx0JiM0MzsmIzQzOypwb3M7XG4gIDI0Olx0XHRyZXR1cm4gbGluaztcbiAgMjU6XHR9XG4gIDI2Olx0XG4gIDI3Olx0c3RhdGljIHZvaWQgKmJwZl9saW5rX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbiAgMjg6XHR7XG4gIDI5Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2xpbmtfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuICAzMDpcdFxuICAzMTpcdFx0JiM0MzsmIzQzOypwb3M7XG4gIDMyOlx0XHQmIzQzOyYjNDM7aW5mby1cdTAwM2VsaW5rX2lkO1xuICAzMzpcdFx0YnBmX2xpbmtfcHV0KChzdHJ1Y3QgYnBmX2xpbmsgKil2KTtcbiAgMzQ6XHRcdHJldHVybiBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KFx1MDAyNmluZm8tXHUwMDNlbGlua19pZCk7XG4gIDM1Olx0fVxuICAzNjpcdFxuICAzNzpcdHN0cnVjdCBicGZfaXRlcl9fYnBmX2xpbmsge1xuICAzODpcdFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfaXRlcl9tZXRhICosIG1ldGEpO1xuICAzOTpcdFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfbGluayAqLCBsaW5rKTtcbiAgNDA6XHR9O1xuICA0MTpcdFxuICA0MjpcdERFRklORV9CUEZfSVRFUl9GVU5DKGJwZl9saW5rLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxuICA0MzpcdFxuICA0NDpcdHN0YXRpYyBpbnQgX19icGZfbGlua19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgYm9vbCBpbl9zdG9wKVxuICA0NTpcdHtcbiAgNDY6XHRcdHN0cnVjdCBicGZfaXRlcl9fYnBmX2xpbmsgY3R4O1xuICA0NzpcdFx0c3RydWN0IGJwZl9pdGVyX21ldGEgbWV0YTtcbiAgNDg6XHRcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiAgNDk6XHRcdGludCByZXQgPSAwO1xuICA1MDpcdFxuICA1MTpcdFx0Y3R4Lm1ldGEgPSBcdTAwMjZtZXRhO1xuICA1MjpcdFx0Y3R4LmxpbmsgPSB2O1xuICA1MzpcdFx0bWV0YS5zZXEgPSBzZXE7XG4gIDU0Olx0XHRwcm9nID0gYnBmX2l0ZXJfZ2V0X2luZm8oXHUwMDI2bWV0YSwgaW5fc3RvcCk7XG4gIDU1Olx0XHRpZiAocHJvZylcbiAgNTY6XHRcdFx0cmV0ID0gYnBmX2l0ZXJfcnVuX3Byb2cocHJvZywgXHUwMDI2Y3R4KTtcbiAgNTc6XHRcbiAgNTg6XHRcdHJldHVybiByZXQ7XG4gIDU5Olx0fVxuICA2MDpcdFxuICA2MTpcdHN0YXRpYyBpbnQgYnBmX2xpbmtfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gIDYyOlx0e1xuICA2MzpcdFx0cmV0dXJuIF9fYnBmX2xpbmtfc2VxX3Nob3coc2VxLCB2LCBmYWxzZSk7XG4gIDY0Olx0fVxuICA2NTpcdFxuICA2NjpcdHN0YXRpYyB2b2lkIGJwZl9saW5rX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuICA2NzpcdHtcbiAgNjg6XHRcdGlmICghdilcbiAgNjk6XHRcdFx0KHZvaWQpX19icGZfbGlua19zZXFfc2hvdyhzZXEsIHYsIHRydWUpO1xuICA3MDpcdFx0ZWxzZVxuICA3MTpcdFx0XHRicGZfbGlua19wdXQoKHN0cnVjdCBicGZfbGluayAqKXYpO1xuICA3MjpcdH1cbiAgNzM6XHRcbiAgNzQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9saW5rX3NlcV9vcHMgPSB7XG4gIDc1Olx0XHQuc3RhcnRcdD0gYnBmX2xpbmtfc2VxX3N0YXJ0LFxuICA3NjpcdFx0Lm5leHRcdD0gYnBmX2xpbmtfc2VxX25leHQsXG4gIDc3Olx0XHQuc3RvcFx0PSBicGZfbGlua19zZXFfc3RvcCxcbiAgNzg6XHRcdC5zaG93XHQ9IGJwZl9saW5rX3NlcV9zaG93LFxuICA3OTpcdH07XG4gIDgwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSYjMzk7ZCBhcnRpY3VsYXRlIGl0LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipUcm91Ymxlc2hvb3RpbmcgYSBQb3RlbnRpYWwgQlBGIElEUiBJc3N1ZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc29tZXRoaW5nIGZlZWxzIG9mZi4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gZ2V0IHRoZSBjb21taXQgaGlzdG9yeS4gSSB3YW50IHRvIHNlZSB0aGUgYGdpdCBsb2dgIHRvIHByb3ZpZGUgY29udGV4dC4gV2hhdCYjMzk7cyB0aGUgcHJvYmxlbSB0aGlzIGNoYW5nZSB3YXMgaW50ZW5kZWQgdG8gZml4PyBUaGF0JiMzOTtzIGFsd2F5cyBzdGVwIG9uZS4KCk9rYXksIGxldCYjMzk7cyBmaXJlIHVwIGBncmVwcGVyYCBvciBqdXN0IHF1aWNrbHkgY2hlY2sgd2hhdCBgbGluay0mZ3Q7aWRgIGFjdHVhbGx5ICpyZXByZXNlbnRzKiBpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYW5kIHRoZSBzZW1hbnRpY3MgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQgaXQgbWVhbnMgdG8gaGF2ZSBhIHplcm8gSUQgaW4gYSBgbGlua19pZHJgIGNvbnRleHQuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgc3VzcGljaW91cy4gV2h5IHdvdWxkIHdlIGJlIGhpdHRpbmcgdGhhdD8gWmVybyBpcyB1c3VhbGx5IGEgc2VudGluZWwgdmFsdWUsIG9yIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUuCgpXYWl0IGEgc2Vjb25k4oCmIGBsaW5rLSZndDtpZGAgYmVpbmcgemVybyB3aGlsZSBpbiBhbiBJRFI/IFRoYXQgZG9lc24mIzM5O3QgbWFrZSBpbnR1aXRpdmUgc2Vuc2UuIE15IGtub3dsZWRnZSBvZiBJRFJzIHRlbGxzIG1lIHRoYXQgaXNuJiMzOTt0IHZhbGlkLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBoYXBwZW5pbmcuIFRoZSBJRFIgaXMgc3VwcG9zZWQgdG8gbWFuYWdlIG5vbi16ZXJvIElEcywgYW5kIHVzdWFsbHksIHRoZXJlIGFyZSBhbGxvY2F0aW9uIG9yIHJlbGVhc2UgcGF0aHMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIFNvIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIHNlYXJjaGluZyBmb3IgYGxpbmtfaWRyYCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBJJiMzOTtsbCBmb2N1cyBvbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGluaXRpYWxseSwgYmVjYXVzZSB0aGF0IHNlZW1zIGxpa2UgYSBsaWtlbHkgcGxhY2UgZm9yIEJQRi1yZWxhdGVkIElEUiBpbnRlcmFjdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBjYWxsIHBhdGggYW5kIHNlZSB3aGVyZSB0aGlzIGBsaW5rLSZndDtpZGAgaXMgYmVpbmcgc2V0LCBhbmQgKndoeSogaXQgbWlnaHQgYmUgemVybyBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaW5rX2lkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTY0PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWFwX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY1OnN0YXRpYyBERUZJTkVfSURSKGxpbmtfaWRyKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY2OnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGlua19pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Ny1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zMjU5PXN0YXRpYyB2b2lkIGJwZl9saW5rX2ZyZWVfaWQoaW50IGlkKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyNjMtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjY0Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzI2NTpcdGlkcl9yZW1vdmUoXHUwMDI2bGlua19pZHIsIGlkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNjY6XHRzcGluX3VubG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyNjctfVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM0NzY9c3RhdGljIGludCBicGZfbGlua19hbGxvY19pZChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ4MC1cdGlkcl9wcmVsb2FkKEdGUF9LRVJORUwpO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ4MTpcdHNwaW5fbG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0ODI6XHRpZCA9IGlkcl9hbGxvY19jeWNsaWMoXHUwMDI2bGlua19pZHIsIGxpbmssIDEsIElOVF9NQVgsIEdGUF9BVE9NSUMpO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ4MzpcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ4NC1cdGlkcl9wcmVsb2FkX2VuZCgpO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0ODktLyogUHJlcGFyZSBicGZfbGluayB0byBiZSBleHBvc2VkIHRvIHVzZXItc3BhY2UgYnkgYWxsb2NhdGluZyBhbm9uX2lub2RlIGZpbGUsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDkwOiAqIHJlc2VydmluZyB1bnVzZWQgRkQgYW5kIGFsbG9jYXRpbmcgSUQgZnJvbSBsaW5rX2lkci4gVGhpcyBpcyB0byBiZSBwYWlyZWRcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0OTEtICogd2l0aCBicGZfbGlua19zZXR0bGUoKSB0byBpbnN0YWxsIEZEIGFuZCBJRCBhbmQgZXhwb3NlIGJwZl9saW5rIHRvXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzUzMz1pbnQgYnBmX2xpbmtfc2V0dGxlKHN0cnVjdCBicGZfbGlua19wcmltZXIgKnByaW1lcilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTM1LVx0LyogbWFrZSBicGZfbGluayBmZXRjaGFibGUgYnkgSUQgKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM1MzY6XHRzcGluX2xvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTM3LVx0cHJpbWVyLVx1MDAzZWxpbmstXHUwMDNlaWQgPSBwcmltZXItXHUwMDNlaWQ7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTM4Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTM5LVx0LyogbWFrZSBicGZfbGluayBmZXRjaGFibGUgYnkgRkQgKi9cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MDE1PXN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfYnlfaWQodTMyIGlkKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIyOlx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyMy1cdC8qIGJlZm9yZSBsaW5rIGlzIFwmIzM0O3NldHRsZWRcJiMzNDssIElEIGlzIDAsIHByZXRlbmQgaXQgZG9lc24mIzM5O3QgZXhpc3QgeWV0ICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDI0Olx0bGluayA9IGlkcl9maW5kKFx1MDAyNmxpbmtfaWRyLCBpZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDI1LVx0aWYgKGxpbmspIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDMyLVx0fVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAzMzpcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAzNC1cdHJldHVybiBsaW5rO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYwMzc9c3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjA0MC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwNDE6XHRzcGluX2xvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDQyLWFnYWluOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjA0MzpcdGxpbmsgPSBpZHJfZ2V0X25leHQoXHUwMDI2bGlua19pZHIsIGlkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNDQtXHRpZiAobGluaykge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNTMtXHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDU0Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDU1LVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDY9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NTQtXHRcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NTU6XHRcdFx0XHRcdCAgXHUwMDI2bGlua19pZHIsIFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJQRiBMaW5rIElEIFJldHJpZXZhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCBob3cgQlBGIGxpbmsgSURzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGJwZl9saW5rX2J5X2lkYC4gUmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGUgYGJwZl9saW5rX2J5X2lkYCBmdW5jdGlvbiBpdHNlbGYuIFRoZSBmdW5jdGlvbiB0YWtlcyBhIGxpbmsgSUQgYXMgaW5wdXQuIElmIHRoZSBJRCBpcyB6ZXJvLCBpdCBpbW1lZGlhdGVseSByZXR1cm5zIGFuIGVycm9yLCBpbmRpY2F0aW5nIG5vIHN1Y2ggbGluay4gU2VlbXMgbG9naWNhbCwgZ2l2ZW4gaG93IHRoZSBJRCBpcyBhc3NpZ25lZC4gVGhlbiwgYSBzcGlubG9jayBpcyBhY3F1aXJlZCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBgbGlua19pZHJgLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGBpZHJfZmluZGAgY2FsbCBhdHRlbXB0cyB0byBmaW5kIHRoZSBCUEYgbGluayBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgSUQgd2l0aGluIHRoZSBJRFIgKEludGVnZXIgSUQgUmVnaXN0cnkpLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydDogIGlmIGEgbGluayBpcyBmb3VuZCwgdGhlcmUmIzM5O3MgYSBjaGVjayBvbiBgbGluay0mZ3Q7aWRgLiBJZiBgbGluay0mZ3Q7aWRgIGlzIHplcm8sIHdlIHJldHVybiBgRUFHQUlOYC4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIHRoYXQgdGhlIGxpbmsgaXMgaW4gYW4gaW50ZXJtZWRpYXRlIHN0YXRlLCBub3QgZnVsbHkgaW5pdGlhbGl6ZWQgb3IgJiMzNDtzZXR0bGVkJiMzNDsgeWV0LCBzbyBhY2Nlc3NpbmcgaXQgaXNuJiMzOTt0IGFsbG93ZWQuIFRoZSBgYnBmX2xpbmtfaW5jX25vdF96ZXJvYCBjYWxsIGlzIGludGVyZXN0aW5nLCBsZXQgbWUgbG9vayBpbnRvIHdoYXQgdGhhdCBpcyBhYm91dCwgYnV0IEkgZXhwZWN0IGl0IHByb3ZpZGVzIHNvbWUga2luZCBvZiByZWZlcmVuY2UgY291bnRpbmcsIHByZXN1bWFibHkgdG8gbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGxpbmsgb2JqZWN0LgoKSWYgdGhlIGxpbmsgaXNuJiMzOTt0IGZvdW5kIGF0IGFsbCwgd2UgcmV0dXJuIGBFTk9FTlRgLiBGaW5hbGx5LCB0aGUgc3BpbmxvY2sgaXMgcmVsZWFzZWQsIGFuZCB0aGUgbGluayBwb2ludGVyIChvciBlcnJvciBwb2ludGVyKSBpcyByZXR1cm5lZC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IHN0YW5kYXJkIGFuZCByb2J1c3QgYXBwcm9hY2gsIHByb3RlY3RpbmcgdGhlIElEUiB3aXRoIGEgbG9jayBhbmQgaGFuZGxpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoIHRoZSBgbGluay0mZ3Q7aWRgIGNoZWNrLiBJdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IHNvbWV0aGluZyBlbHNlIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgd2hpY2ggbWlnaHQgYWxzbyBtYWtlIHVzZSBvZiBhIHJlZmVyZW5jZSBjb3VudGVyLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBpbnZlc3RpZ2F0ZSBgYnBmX29ial9nZXRfbmV4dF9pZGAuICBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgZmlsZSB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gSSB3aWxsIHNlZSBpZiB0aGVyZSBpcyBhbnkgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MDIwOlx0XHRpbmZvLVx1MDAzZXBlcmZfZXZlbnQua3Byb2JlLmNvb2tpZSA9IGV2ZW50LVx1MDAzZWJwZl9jb29raWU7XG40MDIxOlx0XHRyZXR1cm4gMDtcbjQwMjI6XHR9XG40MDIzOlx0XG40MDI0Olx0c3RhdGljIHZvaWQgYnBmX3BlcmZfbGlua19mZGluZm9fa3Byb2JlKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbjQwMjU6XHRcdFx0XHRcdFx0c3RydWN0IHNlcV9maWxlICpzZXEpXG40MDI2Olx0e1xuNDAyNzpcdFx0Y29uc3QgY2hhciAqbmFtZTtcbjQwMjg6XHRcdGludCBlcnI7XG40MDI5Olx0XHR1MzIgcHJvZ19pZCwgdHlwZTtcbjQwMzA6XHRcdHU2NCBvZmZzZXQsIGFkZHI7XG40MDMxOlx0XHR1bnNpZ25lZCBsb25nIG1pc3NlZDtcbjQwMzI6XHRcbjQwMzM6XHRcdGVyciA9IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGV2ZW50LCBcdTAwMjZwcm9nX2lkLCBcdTAwMjZ0eXBlLCBcdTAwMjZuYW1lLFxuNDAzNDpcdFx0XHRcdFx0ICAgICAgXHUwMDI2b2Zmc2V0LCBcdTAwMjZhZGRyLCBcdTAwMjZtaXNzZWQpO1xuNDAzNTpcdFx0aWYgKGVycilcbjQwMzY6XHRcdFx0cmV0dXJuO1xuNDAzNzpcdFxuNDAzODpcdFx0c2VxX3ByaW50ZihzZXEsXG40MDM5Olx0XHRcdCAgIFwmIzM0O25hbWU6XFx0JXNcXG5cJiMzNDtcbjQwNDA6XHRcdFx0ICAgXCYjMzQ7b2Zmc2V0OlxcdCUjbGx4XFxuXCYjMzQ7XG40MDQxOlx0XHRcdCAgIFwmIzM0O21pc3NlZDpcXHQlbHVcXG5cJiMzNDtcbjQwNDI6XHRcdFx0ICAgXCYjMzQ7YWRkcjpcXHQlI2xseFxcblwmIzM0O1xuNDA0MzpcdFx0XHQgICBcJiMzNDtldmVudF90eXBlOlxcdCVzXFxuXCYjMzQ7XG40MDQ0Olx0XHRcdCAgIFwmIzM0O2Nvb2tpZTpcXHQlbGx1XFxuXCYjMzQ7LFxuNDA0NTpcdFx0XHQgICBuYW1lLCBvZmZzZXQsIG1pc3NlZCwgYWRkcixcbjQwNDY6XHRcdFx0ICAgdHlwZSA9PSBCUEZfRkRfVFlQRV9LUkVUUFJPQkUgPyAgXCYjMzQ7a3JldHByb2JlXCYjMzQ7IDogXCYjMzQ7a3Byb2JlXCYjMzQ7LFxuNDA0NzpcdFx0XHQgICBldmVudC1cdTAwM2VicGZfY29va2llKTtcbjQwNDg6XHR9XG40MDQ5Olx0I2VuZGlmXG40MDUwOlx0XG40MDUxOlx0I2lmZGVmIENPTkZJR19VUFJPQkVfRVZFTlRTXG40MDUyOlx0c3RhdGljIGludCBicGZfcGVyZl9saW5rX2ZpbGxfdXByb2JlKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbjQwNTM6XHRcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG40MDU0Olx0e1xuNDA1NTpcdFx0dTY0IHJlZl9jdHJfb2Zmc2V0LCBvZmZzZXQ7XG40MDU2Olx0XHRjaGFyIF9fdXNlciAqdW5hbWU7XG40MDU3Olx0XHR1MzIgdWxlbiwgdHlwZTtcbjQwNTg6XHRcdGludCBlcnI7XG40MDU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDg4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gYGJwZl9vYmpfZ2V0X25leHRfaWRgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfb2JqX2dldF9uZXh0X2lkYC4gUmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGlzIGRvd24uIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyBnb2luZyB0byBiZSBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgZm9yIHRoZSBjb3JlIEJQRiBzeXNjYWxsIGltcGxlbWVudGF0aW9ucy4gSXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBhbnl0aGluZyByZWxhdGVkIHRvIG9iamVjdCByZXRyaWV2YWwgYW5kIG1hbmlwdWxhdGlvbiBmcm9tIHVzZXJzcGFjZS4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCAtIHByb2JhYmx5IGxvb2sgYXQgcmVsYXRlZCBzb3VyY2UgZmlsZXMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBvciBtYXliZSBldmVuIHJlbGF0ZWQgaGVhZGVyIGZpbGVzIGlmIGl0IGlzIGEgbWFjcm8gb3IgaW5saW5lIGZ1bmN0aW9uLiBCdXQsIG15IG1vbmV5IGlzIG9uIGBzeXNjYWxsLmNgIGZvciBzdGFydGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX29ial9nZXRfbmV4dF9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTQ3ODI9c3RhdGljIGludCBicGZfcHJvZ190ZXN0X3J1bihjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00ODExLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDgxMjpzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00ODEzLVx0XHRcdCAgICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDY9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTAtXHRjYXNlIEJQRl9QUk9HX0dFVF9ORVhUX0lEOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjM5MTpcdFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcdTAwMjZhdHRyLCB1YXR0ci51c2VyLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5Mi1cdFx0XHRcdFx0ICBcdTAwMjZwcm9nX2lkciwgXHUwMDI2cHJvZ19pZHJfbG9jayk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5NC1cdGNhc2UgQlBGX01BUF9HRVRfTkVYVF9JRDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTU6XHRcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTYtXHRcdFx0XHRcdCAgXHUwMDI2bWFwX2lkciwgXHUwMDI2bWFwX2lkcl9sb2NrKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mzk4LVx0Y2FzZSBCUEZfQlRGX0dFVF9ORVhUX0lEOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjM5OTpcdFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcdTAwMjZhdHRyLCB1YXR0ci51c2VyLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQwMC1cdFx0XHRcdFx0ICBcdTAwMjZidGZfaWRyLCBcdTAwMjZidGZfaWRyX2xvY2spO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NTMtXHRjYXNlIEJQRl9MSU5LX0dFVF9ORVhUX0lEOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ1NDpcdFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcdTAwMjZhdHRyLCB1YXR0ci51c2VyLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1NS1cdFx0XHRcdFx0ICBcdTAwMjZsaW5rX2lkciwgXHUwMDI2bGlua19pZHJfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIE9iamVjdCBJRCBSZXRyaWV2YWwqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgYnBmX29ial9nZXRfbmV4dF9pZGAgYXJvdW5kIGxpbmUgNDgxMiBpbiB0aGUgcmVsZXZhbnQgY29kZWJhc2UuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBCUEYgb2JqZWN0IElEIG1hbmFnZW1lbnQgaXMgaGFuZGxlZCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJRCBhbGxvY2F0aW9uIG9yIHJldHJpZXZhbCBpcyBpbXBsZW1lbnRlZC4gSSB3YW50IHRvIGZpZ3VyZSBvdXQgdGhlIElEIGVudW1lcmF0aW9uIHByb2Nlc3MuIElzIGl0IHRocmVhZC1zYWZlLCBhbmQgZG9lcyBpdCBhdm9pZCBjb250ZW50aW9uPyBEb2VzIGl0IHVzZSBhIHNpbXBsZSBjb3VudGVyLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIGxpa2UgYSBiaXRtYXAgb3IgYSBoYXNoIHRhYmxlPyBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBjcnVjaWFsIGZvciBhbnkgd29yayB0aGF0IGludGVyYWN0cyB3aXRoIGFuZCByZWxpZXMgb24gb2JqZWN0IElEIHJldHJpZXZhbCBpbiBCUEYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ4MTI6XHRzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG40ODEzOlx0XHRcdFx0ICAgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIsXG40ODE0Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZHIgKmlkcixcbjQ4MTU6XHRcdFx0XHQgICAgICAgc3BpbmxvY2tfdCAqbG9jaylcbjQ4MTY6XHR7XG40ODE3Olx0XHR1MzIgbmV4dF9pZCA9IGF0dHItXHUwMDNlc3RhcnRfaWQ7XG40ODE4Olx0XHRpbnQgZXJyID0gMDtcbjQ4MTk6XHRcbjQ4MjA6XHRcdGlmIChDSEVDS19BVFRSKEJQRl9PQkpfR0VUX05FWFRfSUQpIHx8IG5leHRfaWQgXHUwMDNlPSBJTlRfTUFYKVxuNDgyMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ4MjI6XHRcbjQ4MjM6XHRcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbjQ4MjQ6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjQ4MjU6XHRcbjQ4MjY6XHRcdG5leHRfaWQmIzQzOyYjNDM7O1xuNDgyNzpcdFx0c3Bpbl9sb2NrX2JoKGxvY2spO1xuNDgyODpcdFx0aWYgKCFpZHJfZ2V0X25leHQoaWRyLCBcdTAwMjZuZXh0X2lkKSlcbjQ4Mjk6XHRcdFx0ZXJyID0gLUVOT0VOVDtcbjQ4MzA6XHRcdHNwaW5fdW5sb2NrX2JoKGxvY2spO1xuNDgzMTpcdFxuNDgzMjpcdFx0aWYgKCFlcnIpXG40ODMzOlx0XHRcdGVyciA9IHB1dF91c2VyKG5leHRfaWQsIFx1MDAyNnVhdHRyLVx1MDAzZW5leHRfaWQpO1xuNDgzNDpcdFxuNDgzNTpcdFx0cmV0dXJuIGVycjtcbjQ4MzY6XHR9XG40ODM3Olx0XG40ODM4Olx0c3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxuNDgzOTpcdHtcbjQ4NDA6XHRcdHN0cnVjdCBicGZfbWFwICptYXA7XG40ODQxOlx0XG40ODQyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bWFwX2lkcl9sb2NrKTtcbjQ4NDM6XHRhZ2FpbjpcbjQ4NDQ6XHRcdG1hcCA9IGlkcl9nZXRfbmV4dChcdTAwMjZtYXBfaWRyLCBpZCk7XG40ODQ1Olx0XHRpZiAobWFwKSB7XG40ODQ2Olx0XHRcdG1hcCA9IF9fYnBmX21hcF9pbmNfbm90X3plcm8obWFwLCBmYWxzZSk7XG40ODQ3Olx0XHRcdGlmIChJU19FUlIobWFwKSkge1xuNDg0ODpcdFx0XHRcdCgqaWQpJiM0MzsmIzQzOztcbjQ4NDk6XHRcdFx0XHRnb3RvIGFnYWluO1xuNDg1MDpcdFx0XHR9XG40ODUxOlx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTIyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgQlBGIExpbmsgSXRlcmF0b3IgUmFjZSBDb25kaXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YC4gIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXaHkgYXJlIHRoZXkgYWRkaW5nIHRoaXMgY2hlY2sgZm9yIGBsaW5rLSZndDtpZGA/JiMzNDsuIEkgc2VlIHRoZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmQgdGhlIGNvcmUgZGlmZmVyZW5jZSBpcyB0aGlzIGFkZGVkIGNvbmRpdGlvbmFsOiBgaWYgKGxpbmstJmd0O2lkKWAuICBUaGF0IHNpZ25hbHMgYSByYWNlIGNvbmRpdGlvbiBvciBzb21lIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGhvdyBsaW5rcyBhcmUgYmVpbmcgaGFuZGxlZCBkdXJpbmcgY3JlYXRpb24gYW5kIGl0ZXJhdGlvbi4KCk15IGV4cGVydGlzZSBpbW1lZGlhdGVseSB0ZWxscyBtZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGxpbmsgY3JlYXRpb24gcHJvY2Vzcy4gIEkgc2VlIHRoYXQgYGJwZl9saW5rX3ByaW1lYCBhbGxvY2F0ZXMgYW4gSUQgaW4gdGhlIGBsaW5rX2lkcmAsIGJ1dCBjcnVjaWFsbHksIGl0ICpkb2VzbiYjMzk7dCogaW1tZWRpYXRlbHkgc2V0IHRoZSBgbGluay0mZ3Q7aWRgIGZpZWxkIGl0c2VsZi4gVGhhdCYjMzk7cyBvbmx5IGhhcHBlbmluZyBpbiBgYnBmX2xpbmtfc2V0dGxlKClgLiAgVGhpcyBpcyB0aGUga2V5LiAgQmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zLCB0aGVyZSYjMzk7cyBhIHdpbmRvdyBvZiB2dWxuZXJhYmlsaXR5LgoKSWYgYSBCUEYgbGluayBpdGVyYXRvciDigJMgdGhlIHBhcnQgb2YgdGhlIGtlcm5lbCByZXNwb25zaWJsZSBmb3IgdHJhdmVyc2luZyB0aGVzZSBsaW5rcyDigJMgaXMgcnVubmluZyBjb25jdXJyZW50bHksIGl0IGNvdWxkIHBvdGVudGlhbGx5IHBpY2sgdXAgYSBsaW5rIHdob3NlIGBpZGAgaGFzbiYjMzk7dCBiZWVuIHNldCB5ZXQgKGkuZS4sIGBsaW5rLSZndDtpZGAgaXMgc3RpbGwgMCkuIFRoaXMgKmlzKiBhIHJhY2UgY29uZGl0aW9uLiBJbiBgYnBmX2xpbmtfYnlfaWRgLCB0aGUgY29kZSBhbHJlYWR5IGhhbmRsZWQgdGhpcy4gSWYgYGxpbmstJmd0O2lkYCBpcyAwLCBpdCBrbm93cyB0byB0cmVhdCB0aGUgbGluayBhcyBpZiBpdCBkb2VzbiYjMzk7dCBleGlzdC4gTm93LCBpdCBzZWVtcywgdGhhdCYjMzk7cyBiZWluZyBleHRlbmRlZCB0byB0aGUgaXRlcmF0b3IuCgpNeSBicmFpbiBpcyByYWNpbmcsIHRoaW5raW5nIG9mIHRoZSBjb25zZXF1ZW5jZXMuICBJZiB0aGUgaXRlcmF0b3IgZ3JhYnMgYSBsaW5rIHdpdGggYGxpbmstJmd0O2lkID09IDBgLCB0aGUgaXRlcmF0b3IgY2FuIGV4cG9zZSB0aGlzIHBhcnRpYWxseSBpbml0aWFsaXplZCBsaW5rIHRvIHVzZXJzcGFjZSBvciB0aGUgQlBGIHByb2dyYW0sIGFuZCBpdCBleHBvc2VzIHdpdGggSUQgMC4gRnVydGhlciwgSSBpbW1lZGlhdGVseSBjb25zaWRlciB3aGF0IGhhcHBlbnMgaWYgYGJwZl9saW5rX2NsZWFudXBgIHJ1bnMgKmFmdGVyKiB0aGUgaXRlcmF0b3Igc2VlcyB0aGUgdW5pbml0aWFsaXplZCBsaW5rLiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIGVudHJ5IGZyb20gdGhlIGBJRFJgIGFuZCBmcmVlcyB0aGUgZmlsZSBhbmQgZmlsZSBkZXNjcmlwdG9yLiBUaGUgZmFjdCB0aGF0IHRoZSBpdGVyYXRvciAqaW5jJiMzOTtkKiB0aGUgbGluayBpcyBub3cgY29uY2VybmluZy4gVGhlIGxpbmsgd2FzIG5vdCBmdWxseSBpbml0aWFsaXplZCEgVGhpcyBwb3RlbnRpYWxseSBpbnRyb2R1Y2VzIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uCgpUaGUgb3JpZ2luYWwgY29kZSBpbiBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgKmRpZG4mIzM5O3QqIGhhdmUgdGhpcyBjaGVjaywgbWVhbmluZyBpdCB3YXMgdnVsbmVyYWJsZS4gIFRoZSBwYXRjaCBmaXhlcyB0aGUgcmFjZSEKSSBkb24mIzM5O3QgbmVlZCB0byBzZWUgdGhlIGNvbW1pdCBtZXNzYWdlLCB0aGUgY29kZSByZXZlYWxzIHRoZSBpbnRlbnQgcGVyZmVjdGx5LiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBjcml0aWNhbCBmaXggaW4gYSBjcml0aWNhbCBrZXJuZWwgc3Vic3lzdGVtLgpUaGUgc3Vic3lzdGVtIGlzIEJQRiBjb3JlLiBUaGUgZnVuY3Rpb24gaXMgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dC4KCk5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgaXRlcmF0b3IgaXMgY3JlYXRlZCBhbmQgZXhlY3V0ZWQsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCwgYnV0IG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBhIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgQlBGIGxpbmtzIGFuZCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGl0ZXJhdGlvbiBoYXMgYmVlbiByZXNvbHZlZCBieSB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9saW5rX3NlcV9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9saW5rX2l0ZXIuYz02Nj1zdGF0aWMgdm9pZCBicGZfbGlua19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTczLVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzo3NDpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9saW5rX3NlcV9vcHMgPSB7XG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTc1LVx0LnN0YXJ0XHQ9IGJwZl9saW5rX3NlcV9zdGFydCxcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jPTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gYnBmX2xpbmtfc2VxX2luZm8gPSB7XG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jOjg0Olx0LnNlcV9vcHNcdFx0PSBcdTAwMjZicGZfbGlua19zZXFfb3BzLFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy04NS1cdC5pbml0X3NlcV9wcml2YXRlXHQ9IE5VTEwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTMxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbGlua19pdGVyLmNgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEJQRiBsaW5rIGl0ZXJhdG9yIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIHRoaW5raW5nIHRoZSBpc3N1ZSBJJiMzOTttIGNoYXNpbmcgaXMgcHJvYmFibHkgYXJvdW5kIHdoZXJlIHRoZSBsaW5rcyBhcmUgYWN0dWFsbHkgaXRlcmF0ZWQsIHdoaWNoIGlzIG9mdGVuIGEgc291cmNlIG9mIHN1YnRsZSBCUEYgcHJvZ3JhbSBlcnJvcnMuIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGtlcm5lbC9icGYvbGlua19pdGVyLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgODMuIEhvcGVmdWxseSwgdGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gd2hhdGV2ZXIgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbGlua19pdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0XHRlbHNlXG4gIDcxOlx0XHRcdGJwZl9saW5rX3B1dCgoc3RydWN0IGJwZl9saW5rICopdik7XG4gIDcyOlx0fVxuICA3MzpcdFxuICA3NDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX2xpbmtfc2VxX29wcyA9IHtcbiAgNzU6XHRcdC5zdGFydFx0PSBicGZfbGlua19zZXFfc3RhcnQsXG4gIDc2Olx0XHQubmV4dFx0PSBicGZfbGlua19zZXFfbmV4dCxcbiAgNzc6XHRcdC5zdG9wXHQ9IGJwZl9saW5rX3NlcV9zdG9wLFxuICA3ODpcdFx0LnNob3dcdD0gYnBmX2xpbmtfc2VxX3Nob3csXG4gIDc5Olx0fTtcbiAgODA6XHRcbiAgODE6XHRCVEZfSURfTElTVF9TSU5HTEUoYnRmX2JwZl9saW5rX2lkLCBzdHJ1Y3QsIGJwZl9saW5rKVxuICA4MjpcdFxuICA4MzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gYnBmX2xpbmtfc2VxX2luZm8gPSB7XG4gIDg0Olx0XHQuc2VxX29wc1x0XHQ9IFx1MDAyNmJwZl9saW5rX3NlcV9vcHMsXG4gIDg1Olx0XHQuaW5pdF9zZXFfcHJpdmF0ZVx0PSBOVUxMLFxuICA4NjpcdFx0LmZpbmlfc2VxX3ByaXZhdGVcdD0gTlVMTCxcbiAgODc6XHRcdC5zZXFfcHJpdl9zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBicGZfaXRlcl9zZXFfbGlua19pbmZvKSxcbiAgODg6XHR9O1xuICA4OTpcdFxuICA5MDpcdHN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9saW5rX3JlZ19pbmZvID0ge1xuICA5MTpcdFx0LnRhcmdldFx0XHRcdD0gXCYjMzQ7YnBmX2xpbmtcJiMzNDssXG4gIDkyOlx0XHQuY3R4X2FyZ19pbmZvX3NpemVcdD0gMSxcbiAgOTM6XHRcdC5jdHhfYXJnX2luZm9cdFx0PSB7XG4gIDk0Olx0XHRcdHsgb2Zmc2V0b2Yoc3RydWN0IGJwZl9pdGVyX19icGZfbGluaywgbGluayksXG4gIDk1Olx0XHRcdCAgUFRSX1RPX0JURl9JRF9PUl9OVUxMIH0sXG4gIDk2Olx0XHR9LFxuICA5NzpcdFx0LnNlcV9pbmZvXHRcdD0gXHUwMDI2YnBmX2xpbmtfc2VxX2luZm8sXG4gIDk4Olx0fTtcbiAgOTk6XHRcbiAxMDA6XHRzdGF0aWMgaW50IF9faW5pdCBicGZfbGlua19pdGVyX2luaXQodm9pZClcbiAxMDE6XHR7XG4gMTAyOlx0XHRicGZfbGlua19yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gKmJ0Zl9icGZfbGlua19pZDtcbiAxMDM6XHRcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFx1MDAyNmJwZl9saW5rX3JlZ19pbmZvKTtcbiAxMDQ6XHR9XG4gMTA1Olx0XG4gMTA2Olx0bGF0ZV9pbml0Y2FsbChicGZfbGlua19pdGVyX2luaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk1NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgQlBGIEl0ZXJhdG9ycyoqCgpPa2F5LCBzbyBCUEYgaXRlcmF0b3JzIGFyZSBjcmVhdGVkIHVzaW5nIGBicGYoQlBGX0xJTktfQ1JFQVRFKWAgd2l0aCB0aGUgYEJQRl9UUkFDRV9JVEVSYCBvcHRpb24sIGdlbmVyYXRpbmcgYSBgc2VxX2ZpbGVgLiBUaGF0IG1lYW5zIHVzZXJzcGFjZSBjYW4gYWNjZXNzIHRoaXMgdGhyb3VnaCBhIHN0YW5kYXJkIGByZWFkKDIpYCBjYWxsIC0gdGhhdCYjMzk7cyBleGNlbGxlbnQhIFRoaXMgb3BlbnMgdXAgYSB3aG9sZSBuZXcgYXJlYSBvZiBvYnNlcnZhYmlsaXR5IGFuZCBtYW5pcHVsYXRpb24uIE5vdywgYmVmb3JlIEkgZ2V0IHRvbyBleGNpdGVkLCBsZXQmIzM5O3Mgc2VlIGlmIHN5emthbGxlciBoYXMgc3VwcG9ydCBmb3IgZnV6emVyIG9yIGFueSBjb3ZlcmFnZSBmb3IgQlBGIGl0ZXJhdG9ycywgb3IgaWYgaXQgY2FuIGJlIGZ1enplZCB1c2luZyB0aGlzIG1ldGhvZC4gWWVzLCBncmVhdCwgaXQgbG9va3MgbGlrZSBzeXprYWxsZXIgb2ZmZXJzIGNvbXByZWhlbnNpdmUgQlBGIHN5c2NhbGwgY292ZXJhZ2UsIGluY2x1ZGluZyBgYnBmJEJQRl9MSU5LX0NSRUFURWAgYW5kIHRoZSBvdGhlciBrZXkgb25lcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gVG8gY29uZmlybSBldmVyeXRoaW5nLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYGtlcm5lbC9icGYvbGlua19pdGVyLmNgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIGVuc3VyZSB0aGV5JiMzOTtyZSBjb3JyZWN0bHkgZW5hYmxlZC4gSSB3aWxsIGFsc28gaGF2ZSB0byBsb29rIGluIGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBjb25maXJtIHdoZXJlIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gcGxhY2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaW5rX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vIGRpYWdub3N0aWNzLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG4tLVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYz05MD1zdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfbGlua19yZWdfaW5mbyA9IHtcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTk5LVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzoxMDA6c3RhdGljIGludCBfX2luaXQgYnBmX2xpbmtfaXRlcl9pbml0KHZvaWQpXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTEwMS17XG4tLVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0xMDUtXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jOjEwNjpsYXRlX2luaXRjYWxsKGJwZl9saW5rX2l0ZXJfaW5pdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzA1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS2VybmVsIENvbXBpbGF0aW9uIE11c2luZ3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYnVpbGQgcHJvY2VzcyBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgb2JqZWN0IGZpbGVzIGBzeXNjYWxsLm9gLCBgLi4uYCwgYW5kIGBsaW5rX2l0ZXIub2AgYXJlIGJlaW5nIGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBzZXR0aW5nLiBSaWdodCwgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIHRoZSAqb25seSogcmVxdWlyZWQgY29uZmlnLCBiZWNhdXNlIHRoaW5ncyBpbiB0aGUga2VybmVsIGNhbiBnZXQuLi5jb21wbGV4LgoKTm93LCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgYEJQRl9TWVNDQUxMYCB1c3VhbGx5IHJpZGVzIG9uIHRoZSBjb2F0dGFpbHMgb2YgYEJQRmAuIExldCYjMzk7cyBjb25maXJtIHRoYXQgZGVwZW5kZW5jeSDigJMgZG91YmxlLWNoZWNraW5nIGlzIGFsd2F5cyBnb29kIHByYWN0aWNlLiBUaW1lIHRvIGdvIHBlZWsgaW50byBga2VybmVsL2JwZi9LY29uZmlnYCBhbmQgbWFrZSBzdXJlIG15IG1lbW9yeSBzZXJ2ZXMgbWUgY29ycmVjdGx5IGFuZCBjb25maXJtIGFueSBvdGhlciByZWxldmFudCBzZXR0aW5ncyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgbG9vayBpbnRvIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvbmZpZ3VyYXRpb24uIEkgcmVtZW1iZXIgd29ya2luZyB3aXRoIGBLY29uZmlnYCBmaWxlcyBiZWZvcmU7IHRoZXkmIzM5O3JlIHRoZSBicmVhZCBhbmQgYnV0dGVyIGZvciBjb250cm9sbGluZyBrZXJuZWwgZmVhdHVyZXMuIExldCYjMzk7cyBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLCBJJiMzOTttIHRoaW5raW5nIHNvbWV3aGVyZSBhcm91bmQgbGluZSAyNy4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGRlYWwgd2l0aCB0aGUgY29yZSBlbmFibGluZyBvcHRpb25zIGZvciBCUEYsIG9yIHBlcmhhcHMgY29uZmlndXJhdGlvbiBvZiBzb21lIG9mIHRoZSBCUEYgc3Vic3lzdGVtcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLiBGcm9tIGhlcmUgSSYjMzk7bGwgc2VlIHdoYXQgdGhlIG9wdGlvbnMgYXJlIGFuZCB3aGF0IG15IHVuZGVyc3RhbmRpbmcgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzgzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQlBGIFN5c2NhbGwgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBgQlBGX1NZU0NBTExgIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQgZG9lc24mIzM5O3QgaGF2ZSBhbnkgZXhwbGljaXQgYGRlcGVuZHMgb25gIHJlcXVpcmVtZW50cywgYnV0IGl0ICpkb2VzKiBzZWxlY3QgQlBGLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgc2ltcGxpZmllcyB0aGluZ3Mgc29tZXdoYXQuIE5vdywgSSBuZWVkIHRvIGludmVzdGlnYXRlIGEgc3BlY2lmaWMgZnVuY3Rpb246IGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YC4gSSYjMzk7bSBjdXJpb3VzIGlmIGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBtYXliZSBiZWhpbmQgc29tZSBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlOyBzcGVjaWZpY2FsbHksIGxldCBtZSBqdW1wIHRvIGxpbmUgNjAzNyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgdGhhdCBsaW5lLCBqdXN0IHRvIGdldCBhIGJyb2FkZXIgY29udGV4dCBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4gQWxyaWdodCwgSSYjMzk7bSByZWFkaW5nIHRoZSBjb2RlIG5vdy4uLiBsZXQmIzM5O3Mgc2VlLCBpcyBpdCBpbnNpZGUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2Nrcz8gSSBuZWVkIHRvIGNoZWNrIGNhcmVmdWxseSwgc28gSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhhdCBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MDEwOlx0e1xuNjAxMTpcdFx0cmV0dXJuIGF0b21pYzY0X2ZldGNoX2FkZF91bmxlc3MoXHUwMDI2bGluay1cdTAwM2VyZWZjbnQsIDEsIDApID8gbGluayA6IEVSUl9QVFIoLUVOT0VOVCk7XG42MDEyOlx0fVxuNjAxMzpcdEVYUE9SVF9TWU1CT0woYnBmX2xpbmtfaW5jX25vdF96ZXJvKTtcbjYwMTQ6XHRcbjYwMTU6XHRzdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2J5X2lkKHUzMiBpZClcbjYwMTY6XHR7XG42MDE3Olx0XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG42MDE4Olx0XG42MDE5Olx0XHRpZiAoIWlkKVxuNjAyMDpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbjYwMjE6XHRcbjYwMjI6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbjYwMjM6XHRcdC8qIGJlZm9yZSBsaW5rIGlzIFwmIzM0O3NldHRsZWRcJiMzNDssIElEIGlzIDAsIHByZXRlbmQgaXQgZG9lc24mIzM5O3QgZXhpc3QgeWV0ICovXG42MDI0Olx0XHRsaW5rID0gaWRyX2ZpbmQoXHUwMDI2bGlua19pZHIsIGlkKTtcbjYwMjU6XHRcdGlmIChsaW5rKSB7XG42MDI2Olx0XHRcdGlmIChsaW5rLVx1MDAzZWlkKVxuNjAyNzpcdFx0XHRcdGxpbmsgPSBicGZfbGlua19pbmNfbm90X3plcm8obGluayk7XG42MDI4Olx0XHRcdGVsc2VcbjYwMjk6XHRcdFx0XHRsaW5rID0gRVJSX1BUUigtRUFHQUlOKTtcbjYwMzA6XHRcdH0gZWxzZSB7XG42MDMxOlx0XHRcdGxpbmsgPSBFUlJfUFRSKC1FTk9FTlQpO1xuNjAzMjpcdFx0fVxuNjAzMzpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG42MDM0Olx0XHRyZXR1cm4gbGluaztcbjYwMzU6XHR9XG42MDM2Olx0XG42MDM3Olx0c3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpXG42MDM4Olx0e1xuNjAzOTpcdFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuNjA0MDpcdFxuNjA0MTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xuNjA0MjpcdGFnYWluOlxuNjA0MzpcdFx0bGluayA9IGlkcl9nZXRfbmV4dChcdTAwMjZsaW5rX2lkciwgaWQpO1xuNjA0NDpcdFx0aWYgKGxpbmspIHtcbjYwNDU6XHRcdFx0aWYgKGxpbmstXHUwMDNlaWQpXG42MDQ2Olx0XHRcdFx0bGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTtcbjYwNDc6XHRcdFx0ZWxzZVxuNjA0ODpcdFx0XHRcdGxpbmsgPSBFUlJfUFRSKC1FQUdBSU4pO1xuNjA0OTpcdFx0XHRpZiAoSVNfRVJSKGxpbmspKSB7XG42MDUwOlx0XHRcdFx0KCppZCkmIzQzOyYjNDM7O1xuNjA1MTpcdFx0XHRcdGdvdG8gYWdhaW47XG42MDUyOlx0XHRcdH1cbjYwNTM6XHRcdH1cbjYwNTQ6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xuNjA1NTpcdFxuNjA1NjpcdFx0cmV0dXJuIGxpbms7XG42MDU3Olx0fVxuNjA1ODpcdFxuNjA1OTpcdCNkZWZpbmUgQlBGX0xJTktfR0VUX0ZEX0JZX0lEX0xBU1RfRklFTEQgbGlua19pZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg2MQoJCQkJCQkJb3V0cHV0OiAxNTcKCQkJCQkJCXRob3VnaHRzOiA4MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGZvciBGb2N1cyBTeW1ib2wgRGV0ZXJtaW5hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbWFraW5nIHN1cmUgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjb3JyZWN0LiBGaXJzdCB0aGluZyBJIG5vdGljZWQgaXMgdGhhdCB0aGVyZSBhcmUgbm8gYCNpZmRlZmAgZ3VhcmRzIGFyb3VuZCBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAsIHdoaWNoIGlzIHJlbGV2YW50IHRvIG15IGFuYWx5c2lzLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCBzeW1ib2xzIHdlIHNob3VsZCBpbmNsdWRlLgoKVGhlIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGlzIGRlZmluaXRlbHkgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgLiAgSSBjaGVja2VkIGl0cyBjYWxsZXJzOyB0aGV5IGFyZSBgYnBmX2xpbmtfc2VxX3N0YXJ0YCBhbmQgYGJwZl9saW5rX3NlcV9uZXh0YC4gSW1wb3J0YW50bHksIEkgc2VlIHRoYXQgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGlzIGEgbm9uLXN0YXRpYywgZXhwb3J0ZWQgc3ltYm9sIGluIGB2bWxpbnV4YC4KCkkgdGhlbiBkb3VibGUgY2hlY2tlZCwgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGlzIG5vdCBzdGF0aWMsIHdoaWxlIGl0cyBjYWxsZXJzLCBgYnBmX2xpbmtfc2VxX3N0YXJ0YCBhbmQgYGJwZl9saW5rX3NlcV9uZXh0YCwgYXJlIHN0YXRpYyBgc2VxX29wZXJhdGlvbnNgIGluIGBrZXJuZWwvYnBmL2xpbmtfaXRlci5jYC4gSSBjb25zaWRlcmVkIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYGJwZl9saW5rX3NldHRsZWAsIGBicGZfbGlua19wcmltZWAsIGBicGZfbGlua19hbGxvY19pZGAsIGFuZCBgYnBmX2xpbmtfYnlfaWRgLCBidXQgSSBjb25maXJtZWQgdGhhdCBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgaXMgc3BlY2lmaWMgdG8gdGhlIEJQRiBsaW5rIGl0ZXJhdGlvbiBsb2dpYywgc28gSSBjYW4gZXhjbHVkZSB0aGVtLgoKSSB0aGVuIHJldmlzaXRlZCB0aGUgc2VjdGlvbiA0IGd1aWRlbGluZXMuIFRoZXkgZW1waGFzaXplIGxpc3RpbmcgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhbHRlcmVkIG9yIGRpcmVjdCBBUEkgZW50cnkgcG9pbnRzLCB3aGlsZSBhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuICBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgaXMsIGluIGZhY3QsIHRoZSBmdW5jdGlvbiBiZWluZyBhbHRlcmVkLiBBbmQgdGhlIGNhbGxlcnMgYXJlIGBicGZfbGlua19zZXFfc3RhcnRgIGFuZCBgYnBmX2xpbmtfc2VxX25leHRgLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIGRpZCBhIGBncmVwYCBzZWFyY2guIEFuZCwgeXVwLCB0aGUgb25seSBjYWxscyB0byBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgYXJlIGluIGBrZXJuZWwvYnBmL2xpbmtfaXRlci5jOjE4YCBhbmQgYGtlcm5lbC9icGYvbGlua19pdGVyLmM6MzRgLiBTbyB0aG9zZSB0aHJlZSBhcmUgdGhlIHJlbGV2YW50IHN5bWJvbHMuCgpOZXh0LCBJIGxvb2tlZCBhdCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiBJdCYjMzk7cyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIChga2VybmVsL2JwZi9zeXNjYWxsLmNgKSwgYW5kIGl0IG1vZGlmaWVzIGxpbmsgcmV0cmlldmFsIGxvZ2ljIGR1cmluZyBpdGVyYXRpb24gdG8gc2tpcCB1bnNldHRsZWQgbGlua3MuIFRoYXQgbWFrZXMgaXQgZnV6emluZy1yZWxldmFudC4gIEkgY29uZmlybWVkICYjMzQ7V29ydGhGdXp6aW5nOiB0cnVlJiMzNDsuCgpJIHRoZW4gbG9va2VkIGF0IHRoZSBlbmFibGUgY29uZmlndXJhdGlvbnMsIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIHByaW1hcnkgY29uZmlnIG5lZWRlZCBmb3IgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgYGtlcm5lbC9icGYvbGlua19pdGVyLmNgLiBXaGlsZSBgQlBGYCBpcyBzZWxlY3RlZCBieSBgQlBGX1NZU0NBTExgLCBleHBsaWNpdGx5IHNwZWNpZnlpbmcgYEJQRl9TWVNDQUxMYCAoYW5kIGBCUEZgIGlmIGRlc2lyZWQpIGlzIGlkZWFsLiAgYEJQRl9TWVNDQUxMYCBpcyB0aGUgc3RhbmRhcmQgZmxhZy4KCk5vdyB0byBmaW5hbGl6ZSB0aGUgYEZvY3VzU3ltYm9sc2A6CiogICBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAKKiAgIGBicGZfbGlua19zZXFfc3RhcnRgCiogICBgYnBmX2xpbmtfc2VxX25leHRgCgpJIHdlbnQgYmFjayBvbmUgbW9yZSB0aW1lLCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZnVuY3Rpb25zIHRvIGFkZCBvciBpZiB0aGUgZXhpc3Rpbmcgb25lcyBhcmUgcGVyZmVjdC4gVGhlc2UgdGhyZWUgYXJlIHRoZSBvbmx5IGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IHBpbnBvaW50IHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIG1vZGlmaWVkIGFuZCBpdHMgaXRlcmF0aW9uIGVudHJ5cG9pbnRzLgoKQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0IGFuZCBpcyB2ZXJpZmllZC4gTm93IEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfbGlua19zZXFfc3RhcnQmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2VxX25leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpIGluIGtlcm5lbC9icGYvc3lzY2FsbC5jIHRvIGNoZWNrIGlmIGxpbmstXHUwMDNlaWQgaXMgbm9uLXplcm8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQsIHJldHVybmluZyAtRUFHQUlOIG90aGVyd2lzZSBzbyB0aGUgaXRlcmF0aW9uIHNraXBzIHVuc2V0dGxlZCBsaW5rcy4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBCUEYgaXRlcmF0b3IgY29kZSBwYXRocyAoYnBmX2xpbmsgaXRlcmF0b3IpIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCYjMzQ7LAogICAgJiMzNDticGZfbGlua19zZXFfc3RhcnQmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2VxX25leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpIGluIGtlcm5lbC9icGYvc3lzY2FsbC5jIHRvIGNoZWNrIGlmIGxpbmstXHUwMDNlaWQgaXMgbm9uLXplcm8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQsIHJldHVybmluZyAtRUFHQUlOIG90aGVyd2lzZSBzbyB0aGUgaXRlcmF0aW9uIHNraXBzIHVuc2V0dGxlZCBsaW5rcy4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBCUEYgaXRlcmF0b3IgY29kZSBwYXRocyAoYnBmX2xpbmsgaXRlcmF0b3IpIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIHZlcmlmeSB0aGF0IGBsaW5rLVx1MDAzZWlkYCBpcyBub24temVybyBiZWZvcmUgaW5jcmVtZW50aW5nIHRoZSBsaW5rIHJlZmNvdW50IGFuZCByZXR1cm5pbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGxpbmsgaXRlcmF0b3IgZnJvbSByZXR1cm5pbmcgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgb3IgdW5zZXR0bGVkIEJQRiBsaW5rIHRoYXQgd2FzIGFsbG9jYXRlZCBhbiBJRCBpbiBgbGlua19pZHJgIGJ1dCBoYXMgbm90IHlldCBiZWVuIHNldHRsZWQgdmlhIGBicGZfbGlua19zZXR0bGUoKWAuXG5cbmBsaW5rLVx1MDAzZWlkYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gMCBpbiBgYnBmX2xpbmtfaW5pdF9zbGVlcGFibGUoKWAgZHVyaW5nIGxpbmsgYWxsb2NhdGlvbiBhbmQgc2V0IHRvIGl0cyBJRCBvbmx5IHVwb24gYGJwZl9saW5rX3NldHRsZSgpYC4gVGhpcyBjaGFuZ2Ugb25seSBjaGVja3MgYW4gYWxyZWFkeS1pbml0aWFsaXplZCBmaWVsZCAoYGxpbmstXHUwMDNlaWRgKSB0byBoYW5kbGUgbGluayBsaWZlY3ljbGUvY29uY3VycmVuY3kgc3RhdGUsIGFuZCBkb2VzIG5vdCB0b3VjaCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NTVlMDI4MmJiMDBlZGVlY2ZmN2JhY2NhMjM4OTIxYWI4MzljNmI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMjA6MTA6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDg1M2I0N2Y4MTM4NDIuLjI0NGE5MzliOWQyZGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC02MDQyLDcgJiM0Mzs2MDQyLDEwIEBAIHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKQogYWdhaW46CiAJbGluayA9IGlkcl9nZXRfbmV4dCgmYW1wO2xpbmtfaWRyLCBpZCk7CiAJaWYgKGxpbmspIHsKLQkJbGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTsKJiM0MzsJCWlmIChsaW5rLSZndDtpZCkKJiM0MzsJCQlsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspOwomIzQzOwkJZWxzZQomIzQzOwkJCWxpbmsgPSBFUlJfUFRSKC1FQUdBSU4pOwogCQlpZiAoSVNfRVJSKGxpbmspKSB7CiAJCQkoKmlkKSYjNDM7JiM0Mzs7CiAJCQlnb3RvIGFnYWluOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBMaW5rIElEUiBJdGVyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgZnVuY3Rpb24gYXJvdW5kIGxpbmUgNjA0Mi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBzZWN0aW9uIGlzIHJlbGF0ZWQgdG8gaXRlcmF0aW5nIHRocm91Z2ggdGhlIGBicGZfbGlua2Agb2JqZWN0cyBzdG9yZWQgaW4gdGhlIGBsaW5rX2lkcmAgKElEUiAtIElEIFJhZGl4IFRyZWUpLgoKVGhlIGNvZGUgc25pcHBldCBzZWVtcyB0byBiZSBkZWFsaW5nIHdpdGggYSBsb29wIHVzaW5nIGBpZHJfZ2V0X25leHRgLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIHRyeWluZyB0byBmaW5kIHRoZSBuZXh0IGF2YWlsYWJsZSBgYnBmX2xpbmtgIGdpdmVuIGFuIElELiBUaGUgYGJwZl9saW5rX2luY19ub3RfemVyb2AgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgbGluayBpZiBpdCYjMzk7cyBmb3VuZC4gVGhlIGFkZGVkIGBpZiAobGluay0mZ3Q7aWQpYCBjaGVjayBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgY29uZGl0aW9uOiAgaWYgYSBgYnBmX2xpbmtgJiMzOTtzIElEIGlzICpub3QqIHNldCAoaS5lLiwgYGxpbmstJmd0O2lkYCBpcyAwKSwgdGhlbiBpdCByZXR1cm5zIGAtRUFHQUlOYCBhbmQgc2tpcHMgdGhhdCBsaW5rIGR1cmluZyBpdGVyYXRpb24uCgpNeSBodW5jaCBpcyB0aGF0IHRoaXMgaXMgcmVsYXRlZCB0byBhIHJhY2UgY29uZGl0aW9uIG9yIGEgdGVtcG9yYXJ5IHN0YXRlIHdoZXJlIGEgYGJwZl9saW5rYCBpcyBiZWluZyBjcmVhdGVkL2Rlc3Ryb3llZC4gSWYgdGhlIGBsaW5rLSZndDtpZGAgaXMgemVybywgdGhlbiBtYXliZSBpdCBtZWFucyB0aGUgbGluayBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlIGFuZCBub3QgcmVhZHkgdG8gYmUgdXNlZCBvciB0aGUgYGlkcmAgbWlnaHQgc3RpbGwgaGF2ZSBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBlbGVtZW50LiBSZXR1cm5pbmcgYC1FQUdBSU5gIHNpZ25hbHMgdG8gdGhlIGNhbGxlciB0byB0cnkgYWdhaW4sIHBvdGVudGlhbGx5IHNraXBwaW5nIG92ZXIgYW4gaW5jb21wbGV0ZSBlbnRyeSBpbiB0aGUgSURSLgoKTGV0JiMzOTtzIHVzZSBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgbGluZSA2MDQyIGFuZCBzZWUgaWYgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHB1cnBvc2Ugb2YgdGhlIGl0ZXJhdGlvbiBhbmQgdGhlIGAtRUFHQUlOYCBlcnJvciBhcmUgY29ycmVjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyogdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHdoeSB0aGlzIGNoZWNrIHdhcyBpbnRyb2R1Y2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MDI1Olx0XHRpZiAobGluaykge1xuNjAyNjpcdFx0XHRpZiAobGluay1cdTAwM2VpZClcbjYwMjc6XHRcdFx0XHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xuNjAyODpcdFx0XHRlbHNlXG42MDI5Olx0XHRcdFx0bGluayA9IEVSUl9QVFIoLUVBR0FJTik7XG42MDMwOlx0XHR9IGVsc2Uge1xuNjAzMTpcdFx0XHRsaW5rID0gRVJSX1BUUigtRU5PRU5UKTtcbjYwMzI6XHRcdH1cbjYwMzM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xuNjAzNDpcdFx0cmV0dXJuIGxpbms7XG42MDM1Olx0fVxuNjAzNjpcdFxuNjAzNzpcdHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxuNjAzODpcdHtcbjYwMzk6XHRcdHN0cnVjdCBicGZfbGluayAqbGluaztcbjYwNDA6XHRcbjYwNDE6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbjYwNDI6XHRhZ2FpbjpcbjYwNDM6XHRcdGxpbmsgPSBpZHJfZ2V0X25leHQoXHUwMDI2bGlua19pZHIsIGlkKTtcbjYwNDQ6XHRcdGlmIChsaW5rKSB7XG42MDQ1Olx0XHRcdGlmIChsaW5rLVx1MDAzZWlkKVxuNjA0NjpcdFx0XHRcdGxpbmsgPSBicGZfbGlua19pbmNfbm90X3plcm8obGluayk7XG42MDQ3Olx0XHRcdGVsc2VcbjYwNDg6XHRcdFx0XHRsaW5rID0gRVJSX1BUUigtRUFHQUlOKTtcbjYwNDk6XHRcdFx0aWYgKElTX0VSUihsaW5rKSkge1xuNjA1MDpcdFx0XHRcdCgqaWQpJiM0MzsmIzQzOztcbjYwNTE6XHRcdFx0XHRnb3RvIGFnYWluO1xuNjA1MjpcdFx0XHR9XG42MDUzOlx0XHR9XG42MDU0Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbjYwNTU6XHRcbjYwNTY6XHRcdHJldHVybiBsaW5rO1xuNjA1NzpcdH1cbjYwNTg6XHRcbjYwNTk6XHQjZGVmaW5lIEJQRl9MSU5LX0dFVF9GRF9CWV9JRF9MQVNUX0ZJRUxEIGxpbmtfaWRcbjYwNjA6XHRcbjYwNjE6XHRzdGF0aWMgaW50IGJwZl9saW5rX2dldF9mZF9ieV9pZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbjYwNjI6XHR7XG42MDYzOlx0XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG42MDY0Olx0XHR1MzIgaWQgPSBhdHRyLVx1MDAzZWxpbmtfaWQ7XG42MDY1Olx0XHRpbnQgZmQ7XG42MDY2Olx0XG42MDY3Olx0XHRpZiAoQ0hFQ0tfQVRUUihCUEZfTElOS19HRVRfRkRfQllfSUQpKVxuNjA2ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjYwNjk6XHRcbjYwNzA6XHRcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbjYwNzE6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjYwNzI6XHRcbjYwNzM6XHRcdGxpbmsgPSBicGZfbGlua19ieV9pZChpZCk7XG42MDc0Olx0XHRpZiAoSVNfRVJSKGxpbmspKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTUwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgYnBmX2xpbmtfYnlfaWRgKioKCk9rYXksIHRpbWUgdG8gZ2V0IGludG8gdGhlIHdlZWRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGEgQlBGIGxpbmsgSUQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgYnBmX2xpbmtfYnlfaWRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGxldCYjMzk7cyBncmFiIHRoZSByZWxldmFudCBjb2RlIGJsb2NrLCBsaW5lcyA2MDEwLTYwMzUuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYW5kLCBjcnVjaWFsbHksIHRyYWNlIGJhY2sgaG93IGBsaW5rLSZndDtpZGAgZ2V0cyBwb3B1bGF0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHNvdXJjZSBvZiB0aGUgbGluayBJRCBpcyBnb2luZyB0byBiZSBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjAxMDpcdHtcbjYwMTE6XHRcdHJldHVybiBhdG9taWM2NF9mZXRjaF9hZGRfdW5sZXNzKFx1MDAyNmxpbmstXHUwMDNlcmVmY250LCAxLCAwKSA/IGxpbmsgOiBFUlJfUFRSKC1FTk9FTlQpO1xuNjAxMjpcdH1cbjYwMTM6XHRFWFBPUlRfU1lNQk9MKGJwZl9saW5rX2luY19ub3RfemVybyk7XG42MDE0Olx0XG42MDE1Olx0c3RydWN0IGJwZl9saW5rICpicGZfbGlua19ieV9pZCh1MzIgaWQpXG42MDE2Olx0e1xuNjAxNzpcdFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuNjAxODpcdFxuNjAxOTpcdFx0aWYgKCFpZClcbjYwMjA6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG42MDIxOlx0XG42MDIyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG42MDIzOlx0XHQvKiBiZWZvcmUgbGluayBpcyBcJiMzNDtzZXR0bGVkXCYjMzQ7LCBJRCBpcyAwLCBwcmV0ZW5kIGl0IGRvZXNuJiMzOTt0IGV4aXN0IHlldCAqL1xuNjAyNDpcdFx0bGluayA9IGlkcl9maW5kKFx1MDAyNmxpbmtfaWRyLCBpZCk7XG42MDI1Olx0XHRpZiAobGluaykge1xuNjAyNjpcdFx0XHRpZiAobGluay1cdTAwM2VpZClcbjYwMjc6XHRcdFx0XHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xuNjAyODpcdFx0XHRlbHNlXG42MDI5Olx0XHRcdFx0bGluayA9IEVSUl9QVFIoLUVBR0FJTik7XG42MDMwOlx0XHR9IGVsc2Uge1xuNjAzMTpcdFx0XHRsaW5rID0gRVJSX1BUUigtRU5PRU5UKTtcbjYwMzI6XHRcdH1cbjYwMzM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xuNjAzNDpcdFx0cmV0dXJuIGxpbms7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJQRiBMaW5rIElEIE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIEJQRiBsaW5rIElEIGhhbmRsaW5nLiBGaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgYnBmX2xpbmtfYnlfaWRgIGhhbmRsZXMgbGluayBsb29rdXBzLiBJdCBzZWVtcyBsaWtlIHRoZSBJRCBpcyBjaGVja2VkLCBhbmQgaWYgaXQmIzM5O3MgemVybywgdGhlIGxpbmsgaXMgY29uc2lkZXJlZCAmIzM0O3Vuc2V0dGxlZCYjMzQ7IGFuZCBkb2VzbiYjMzk7dCBleGlzdCB5ZXQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJZiBgbGluay0mZ3Q7aWRgIGlzIHplcm8sIHdlIHJldHVybiBgLUVBR0FJTmAuIE90aGVyd2lzZSwgd2UgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRlciB1c2luZyBgYnBmX2xpbmtfaW5jX25vdF96ZXJvYC4KCk5leHQsIEkgc2VlIGEgY29tcGFyaXNvbiB3aXRoIGhvdyBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgaGFuZGxlZCB0aGluZ3MgcHJldmlvdXNseSwgYW5kIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgYWRkaXRpb24gb2YgYSBzaW1pbGFyIGNoZWNrIGZvciBgbGluay0mZ3Q7aWRgICpiZWZvcmUqIHRoZSByZWZlcmVuY2UgY291bnQgaXMgaW5jcmVtZW50ZWQuIElmIGl0JiMzOTtzIHplcm8sIHdlIHJldHVybiBgLUVBR0FJTmAsIGFuZCByZXRyeS4gVGhpcyBsb29rcyBsaWtlIGEgcmFjZSBjb25kaXRpb24gcHJvdGVjdGlvbiwgb3IgcG9zc2libHkgYW4gYXR0ZW1wdCB0byBwcmV2ZW50IGdyYWJiaW5nIGFuIGluLWZsaWdodCBsaW5rLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IHRoZSBJRCBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCAmIzM0O3NldHRsZWQuJiMzNDsgTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhhdCBgYnBmX2xpbmtfYWxsb2NfaWRgIGFuZCBgYnBmX2xpbmtfc2V0dGxlYCBhcmUgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBoZXJlLCBhbmQgSSYjMzk7bGwgdXNlIGBncmVwYCB0byBmaW5kIHRoZW0gaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBzZWUgaG93IHRob3NlIG9wZXJhdGlvbnMgaW50ZXJhY3Qgd2l0aCBgbGlua19pZHJgLiBUaGF0IHNob3VsZCBnaXZlIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlua19pZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz02ND1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1hcF9pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NTpzdGF0aWMgREVGSU5FX0lEUihsaW5rX2lkcik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NjpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjctXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzI1OT1zdGF0aWMgdm9pZCBicGZfbGlua19mcmVlX2lkKGludCBpZClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjYzLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzI2NDpcdHNwaW5fbG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNjU6XHRpZHJfcmVtb3ZlKFx1MDAyNmxpbmtfaWRyLCBpZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjY2Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjY3LX1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNDc2PXN0YXRpYyBpbnQgYnBmX2xpbmtfYWxsb2NfaWQoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0ODAtXHRpZHJfcHJlbG9hZChHRlBfS0VSTkVMKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0ODE6XHRzcGluX2xvY2tfYmgoXHUwMDI2bGlua19pZHJfbG9jayk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDgyOlx0aWQgPSBpZHJfYWxsb2NfY3ljbGljKFx1MDAyNmxpbmtfaWRyLCBsaW5rLCAxLCBJTlRfTUFYLCBHRlBfQVRPTUlDKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0ODM6XHRzcGluX3VubG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0ODQtXHRpZHJfcHJlbG9hZF9lbmQoKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDg5LS8qIFByZXBhcmUgYnBmX2xpbmsgdG8gYmUgZXhwb3NlZCB0byB1c2VyLXNwYWNlIGJ5IGFsbG9jYXRpbmcgYW5vbl9pbm9kZSBmaWxlLFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ5MDogKiByZXNlcnZpbmcgdW51c2VkIEZEIGFuZCBhbGxvY2F0aW5nIElEIGZyb20gbGlua19pZHIuIFRoaXMgaXMgdG8gYmUgcGFpcmVkXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDkxLSAqIHdpdGggYnBmX2xpbmtfc2V0dGxlKCkgdG8gaW5zdGFsbCBGRCBhbmQgSUQgYW5kIGV4cG9zZSBicGZfbGluayB0b1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM1MzM9aW50IGJwZl9saW5rX3NldHRsZShzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyICpwcmltZXIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzNS1cdC8qIG1ha2UgYnBmX2xpbmsgZmV0Y2hhYmxlIGJ5IElEICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTM2Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzNy1cdHByaW1lci1cdTAwM2VsaW5rLVx1MDAzZWlkID0gcHJpbWVyLVx1MDAzZWlkO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUzODpcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzOS1cdC8qIG1ha2UgYnBmX2xpbmsgZmV0Y2hhYmxlIGJ5IEZEICovXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjAxNT1zdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2J5X2lkKHUzMiBpZClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDIxLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyMjpcdHNwaW5fbG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjMtXHQvKiBiZWZvcmUgbGluayBpcyBcJiMzNDtzZXR0bGVkXCYjMzQ7LCBJRCBpcyAwLCBwcmV0ZW5kIGl0IGRvZXNuJiMzOTt0IGV4aXN0IHlldCAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyNDpcdGxpbmsgPSBpZHJfZmluZChcdTAwMjZsaW5rX2lkciwgaWQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyNS1cdGlmIChsaW5rKSB7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAzMi1cdH1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMzM6XHRzcGluX3VubG9ja19iaChcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMzQtXHRyZXR1cm4gbGluaztcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MDM3PXN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNDAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDQxOlx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjA0Mi1hZ2Fpbjpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwNDM6XHRsaW5rID0gaWRyX2dldF9uZXh0KFx1MDAyNmxpbmtfaWRyLCBpZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDQ0LVx0aWYgKGxpbmspIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDUzLVx0fVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjA1NDpcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpbmtfaWRyX2xvY2spO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjA1NS1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzA2PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDU0LVx0XHRlcnIgPSBicGZfb2JqX2dldF9uZXh0X2lkKFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDU1Olx0XHRcdFx0XHQgIFx1MDAyNmxpbmtfaWRyLCBcdTAwMjZsaW5rX2lkcl9sb2NrKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NTYtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTkzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIFVzYWdlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgLiBVbmRlcnN0YW5kaW5nIHdoZXJlIGl0JiMzOTtzICp1c2VkKiB3aWxsIGdpdmUgbWUgY3JpdGljYWwgaW5zaWdodHMgaW50byBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGguIEtub3dpbmcgdGhlIHNwZWNpZmljIGNvbnRleHRzIHdpbGwgaGVscCBtZSByYXBpZGx5IHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVudCBzY2VuYXJpb3MgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBlbXBsb3llZC4gSXMgaXQgZm9yIGVudW1lcmF0aW9uLCBpdGVyYXRpb24sIHNvbWUgZm9ybSBvZiBzdGF0ZSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gbGlua3MsIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgZXhwbG9yYXRpb24gb2YgaXRzIGNhbGwgc2l0ZXMgd2lsbCBjdXQgdGhyb3VnaCBwb3RlbnRpYWwgY29uZnVzaW9uIGFuZCBoZWxwIGZvY3VzIG15IGF0dGVudGlvbiBlZmZpY2llbnRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTI5MDY9c3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfZnJvbV9mZCh1MzIgdWZkKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MjkwNzpzdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2dldF9jdXJyX29yX25leHQodTMyICppZCk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI5MDgtXG4tLVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYz0xMz1zdGF0aWMgdm9pZCAqYnBmX2xpbmtfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTE3LVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzoxODpcdGxpbmsgPSBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KFx1MDAyNmluZm8tXHUwMDNlbGlua19pZCk7XG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTE5LVx0aWYgKCFsaW5rKVxuLS1cbmtlcm5lbC9icGYvbGlua19pdGVyLmM9Mjc9c3RhdGljIHZvaWQgKmJwZl9saW5rX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTMzLVx0YnBmX2xpbmtfcHV0KChzdHJ1Y3QgYnBmX2xpbmsgKil2KTtcbmtlcm5lbC9icGYvbGlua19pdGVyLmM6MzQ6XHRyZXR1cm4gYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dChcdTAwMjZpbmZvLVx1MDAzZWxpbmtfaWQpO1xua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0zNS19XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjAxNT1zdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2J5X2lkKHUzMiBpZClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDM2LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAzNzpzdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2dldF9jdXJyX29yX25leHQodTMyICppZClcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODczCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBMaW5rIEl0ZXJhdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgQlBGIGxpbmtzIGFyZSBiZWluZyBpdGVyYXRlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYGtlcm5lbC9icGYvbGlua19pdGVyLmNgIGZpbGUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCB0aGUgaXRlcmF0b3IgdXNlZCBieSBgYnBmX2xpbmtfc2VxX3N0YXJ0YCBhbmQgYGJwZl9saW5rX3NlcV9uZXh0YC4gVGhlc2UgZnVuY3Rpb24gbmFtZXMgc3VnZ2VzdCBhIHNlcXVlbmNlLWJhc2VkIHRyYXZlcnNhbCBvZiBCUEYgbGlua3MsIGxpa2VseSB1c2VkIHRvIHByZXNlbnQgYSBsaXN0IG9mIGxpbmtzLCBwZXJoYXBzIGZvciB1c2Vyc3BhY2UgY29uc3VtcHRpb24gb3IgYW5vdGhlciBrZXJuZWwgc3Vic3lzdGVtLiBUaGUgY29yZSBvZiBteSBpbnZlc3RpZ2F0aW9uIHdpbGwgdGhlcmVmb3JlIGZvY3VzIG9uIGhvdyB0aGlzIGl0ZXJhdG9yIGlzIGltcGxlbWVudGVkLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCB1dGlsaXplcyBpbnRlcm5hbGx5IHRvIG1hbmFnZSB0aGUgdHJhdmVyc2FsLCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIGZvciBwZXJmb3JtYW5jZSBvciBzeW5jaHJvbml6YXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbGlua19pdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LyogQ29weXJpZ2h0IChjKSAyMDIyIFJlZCBIYXQsIEluYy4gKi9cbiAgIDM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnRmX2lkcy5oXHUwMDNlXG4gICA4Olx0XG4gICA5Olx0c3RydWN0IGJwZl9pdGVyX3NlcV9saW5rX2luZm8ge1xuICAxMDpcdFx0dTMyIGxpbmtfaWQ7XG4gIDExOlx0fTtcbiAgMTI6XHRcbiAgMTM6XHRzdGF0aWMgdm9pZCAqYnBmX2xpbmtfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbiAgMTQ6XHR7XG4gIDE1Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2xpbmtfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuICAxNjpcdFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuICAxNzpcdFxuICAxODpcdFx0bGluayA9IGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoXHUwMDI2aW5mby1cdTAwM2VsaW5rX2lkKTtcbiAgMTk6XHRcdGlmICghbGluaylcbiAgMjA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDIxOlx0XG4gIDIyOlx0XHRpZiAoKnBvcyA9PSAwKVxuICAyMzpcdFx0XHQmIzQzOyYjNDM7KnBvcztcbiAgMjQ6XHRcdHJldHVybiBsaW5rO1xuICAyNTpcdH1cbiAgMjY6XHRcbiAgMjc6XHRzdGF0aWMgdm9pZCAqYnBmX2xpbmtfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuICAyODpcdHtcbiAgMjk6XHRcdHN0cnVjdCBicGZfaXRlcl9zZXFfbGlua19pbmZvICppbmZvID0gc2VxLVx1MDAzZXByaXZhdGU7XG4gIDMwOlx0XG4gIDMxOlx0XHQmIzQzOyYjNDM7KnBvcztcbiAgMzI6XHRcdCYjNDM7JiM0MztpbmZvLVx1MDAzZWxpbmtfaWQ7XG4gIDMzOlx0XHRicGZfbGlua19wdXQoKHN0cnVjdCBicGZfbGluayAqKXYpO1xuICAzNDpcdFx0cmV0dXJuIGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoXHUwMDI2aW5mby1cdTAwM2VsaW5rX2lkKTtcbiAgMzU6XHR9XG4gIDM2Olx0XG4gIDM3Olx0c3RydWN0IGJwZl9pdGVyX19icGZfbGluayB7XG4gIDM4Olx0XHRfX2JwZl9tZF9wdHIoc3RydWN0IGJwZl9pdGVyX21ldGEgKiwgbWV0YSk7XG4gIDM5Olx0XHRfX2JwZl9tZF9wdHIoc3RydWN0IGJwZl9saW5rICosIGxpbmspO1xuICA0MDpcdH07XG4gIDQxOlx0XG4gIDQyOlx0REVGSU5FX0JQRl9JVEVSX0ZVTkMoYnBmX2xpbmssIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gIDQzOlx0XG4gIDQ0Olx0c3RhdGljIGludCBfX2JwZl9saW5rX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBib29sIGluX3N0b3ApXG4gIDQ1Olx0e1xuICA0NjpcdFx0c3RydWN0IGJwZl9pdGVyX19icGZfbGluayBjdHg7XG4gIDQ3Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xuICA0ODpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuICA0OTpcdFx0aW50IHJldCA9IDA7XG4gIDUwOlx0XG4gIDUxOlx0XHRjdHgubWV0YSA9IFx1MDAyNm1ldGE7XG4gIDUyOlx0XHRjdHgubGluayA9IHY7XG4gIDUzOlx0XHRtZXRhLnNlcSA9IHNlcTtcbiAgNTQ6XHRcdHByb2cgPSBicGZfaXRlcl9nZXRfaW5mbyhcdTAwMjZtZXRhLCBpbl9zdG9wKTtcbiAgNTU6XHRcdGlmIChwcm9nKVxuICA1NjpcdFx0XHRyZXQgPSBicGZfaXRlcl9ydW5fcHJvZyhwcm9nLCBcdTAwMjZjdHgpO1xuICA1NzpcdFxuICA1ODpcdFx0cmV0dXJuIHJldDtcbiAgNTk6XHR9XG4gIDYwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBMaW5rIElEIEFsbG9jYXRpb24gYW5kIFJldHJpZXZhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IEJQRiBsaW5rcyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHRoZSBJRCBhbGxvY2F0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGxpZmVjeWNsZSBvZiBhIGxpbmsuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgpJbml0aWFsbHksIHdoZW4gYSBsaW5rIGlzIGJlaW5nIGNyZWF0ZWQsIGBicGZfbGlua19hbGxvY19pZGAgaXMgY2FsbGVkLCBhbmQgYW4gSUQgaXMgYWxsb2NhdGVkIGZyb20gYGxpbmtfaWRyYCB1c2luZyBgaWRyX2FsbG9jX2N5Y2xpY2AuIE5vdywgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIOKAkyB0aGUgbGluayBpcyAqaW5zZXJ0ZWQqIGludG8gYGxpbmtfaWRyYCwgYnV0IHRoZSBgbGluay0mZ3Q7aWRgIGZpZWxkICppc24mIzM5O3QqIHNldCB5ZXQuIEl0IHJlbWFpbnMgemVyby4gVGhpcyBtZWFucywgdGhlcmUmIzM5O3MgYSBwZXJpb2Qgd2hlcmUgdGhlIGxpbmsgZXhpc3RzIGluIHRoZSBJRFIgYnV0IGlzbiYjMzk7dCBjb25zaWRlcmVkICYjMzQ7c2V0dGxlZC4mIzM0OyBUaGUgYWN0dWFsIElEIGFzc2lnbm1lbnQgaGFwcGVucyBsYXRlciBpbiBgYnBmX2xpbmtfc2V0dGxlYCwgd2hlcmUgYGxpbmstJmd0O2lkYCBpcyBmaW5hbGx5IHBvcHVsYXRlZCB3aXRoIHRoZSBhbGxvY2F0ZWQgSUQuIElmIGxpbmsgY3JlYXRpb24gZmFpbHMsIGBicGZfbGlua19jbGVhbnVwKClgIGlzIGNhbGxlZCB3aGljaCB3aWxsIGNhbGwgYGJwZl9saW5rX2ZyZWVfaWQoKWAgdG8gdGVhciBpdCBkb3duLgoKTm93LCBpbiBgYnBmX2xpbmtfYnlfaWRgLCB0aGUgY29kZSAqY29ycmVjdGx5KiBjaGVja3MgYGxpbmstJmd0O2lkYCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBsaW5rLiBJZiBpdCYjMzk7cyB6ZXJvLCBpdCBtZWFucyB0aGUgbGluayBpc24mIzM5O3QgcmVhZHksIGFuZCBpdCYjMzk7cyB0cmVhdGVkIGFzIGlmIGl0IGRvZXNuJiMzOTt0IGV4aXN0IOKAkyByZXR1cm5pbmcgYW4gYC1FQUdBSU5gIGVycm9yLiBHb29kLiBUaGF0IHByZXZlbnRzIHJldHVybmluZyBoYWxmLWJha2VkIGxpbmtzLgoKSG93ZXZlciwgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIHByZXNlbnRzIGEgcG90ZW50aWFsIGlzc3VlLiBCZWZvcmUgdGhlIHBhdGNoLCBpdCBzZWVtcyBsaWtlIGlmIGl0IHN0dW1ibGVkIHVwb24gYW4gdW5zZXR0bGVkIGxpbmsgKHdoZXJlIGBsaW5rLSZndDtpZGAgaXMgc3RpbGwgMCksIGl0IHdvdWxkIGNhbGwgYGJwZl9saW5rX2luY19ub3RfemVybygpYCwgcG90ZW50aWFsbHkgcmV0dXJuaW5nIGFuIHVuc2V0dGxlZCBsaW5rLiBUaGF0JiMzOTtzIGNsZWFybHkgYSBidWcuIEl0JiMzOTtzIHBvc3NpYmxlIGZvciBzb21lb25lIHRvIGl0ZXJhdGUgaXQgd2hpbGUgaXQmIzM5O3MgYmVpbmcgY3JlYXRlZCwgdG9ybiBkb3duLCBvciBpZiB0aGUgaW5pdGlhbGl6YXRpb24gaGFkIGlzc3Vlcy4KClRoZSBwYXRjaCBjb3JyZWN0cyB0aGlzLiBOb3csIGlmIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YCBmaW5kcyBhIGxpbmsgd2l0aCBgbGluay0mZ3Q7aWQgPT0gMGAsIGl0IGFzc2lnbnMgYEVSUl9QVFIoLUVBR0FJTilgIHRvIGBsaW5rYCwgd2hpY2ggaXMgdGhlbiBjYXVnaHQgYnkgYElTX0VSUihsaW5rKWAsIGFuZCB0aGUgY29kZSBjb3JyZWN0bHkgaW5jcmVtZW50cyB0aGUgSUQgYW5kIGNvbnRpbnVlcyBpdGVyYXRpb24uCgpJIG5lZWQgdG8gY29uZmlybSBpZiBJIG5lZWQgdG8gd29ycnkgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBsaW5rLSZndDtpZGAgKml0c2VsZiogaXMgdW5pbml0aWFsaXplZCB3aGVuIHRoZSBgYnBmX2xpbmtgIHN0cnVjdCBpcyBhbGxvY2F0ZWQuIFNvLCBJIHdpbGwgc2VhcmNoIGZvciB3aGVyZSBgYnBmX2xpbmtgIGlzIGFsbG9jYXRlZCBhbmQgaG93IHRoZSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byByZXZpZXcgYGJwZl9saW5rX2luaXRgIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIHRoaXMgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2xpbmtfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRraXQuYz05ODg9c3RhdGljIGludCBuZXRraXRfbGlua19pbml0KHN0cnVjdCBuZXRraXRfbGluayAqbmtsLFxuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jLTk5My17XG5kcml2ZXJzL25ldC9uZXRraXQuYzo5OTQ6XHRicGZfbGlua19pbml0KFx1MDAyNm5rbC1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX05FVEtJVCxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTk5NS1cdFx0ICAgICAgXHUwMDI2bmV0a2l0X2xpbmtfbG9wcywgcHJvZywgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0yODg4PWludCBicGZfcHJvZ19uZXdfZmQoc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbmluY2x1ZGUvbGludXgvYnBmLmgtMjg4OS1cbmluY2x1ZGUvbGludXgvYnBmLmg6Mjg5MDp2b2lkIGJwZl9saW5rX2luaXQoc3RydWN0IGJwZl9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjg5MS1cdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyAqb3BzLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI4OTItXHRcdCAgIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6Mjg5Mzp2b2lkIGJwZl9saW5rX2luaXRfc2xlZXBhYmxlKHN0cnVjdCBicGZfbGluayAqbGluaywgZW51bSBicGZfbGlua190eXBlIHR5cGUsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI4OTQtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTMzMDQ9YnBmX3Byb2dfaW5jX25vdF96ZXJvKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMzMDgtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMzMDk6c3RhdGljIGlubGluZSB2b2lkIGJwZl9saW5rX2luaXQoc3RydWN0IGJwZl9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzMxMC1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zMzE0LVxuaW5jbHVkZS9saW51eC9icGYuaDozMzE1OnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfbGlua19pbml0X3NsZWVwYWJsZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxuaW5jbHVkZS9saW51eC9icGYuaC0zMzE2LVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NTA0PWludCBicGZfaXRlcl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTU1NC1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo1NTU6XHRicGZfbGlua19pbml0KFx1MDAyNmxpbmstXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9JVEVSLCBcdTAwMjZicGZfaXRlcl9saW5rX2xvcHMsIHByb2csXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTU2LVx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTQzNz1pbnQgYnBmX3N0cnVjdF9vcHNfbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0NjAtXHR9XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQ2MTpcdGJwZl9saW5rX2luaXQoXHUwMDI2bGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNmJwZl9zdHJ1Y3Rfb3BzX21hcF9sb3BzLCBOVUxMLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0NjItXHRcdCAgICAgIGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTU0MD1pbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU1OC1cdH1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTU1OTpcdGJwZl9saW5rX2luaXQoXHUwMDI2bGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX0NHUk9VUCwgXHUwMDI2YnBmX2Nncm91cF9saW5rX2xvcHMsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NjAtXHRcdCAgICAgIHByb2csIGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTQ3MT1pbnQgbmV0bnNfYnBmX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDk2LVx0fVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6NDk3Olx0YnBmX2xpbmtfaW5pdChcdTAwMjZuZXRfbGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX05FVE5TLFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDk4LVx0XHQgICAgICBcdTAwMjZicGZfbmV0bnNfbGlua19vcHMsIHByb2csIHR5cGUpO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTMyMDQ9c3RhdGljIGludCBicGZfb2JqX2dldChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjIwLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzIyMTovKiBicGZfbGlua19pbml0X3NsZWVwYWJsZSgpIGFsbG93cyB0byBzcGVjaWZ5IHdoZXRoZXIgQlBGIGxpbmsgaXRzZWxmIGhhc1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzIyMi0gKiBcJiMzNDtzbGVlcGFibGVcJiMzNDsgc2VtYW50aWNzLCB3aGljaCBub3JtYWxseSB3b3VsZCBtZWFuIHRoYXQgQlBGIGxpbmsmIzM5O3MgYXR0YWNoXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzIyOC0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyMjk6dm9pZCBicGZfbGlua19pbml0X3NsZWVwYWJsZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzIzMC1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgKm9wcywgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyNDItXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjQzOnZvaWQgYnBmX2xpbmtfaW5pdChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI0NC1cdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyAqb3BzLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI0Ni17XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjQ3Olx0YnBmX2xpbmtfaW5pdF9zbGVlcGFibGUobGluaywgdHlwZSwgb3BzLCBwcm9nLCBhdHRhY2hfdHlwZSwgZmFsc2UpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI0OC19XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzI1MD12b2lkIGJwZl90cmFtcF9saW5rX2luaXQoc3RydWN0IGJwZl90cmFtcF9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjUzLXtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNTQ6XHRicGZfbGlua19pbml0KFx1MDAyNmxpbmstXHUwMDNlbGluaywgdHlwZSwgb3BzLCBwcm9nLCBhdHRhY2hfdHlwZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjU1LVx0bGluay1cdTAwM2Vub2RlLmxpbmsgPSBcdTAwMjZsaW5rLVx1MDAzZWxpbms7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDI0NT1zdGF0aWMgaW50IGJwZl9wZXJmX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDI2NC1cdH1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQyNjU6XHRicGZfbGlua19pbml0KFx1MDAyNmxpbmstXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9QRVJGX0VWRU5ULCBcdTAwMjZicGZfcGVyZl9saW5rX2xvcHMsIHByb2csXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MjY2LVx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00Mjk3PXN0YXRpYyBpbnQgYnBmX3Jhd190cF9saW5rX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM0Ny1cdH1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQzNDg6XHRicGZfbGlua19pbml0X3NsZWVwYWJsZShcdTAwMjZsaW5rLVx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfUkFXX1RSQUNFUE9JTlQsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MzQ5LVx0XHRcdFx0XHUwMDI2YnBmX3Jhd190cF9saW5rX2xvcHMsIHByb2csIGF0dGFjaF90eXBlLFxuLS1cbmtlcm5lbC9icGYvdGN4LmM9Mjk4PXN0YXRpYyBpbnQgdGN4X2xpbmtfaW5pdChzdHJ1Y3QgdGN4X2xpbmsgKnRjeCxcbi0tXG5rZXJuZWwvYnBmL3RjeC5jLTMwMy17XG5rZXJuZWwvYnBmL3RjeC5jOjMwNDpcdGJwZl9saW5rX2luaXQoXHUwMDI2dGN4LVx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfVENYLCBcdTAwMjZ0Y3hfbGlua19sb3BzLCBwcm9nLFxua2VybmVsL2JwZi90Y3guYy0zMDUtXHRcdCAgICAgIGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNzgwPWludCBicGZfa3Byb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI4ODAtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mjg4MTpcdGJwZl9saW5rX2luaXQoXHUwMDI2bGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX0tQUk9CRV9NVUxUSSxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yODgyLVx0XHQgICAgICBcdTAwMjZicGZfa3Byb2JlX211bHRpX2xpbmtfbG9wcywgcHJvZywgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMyNTE9aW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzM2OC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozMzY5Olx0YnBmX2xpbmtfaW5pdChcdTAwMjZsaW5rLVx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfVVBST0JFX01VTFRJLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMzNzAtXHRcdCAgICAgIFx1MDAyNmJwZl91cHJvYmVfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mzg0MD1pbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MDAtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkwMTpcdGJwZl9saW5rX2luaXQoXHUwMDI2bGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEksXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkwMi1cdFx0ICAgICAgXHUwMDI2YnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMDczMT1pbnQgYnBmX3hkcF9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNzUyLVxubmV0L2NvcmUvZGV2LmM6MTA3NTM6XHRicGZfbGlua19pbml0KFx1MDAyNmxpbmstXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9YRFAsIFx1MDAyNmJwZl94ZHBfbGlua19sb3BzLCBwcm9nLFxubmV0L2NvcmUvZGV2LmMtMTA3NTQtXHRcdCAgICAgIGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTg3NT1pbnQgc29ja19tYXBfbGlua19jcmVhdGUoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MDAtXHRhdHRhY2hfdHlwZSA9IGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGU7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE5MDE6XHRicGZfbGlua19pbml0KFx1MDAyNnNvY2ttYXBfbGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1NPQ0tNQVAsIFx1MDAyNnNvY2tfbWFwX2xpbmtfb3BzLCBwcm9nLFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTAyLVx0XHQgICAgICBhdHRhY2hfdHlwZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jPTIxMD1pbnQgYnBmX25mX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jLTIyNy1cbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYzoyMjg6XHRicGZfbGlua19pbml0KFx1MDAyNmxpbmstXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9ORVRGSUxURVIsIFx1MDAyNmJwZl9uZl9saW5rX2xvcHMsIHByb2csXG5uZXQvbmV0ZmlsdGVyL25mX2JwZl9saW5rLmMtMjI5LVx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIGBicGZfbGlua19pbml0X3NsZWVwYWJsZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkaXNzZWN0IHRoaXMgZnVuY3Rpb24sIGBicGZfbGlua19pbml0X3NsZWVwYWJsZWAsIHJlc2lkaW5nIGluIHRoZSBoZWFydCBvZiB0aGUgQlBGIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7U2xlZXBhYmxlPyYjMzQ7IEludGVyZXN0aW5nLi4uIHRoaXMgaW1wbGllcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgQlBGIGxpbmsgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB0aGF0LCBmb3Igc29tZSByZWFzb24sIG1pZ2h0IGJsb2NrIG9yIHJlcXVpcmUgYXN5bmNocm9ub3VzIGhhbmRsaW5nLiBUaGF0IGluc3RhbnRseSByYWlzZXMgYSBmbGFnOiB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgYWNxdWlyZWQgaGVyZSwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBtaWdodCB0aGV5IG5vdCBiZSBpbW1lZGlhdGVseSBhdmFpbGFibGU/IFdlJiMzOTtyZSBwb3RlbnRpYWxseSBlbnRlcmluZyBhIGRvbWFpbiB3aGVyZSBjb25jdXJyZW5jeSBhbmQgbG9jayBjb250ZW50aW9uIGFyZSBjcml0aWNhbCBjb25zaWRlcmF0aW9ucy4KCkkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgaW50byB0aGUgc3BlY2lmaWMgY29kZSB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBvZiB0aGUgJiMzNDtzbGVlcGFibGUmIzM0OyBhc3BlY3QuIElzIHRoaXMgcmVsYXRlZCB0byBsb2FkaW5nIGEgQlBGIHByb2dyYW0sIGF0dGFjaGluZyBpdCB0byBhIHNwZWNpZmljIGhvb2sgb3IgdHJhY2Vwb2ludCwgb3IgcGVyaGFwcyBpbml0aWFsaXppbmcgc29tZSBmb3JtIG9mIHNoYXJlZCBkYXRhIHN0cnVjdHVyZT8gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2Ugc3VnZ2VzdHMgd2UmIzM5O3JlIGxpa2VseSBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBCUEYgbGluaywgcmF0aGVyIHRoYW4gaGFuZGxpbmcgdGhlIGFjdHVhbCBleGVjdXRpb24gb3IgZGF0YSB0cmFuc2Zlci4gVGhhdCYjMzk7cyBhIGtleSBkaXN0aW5jdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBjbG9zZWx5IGZvciBtZW1vcnkgYWxsb2NhdGlvbnMsIHBvdGVudGlhbCBkZXZpY2UgaW50ZXJhY3Rpb25zLCBvciBhbnkgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGludm9sdmUgd2FpdGluZyBvbiBleHRlcm5hbCBldmVudHMuIE15IGd1dCBmZWVsaW5nIGlzIHRoaXMgd2lsbCBiZSByZWxhdGVkIHRvIGEgQlBGLXRvLUJQRiAob3IgcGVyaGFwcyBCUEYtdG8tdXNlcikgY29tbXVuaWNhdGlvbiBjaGFubmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMjI1Olx0ICogQlBGIHByb2dyYW0gaXRzZWxmIGNhbiBiZSBub24tc2xlZXBhYmxlLCB5ZXQsIGJlY2F1c2UgaXQmIzM5O3MgdHJhbnNpdGl2ZWx5XG4zMjI2Olx0ICogcmVhY2hhYmxlIHRocm91Z2ggQlBGIGxpbmssIGl0cyBmcmVlaW5nIGhhcyB0byBiZSBkZWxheWVkIHVudGlsIGFmdGVyIFJDVVxuMzIyNzpcdCAqIFRhc2tzIFRyYWNlIEdQLlxuMzIyODpcdCAqL1xuMzIyOTpcdHZvaWQgYnBmX2xpbmtfaW5pdF9zbGVlcGFibGUoc3RydWN0IGJwZl9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcbjMyMzA6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgKm9wcywgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuMzIzMTpcdFx0XHRcdCAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIGJvb2wgc2xlZXBhYmxlKVxuMzIzMjpcdHtcbjMyMzM6XHRcdFdBUk5fT04ob3BzLVx1MDAzZWRlYWxsb2MgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VkZWFsbG9jX2RlZmVycmVkKTtcbjMyMzQ6XHRcdGF0b21pYzY0X3NldChcdTAwMjZsaW5rLVx1MDAzZXJlZmNudCwgMSk7XG4zMjM1Olx0XHRsaW5rLVx1MDAzZXR5cGUgPSB0eXBlO1xuMzIzNjpcdFx0bGluay1cdTAwM2VzbGVlcGFibGUgPSBzbGVlcGFibGU7XG4zMjM3Olx0XHRsaW5rLVx1MDAzZWlkID0gMDtcbjMyMzg6XHRcdGxpbmstXHUwMDNlb3BzID0gb3BzO1xuMzIzOTpcdFx0bGluay1cdTAwM2Vwcm9nID0gcHJvZztcbjMyNDA6XHRcdGxpbmstXHUwMDNlYXR0YWNoX3R5cGUgPSBhdHRhY2hfdHlwZTtcbjMyNDE6XHR9XG4zMjQyOlx0XG4zMjQzOlx0dm9pZCBicGZfbGlua19pbml0KHN0cnVjdCBicGZfbGluayAqbGluaywgZW51bSBicGZfbGlua190eXBlIHR5cGUsXG4zMjQ0Olx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgKm9wcywgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuMzI0NTpcdFx0XHQgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcbjMyNDY6XHR7XG4zMjQ3Olx0XHRicGZfbGlua19pbml0X3NsZWVwYWJsZShsaW5rLCB0eXBlLCBvcHMsIHByb2csIGF0dGFjaF90eXBlLCBmYWxzZSk7XG4zMjQ4Olx0fVxuMzI0OTpcdFxuMzI1MDpcdHZvaWQgYnBmX3RyYW1wX2xpbmtfaW5pdChzdHJ1Y3QgYnBmX3RyYW1wX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxuMzI1MTpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbjMyNTI6XHRcdFx0XHQgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIHU2NCBjb29raWUpXG4zMjUzOlx0e1xuMzI1NDpcdFx0YnBmX2xpbmtfaW5pdChcdTAwMjZsaW5rLVx1MDAzZWxpbmssIHR5cGUsIG9wcywgcHJvZywgYXR0YWNoX3R5cGUpO1xuMzI1NTpcdFx0bGluay1cdTAwM2Vub2RlLmxpbmsgPSBcdTAwMjZsaW5rLVx1MDAzZWxpbms7XG4zMjU2Olx0XHRsaW5rLVx1MDAzZW5vZGUuY29va2llID0gY29va2llO1xuMzI1NzpcdH1cbjMyNTg6XHRcbjMyNTk6XHRzdGF0aWMgdm9pZCBicGZfbGlua19mcmVlX2lkKGludCBpZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgTGluayBJRCBJbml0aWFsaXphdGlvbiBhbmQgSXRlcmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIExpbmUgMzIzNzogYGxpbmstJmd0O2lkID0gMDtgIFRoYXQmIzM5O3Mgd2hlcmUgaXQgc3RhcnRzLCBpbml0aWFsaXplZCB0byB6ZXJvIGluIGBicGZfbGlua19pbml0X3NsZWVwYWJsZWAhIEFuZCB0aGVuLCB3ZSBoYXZlIHRoaXMgYXNzaWdubWVudCBpbiBgYnBmX2xpbmtfc2V0dGxlKClgOiBgcHJpbWVyLSZndDtsaW5rLSZndDtpZCA9IHByaW1lci0mZ3Q7aWQ7YCBTbywgY29uZmlybWVkLCBgbGluay0mZ3Q7aWRgIGlzICphbHdheXMqIGluaXRpYWxpemVkIHRvIHplcm8gdXBvbiBjcmVhdGlvbi4gVGhpcyBpcyBrZXkuCgpUaGUgaXNzdWUgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgaXMgaW4gYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgLiBXaGVuIHRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggbGlua3MgdXNpbmcgdGhlIElEUiAoYGlkcl9nZXRfbmV4dGApLCBpdCB3YXMgZ3JhYmJpbmcgcmVmZXJlbmNlcyB0byBsaW5rcyB0aGF0IHdlcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZC4gTWVhbmluZywgdGhleSBoYWQgYmVlbiBhbGxvY2F0ZWQgYW4gSUQgaW4gYGxpbmtfaWRyYCwgYnV0IGhhZG4mIzM5O3QgeWV0IGJlZW4gJiMzNDtzZXR0bGVkLCYjMzQ7IHNvIHRoZWlyIGBsaW5rLSZndDtpZGAgd2FzIHN0aWxsIHplcm8uIFRoaXMgaXMgYSBwcm9ibGVtISBJdCB3YXMgcmV0dXJuaW5nIHRoaXMgbGluayB3aXRoIGBsaW5rLSZndDtpZGAgb2YgMC4gV2FpdCwgdGhpcyBjb3VsZCBtZWFuIHRoYXQgbGluayBjcmVhdGlvbiBmYWlscywgb3IgaXRlcmF0aW5nIGFuIHVuc2V0dGxlZCBsaW5rIGNhdXNlcyBwcm9ibGVtcywgbGlrZSBhIHVzZXIgc2VlaW5nIGEgbGluayB3aXRoIGFuIElEIG9mIDAsIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIHNpbXBsZSBidXQgZWZmZWN0aXZlOgpgYGBkaWZmCiAJbGluayA9IGlkcl9nZXRfbmV4dCgmYW1wO2xpbmtfaWRyLCBpZCk7CiAJaWYgKGxpbmspIHsKLQkJbGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTsKJiM0MzsJCWlmIChsaW5rLSZndDtpZCkKJiM0MzsJCQlsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspOwomIzQzOwkJZWxzZQomIzQzOwkJCWxpbmsgPSBFUlJfUFRSKC1FQUdBSU4pOwogCQlpZiAoSVNfRVJSKGxpbmspKSB7CiAJCQkoKmlkKSYjNDM7JiM0Mzs7CiAJCQlnb3RvIGFnYWluOwpgYGAKSWYgYGxpbmstJmd0O2lkID09IDBgLCB0aGUgY29kZSBub3cgc2V0cyBgbGlua2AgdG8gYEVSUl9QVFIoLUVBR0FJTilgLiBUaGlzIGlzIGNsZXZlciEgVGhlbiBgSVNfRVJSKGxpbmspYCBiZWNvbWVzIHRydWUsIGFuZCBpdCBkb2VzIGAoKmlkKSYjNDM7JiM0MztgIGFuZCBza2lwcyB0byB0aGUgbmV4dCBJRCAoYGdvdG8gYWdhaW47YCksIGFjdGluZyAqZXhhY3RseSogbGlrZSBpZiBgYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspYCBoYWQgZmFpbGVkLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBpcyBuZWVkZWQuIEl0IGF2b2lkcyB0aGUgcHJvYmxlbXMgb2YgcmV0dXJuaW5nIGxpbmtzIHRoYXQgYXJlIG5vdCByZWFkeS4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBicGZfb2JqX2dldF9uZXh0X2lkYCBmb3IgY29tcGFyaXNvbi4KTGV0JiMzOTtzIHNlZSBob3cgdGhhdCB3b3JrcyB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgcmlnaHQgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9vYmpfZ2V0X25leHRfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz00NzgyPXN0YXRpYyBpbnQgYnBmX3Byb2dfdGVzdF9ydW4oY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDgxMS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ4MTI6c3RhdGljIGludCBicGZfb2JqX2dldF9uZXh0X2lkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDgxMy1cdFx0XHQgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzA2PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzkwLVx0Y2FzZSBCUEZfUFJPR19HRVRfTkVYVF9JRDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTE6XHRcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTItXHRcdFx0XHRcdCAgXHUwMDI2cHJvZ19pZHIsIFx1MDAyNnByb2dfaWRyX2xvY2spO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTQtXHRjYXNlIEJQRl9NQVBfR0VUX05FWFRfSUQ6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2Mzk1Olx0XHRlcnIgPSBicGZfb2JqX2dldF9uZXh0X2lkKFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mzk2LVx0XHRcdFx0XHQgIFx1MDAyNm1hcF9pZHIsIFx1MDAyNm1hcF9pZHJfbG9jayk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5OC1cdGNhc2UgQlBGX0JURl9HRVRfTkVYVF9JRDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTk6XHRcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MDAtXHRcdFx0XHRcdCAgXHUwMDI2YnRmX2lkciwgXHUwMDI2YnRmX2lkcl9sb2NrKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDUzLVx0Y2FzZSBCUEZfTElOS19HRVRfTkVYVF9JRDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NTQ6XHRcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NTUtXHRcdFx0XHRcdCAgXHUwMDI2bGlua19pZHIsIFx1MDAyNmxpbmtfaWRyX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA0NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgYGJwZl9vYmpfZ2V0X25leHRfaWRgOgoKKipEaXZpbmcgaW50byBicGZfb2JqX2dldF9uZXh0X2lkKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgYnBmX29ial9nZXRfbmV4dF9pZGAuIFJpZ2h0LCB0aGlzIGlzIGEgY29yZSBCUEYgZnVuY3Rpb24sIGxpa2VseSBjcnVjaWFsIGZvciBpdGVyYXRpbmcgdGhyb3VnaCBvYmplY3QgSURzIHdpdGhpbiB0aGUgQlBGIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGRlc2lnbmVkIHRvIHJldHVybiB0aGUgbmV4dCBhdmFpbGFibGUgSUQuIElzIHRoaXMgZnVuY3Rpb24gZ29pbmcgdG8gbWFpbnRhaW4gYW4gaW50ZXJuYWwgaXRlcmF0b3IsIG9yIHJlbHkgb24gc29tZSBleHRlcm5hbCBkYXRhIHN0cnVjdHVyZSB0byBtYW5hZ2Ugb2JqZWN0IElEcz8gRG9lcyBpdCB1c2UgYSBsaW5lYXIgc2Nhbiwgb3IgaXMgdGhlcmUgc29tZSBtb3JlIHNvcGhpc3RpY2F0ZWQgaW5kZXhpbmcgaW52b2x2ZWQsIHdoaWNoIGNvdWxkIGFmZmVjdCBwZXJmb3JtYW5jZSBkcmFzdGljYWxseSwgZXNwZWNpYWxseSB3aXRoIG1hbnkgQlBGIHByb2dyYW1zIGFuZCBtYXBzPyBJJiMzOTttIGN1cmlvdXMgdG8gc2VlIGhvdyBjb25jdXJyZW5jeSBpcyBoYW5kbGVkLCBvciBpZiBpdCYjMzk7cyBoYW5kbGVkIGF0IGFsbC4gV2hhdCBraW5kIG9mIGxvY2tpbmcgaXMgdXNlZCwgaWYgYW55PyBBbHNvLCBJIHdpbGwgbG9vayBhdCBlcnJvciBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBob3cgZG9lcyBpdCBzaWduYWwgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBJRHMsIG9yIGluIHRoZSBjYXNlIG9mIGEgY29uY3VycmVudCBtb2RpZmljYXRpb24gb2YgdGhlIElEIGxpc3QuIEFueSBlZGdlIGNhc2VzIEkgc2hvdWxkIGNvbnNpZGVyPyBJIGhvcGUgaXQmIzM5O3Mgd2VsbC1kb2N1bWVudGVkISBUaW1lIHRvIGRpc3NlY3QgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ4MTI6XHRzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG40ODEzOlx0XHRcdFx0ICAgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIsXG40ODE0Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZHIgKmlkcixcbjQ4MTU6XHRcdFx0XHQgICAgICAgc3BpbmxvY2tfdCAqbG9jaylcbjQ4MTY6XHR7XG40ODE3Olx0XHR1MzIgbmV4dF9pZCA9IGF0dHItXHUwMDNlc3RhcnRfaWQ7XG40ODE4Olx0XHRpbnQgZXJyID0gMDtcbjQ4MTk6XHRcbjQ4MjA6XHRcdGlmIChDSEVDS19BVFRSKEJQRl9PQkpfR0VUX05FWFRfSUQpIHx8IG5leHRfaWQgXHUwMDNlPSBJTlRfTUFYKVxuNDgyMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ4MjI6XHRcbjQ4MjM6XHRcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbjQ4MjQ6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjQ4MjU6XHRcbjQ4MjY6XHRcdG5leHRfaWQmIzQzOyYjNDM7O1xuNDgyNzpcdFx0c3Bpbl9sb2NrX2JoKGxvY2spO1xuNDgyODpcdFx0aWYgKCFpZHJfZ2V0X25leHQoaWRyLCBcdTAwMjZuZXh0X2lkKSlcbjQ4Mjk6XHRcdFx0ZXJyID0gLUVOT0VOVDtcbjQ4MzA6XHRcdHNwaW5fdW5sb2NrX2JoKGxvY2spO1xuNDgzMTpcdFxuNDgzMjpcdFx0aWYgKCFlcnIpXG40ODMzOlx0XHRcdGVyciA9IHB1dF91c2VyKG5leHRfaWQsIFx1MDAyNnVhdHRyLVx1MDAzZW5leHRfaWQpO1xuNDgzNDpcdFxuNDgzNTpcdFx0cmV0dXJuIGVycjtcbjQ4MzY6XHR9XG40ODM3Olx0XG40ODM4Olx0c3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxuNDgzOTpcdHtcbjQ4NDA6XHRcdHN0cnVjdCBicGZfbWFwICptYXA7XG40ODQxOlx0XG40ODQyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bWFwX2lkcl9sb2NrKTtcbjQ4NDM6XHRhZ2FpbjpcbjQ4NDQ6XHRcdG1hcCA9IGlkcl9nZXRfbmV4dChcdTAwMjZtYXBfaWRyLCBpZCk7XG40ODQ1Olx0XHRpZiAobWFwKSB7XG40ODQ2Olx0XHRcdG1hcCA9IF9fYnBmX21hcF9pbmNfbm90X3plcm8obWFwLCBmYWxzZSk7XG40ODQ3Olx0XHRcdGlmIChJU19FUlIobWFwKSkge1xuNDg0ODpcdFx0XHRcdCgqaWQpJiM0MzsmIzQzOztcbjQ4NDk6XHRcdFx0XHRnb3RvIGFnYWluO1xuNDg1MDpcdFx0XHR9XG40ODUxOlx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTI4CgkJCQkJCQlvdXRwdXQ6IDIzNQoJCQkJCQkJdGhvdWdodHM6IDQxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gSSYjMzk7bGwgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmQgY2hlY2tzLCBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBrZXJuZWwgc3RydWN0dXJlcywgY29uZGl0aW9uYWwgbG9naWMsIGFuZCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi4KCkZpcnN0LCBkb2VzIHRoaXMgcGF0Y2ggdG91Y2ggYW55dGhpbmcgdGhhdCBjb3VsZCBzZW5kIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZT8gTm8sIG5vdGhpbmcgaXMgbW9kaWZpZWQgcmVnYXJkaW5nIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIFNLQiBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gVGhhdCYjMzk7cyBhIGNsZWFuIHNsYXRlLgoKTmV4dCwgYXJlIHRoZXJlIGFueSBjaGFuZ2VzIHRvIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvciBsb2dpYyB0aGF0IGNvdWxkIHJlbHkgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gIE5vLiBUaGUga2V5IHZhcmlhYmxlLCBgbGluay0mZ3Q7aWRgLCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgd2l0aGluIGBicGZfbGlua19pbml0X3NsZWVwYWJsZWAsIGFuZCBhbnl0aGluZyBjb250YWluaW5nIGEgYGJwZl9saW5rYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLiBTbywgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkuCgpOb3csIHdoYXQgYWJvdXQgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBsYXRlciBiZSByZWFkPyBBZ2Fpbiwgbm8gY2hhbmdlcyBoZXJlLiBObyBuZXcgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBwYXR0ZXJucyBhcmUgaW50cm9kdWNlZCB0aGF0IEkgY2FuIHNlZS4KCkFuZCBmaW5hbGx5LCBkb2VzIHRoaXMgcGF0Y2ggbW9kaWZ5IGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0ICptaWdodCogYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycz8gTm9wZS4KClNvLCAqaXMqIHRoZXJlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzPyBCYXNlZCBvbiBteSByZXZpZXcsIHRoZSBwYXRjaCAqcHJldmVudHMqIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KClgIGZyb20gcmV0dXJuaW5nIGxpbmtzIHRoYXQgYXJlIHN0aWxsIGJlaW5nIGNyZWF0ZWQgKHdoZXJlIGBsaW5rLSZndDtpZCA9PSAwYCkuICBUaGlzIGZpeGVzIGEgY29uY3VycmVuY3kgaXNzdWUsIHByZXZlbnRpbmcgYW4gdW5zZXR0bGVkIGxpbmsgZnJvbSBiZWluZyByZXR1cm5lZCBieSB0aGUgaXRlcmF0b3IuIFRoaXMgaXMgYSBjb25jdXJyZW5jeSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgc3RhdGUgdmFsaWRpdHkgZml4LiBLTVNBTiBpcyBteSBwcmltYXJ5IHRvb2wgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIGFuZCBwYWdlKSwgYW5kIGFueSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiAgS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBteSBnby10byBmb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKFVBRiwgb3V0LW9mLWJvdW5kcywgcmFjZSBjb25kaXRpb25zKS4gIEhlcmUsIEkgc2VlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCB0aHVzIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIEnigJlsbCBub3cgZG91YmxlLWNoZWNrIG15IHJlYXNvbmluZyB0byBtYWtlIGNlcnRhaW4gdGhpcyBhc3Nlc3NtZW50IGlzIGNvbXByZWhlbnNpdmUgYW5kIHByZWNpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KClgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gdmVyaWZ5IHRoYXQgYGxpbmstXHUwMDNlaWRgIGlzIG5vbi16ZXJvIGJlZm9yZSBpbmNyZW1lbnRpbmcgdGhlIGxpbmsgcmVmY291bnQgYW5kIHJldHVybmluZyBpdC4gVGhpcyBwcmV2ZW50cyB0aGUgbGluayBpdGVyYXRvciBmcm9tIHJldHVybmluZyBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBvciB1bnNldHRsZWQgQlBGIGxpbmsgdGhhdCB3YXMgYWxsb2NhdGVkIGFuIElEIGluIGBsaW5rX2lkcmAgYnV0IGhhcyBub3QgeWV0IGJlZW4gc2V0dGxlZCB2aWEgYGJwZl9saW5rX3NldHRsZSgpYC5cblxuYGxpbmstXHUwMDNlaWRgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byAwIGluIGBicGZfbGlua19pbml0X3NsZWVwYWJsZSgpYCBkdXJpbmcgbGluayBhbGxvY2F0aW9uIGFuZCBzZXQgdG8gaXRzIElEIG9ubHkgdXBvbiBgYnBmX2xpbmtfc2V0dGxlKClgLiBUaGlzIGNoYW5nZSBvbmx5IGNoZWNrcyBhbiBhbHJlYWR5LWluaXRpYWxpemVkIGZpZWxkIChgbGluay1cdTAwM2VpZGApIHRvIGhhbmRsZSBsaW5rIGxpZmVjeWNsZS9jb25jdXJyZW5jeSBzdGF0ZSwgYW5kIGRvZXMgbm90IHRvdWNoIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KClgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gdmVyaWZ5IHRoYXQgYGxpbmstXHUwMDNlaWRgIGlzIG5vbi16ZXJvIGJlZm9yZSBpbmNyZW1lbnRpbmcgdGhlIGxpbmsgcmVmY291bnQgYW5kIHJldHVybmluZyBpdC4gVGhpcyBwcmV2ZW50cyB0aGUgbGluayBpdGVyYXRvciBmcm9tIHJldHVybmluZyBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBvciB1bnNldHRsZWQgQlBGIGxpbmsgdGhhdCB3YXMgYWxsb2NhdGVkIGFuIElEIGluIGBsaW5rX2lkcmAgYnV0IGhhcyBub3QgeWV0IGJlZW4gc2V0dGxlZCB2aWEgYGJwZl9saW5rX3NldHRsZSgpYC5cblxuYGxpbmstXHUwMDNlaWRgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byAwIGluIGBicGZfbGlua19pbml0X3NsZWVwYWJsZSgpYCBkdXJpbmcgbGluayBhbGxvY2F0aW9uIGFuZCBzZXQgdG8gaXRzIElEIG9ubHkgdXBvbiBgYnBmX2xpbmtfc2V0dGxlKClgLiBUaGlzIGNoYW5nZSBvbmx5IGNoZWNrcyBhbiBhbHJlYWR5LWluaXRpYWxpemVkIGZpZWxkIChgbGluay1cdTAwM2VpZGApIHRvIGhhbmRsZSBsaW5rIGxpZmVjeWNsZS9jb25jdXJyZW5jeSBzdGF0ZSwgYW5kIGRvZXMgbm90IHRvdWNoIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTA6MjEuNzg1MzAwNDk4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NzUwNjE1NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dFwiLFxuICAgIFwiYnBmX2xpbmtfc2VxX3N0YXJ0XCIsXG4gICAgXCJicGZfbGlua19zZXFfbmV4dFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoKWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byB2ZXJpZnkgdGhhdCBgbGluay1cXHUwMDNlaWRgIGlzIG5vbi16ZXJvIGJlZm9yZSBpbmNyZW1lbnRpbmcgdGhlIGxpbmsgcmVmY291bnQgYW5kIHJldHVybmluZyBpdC4gVGhpcyBwcmV2ZW50cyB0aGUgbGluayBpdGVyYXRvciBmcm9tIHJldHVybmluZyBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBvciB1bnNldHRsZWQgQlBGIGxpbmsgdGhhdCB3YXMgYWxsb2NhdGVkIGFuIElEIGluIGBsaW5rX2lkcmAgYnV0IGhhcyBub3QgeWV0IGJlZW4gc2V0dGxlZCB2aWEgYGJwZl9saW5rX3NldHRsZSgpYC5cXG5cXG5gbGluay1cXHUwMDNlaWRgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byAwIGluIGBicGZfbGlua19pbml0X3NsZWVwYWJsZSgpYCBkdXJpbmcgbGluayBhbGxvY2F0aW9uIGFuZCBzZXQgdG8gaXRzIElEIG9ubHkgdXBvbiBgYnBmX2xpbmtfc2V0dGxlKClgLiBUaGlzIGNoYW5nZSBvbmx5IGNoZWNrcyBhbiBhbHJlYWR5LWluaXRpYWxpemVkIGZpZWxkIChgbGluay1cXHUwMDNlaWRgKSB0byBoYW5kbGUgbGluayBsaWZlY3ljbGUvY29uY3VycmVuY3kgc3RhdGUsIGFuZCBkb2VzIG5vdCB0b3VjaCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpIGluIGtlcm5lbC9icGYvc3lzY2FsbC5jIHRvIGNoZWNrIGlmIGxpbmstXFx1MDAzZWlkIGlzIG5vbi16ZXJvIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50LCByZXR1cm5pbmcgLUVBR0FJTiBvdGhlcndpc2Ugc28gdGhlIGl0ZXJhdGlvbiBza2lwcyB1bnNldHRsZWQgbGlua3MuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgQlBGIGl0ZXJhdG9yIGNvZGUgcGF0aHMgKGJwZl9saW5rIGl0ZXJhdG9yKSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMDoyMS43ODUzMDU2OThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDAzNTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk1NWUwMjgyYmIwMGVkZWVjZmY3YmFjY2EyMzg5MjFhYjgzOWM2YjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjA6MTA6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbmluZGV4IDg1M2I0N2Y4MTM4NDIuLjI0NGE5MzliOWQyZGEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbkBAIC02MDQyLDcgKzYwNDIsMTAgQEAgc3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpXFxuIGFnYWluOlxcbiBcXHRsaW5rID0gaWRyX2dldF9uZXh0KFxcdTAwMjZsaW5rX2lkciwgaWQpO1xcbiBcXHRpZiAobGluaykge1xcbi1cXHRcXHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xcbitcXHRcXHRpZiAobGluay1cXHUwMDNlaWQpXFxuK1xcdFxcdFxcdGxpbmsgPSBicGZfbGlua19pbmNfbm90X3plcm8obGluayk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bGluayA9IEVSUl9QVFIoLUVBR0FJTik7XFxuIFxcdFxcdGlmIChJU19FUlIobGluaykpIHtcXG4gXFx0XFx0XFx0KCppZCkrKztcXG4gXFx0XFx0XFx0Z290byBhZ2FpbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTA6MjIuMzM5OTg3ODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc3MTgyMTc4ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dFwiLFxuICAgIFwiYnBmX2xpbmtfc2VxX3N0YXJ0XCIsXG4gICAgXCJicGZfbGlua19zZXFfbmV4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoKSBpbiBrZXJuZWwvYnBmL3N5c2NhbGwuYyB0byBjaGVjayBpZiBsaW5rLVxcdTAwM2VpZCBpcyBub24temVybyBiZWZvcmUgYXR0ZW1wdGluZyB0byBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCwgcmV0dXJuaW5nIC1FQUdBSU4gb3RoZXJ3aXNlIHNvIHRoZSBpdGVyYXRpb24gc2tpcHMgdW5zZXR0bGVkIGxpbmtzLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIEJQRiBpdGVyYXRvciBjb2RlIHBhdGhzIChicGZfbGluayBpdGVyYXRvcikgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NTVlMDI4MmJiMDBlZGVlY2ZmN2JhY2NhMjM4OTIxYWI4MzljNmI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjA6MTA6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA4NTNiNDdmODEzODQyLi4yNDRhOTM5YjlkMmRhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtNjA0Miw3ICs2MDQyLDEwIEBAIHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxuIGFnYWluOlxuIFx0bGluayA9IGlkcl9nZXRfbmV4dChcdTAwMjZsaW5rX2lkciwgaWQpO1xuIFx0aWYgKGxpbmspIHtcbi1cdFx0bGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTtcbitcdFx0aWYgKGxpbmstXHUwMDNlaWQpXG4rXHRcdFx0bGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGxpbmsgPSBFUlJfUFRSKC1FQUdBSU4pO1xuIFx0XHRpZiAoSVNfRVJSKGxpbmspKSB7XG4gXHRcdFx0KCppZCkrKztcbiBcdFx0XHRnb3RvIGFnYWluO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTA6MjIuMzM5OTg5NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk3ODIzOTM0ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIGEgQlBGIExpbmsgSURSIEl0ZXJhdGlvbioqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgdG8gYmUgd2l0aGluIHRoZSBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYGxpbmtfaWRyYC4gVGhlIGNvcmUgb2YgdGhpcyBmdW5jdGlvbiBpcyBhYm91dCBnZXR0aW5nIHRoZSBuZXh0IGBicGZfbGlua2AgaW4gYW4gSURSLlxuXG5JJ20gbm90aWNpbmcgYSBwb3RlbnRpYWwgaXNzdWUgb3IgaW1wcm92ZW1lbnQgaGVyZS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHNpbXBseSBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgbGluayB1c2luZyBgYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspYC4gTm93LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjazogYGlmIChsaW5rLVx1MDAzZWlkKWAuIFRoaXMgc3VnZ2VzdHMgYSBjb25kaXRpb24gd2hlcmUgYSBgYnBmX2xpbmtgIG1pZ2h0IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBJRFIgYnV0IG1pZ2h0IG5vdCB5ZXQgYmUgZnVsbHkgaW5pdGlhbGl6ZWQsIG9yIHBlcmhhcHMgaW4gc29tZSB0cmFuc2llbnQgc3RhdGUuXG5cbklmIGBsaW5rLVx1MDAzZWlkYCBpcyBub24temVybywgd2UgcHJvY2VlZCBhcyBiZWZvcmUsIGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50LiBIb3dldmVyLCBpZiBgbGluay1cdTAwM2VpZGAgKmlzKiB6ZXJvLCB3aGljaCBwcmVzdW1hYmx5IGluZGljYXRlcyBhbiB1bmluaXRpYWxpemVkIG9yIGludmFsaWQgbGluayBlbnRyeSwgdGhlIHBhdGNoIHNldHMgYGxpbmtgIHRvIGBFUlJfUFRSKC1FQUdBSU4pYC4gVGhpcyBgLUVBR0FJTmAgc2VlbXMgbGlrZSBhIHNpZ25hbCB0byByZXRyeSB0aGUgaXRlcmF0aW9uLiBUaGUgY29kZSB0aGVuIGluY3JlbWVudHMgdGhlIElEIGFuZCBqdW1wcyBiYWNrIHRvIHRoZSBgYWdhaW5gIGxhYmVsLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYSBsaW5rIHdpdGggYW4gSUQgb2YgemVybyBzaG91bGQgYmUgc2tpcHBlZCB3aGVuIGl0ZXJhdGluZy4gVGhpcyBtYWtlcyBzZW5zZTogd2h5IHJldHVybiBhIGxpbmsgdGhhdCBoYXMgbm90IHlldCBiZWVuIGdpdmVuIGFuIElEP1xuXG5TbywgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGEgZ29vZCBkZWZlbnNlIGFnYWluc3QgcmV0dXJuaW5nIGludmFsaWQgb3IgdW5pbml0aWFsaXplZCBCUEYgbGlua3MgZHVyaW5nIHRoZSBJRFIgdHJhdmVyc2FsLiBJdCBwcmV2ZW50cyBhbiBpbmNyZW1lbnQgb2YgdGhlIGxpbmsncyByZWZlcmVuY2UgY291bnQgaWYgdGhlIElEIGlzIDAsIHNraXBwaW5nIHRoZSBsaW5rIGFuZCByZXRyeWluZy4gSSdkIG5lZWQgdG8gZGlnIGRlZXBlciB0byBmdWxseSB1bmRlcnN0YW5kIHdoeSBhIGxpbmsgbWlnaHQgYmUgaW4gdGhpcyBzdGF0ZSwgYnV0IHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIGFkZGluZyBzb21lIGltcG9ydGFudCByb2J1c3RuZXNzIHRvIHRoZSBJRFIgaXRlcmF0aW9uIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTA6MzIuMTIyMzg2MTgyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYwMzA6XFx0XFx0fSBlbHNlIHtcXG42MDMxOlxcdFxcdFxcdGxpbmsgPSBFUlJfUFRSKC1FTk9FTlQpO1xcbjYwMzI6XFx0XFx0fVxcbjYwMzM6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbjYwMzQ6XFx0XFx0cmV0dXJuIGxpbms7XFxuNjAzNTpcXHR9XFxuNjAzNjpcXHRcXG42MDM3OlxcdHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxcbjYwMzg6XFx0e1xcbjYwMzk6XFx0XFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbjYwNDA6XFx0XFxuNjA0MTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbjYwNDI6XFx0YWdhaW46XFxuNjA0MzpcXHRcXHRsaW5rID0gaWRyX2dldF9uZXh0KFxcdTAwMjZsaW5rX2lkciwgaWQpO1xcbjYwNDQ6XFx0XFx0aWYgKGxpbmspIHtcXG42MDQ1OlxcdFxcdFxcdGlmIChsaW5rLVxcdTAwM2VpZClcXG42MDQ2OlxcdFxcdFxcdFxcdGxpbmsgPSBicGZfbGlua19pbmNfbm90X3plcm8obGluayk7XFxuNjA0NzpcXHRcXHRcXHRlbHNlXFxuNjA0ODpcXHRcXHRcXHRcXHRsaW5rID0gRVJSX1BUUigtRUFHQUlOKTtcXG42MDQ5OlxcdFxcdFxcdGlmIChJU19FUlIobGluaykpIHtcXG42MDUwOlxcdFxcdFxcdFxcdCgqaWQpKys7XFxuNjA1MTpcXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcbjYwNTI6XFx0XFx0XFx0fVxcbjYwNTM6XFx0XFx0fVxcbjYwNTQ6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbjYwNTU6XFx0XFxuNjA1NjpcXHRcXHRyZXR1cm4gbGluaztcXG42MDU3OlxcdH1cXG42MDU4OlxcdFxcbjYwNTk6XFx0I2RlZmluZSBCUEZfTElOS19HRVRfRkRfQllfSURfTEFTVF9GSUVMRCBsaW5rX2lkXFxuNjA2MDpcXHRcXG42MDYxOlxcdHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2ZkX2J5X2lkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbjYwNjI6XFx0e1xcbjYwNjM6XFx0XFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbjYwNjQ6XFx0XFx0dTMyIGlkID0gYXR0ci1cXHUwMDNlbGlua19pZDtcXG42MDY1OlxcdFxcdGludCBmZDtcXG42MDY2OlxcdFxcbjYwNjc6XFx0XFx0aWYgKENIRUNLX0FUVFIoQlBGX0xJTktfR0VUX0ZEX0JZX0lEKSlcXG42MDY4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjYwNjk6XFx0XFxuNjA3MDpcXHRcXHRpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXFxuNjA3MTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjYwNzI6XFx0XFxuNjA3MzpcXHRcXHRsaW5rID0gYnBmX2xpbmtfYnlfaWQoaWQpO1xcbjYwNzQ6XFx0XFx0aWYgKElTX0VSUihsaW5rKSlcXG42MDc1OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGxpbmspO1xcbjYwNzY6XFx0XFxuNjA3NzpcXHRcXHRmZCA9IGJwZl9saW5rX25ld19mZChsaW5rKTtcXG42MDc4OlxcdFxcdGlmIChmZCBcXHUwMDNjIDApXFxuNjA3OTpcXHRcXHRcXHRicGZfbGlua19wdXRfZGlyZWN0KGxpbmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMDozMi4xMjI4ODg1NjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTMwMzk2OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YCBVc2FnZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQncyBzZWUuLi4gdGhlIG1vc3QgZGlyZWN0IHJvdXRlIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGlzICphY3R1YWxseSogYmVpbmcgaW52b2tlZC4gU28sIEkgbmVlZCB0byBmaW5kIGFsbCB0aGUgY2FsbCBzaXRlcy4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGluZ3M7IGEgZ29vZCBvbGQgYGdyZXBgIHNob3VsZCBkbyB0aGUgdHJpY2suIEEgcXVpY2sgYGdyZXBgIGZvciB0aGF0IHN5bWJvbCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzLiBUaGVuLCBJIGNhbiBzdGFydCBhbmFseXppbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGVzZSBjYWxscy4gVGhlIGRldmlsJ3MgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjEwOjM0LjI1MzI4ODQ0MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODUzMjAyODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9saW5rX2dldF9jdXJyX29yX25leHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0yOTA2PXN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2Zyb21fZmQodTMyIHVmZCk7XFxuaW5jbHVkZS9saW51eC9icGYuaDoyOTA3OnN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI5MDgtXFxuLS1cXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jPTEzPXN0YXRpYyB2b2lkICpicGZfbGlua19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxcbi0tXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0xNy1cXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jOjE4OlxcdGxpbmsgPSBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KFxcdTAwMjZpbmZvLVxcdTAwM2VsaW5rX2lkKTtcXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTE5LVxcdGlmICghbGluaylcXG4tLVxcbmtlcm5lbC9icGYvbGlua19pdGVyLmM9Mjc9c3RhdGljIHZvaWQgKmJwZl9saW5rX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4tLVxcbmtlcm5lbC9icGYvbGlua19pdGVyLmMtMzMtXFx0YnBmX2xpbmtfcHV0KChzdHJ1Y3QgYnBmX2xpbmsgKil2KTtcXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jOjM0OlxcdHJldHVybiBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KFxcdTAwMjZpbmZvLVxcdTAwM2VsaW5rX2lkKTtcXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTM1LX1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYwMTU9c3RydWN0IGJwZl9saW5rICpicGZfbGlua19ieV9pZCh1MzIgaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDM2LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMzc6c3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAzOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjEwOjM2LjEwNjQ5ODkzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0ODExOTczNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBCUEYgTGluayBJdGVyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gaG93IGBicGZfbGlua2AgaXRlcmF0aW9uIGFjdHVhbGx5IHdvcmtzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIGJlaGluZCB0cmF2ZXJzaW5nIHRoZXNlIGxpbmtzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGdldHRpbmcgdGhlIG5leHQgSUQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayBmb3Igc3lzdGVtIGNhbGxzIHRoYXQgYXJlIHJlbGF0ZWQgdG8gcmV0cmlldmluZyB0aGUgbmV4dCBvciBjdXJyZW50IElEIGluIGEgYGJwZl9saW5rYCBjaGFpbi4gU29tZXRoaW5nIGxpa2UgYGJwZl9saW5rX2dldF9uZXh0X2lkYCBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSwgb3IgcGVyaGFwcyBhIHNpbWlsYXIgZnVuY3Rpb24gbmFtZSB0aGF0IGhhbmRsZXMgaXRlcmF0aW9uIHdpdGhpbiB0aGUgQlBGIGxpbmsgc3RydWN0dXJlLlxuXG5NeSBwbGFuIGlzIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHVzZXMgb2YgdGhhdCBzcGVjaWZpYyBuYW1lLCBhbmQgaWYgSSBjYW4ndCBmaW5kIHRoYXQgZXhhY3QgbmFtZSwgSSdsbCBicm9hZGVuIHRoZSBzZWFyY2ggd2l0aCBzb21ldGhpbmcgbGlrZSBgQlBGX0xJTktfR0VUX05FWFRfSURgIHRvIGNhcHR1cmUgcG90ZW50aWFsIGNvbnN0YW50cyBvciBtYWNyb3MgaW52b2x2ZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzIGFwcHJvYWNoIHNob3VsZCByZXZlYWwgaG93IGRldmVsb3BlcnMgYXJlIGFjdHVhbGx5IHVzaW5nIHRoZXNlIGl0ZXJhdG9yIGZ1bmN0aW9ucyBvciByZWxhdGVkIEJQRiBsaW5rIGl0ZXJhdGlvbiBwcm9jZXNzZXMuIEkgZXhwZWN0IHRoYXQgdGhpcyB3aWxsIGhlbHAgbWUgY2xhcmlmeSB0aGUgbWVjaGFuaXNtcyBlbXBsb3llZCB0byBuYXZpZ2F0ZSBgYnBmX2xpbmtgIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMjIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMDozOS41ODc2OTg0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQyNDM3MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9MSU5LX0dFVF9ORVhUX0lEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMzI9dW5pb24gYnBmX2l0ZXJfbGlua19pbmZvIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC04MTYtICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6ODE3OiAqIEJQRl9MSU5LX0dFVF9ORVhUX0lEXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTgxOC0gKlxcdERlc2NyaXB0aW9uXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9OTU1PWVudW0gYnBmX2NtZCB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtOTg3LVxcdEJQRl9MSU5LX0dFVF9GRF9CWV9JRCxcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6OTg4OlxcdEJQRl9MSU5LX0dFVF9ORVhUX0lELFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC05ODktXFx0QlBGX0VOQUJMRV9TVEFUUyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDY9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1Mi1cXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDUzOlxcdGNhc2UgQlBGX0xJTktfR0VUX05FWFRfSUQ6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1NC1cXHRcXHRlcnIgPSBicGZfb2JqX2dldF9uZXh0X2lkKFxcdTAwMjZhdHRyLCB1YXR0ci51c2VyLFxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEzMj11bmlvbiBicGZfaXRlcl9saW5rX2luZm8ge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTgxNi0gKlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo4MTc6ICogQlBGX0xJTktfR0VUX05FWFRfSURcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtODE4LSAqXFx0RGVzY3JpcHRpb25cXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD05NTU9ZW51bSBicGZfY21kIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC05ODctXFx0QlBGX0xJTktfR0VUX0ZEX0JZX0lELFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo5ODg6XFx0QlBGX0xJTktfR0VUX05FWFRfSUQsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTk4OS1cXHRCUEZfRU5BQkxFX1NUQVRTLFxcbi0tXFxudG9vbHMvbGliL2JwZi9icGYuYz0xMTU4PWludCBicGZfbGlua19nZXRfbmV4dF9pZChfX3UzMiBzdGFydF9pZCwgX191MzIgKm5leHRfaWQpXFxudG9vbHMvbGliL2JwZi9icGYuYy0xMTU5LXtcXG50b29scy9saWIvYnBmL2JwZi5jOjExNjA6XFx0cmV0dXJuIGJwZl9vYmpfZ2V0X25leHRfaWQoc3RhcnRfaWQsIG5leHRfaWQsIEJQRl9MSU5LX0dFVF9ORVhUX0lEKTtcXG50b29scy9saWIvYnBmL2JwZi5jLTExNjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMDo0MS4yMzAxNTUwMjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzY4Mjg3NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBMaW5rIEl0ZXJhdG9yKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIHdvcmtpbmdzIG9mIHRoZSBCUEYgbGluayBpdGVyYXRvci4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBga2VybmVsL2JwZi9saW5rX2l0ZXIuY2AuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQncyBpbXBsZW1lbnRlZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyB0aGUgY29uZmlndXJhdGlvbnMgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBlbmFibGUgdGhpcyBpdGVyYXRvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byB0cm91Ymxlc2hvb3QgYW5kIGltcHJvdmUgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMDo0Mi45OTg0NTkzMTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9saW5rX2l0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qIENvcHlyaWdodCAoYykgMjAyMiBSZWQgSGF0LCBJbmMuICovXFxuICAgMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWx0ZXIuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGZfaWRzLmhcXHUwMDNlXFxuICAgODpcXHRcXG4gICA5OlxcdHN0cnVjdCBicGZfaXRlcl9zZXFfbGlua19pbmZvIHtcXG4gIDEwOlxcdFxcdHUzMiBsaW5rX2lkO1xcbiAgMTE6XFx0fTtcXG4gIDEyOlxcdFxcbiAgMTM6XFx0c3RhdGljIHZvaWQgKmJwZl9saW5rX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuICAxNDpcXHR7XFxuICAxNTpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2xpbmtfaW5mbyAqaW5mbyA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4gIDE2OlxcdFxcdHN0cnVjdCBicGZfbGluayAqbGluaztcXG4gIDE3OlxcdFxcbiAgMTg6XFx0XFx0bGluayA9IGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoXFx1MDAyNmluZm8tXFx1MDAzZWxpbmtfaWQpO1xcbiAgMTk6XFx0XFx0aWYgKCFsaW5rKVxcbiAgMjA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdGlmICgqcG9zID09IDApXFxuICAyMzpcXHRcXHRcXHQrKypwb3M7XFxuICAyNDpcXHRcXHRyZXR1cm4gbGluaztcXG4gIDI1OlxcdH1cXG4gIDI2OlxcdFxcbiAgMjc6XFx0c3RhdGljIHZvaWQgKmJwZl9saW5rX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4gIDI4OlxcdHtcXG4gIDI5OlxcdFxcdHN0cnVjdCBicGZfaXRlcl9zZXFfbGlua19pbmZvICppbmZvID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQrKypwb3M7XFxuICAzMjpcXHRcXHQrK2luZm8tXFx1MDAzZWxpbmtfaWQ7XFxuICAzMzpcXHRcXHRicGZfbGlua19wdXQoKHN0cnVjdCBicGZfbGluayAqKXYpO1xcbiAgMzQ6XFx0XFx0cmV0dXJuIGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoXFx1MDAyNmluZm8tXFx1MDAzZWxpbmtfaWQpO1xcbiAgMzU6XFx0fVxcbiAgMzY6XFx0XFxuICAzNzpcXHRzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9saW5rIHtcXG4gIDM4OlxcdFxcdF9fYnBmX21kX3B0cihzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqLCBtZXRhKTtcXG4gIDM5OlxcdFxcdF9fYnBmX21kX3B0cihzdHJ1Y3QgYnBmX2xpbmsgKiwgbGluayk7XFxuICA0MDpcXHR9O1xcbiAgNDE6XFx0XFxuICA0MjpcXHRERUZJTkVfQlBGX0lURVJfRlVOQyhicGZfbGluaywgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsIHN0cnVjdCBicGZfbGluayAqbGluaylcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0c3RhdGljIGludCBfX2JwZl9saW5rX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBib29sIGluX3N0b3ApXFxuICA0NTpcXHR7XFxuICA0NjpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9saW5rIGN0eDtcXG4gIDQ3OlxcdFxcdHN0cnVjdCBicGZfaXRlcl9tZXRhIG1ldGE7XFxuICA0ODpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuICA0OTpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gIDUwOlxcdFxcbiAgNTE6XFx0XFx0Y3R4Lm1ldGEgPSBcXHUwMDI2bWV0YTtcXG4gIDUyOlxcdFxcdGN0eC5saW5rID0gdjtcXG4gIDUzOlxcdFxcdG1ldGEuc2VxID0gc2VxO1xcbiAgNTQ6XFx0XFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFxcdTAwMjZtZXRhLCBpbl9zdG9wKTtcXG4gIDU1OlxcdFxcdGlmIChwcm9nKVxcbiAgNTY6XFx0XFx0XFx0cmV0ID0gYnBmX2l0ZXJfcnVuX3Byb2cocHJvZywgXFx1MDAyNmN0eCk7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdHJldHVybiByZXQ7XFxuICA1OTpcXHR9XFxuICA2MDpcXHRcXG4gIDYxOlxcdHN0YXRpYyBpbnQgYnBmX2xpbmtfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuICA2MjpcXHR7XFxuICA2MzpcXHRcXHRyZXR1cm4gX19icGZfbGlua19zZXFfc2hvdyhzZXEsIHYsIGZhbHNlKTtcXG4gIDY0OlxcdH1cXG4gIDY1OlxcdFxcbiAgNjY6XFx0c3RhdGljIHZvaWQgYnBmX2xpbmtfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuICA2NzpcXHR7XFxuICA2ODpcXHRcXHRpZiAoIXYpXFxuICA2OTpcXHRcXHRcXHQodm9pZClfX2JwZl9saW5rX3NlcV9zaG93KHNlcSwgdiwgdHJ1ZSk7XFxuICA3MDpcXHRcXHRlbHNlXFxuICA3MTpcXHRcXHRcXHRicGZfbGlua19wdXQoKHN0cnVjdCBicGZfbGluayAqKXYpO1xcbiAgNzI6XFx0fVxcbiAgNzM6XFx0XFxuICA3NDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9saW5rX3NlcV9vcHMgPSB7XFxuICA3NTpcXHRcXHQuc3RhcnRcXHQ9IGJwZl9saW5rX3NlcV9zdGFydCxcXG4gIDc2OlxcdFxcdC5uZXh0XFx0PSBicGZfbGlua19zZXFfbmV4dCxcXG4gIDc3OlxcdFxcdC5zdG9wXFx0PSBicGZfbGlua19zZXFfc3RvcCxcXG4gIDc4OlxcdFxcdC5zaG93XFx0PSBicGZfbGlua19zZXFfc2hvdyxcXG4gIDc5OlxcdH07XFxuICA4MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTA6NDIuOTk4NTM2NjI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5NDc5MzA4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSdkIGFydGljdWxhdGUgaXQsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqVHJvdWJsZXNob290aW5nIGEgUG90ZW50aWFsIEJQRiBJRFIgSXNzdWUqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byBnZXQgdGhlIGNvbW1pdCBoaXN0b3J5LiBJIHdhbnQgdG8gc2VlIHRoZSBgZ2l0IGxvZ2AgdG8gcHJvdmlkZSBjb250ZXh0LiBXaGF0J3MgdGhlIHByb2JsZW0gdGhpcyBjaGFuZ2Ugd2FzIGludGVuZGVkIHRvIGZpeD8gVGhhdCdzIGFsd2F5cyBzdGVwIG9uZS5cblxuT2theSwgbGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAgb3IganVzdCBxdWlja2x5IGNoZWNrIHdoYXQgYGxpbmstXHUwMDNlaWRgIGFjdHVhbGx5ICpyZXByZXNlbnRzKiBpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYW5kIHRoZSBzZW1hbnRpY3MgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCBtZWFucyB0byBoYXZlIGEgemVybyBJRCBpbiBhIGBsaW5rX2lkcmAgY29udGV4dC4gVGhhdCdzIGltbWVkaWF0ZWx5IHN1c3BpY2lvdXMuIFdoeSB3b3VsZCB3ZSBiZSBoaXR0aW5nIHRoYXQ/IFplcm8gaXMgdXN1YWxseSBhIHNlbnRpbmVsIHZhbHVlLCBvciBhbiB1bmluaXRpYWxpemVkIHN0YXRlLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBsaW5rLVx1MDAzZWlkYCBiZWluZyB6ZXJvIHdoaWxlIGluIGFuIElEUj8gVGhhdCBkb2Vzbid0IG1ha2UgaW50dWl0aXZlIHNlbnNlLiBNeSBrbm93bGVkZ2Ugb2YgSURScyB0ZWxscyBtZSB0aGF0IGlzbid0IHZhbGlkLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBoYXBwZW5pbmcuIFRoZSBJRFIgaXMgc3VwcG9zZWQgdG8gbWFuYWdlIG5vbi16ZXJvIElEcywgYW5kIHVzdWFsbHksIHRoZXJlIGFyZSBhbGxvY2F0aW9uIG9yIHJlbGVhc2UgcGF0aHMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIFNvIEknbGwgZ28gc3RyYWlnaHQgdG8gc2VhcmNoaW5nIGZvciBgbGlua19pZHJgIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEknbGwgZm9jdXMgb24gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBpbml0aWFsbHksIGJlY2F1c2UgdGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIGZvciBCUEYtcmVsYXRlZCBJRFIgaW50ZXJhY3Rpb25zLiBUaGlzIHdpbGwgaGVscCBtZSB0cmFjZSB0aGUgY2FsbCBwYXRoIGFuZCBzZWUgd2hlcmUgdGhpcyBgbGluay1cdTAwM2VpZGAgaXMgYmVpbmcgc2V0LCBhbmQgKndoeSogaXQgbWlnaHQgYmUgemVybyBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzY1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMDo0NS45NDY0NzA5OTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDk2ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpbmtfaWRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTY0PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWFwX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NTpzdGF0aWMgREVGSU5FX0lEUihsaW5rX2lkcik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjY6c3RhdGljIERFRklORV9TUElOTE9DSyhsaW5rX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Ny1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTMyNTk9c3RhdGljIHZvaWQgYnBmX2xpbmtfZnJlZV9pZChpbnQgaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjYzLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNjQ6XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjY1OlxcdGlkcl9yZW1vdmUoXFx1MDAyNmxpbmtfaWRyLCBpZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzI2NjpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI2Ny19XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNDc2PXN0YXRpYyBpbnQgYnBmX2xpbmtfYWxsb2NfaWQoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ4MC1cXHRpZHJfcHJlbG9hZChHRlBfS0VSTkVMKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDgxOlxcdHNwaW5fbG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ4MjpcXHRpZCA9IGlkcl9hbGxvY19jeWNsaWMoXFx1MDAyNmxpbmtfaWRyLCBsaW5rLCAxLCBJTlRfTUFYLCBHRlBfQVRPTUlDKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDgzOlxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDg0LVxcdGlkcl9wcmVsb2FkX2VuZCgpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ4OS0vKiBQcmVwYXJlIGJwZl9saW5rIHRvIGJlIGV4cG9zZWQgdG8gdXNlci1zcGFjZSBieSBhbGxvY2F0aW5nIGFub25faW5vZGUgZmlsZSxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDkwOiAqIHJlc2VydmluZyB1bnVzZWQgRkQgYW5kIGFsbG9jYXRpbmcgSUQgZnJvbSBsaW5rX2lkci4gVGhpcyBpcyB0byBiZSBwYWlyZWRcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDkxLSAqIHdpdGggYnBmX2xpbmtfc2V0dGxlKCkgdG8gaW5zdGFsbCBGRCBhbmQgSUQgYW5kIGV4cG9zZSBicGZfbGluayB0b1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzUzMz1pbnQgYnBmX2xpbmtfc2V0dGxlKHN0cnVjdCBicGZfbGlua19wcmltZXIgKnByaW1lcilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MzUtXFx0LyogbWFrZSBicGZfbGluayBmZXRjaGFibGUgYnkgSUQgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTM2OlxcdHNwaW5fbG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzNy1cXHRwcmltZXItXFx1MDAzZWxpbmstXFx1MDAzZWlkID0gcHJpbWVyLVxcdTAwM2VpZDtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTM4OlxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTM5LVxcdC8qIG1ha2UgYnBmX2xpbmsgZmV0Y2hhYmxlIGJ5IEZEICovXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MDE1PXN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfYnlfaWQodTMyIGlkKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyMS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIyOlxcdHNwaW5fbG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyMy1cXHQvKiBiZWZvcmUgbGluayBpcyBcXFwic2V0dGxlZFxcXCIsIElEIGlzIDAsIHByZXRlbmQgaXQgZG9lc24ndCBleGlzdCB5ZXQgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDI0OlxcdGxpbmsgPSBpZHJfZmluZChcXHUwMDI2bGlua19pZHIsIGlkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDI1LVxcdGlmIChsaW5rKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDMyLVxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDMzOlxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDM0LVxcdHJldHVybiBsaW5rO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjAzNz1zdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2dldF9jdXJyX29yX25leHQodTMyICppZClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNDAtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjA0MTpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNDItYWdhaW46XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjA0MzpcXHRsaW5rID0gaWRyX2dldF9uZXh0KFxcdTAwMjZsaW5rX2lkciwgaWQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNDQtXFx0aWYgKGxpbmspIHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNTMtXFx0fVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwNTQ6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNTUtXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzA2PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NTQtXFx0XFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDU1OlxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmxpbmtfaWRyLCBcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1Ni1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTA6NDUuOTkyOTcyODI0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyOTQyNDEzMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBCUEYgTGluayBJRCBSZXRyaWV2YWwqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IGhvdyBCUEYgbGluayBJRHMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgYnBmX2xpbmtfYnlfaWRgLiBSaWdodCwgdGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoZSBgYnBmX2xpbmtfYnlfaWRgIGZ1bmN0aW9uIGl0c2VsZi4gVGhlIGZ1bmN0aW9uIHRha2VzIGEgbGluayBJRCBhcyBpbnB1dC4gSWYgdGhlIElEIGlzIHplcm8sIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYW4gZXJyb3IsIGluZGljYXRpbmcgbm8gc3VjaCBsaW5rLiBTZWVtcyBsb2dpY2FsLCBnaXZlbiBob3cgdGhlIElEIGlzIGFzc2lnbmVkLiBUaGVuLCBhIHNwaW5sb2NrIGlzIGFjcXVpcmVkIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGBsaW5rX2lkcmAsIHdoaWNoIGlzIGV4cGVjdGVkLiBUaGUgYGlkcl9maW5kYCBjYWxsIGF0dGVtcHRzIHRvIGZpbmQgdGhlIEJQRiBsaW5rIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBJRCB3aXRoaW4gdGhlIElEUiAoSW50ZWdlciBJRCBSZWdpc3RyeSkuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQ6ICBpZiBhIGxpbmsgaXMgZm91bmQsIHRoZXJlJ3MgYSBjaGVjayBvbiBgbGluay1cdTAwM2VpZGAuIElmIGBsaW5rLVx1MDAzZWlkYCBpcyB6ZXJvLCB3ZSByZXR1cm4gYEVBR0FJTmAuIFRoaXMgbGlrZWx5IGluZGljYXRlcyB0aGF0IHRoZSBsaW5rIGlzIGluIGFuIGludGVybWVkaWF0ZSBzdGF0ZSwgbm90IGZ1bGx5IGluaXRpYWxpemVkIG9yIFwic2V0dGxlZFwiIHlldCwgc28gYWNjZXNzaW5nIGl0IGlzbid0IGFsbG93ZWQuIFRoZSBgYnBmX2xpbmtfaW5jX25vdF96ZXJvYCBjYWxsIGlzIGludGVyZXN0aW5nLCBsZXQgbWUgbG9vayBpbnRvIHdoYXQgdGhhdCBpcyBhYm91dCwgYnV0IEkgZXhwZWN0IGl0IHByb3ZpZGVzIHNvbWUga2luZCBvZiByZWZlcmVuY2UgY291bnRpbmcsIHByZXN1bWFibHkgdG8gbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGxpbmsgb2JqZWN0LlxuXG5JZiB0aGUgbGluayBpc24ndCBmb3VuZCBhdCBhbGwsIHdlIHJldHVybiBgRU5PRU5UYC4gRmluYWxseSwgdGhlIHNwaW5sb2NrIGlzIHJlbGVhc2VkLCBhbmQgdGhlIGxpbmsgcG9pbnRlciAob3IgZXJyb3IgcG9pbnRlcikgaXMgcmV0dXJuZWQuIFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSBzdGFuZGFyZCBhbmQgcm9idXN0IGFwcHJvYWNoLCBwcm90ZWN0aW5nIHRoZSBJRFIgd2l0aCBhIGxvY2sgYW5kIGhhbmRsaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aCB0aGUgYGxpbmstXHUwMDNlaWRgIGNoZWNrLiBJdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IHNvbWV0aGluZyBlbHNlIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgd2hpY2ggbWlnaHQgYWxzbyBtYWtlIHVzZSBvZiBhIHJlZmVyZW5jZSBjb3VudGVyLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgaW52ZXN0aWdhdGUgYGJwZl9vYmpfZ2V0X25leHRfaWRgLiAgSSdsbCBkaXZlIGludG8gdGhlIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgZmlsZSB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGltcGxlbWVudGVkLiBJIHdpbGwgc2VlIGlmIHRoZXJlIGlzIGFueSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTA6NTguOTM1Mzg4NTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ3MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQwMjA6XFx0XFx0aW5mby1cXHUwMDNlcGVyZl9ldmVudC5rcHJvYmUuY29va2llID0gZXZlbnQtXFx1MDAzZWJwZl9jb29raWU7XFxuNDAyMTpcXHRcXHRyZXR1cm4gMDtcXG40MDIyOlxcdH1cXG40MDIzOlxcdFxcbjQwMjQ6XFx0c3RhdGljIHZvaWQgYnBmX3BlcmZfbGlua19mZGluZm9fa3Byb2JlKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG40MDI1OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbjQwMjY6XFx0e1xcbjQwMjc6XFx0XFx0Y29uc3QgY2hhciAqbmFtZTtcXG40MDI4OlxcdFxcdGludCBlcnI7XFxuNDAyOTpcXHRcXHR1MzIgcHJvZ19pZCwgdHlwZTtcXG40MDMwOlxcdFxcdHU2NCBvZmZzZXQsIGFkZHI7XFxuNDAzMTpcXHRcXHR1bnNpZ25lZCBsb25nIG1pc3NlZDtcXG40MDMyOlxcdFxcbjQwMzM6XFx0XFx0ZXJyID0gYnBmX2dldF9wZXJmX2V2ZW50X2luZm8oZXZlbnQsIFxcdTAwMjZwcm9nX2lkLCBcXHUwMDI2dHlwZSwgXFx1MDAyNm5hbWUsXFxuNDAzNDpcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2b2Zmc2V0LCBcXHUwMDI2YWRkciwgXFx1MDAyNm1pc3NlZCk7XFxuNDAzNTpcXHRcXHRpZiAoZXJyKVxcbjQwMzY6XFx0XFx0XFx0cmV0dXJuO1xcbjQwMzc6XFx0XFxuNDAzODpcXHRcXHRzZXFfcHJpbnRmKHNlcSxcXG40MDM5OlxcdFxcdFxcdCAgIFxcXCJuYW1lOlxcXFx0JXNcXFxcblxcXCJcXG40MDQwOlxcdFxcdFxcdCAgIFxcXCJvZmZzZXQ6XFxcXHQlI2xseFxcXFxuXFxcIlxcbjQwNDE6XFx0XFx0XFx0ICAgXFxcIm1pc3NlZDpcXFxcdCVsdVxcXFxuXFxcIlxcbjQwNDI6XFx0XFx0XFx0ICAgXFxcImFkZHI6XFxcXHQlI2xseFxcXFxuXFxcIlxcbjQwNDM6XFx0XFx0XFx0ICAgXFxcImV2ZW50X3R5cGU6XFxcXHQlc1xcXFxuXFxcIlxcbjQwNDQ6XFx0XFx0XFx0ICAgXFxcImNvb2tpZTpcXFxcdCVsbHVcXFxcblxcXCIsXFxuNDA0NTpcXHRcXHRcXHQgICBuYW1lLCBvZmZzZXQsIG1pc3NlZCwgYWRkcixcXG40MDQ2OlxcdFxcdFxcdCAgIHR5cGUgPT0gQlBGX0ZEX1RZUEVfS1JFVFBST0JFID8gIFxcXCJrcmV0cHJvYmVcXFwiIDogXFxcImtwcm9iZVxcXCIsXFxuNDA0NzpcXHRcXHRcXHQgICBldmVudC1cXHUwMDNlYnBmX2Nvb2tpZSk7XFxuNDA0ODpcXHR9XFxuNDA0OTpcXHQjZW5kaWZcXG40MDUwOlxcdFxcbjQwNTE6XFx0I2lmZGVmIENPTkZJR19VUFJPQkVfRVZFTlRTXFxuNDA1MjpcXHRzdGF0aWMgaW50IGJwZl9wZXJmX2xpbmtfZmlsbF91cHJvYmUoY29uc3Qgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbjQwNTM6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcXG40MDU0OlxcdHtcXG40MDU1OlxcdFxcdHU2NCByZWZfY3RyX29mZnNldCwgb2Zmc2V0O1xcbjQwNTY6XFx0XFx0Y2hhciBfX3VzZXIgKnVuYW1lO1xcbjQwNTc6XFx0XFx0dTMyIHVsZW4sIHR5cGU7XFxuNDA1ODpcXHRcXHRpbnQgZXJyO1xcbjQwNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjEwOjU4LjkzNTczOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTY2MjE3OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBgYnBmX29ial9nZXRfbmV4dF9pZGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX29ial9nZXRfbmV4dF9pZGAuIFJpZ2h0LCBsZXQncyB0cmFjZSB0aGlzIGRvd24uIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGdvaW5nIHRvIGJlIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIGZvciB0aGUgY29yZSBCUEYgc3lzY2FsbCBpbXBsZW1lbnRhdGlvbnMuIEl0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gb2JqZWN0IHJldHJpZXZhbCBhbmQgbWFuaXB1bGF0aW9uIGZyb20gdXNlcnNwYWNlLiBMZXQncyBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIElmIGl0J3Mgbm90IHRoZXJlLCBJJ2xsIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2VhcmNoIC0gcHJvYmFibHkgbG9vayBhdCByZWxhdGVkIHNvdXJjZSBmaWxlcyB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIG9yIG1heWJlIGV2ZW4gcmVsYXRlZCBoZWFkZXIgZmlsZXMgaWYgaXQgaXMgYSBtYWNybyBvciBpbmxpbmUgZnVuY3Rpb24uIEJ1dCwgbXkgbW9uZXkgaXMgb24gYHN5c2NhbGwuY2AgZm9yIHN0YXJ0ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MDAuOTAxOTYyMzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTY4NTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfb2JqX2dldF9uZXh0X2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTQ3ODI9c3RhdGljIGludCBicGZfcHJvZ190ZXN0X3J1bihjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ4MTEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDgxMjpzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDgxMy1cXHRcXHRcXHQgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDY9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5MC1cXHRjYXNlIEJQRl9QUk9HX0dFVF9ORVhUX0lEOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTE6XFx0XFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzkyLVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnByb2dfaWRyLCBcXHUwMDI2cHJvZ19pZHJfbG9jayk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mzk0LVxcdGNhc2UgQlBGX01BUF9HRVRfTkVYVF9JRDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2Mzk1OlxcdFxcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5Ni1cXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZtYXBfaWRyLCBcXHUwMDI2bWFwX2lkcl9sb2NrKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTgtXFx0Y2FzZSBCUEZfQlRGX0dFVF9ORVhUX0lEOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTk6XFx0XFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDAwLVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmJ0Zl9pZHIsIFxcdTAwMjZidGZfaWRyX2xvY2spO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1My1cXHRjYXNlIEJQRl9MSU5LX0dFVF9ORVhUX0lEOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NTQ6XFx0XFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDU1LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmxpbmtfaWRyLCBcXHUwMDI2bGlua19pZHJfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjExOjAxLjM0NzY1Mjk0M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDE2ODk1MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgT2JqZWN0IElEIFJldHJpZXZhbCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBicGZfb2JqX2dldF9uZXh0X2lkYCBhcm91bmQgbGluZSA0ODEyIGluIHRoZSByZWxldmFudCBjb2RlYmFzZS4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgQlBGIG9iamVjdCBJRCBtYW5hZ2VtZW50IGlzIGhhbmRsZWQgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSUQgYWxsb2NhdGlvbiBvciByZXRyaWV2YWwgaXMgaW1wbGVtZW50ZWQuIEkgd2FudCB0byBmaWd1cmUgb3V0IHRoZSBJRCBlbnVtZXJhdGlvbiBwcm9jZXNzLiBJcyBpdCB0aHJlYWQtc2FmZSwgYW5kIGRvZXMgaXQgYXZvaWQgY29udGVudGlvbj8gRG9lcyBpdCB1c2UgYSBzaW1wbGUgY291bnRlciwgb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBsaWtlIGEgYml0bWFwIG9yIGEgaGFzaCB0YWJsZT8gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgY3J1Y2lhbCBmb3IgYW55IHdvcmsgdGhhdCBpbnRlcmFjdHMgd2l0aCBhbmQgcmVsaWVzIG9uIG9iamVjdCBJRCByZXRyaWV2YWwgaW4gQlBGLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjExOjAzLjM2NDU1MTMxM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDgxMixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDgxMjpcXHRzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuNDgxMzpcXHRcXHRcXHRcXHQgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcXG40ODE0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWRyICppZHIsXFxuNDgxNTpcXHRcXHRcXHRcXHQgICAgICAgc3BpbmxvY2tfdCAqbG9jaylcXG40ODE2OlxcdHtcXG40ODE3OlxcdFxcdHUzMiBuZXh0X2lkID0gYXR0ci1cXHUwMDNlc3RhcnRfaWQ7XFxuNDgxODpcXHRcXHRpbnQgZXJyID0gMDtcXG40ODE5OlxcdFxcbjQ4MjA6XFx0XFx0aWYgKENIRUNLX0FUVFIoQlBGX09CSl9HRVRfTkVYVF9JRCkgfHwgbmV4dF9pZCBcXHUwMDNlPSBJTlRfTUFYKVxcbjQ4MjE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDgyMjpcXHRcXG40ODIzOlxcdFxcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcXG40ODI0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuNDgyNTpcXHRcXG40ODI2OlxcdFxcdG5leHRfaWQrKztcXG40ODI3OlxcdFxcdHNwaW5fbG9ja19iaChsb2NrKTtcXG40ODI4OlxcdFxcdGlmICghaWRyX2dldF9uZXh0KGlkciwgXFx1MDAyNm5leHRfaWQpKVxcbjQ4Mjk6XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG40ODMwOlxcdFxcdHNwaW5fdW5sb2NrX2JoKGxvY2spO1xcbjQ4MzE6XFx0XFxuNDgzMjpcXHRcXHRpZiAoIWVycilcXG40ODMzOlxcdFxcdFxcdGVyciA9IHB1dF91c2VyKG5leHRfaWQsIFxcdTAwMjZ1YXR0ci1cXHUwMDNlbmV4dF9pZCk7XFxuNDgzNDpcXHRcXG40ODM1OlxcdFxcdHJldHVybiBlcnI7XFxuNDgzNjpcXHR9XFxuNDgzNzpcXHRcXG40ODM4OlxcdHN0cnVjdCBicGZfbWFwICpicGZfbWFwX2dldF9jdXJyX29yX25leHQodTMyICppZClcXG40ODM5OlxcdHtcXG40ODQwOlxcdFxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuNDg0MTpcXHRcXG40ODQyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bWFwX2lkcl9sb2NrKTtcXG40ODQzOlxcdGFnYWluOlxcbjQ4NDQ6XFx0XFx0bWFwID0gaWRyX2dldF9uZXh0KFxcdTAwMjZtYXBfaWRyLCBpZCk7XFxuNDg0NTpcXHRcXHRpZiAobWFwKSB7XFxuNDg0NjpcXHRcXHRcXHRtYXAgPSBfX2JwZl9tYXBfaW5jX25vdF96ZXJvKG1hcCwgZmFsc2UpO1xcbjQ4NDc6XFx0XFx0XFx0aWYgKElTX0VSUihtYXApKSB7XFxuNDg0ODpcXHRcXHRcXHRcXHQoKmlkKSsrO1xcbjQ4NDk6XFx0XFx0XFx0XFx0Z290byBhZ2FpbjtcXG40ODUwOlxcdFxcdFxcdH1cXG40ODUxOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MDMuMzY0NzY3NzIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY3NjkzMzc4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJQRiBMaW5rIEl0ZXJhdG9yIFJhY2UgQ29uZGl0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldoeSBhcmUgdGhleSBhZGRpbmcgdGhpcyBjaGVjayBmb3IgYGxpbmstXHUwMDNlaWRgP1wiLiBJIHNlZSB0aGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kIHRoZSBjb3JlIGRpZmZlcmVuY2UgaXMgdGhpcyBhZGRlZCBjb25kaXRpb25hbDogYGlmIChsaW5rLVx1MDAzZWlkKWAuICBUaGF0IHNpZ25hbHMgYSByYWNlIGNvbmRpdGlvbiBvciBzb21lIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGhvdyBsaW5rcyBhcmUgYmVpbmcgaGFuZGxlZCBkdXJpbmcgY3JlYXRpb24gYW5kIGl0ZXJhdGlvbi5cblxuTXkgZXhwZXJ0aXNlIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgbGluayBjcmVhdGlvbiBwcm9jZXNzLiAgSSBzZWUgdGhhdCBgYnBmX2xpbmtfcHJpbWVgIGFsbG9jYXRlcyBhbiBJRCBpbiB0aGUgYGxpbmtfaWRyYCwgYnV0IGNydWNpYWxseSwgaXQgKmRvZXNuJ3QqIGltbWVkaWF0ZWx5IHNldCB0aGUgYGxpbmstXHUwMDNlaWRgIGZpZWxkIGl0c2VsZi4gVGhhdCdzIG9ubHkgaGFwcGVuaW5nIGluIGBicGZfbGlua19zZXR0bGUoKWAuICBUaGlzIGlzIHRoZSBrZXkuICBCZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMsIHRoZXJlJ3MgYSB3aW5kb3cgb2YgdnVsbmVyYWJpbGl0eS5cblxuSWYgYSBCUEYgbGluayBpdGVyYXRvciDigJMgdGhlIHBhcnQgb2YgdGhlIGtlcm5lbCByZXNwb25zaWJsZSBmb3IgdHJhdmVyc2luZyB0aGVzZSBsaW5rcyDigJMgaXMgcnVubmluZyBjb25jdXJyZW50bHksIGl0IGNvdWxkIHBvdGVudGlhbGx5IHBpY2sgdXAgYSBsaW5rIHdob3NlIGBpZGAgaGFzbid0IGJlZW4gc2V0IHlldCAoaS5lLiwgYGxpbmstXHUwMDNlaWRgIGlzIHN0aWxsIDApLiBUaGlzICppcyogYSByYWNlIGNvbmRpdGlvbi4gSW4gYGJwZl9saW5rX2J5X2lkYCwgdGhlIGNvZGUgYWxyZWFkeSBoYW5kbGVkIHRoaXMuIElmIGBsaW5rLVx1MDAzZWlkYCBpcyAwLCBpdCBrbm93cyB0byB0cmVhdCB0aGUgbGluayBhcyBpZiBpdCBkb2Vzbid0IGV4aXN0LiBOb3csIGl0IHNlZW1zLCB0aGF0J3MgYmVpbmcgZXh0ZW5kZWQgdG8gdGhlIGl0ZXJhdG9yLlxuXG5NeSBicmFpbiBpcyByYWNpbmcsIHRoaW5raW5nIG9mIHRoZSBjb25zZXF1ZW5jZXMuICBJZiB0aGUgaXRlcmF0b3IgZ3JhYnMgYSBsaW5rIHdpdGggYGxpbmstXHUwMDNlaWQgPT0gMGAsIHRoZSBpdGVyYXRvciBjYW4gZXhwb3NlIHRoaXMgcGFydGlhbGx5IGluaXRpYWxpemVkIGxpbmsgdG8gdXNlcnNwYWNlIG9yIHRoZSBCUEYgcHJvZ3JhbSwgYW5kIGl0IGV4cG9zZXMgd2l0aCBJRCAwLiBGdXJ0aGVyLCBJIGltbWVkaWF0ZWx5IGNvbnNpZGVyIHdoYXQgaGFwcGVucyBpZiBgYnBmX2xpbmtfY2xlYW51cGAgcnVucyAqYWZ0ZXIqIHRoZSBpdGVyYXRvciBzZWVzIHRoZSB1bmluaXRpYWxpemVkIGxpbmsuIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgZW50cnkgZnJvbSB0aGUgYElEUmAgYW5kIGZyZWVzIHRoZSBmaWxlIGFuZCBmaWxlIGRlc2NyaXB0b3IuIFRoZSBmYWN0IHRoYXQgdGhlIGl0ZXJhdG9yICppbmMnZCogdGhlIGxpbmsgaXMgbm93IGNvbmNlcm5pbmcuIFRoZSBsaW5rIHdhcyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQhIFRoaXMgcG90ZW50aWFsbHkgaW50cm9kdWNlcyBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLlxuXG5UaGUgb3JpZ2luYWwgY29kZSBpbiBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgKmRpZG4ndCogaGF2ZSB0aGlzIGNoZWNrLCBtZWFuaW5nIGl0IHdhcyB2dWxuZXJhYmxlLiAgVGhlIHBhdGNoIGZpeGVzIHRoZSByYWNlIVxuSSBkb24ndCBuZWVkIHRvIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2UsIHRoZSBjb2RlIHJldmVhbHMgdGhlIGludGVudCBwZXJmZWN0bHkuIFRoaXMgaXMgYSBzdWJ0bGUgYnV0IGNyaXRpY2FsIGZpeCBpbiBhIGNyaXRpY2FsIGtlcm5lbCBzdWJzeXN0ZW0uXG5UaGUgc3Vic3lzdGVtIGlzIEJQRiBjb3JlLiBUaGUgZnVuY3Rpb24gaXMgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dC5cblxuTm93IEkgbmVlZCB0byBzZWUgaG93IHRoZSBpdGVyYXRvciBpcyBjcmVhdGVkIGFuZCBleGVjdXRlZCwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LCBidXQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGEgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIHBhcnRpYWxseSBpbml0aWFsaXplZCBCUEYgbGlua3MgYW5kIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgaXRlcmF0aW9uIGhhcyBiZWVuIHJlc29sdmVkIGJ5IHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMjIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MTAuMTM0MTA4NDYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY5MDk4NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9saW5rX3NlcV9vcHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9saW5rX2l0ZXIuYz02Nj1zdGF0aWMgdm9pZCBicGZfbGlua19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbmtlcm5lbC9icGYvbGlua19pdGVyLmMtNzMtXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzo3NDpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9saW5rX3NlcV9vcHMgPSB7XFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy03NS1cXHQuc3RhcnRcXHQ9IGJwZl9saW5rX3NlcV9zdGFydCxcXG4tLVxcbmtlcm5lbC9icGYvbGlua19pdGVyLmM9ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBicGZfbGlua19zZXFfaW5mbyA9IHtcXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jOjg0OlxcdC5zZXFfb3BzXFx0XFx0PSBcXHUwMDI2YnBmX2xpbmtfc2VxX29wcyxcXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTg1LVxcdC5pbml0X3NlcV9wcml2YXRlXFx0PSBOVUxMLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMToxMS43MDMyMTU4ODhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAwNzA0NjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbGlua19pdGVyLmNgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQlBGIGxpbmsgaXRlcmF0b3IgaW1wbGVtZW50YXRpb24uIEknbSB0aGlua2luZyB0aGUgaXNzdWUgSSdtIGNoYXNpbmcgaXMgcHJvYmFibHkgYXJvdW5kIHdoZXJlIHRoZSBsaW5rcyBhcmUgYWN0dWFsbHkgaXRlcmF0ZWQsIHdoaWNoIGlzIG9mdGVuIGEgc291cmNlIG9mIHN1YnRsZSBCUEYgcHJvZ3JhbSBlcnJvcnMuIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBga2VybmVsL2JwZi9saW5rX2l0ZXIuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4My4gSG9wZWZ1bGx5LCB0aGF0J2xsIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHdoYXRldmVyIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMToxMy43MTAyNjU0ODhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9saW5rX2l0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHRcXHRlbHNlXFxuICA3MTpcXHRcXHRcXHRicGZfbGlua19wdXQoKHN0cnVjdCBicGZfbGluayAqKXYpO1xcbiAgNzI6XFx0fVxcbiAgNzM6XFx0XFxuICA3NDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9saW5rX3NlcV9vcHMgPSB7XFxuICA3NTpcXHRcXHQuc3RhcnRcXHQ9IGJwZl9saW5rX3NlcV9zdGFydCxcXG4gIDc2OlxcdFxcdC5uZXh0XFx0PSBicGZfbGlua19zZXFfbmV4dCxcXG4gIDc3OlxcdFxcdC5zdG9wXFx0PSBicGZfbGlua19zZXFfc3RvcCxcXG4gIDc4OlxcdFxcdC5zaG93XFx0PSBicGZfbGlua19zZXFfc2hvdyxcXG4gIDc5OlxcdH07XFxuICA4MDpcXHRcXG4gIDgxOlxcdEJURl9JRF9MSVNUX1NJTkdMRShidGZfYnBmX2xpbmtfaWQsIHN0cnVjdCwgYnBmX2xpbmspXFxuICA4MjpcXHRcXG4gIDgzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gYnBmX2xpbmtfc2VxX2luZm8gPSB7XFxuICA4NDpcXHRcXHQuc2VxX29wc1xcdFxcdD0gXFx1MDAyNmJwZl9saW5rX3NlcV9vcHMsXFxuICA4NTpcXHRcXHQuaW5pdF9zZXFfcHJpdmF0ZVxcdD0gTlVMTCxcXG4gIDg2OlxcdFxcdC5maW5pX3NlcV9wcml2YXRlXFx0PSBOVUxMLFxcbiAgODc6XFx0XFx0LnNlcV9wcml2X3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2xpbmtfaW5mbyksXFxuICA4ODpcXHR9O1xcbiAgODk6XFx0XFxuICA5MDpcXHRzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfbGlua19yZWdfaW5mbyA9IHtcXG4gIDkxOlxcdFxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJicGZfbGlua1xcXCIsXFxuICA5MjpcXHRcXHQuY3R4X2FyZ19pbmZvX3NpemVcXHQ9IDEsXFxuICA5MzpcXHRcXHQuY3R4X2FyZ19pbmZvXFx0XFx0PSB7XFxuICA5NDpcXHRcXHRcXHR7IG9mZnNldG9mKHN0cnVjdCBicGZfaXRlcl9fYnBmX2xpbmssIGxpbmspLFxcbiAgOTU6XFx0XFx0XFx0ICBQVFJfVE9fQlRGX0lEX09SX05VTEwgfSxcXG4gIDk2OlxcdFxcdH0sXFxuICA5NzpcXHRcXHQuc2VxX2luZm9cXHRcXHQ9IFxcdTAwMjZicGZfbGlua19zZXFfaW5mbyxcXG4gIDk4OlxcdH07XFxuICA5OTpcXHRcXG4gMTAwOlxcdHN0YXRpYyBpbnQgX19pbml0IGJwZl9saW5rX2l0ZXJfaW5pdCh2b2lkKVxcbiAxMDE6XFx0e1xcbiAxMDI6XFx0XFx0YnBmX2xpbmtfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9ICpidGZfYnBmX2xpbmtfaWQ7XFxuIDEwMzpcXHRcXHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcXHUwMDI2YnBmX2xpbmtfcmVnX2luZm8pO1xcbiAxMDQ6XFx0fVxcbiAxMDU6XFx0XFxuIDEwNjpcXHRsYXRlX2luaXRjYWxsKGJwZl9saW5rX2l0ZXJfaW5pdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjExOjEzLjcxMDM0MDcyOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjY3ODI3MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBCUEYgSXRlcmF0b3JzKipcblxuT2theSwgc28gQlBGIGl0ZXJhdG9ycyBhcmUgY3JlYXRlZCB1c2luZyBgYnBmKEJQRl9MSU5LX0NSRUFURSlgIHdpdGggdGhlIGBCUEZfVFJBQ0VfSVRFUmAgb3B0aW9uLCBnZW5lcmF0aW5nIGEgYHNlcV9maWxlYC4gVGhhdCBtZWFucyB1c2Vyc3BhY2UgY2FuIGFjY2VzcyB0aGlzIHRocm91Z2ggYSBzdGFuZGFyZCBgcmVhZCgyKWAgY2FsbCAtIHRoYXQncyBleGNlbGxlbnQhIFRoaXMgb3BlbnMgdXAgYSB3aG9sZSBuZXcgYXJlYSBvZiBvYnNlcnZhYmlsaXR5IGFuZCBtYW5pcHVsYXRpb24uIE5vdywgYmVmb3JlIEkgZ2V0IHRvbyBleGNpdGVkLCBsZXQncyBzZWUgaWYgc3l6a2FsbGVyIGhhcyBzdXBwb3J0IGZvciBmdXp6ZXIgb3IgYW55IGNvdmVyYWdlIGZvciBCUEYgaXRlcmF0b3JzLCBvciBpZiBpdCBjYW4gYmUgZnV6emVkIHVzaW5nIHRoaXMgbWV0aG9kLiBZZXMsIGdyZWF0LCBpdCBsb29rcyBsaWtlIHN5emthbGxlciBvZmZlcnMgY29tcHJlaGVuc2l2ZSBCUEYgc3lzY2FsbCBjb3ZlcmFnZSwgaW5jbHVkaW5nIGBicGYkQlBGX0xJTktfQ1JFQVRFYCBhbmQgdGhlIG90aGVyIGtleSBvbmVzLiBUaGF0J3MgYSBnb29kIHNpZ24uIFRvIGNvbmZpcm0gZXZlcnl0aGluZywgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIGBrZXJuZWwvYnBmL2xpbmtfaXRlci5jYCBhbmQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBlbnN1cmUgdGhleSdyZSBjb3JyZWN0bHkgZW5hYmxlZC4gSSB3aWxsIGFsc28gaGF2ZSB0byBsb29rIGluIGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBjb25maXJtIHdoZXJlIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gcGxhY2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk1NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjExOjE2LjM3ODE3NTA1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyNzQ2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGlua19pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbi0tXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYz05MD1zdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfbGlua19yZWdfaW5mbyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvbGlua19pdGVyLmMtOTktXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzoxMDA6c3RhdGljIGludCBfX2luaXQgYnBmX2xpbmtfaXRlcl9pbml0KHZvaWQpXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0xMDEte1xcbi0tXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0xMDUtXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzoxMDY6bGF0ZV9pbml0Y2FsbChicGZfbGlua19pdGVyX2luaXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMToxNi40Mzg0NTY4NjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzQyMzE1MzI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLZXJuZWwgQ29tcGlsYXRpb24gTXVzaW5ncyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYnVpbGQgcHJvY2VzcyBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgb2JqZWN0IGZpbGVzIGBzeXNjYWxsLm9gLCBgLi4uYCwgYW5kIGBsaW5rX2l0ZXIub2AgYXJlIGJlaW5nIGluY2x1ZGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBzZXR0aW5nLiBSaWdodCwgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIHRoZSAqb25seSogcmVxdWlyZWQgY29uZmlnLCBiZWNhdXNlIHRoaW5ncyBpbiB0aGUga2VybmVsIGNhbiBnZXQuLi5jb21wbGV4LlxuXG5Ob3csIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCBgQlBGX1NZU0NBTExgIHVzdWFsbHkgcmlkZXMgb24gdGhlIGNvYXR0YWlscyBvZiBgQlBGYC4gTGV0J3MgY29uZmlybSB0aGF0IGRlcGVuZGVuY3kg4oCTIGRvdWJsZS1jaGVja2luZyBpcyBhbHdheXMgZ29vZCBwcmFjdGljZS4gVGltZSB0byBnbyBwZWVrIGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AgYW5kIG1ha2Ugc3VyZSBteSBtZW1vcnkgc2VydmVzIG1lIGNvcnJlY3RseSBhbmQgY29uZmlybSBhbnkgb3RoZXIgcmVsZXZhbnQgc2V0dGluZ3MhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzA1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MTkuODYxNjEzNDY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzIzODU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMToxOS45MTg4NTk0OTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDcyMjI3MzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgbG9vayBpbnRvIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvbmZpZ3VyYXRpb24uIEkgcmVtZW1iZXIgd29ya2luZyB3aXRoIGBLY29uZmlnYCBmaWxlcyBiZWZvcmU7IHRoZXkncmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIGNvbnRyb2xsaW5nIGtlcm5lbCBmZWF0dXJlcy4gTGV0J3Mgc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZSwgSSdtIHRoaW5raW5nIHNvbWV3aGVyZSBhcm91bmQgbGluZSAyNy4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGRlYWwgd2l0aCB0aGUgY29yZSBlbmFibGluZyBvcHRpb25zIGZvciBCUEYsIG9yIHBlcmhhcHMgY29uZmlndXJhdGlvbiBvZiBzb21lIG9mIHRoZSBCUEYgc3Vic3lzdGVtcy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB0aGVyZS4gRnJvbSBoZXJlIEknbGwgc2VlIHdoYXQgdGhlIG9wdGlvbnMgYXJlIGFuZCB3aGF0IG15IHVuZGVyc3RhbmRpbmcgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDY0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MjQuNjQxMTM2MjI0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA0NjpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA0OTpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTA6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuICA1MTpcXHRcXHQgIHByb2dyYW1zLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxcbiAgNTQ6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDU1OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxcbiAgNTY6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbiAgNTk6XFx0XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjExOjI0LjY0MTMxMzc2NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MDEwNjA1MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQlBGIFN5c2NhbGwgRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIGBCUEZfU1lTQ0FMTGAgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpdCBkb2Vzbid0IGhhdmUgYW55IGV4cGxpY2l0IGBkZXBlbmRzIG9uYCByZXF1aXJlbWVudHMsIGJ1dCBpdCAqZG9lcyogc2VsZWN0IEJQRi4gVGhhdCdzIGdvb2QgdG8ga25vdywgc2ltcGxpZmllcyB0aGluZ3Mgc29tZXdoYXQuIE5vdywgSSBuZWVkIHRvIGludmVzdGlnYXRlIGEgc3BlY2lmaWMgZnVuY3Rpb246IGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YC4gSSdtIGN1cmlvdXMgaWYgaXRzIGltcGxlbWVudGF0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIG1heWJlIGJlaGluZCBzb21lIGAjaWZkZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBzb3VyY2UgY29kZTsgc3BlY2lmaWNhbGx5LCBsZXQgbWUganVtcCB0byBsaW5lIDYwMzcgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIHRoYXQgbGluZSwganVzdCB0byBnZXQgYSBicm9hZGVyIGNvbnRleHQgb2Ygd2hhdCdzIGhhcHBlbmluZy4gQWxyaWdodCwgSSdtIHJlYWRpbmcgdGhlIGNvZGUgbm93Li4uIGxldCdzIHNlZSwgaXMgaXQgaW5zaWRlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3M/IEkgbmVlZCB0byBjaGVjayBjYXJlZnVsbHksIHNvIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gTGV0J3Mgc3RhcnQgd2l0aCB0aGF0IHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzgzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MzIuNjUxOTIzMDEzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MDEwOlxcdHtcXG42MDExOlxcdFxcdHJldHVybiBhdG9taWM2NF9mZXRjaF9hZGRfdW5sZXNzKFxcdTAwMjZsaW5rLVxcdTAwM2VyZWZjbnQsIDEsIDApID8gbGluayA6IEVSUl9QVFIoLUVOT0VOVCk7XFxuNjAxMjpcXHR9XFxuNjAxMzpcXHRFWFBPUlRfU1lNQk9MKGJwZl9saW5rX2luY19ub3RfemVybyk7XFxuNjAxNDpcXHRcXG42MDE1OlxcdHN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfYnlfaWQodTMyIGlkKVxcbjYwMTY6XFx0e1xcbjYwMTc6XFx0XFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbjYwMTg6XFx0XFxuNjAxOTpcXHRcXHRpZiAoIWlkKVxcbjYwMjA6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuNjAyMTpcXHRcXG42MDIyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxuNjAyMzpcXHRcXHQvKiBiZWZvcmUgbGluayBpcyBcXFwic2V0dGxlZFxcXCIsIElEIGlzIDAsIHByZXRlbmQgaXQgZG9lc24ndCBleGlzdCB5ZXQgKi9cXG42MDI0OlxcdFxcdGxpbmsgPSBpZHJfZmluZChcXHUwMDI2bGlua19pZHIsIGlkKTtcXG42MDI1OlxcdFxcdGlmIChsaW5rKSB7XFxuNjAyNjpcXHRcXHRcXHRpZiAobGluay1cXHUwMDNlaWQpXFxuNjAyNzpcXHRcXHRcXHRcXHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xcbjYwMjg6XFx0XFx0XFx0ZWxzZVxcbjYwMjk6XFx0XFx0XFx0XFx0bGluayA9IEVSUl9QVFIoLUVBR0FJTik7XFxuNjAzMDpcXHRcXHR9IGVsc2Uge1xcbjYwMzE6XFx0XFx0XFx0bGluayA9IEVSUl9QVFIoLUVOT0VOVCk7XFxuNjAzMjpcXHRcXHR9XFxuNjAzMzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxuNjAzNDpcXHRcXHRyZXR1cm4gbGluaztcXG42MDM1OlxcdH1cXG42MDM2OlxcdFxcbjYwMzc6XFx0c3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpXFxuNjAzODpcXHR7XFxuNjAzOTpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XFxuNjA0MDpcXHRcXG42MDQxOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxuNjA0MjpcXHRhZ2FpbjpcXG42MDQzOlxcdFxcdGxpbmsgPSBpZHJfZ2V0X25leHQoXFx1MDAyNmxpbmtfaWRyLCBpZCk7XFxuNjA0NDpcXHRcXHRpZiAobGluaykge1xcbjYwNDU6XFx0XFx0XFx0aWYgKGxpbmstXFx1MDAzZWlkKVxcbjYwNDY6XFx0XFx0XFx0XFx0bGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTtcXG42MDQ3OlxcdFxcdFxcdGVsc2VcXG42MDQ4OlxcdFxcdFxcdFxcdGxpbmsgPSBFUlJfUFRSKC1FQUdBSU4pO1xcbjYwNDk6XFx0XFx0XFx0aWYgKElTX0VSUihsaW5rKSkge1xcbjYwNTA6XFx0XFx0XFx0XFx0KCppZCkrKztcXG42MDUxOlxcdFxcdFxcdFxcdGdvdG8gYWdhaW47XFxuNjA1MjpcXHRcXHRcXHR9XFxuNjA1MzpcXHRcXHR9XFxuNjA1NDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxuNjA1NTpcXHRcXG42MDU2OlxcdFxcdHJldHVybiBsaW5rO1xcbjYwNTc6XFx0fVxcbjYwNTg6XFx0XFxuNjA1OTpcXHQjZGVmaW5lIEJQRl9MSU5LX0dFVF9GRF9CWV9JRF9MQVNUX0ZJRUxEIGxpbmtfaWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MzIuNjUyMTg2MzA0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY3OTY1OTI2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGZvciBGb2N1cyBTeW1ib2wgRGV0ZXJtaW5hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG1ha2luZyBzdXJlIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY29ycmVjdC4gRmlyc3QgdGhpbmcgSSBub3RpY2VkIGlzIHRoYXQgdGhlcmUgYXJlIG5vIGAjaWZkZWZgIGd1YXJkcyBhcm91bmQgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgLCB3aGljaCBpcyByZWxldmFudCB0byBteSBhbmFseXNpcy4gTm93LCBsZXQncyBuYWlsIGRvd24gd2hhdCBzeW1ib2xzIHdlIHNob3VsZCBpbmNsdWRlLlxuXG5UaGUgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgaXMgZGVmaW5pdGVseSBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAuICBJIGNoZWNrZWQgaXRzIGNhbGxlcnM7IHRoZXkgYXJlIGBicGZfbGlua19zZXFfc3RhcnRgIGFuZCBgYnBmX2xpbmtfc2VxX25leHRgLiBJbXBvcnRhbnRseSwgSSBzZWUgdGhhdCBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgaXMgYSBub24tc3RhdGljLCBleHBvcnRlZCBzeW1ib2wgaW4gYHZtbGludXhgLlxuXG5JIHRoZW4gZG91YmxlIGNoZWNrZWQsIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YCBpcyBub3Qgc3RhdGljLCB3aGlsZSBpdHMgY2FsbGVycywgYGJwZl9saW5rX3NlcV9zdGFydGAgYW5kIGBicGZfbGlua19zZXFfbmV4dGAsIGFyZSBzdGF0aWMgYHNlcV9vcGVyYXRpb25zYCBpbiBga2VybmVsL2JwZi9saW5rX2l0ZXIuY2AuIEkgY29uc2lkZXJlZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBicGZfbGlua19zZXR0bGVgLCBgYnBmX2xpbmtfcHJpbWVgLCBgYnBmX2xpbmtfYWxsb2NfaWRgLCBhbmQgYGJwZl9saW5rX2J5X2lkYCwgYnV0IEkgY29uZmlybWVkIHRoYXQgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGlzIHNwZWNpZmljIHRvIHRoZSBCUEYgbGluayBpdGVyYXRpb24gbG9naWMsIHNvIEkgY2FuIGV4Y2x1ZGUgdGhlbS5cblxuSSB0aGVuIHJldmlzaXRlZCB0aGUgc2VjdGlvbiA0IGd1aWRlbGluZXMuIFRoZXkgZW1waGFzaXplIGxpc3RpbmcgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhbHRlcmVkIG9yIGRpcmVjdCBBUEkgZW50cnkgcG9pbnRzLCB3aGlsZSBhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuICBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgaXMsIGluIGZhY3QsIHRoZSBmdW5jdGlvbiBiZWluZyBhbHRlcmVkLiBBbmQgdGhlIGNhbGxlcnMgYXJlIGBicGZfbGlua19zZXFfc3RhcnRgIGFuZCBgYnBmX2xpbmtfc2VxX25leHRgLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgZGlkIGEgYGdyZXBgIHNlYXJjaC4gQW5kLCB5dXAsIHRoZSBvbmx5IGNhbGxzIHRvIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YCBhcmUgaW4gYGtlcm5lbC9icGYvbGlua19pdGVyLmM6MThgIGFuZCBga2VybmVsL2JwZi9saW5rX2l0ZXIuYzozNGAuIFNvIHRob3NlIHRocmVlIGFyZSB0aGUgcmVsZXZhbnQgc3ltYm9scy5cblxuTmV4dCwgSSBsb29rZWQgYXQgXCJXb3J0aEZ1enppbmdcIi4gSXQncyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIChga2VybmVsL2JwZi9zeXNjYWxsLmNgKSwgYW5kIGl0IG1vZGlmaWVzIGxpbmsgcmV0cmlldmFsIGxvZ2ljIGR1cmluZyBpdGVyYXRpb24gdG8gc2tpcCB1bnNldHRsZWQgbGlua3MuIFRoYXQgbWFrZXMgaXQgZnV6emluZy1yZWxldmFudC4gIEkgY29uZmlybWVkIFwiV29ydGhGdXp6aW5nOiB0cnVlXCIuXG5cbkkgdGhlbiBsb29rZWQgYXQgdGhlIGVuYWJsZSBjb25maWd1cmF0aW9ucywgYEJQRl9TWVNDQUxMYCBpcyB0aGUgcHJpbWFyeSBjb25maWcgbmVlZGVkIGZvciBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCBga2VybmVsL2JwZi9saW5rX2l0ZXIuY2AuIFdoaWxlIGBCUEZgIGlzIHNlbGVjdGVkIGJ5IGBCUEZfU1lTQ0FMTGAsIGV4cGxpY2l0bHkgc3BlY2lmeWluZyBgQlBGX1NZU0NBTExgIChhbmQgYEJQRmAgaWYgZGVzaXJlZCkgaXMgaWRlYWwuICBgQlBGX1NZU0NBTExgIGlzIHRoZSBzdGFuZGFyZCBmbGFnLlxuXG5Ob3cgdG8gZmluYWxpemUgdGhlIGBGb2N1c1N5bWJvbHNgOlxuKiAgIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YFxuKiAgIGBicGZfbGlua19zZXFfc3RhcnRgXG4qICAgYGJwZl9saW5rX3NlcV9uZXh0YFxuXG5JIHdlbnQgYmFjayBvbmUgbW9yZSB0aW1lLCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgdG8gYWRkIG9yIGlmIHRoZSBleGlzdGluZyBvbmVzIGFyZSBwZXJmZWN0LiBUaGVzZSB0aHJlZSBhcmUgdGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgcGlucG9pbnQgdGhlIGZ1bmN0aW9uIHRoYXQncyBtb2RpZmllZCBhbmQgaXRzIGl0ZXJhdGlvbiBlbnRyeXBvaW50cy5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0IGFuZCBpcyB2ZXJpZmllZC4gTm93IEknbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg2MSwiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMTozOS40NDg3ODI3NTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM4MDE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0XCIsXG4gICAgXCJicGZfbGlua19zZXFfc3RhcnRcIixcbiAgICBcImJwZl9saW5rX3NlcV9uZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpIGluIGtlcm5lbC9icGYvc3lzY2FsbC5jIHRvIGNoZWNrIGlmIGxpbmstXFx1MDAzZWlkIGlzIG5vbi16ZXJvIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50LCByZXR1cm5pbmcgLUVBR0FJTiBvdGhlcndpc2Ugc28gdGhlIGl0ZXJhdGlvbiBza2lwcyB1bnNldHRsZWQgbGlua3MuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgQlBGIGl0ZXJhdG9yIGNvZGUgcGF0aHMgKGJwZl9saW5rIGl0ZXJhdG9yKSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dFwiLFxuICAgIFwiYnBmX2xpbmtfc2VxX3N0YXJ0XCIsXG4gICAgXCJicGZfbGlua19zZXFfbmV4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoKSBpbiBrZXJuZWwvYnBmL3N5c2NhbGwuYyB0byBjaGVjayBpZiBsaW5rLVxcdTAwM2VpZCBpcyBub24temVybyBiZWZvcmUgYXR0ZW1wdGluZyB0byBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCwgcmV0dXJuaW5nIC1FQUdBSU4gb3RoZXJ3aXNlIHNvIHRoZSBpdGVyYXRpb24gc2tpcHMgdW5zZXR0bGVkIGxpbmtzLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIEJQRiBpdGVyYXRvciBjb2RlIHBhdGhzIChicGZfbGluayBpdGVyYXRvcikgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MzkuNTIyMTcwNDVaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDEzNzM0NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6MzkuNTIyNzg2MTAxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjEwMTMxMTM2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KClgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gdmVyaWZ5IHRoYXQgYGxpbmstXFx1MDAzZWlkYCBpcyBub24temVybyBiZWZvcmUgaW5jcmVtZW50aW5nIHRoZSBsaW5rIHJlZmNvdW50IGFuZCByZXR1cm5pbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGxpbmsgaXRlcmF0b3IgZnJvbSByZXR1cm5pbmcgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgb3IgdW5zZXR0bGVkIEJQRiBsaW5rIHRoYXQgd2FzIGFsbG9jYXRlZCBhbiBJRCBpbiBgbGlua19pZHJgIGJ1dCBoYXMgbm90IHlldCBiZWVuIHNldHRsZWQgdmlhIGBicGZfbGlua19zZXR0bGUoKWAuXFxuXFxuYGxpbmstXFx1MDAzZWlkYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gMCBpbiBgYnBmX2xpbmtfaW5pdF9zbGVlcGFibGUoKWAgZHVyaW5nIGxpbmsgYWxsb2NhdGlvbiBhbmQgc2V0IHRvIGl0cyBJRCBvbmx5IHVwb24gYGJwZl9saW5rX3NldHRsZSgpYC4gVGhpcyBjaGFuZ2Ugb25seSBjaGVja3MgYW4gYWxyZWFkeS1pbml0aWFsaXplZCBmaWVsZCAoYGxpbmstXFx1MDAzZWlkYCkgdG8gaGFuZGxlIGxpbmsgbGlmZWN5Y2xlL2NvbmN1cnJlbmN5IHN0YXRlLCBhbmQgZG9lcyBub3QgdG91Y2ggb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbHRlciBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk1NWUwMjgyYmIwMGVkZWVjZmY3YmFjY2EyMzg5MjFhYjgzOWM2YjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAyMDoxMDoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDg1M2I0N2Y4MTM4NDIuLjI0NGE5MzliOWQyZGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC02MDQyLDcgKzYwNDIsMTAgQEAgc3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpXG4gYWdhaW46XG4gXHRsaW5rID0gaWRyX2dldF9uZXh0KFx1MDAyNmxpbmtfaWRyLCBpZCk7XG4gXHRpZiAobGluaykge1xuLVx0XHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xuK1x0XHRpZiAobGluay1cdTAwM2VpZClcbitcdFx0XHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xuK1x0XHRlbHNlXG4rXHRcdFx0bGluayA9IEVSUl9QVFIoLUVBR0FJTik7XG4gXHRcdGlmIChJU19FUlIobGluaykpIHtcbiBcdFx0XHQoKmlkKSsrO1xuIFx0XHRcdGdvdG8gYWdhaW47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMTozOS41MjI3ODczNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDY1NTY5MzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBMaW5rIElEUiBJdGVyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgZnVuY3Rpb24gYXJvdW5kIGxpbmUgNjA0Mi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBzZWN0aW9uIGlzIHJlbGF0ZWQgdG8gaXRlcmF0aW5nIHRocm91Z2ggdGhlIGBicGZfbGlua2Agb2JqZWN0cyBzdG9yZWQgaW4gdGhlIGBsaW5rX2lkcmAgKElEUiAtIElEIFJhZGl4IFRyZWUpLlxuXG5UaGUgY29kZSBzbmlwcGV0IHNlZW1zIHRvIGJlIGRlYWxpbmcgd2l0aCBhIGxvb3AgdXNpbmcgYGlkcl9nZXRfbmV4dGAuIFRoaXMgc3VnZ2VzdHMgaXQncyB0cnlpbmcgdG8gZmluZCB0aGUgbmV4dCBhdmFpbGFibGUgYGJwZl9saW5rYCBnaXZlbiBhbiBJRC4gVGhlIGBicGZfbGlua19pbmNfbm90X3plcm9gIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgaW5jcmVtZW50aW5nIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGxpbmsgaWYgaXQncyBmb3VuZC4gVGhlIGFkZGVkIGBpZiAobGluay1cdTAwM2VpZClgIGNoZWNrIGlzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBjb25kaXRpb246ICBpZiBhIGBicGZfbGlua2AncyBJRCBpcyAqbm90KiBzZXQgKGkuZS4sIGBsaW5rLVx1MDAzZWlkYCBpcyAwKSwgdGhlbiBpdCByZXR1cm5zIGAtRUFHQUlOYCBhbmQgc2tpcHMgdGhhdCBsaW5rIGR1cmluZyBpdGVyYXRpb24uXG5cbk15IGh1bmNoIGlzIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIGEgcmFjZSBjb25kaXRpb24gb3IgYSB0ZW1wb3Jhcnkgc3RhdGUgd2hlcmUgYSBgYnBmX2xpbmtgIGlzIGJlaW5nIGNyZWF0ZWQvZGVzdHJveWVkLiBJZiB0aGUgYGxpbmstXHUwMDNlaWRgIGlzIHplcm8sIHRoZW4gbWF5YmUgaXQgbWVhbnMgdGhlIGxpbmsgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZSBhbmQgbm90IHJlYWR5IHRvIGJlIHVzZWQgb3IgdGhlIGBpZHJgIG1pZ2h0IHN0aWxsIGhhdmUgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZWxlbWVudC4gUmV0dXJuaW5nIGAtRUFHQUlOYCBzaWduYWxzIHRvIHRoZSBjYWxsZXIgdG8gdHJ5IGFnYWluLCBwb3RlbnRpYWxseSBza2lwcGluZyBvdmVyIGFuIGluY29tcGxldGUgZW50cnkgaW4gdGhlIElEUi5cblxuTGV0J3MgdXNlIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBjb250ZXh0IGFyb3VuZCBsaW5lIDYwNDIgYW5kIHNlZSBpZiBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcHVycG9zZSBvZiB0aGUgaXRlcmF0aW9uIGFuZCB0aGUgYC1FQUdBSU5gIGVycm9yIGFyZSBjb3JyZWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKmRvaW5nKiB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2Ygd2h5IHRoaXMgY2hlY2sgd2FzIGludHJvZHVjZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMTo1NC4xNzg0ODQwMDFaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMjUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYwMjU6XFx0XFx0aWYgKGxpbmspIHtcXG42MDI2OlxcdFxcdFxcdGlmIChsaW5rLVxcdTAwM2VpZClcXG42MDI3OlxcdFxcdFxcdFxcdGxpbmsgPSBicGZfbGlua19pbmNfbm90X3plcm8obGluayk7XFxuNjAyODpcXHRcXHRcXHRlbHNlXFxuNjAyOTpcXHRcXHRcXHRcXHRsaW5rID0gRVJSX1BUUigtRUFHQUlOKTtcXG42MDMwOlxcdFxcdH0gZWxzZSB7XFxuNjAzMTpcXHRcXHRcXHRsaW5rID0gRVJSX1BUUigtRU5PRU5UKTtcXG42MDMyOlxcdFxcdH1cXG42MDMzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG42MDM0OlxcdFxcdHJldHVybiBsaW5rO1xcbjYwMzU6XFx0fVxcbjYwMzY6XFx0XFxuNjAzNzpcXHRzdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2dldF9jdXJyX29yX25leHQodTMyICppZClcXG42MDM4OlxcdHtcXG42MDM5OlxcdFxcdHN0cnVjdCBicGZfbGluayAqbGluaztcXG42MDQwOlxcdFxcbjYwNDE6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG42MDQyOlxcdGFnYWluOlxcbjYwNDM6XFx0XFx0bGluayA9IGlkcl9nZXRfbmV4dChcXHUwMDI2bGlua19pZHIsIGlkKTtcXG42MDQ0OlxcdFxcdGlmIChsaW5rKSB7XFxuNjA0NTpcXHRcXHRcXHRpZiAobGluay1cXHUwMDNlaWQpXFxuNjA0NjpcXHRcXHRcXHRcXHRsaW5rID0gYnBmX2xpbmtfaW5jX25vdF96ZXJvKGxpbmspO1xcbjYwNDc6XFx0XFx0XFx0ZWxzZVxcbjYwNDg6XFx0XFx0XFx0XFx0bGluayA9IEVSUl9QVFIoLUVBR0FJTik7XFxuNjA0OTpcXHRcXHRcXHRpZiAoSVNfRVJSKGxpbmspKSB7XFxuNjA1MDpcXHRcXHRcXHRcXHQoKmlkKSsrO1xcbjYwNTE6XFx0XFx0XFx0XFx0Z290byBhZ2FpbjtcXG42MDUyOlxcdFxcdFxcdH1cXG42MDUzOlxcdFxcdH1cXG42MDU0OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG42MDU1OlxcdFxcbjYwNTY6XFx0XFx0cmV0dXJuIGxpbms7XFxuNjA1NzpcXHR9XFxuNjA1ODpcXHRcXG42MDU5OlxcdCNkZWZpbmUgQlBGX0xJTktfR0VUX0ZEX0JZX0lEX0xBU1RfRklFTEQgbGlua19pZFxcbjYwNjA6XFx0XFxuNjA2MTpcXHRzdGF0aWMgaW50IGJwZl9saW5rX2dldF9mZF9ieV9pZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG42MDYyOlxcdHtcXG42MDYzOlxcdFxcdHN0cnVjdCBicGZfbGluayAqbGluaztcXG42MDY0OlxcdFxcdHUzMiBpZCA9IGF0dHItXFx1MDAzZWxpbmtfaWQ7XFxuNjA2NTpcXHRcXHRpbnQgZmQ7XFxuNjA2NjpcXHRcXG42MDY3OlxcdFxcdGlmIChDSEVDS19BVFRSKEJQRl9MSU5LX0dFVF9GRF9CWV9JRCkpXFxuNjA2ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42MDY5OlxcdFxcbjYwNzA6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbjYwNzE6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG42MDcyOlxcdFxcbjYwNzM6XFx0XFx0bGluayA9IGJwZl9saW5rX2J5X2lkKGlkKTtcXG42MDc0OlxcdFxcdGlmIChJU19FUlIobGluaykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjExOjU0LjE3ODY5Mzk3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE1NTg3ODA1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYGJwZl9saW5rX2J5X2lkYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGludG8gdGhlIHdlZWRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGEgQlBGIGxpbmsgSUQuIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBicGZfbGlua19ieV9pZGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgbGV0J3MgZ3JhYiB0aGUgcmVsZXZhbnQgY29kZSBibG9jaywgbGluZXMgNjAxMC02MDM1LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFuZCwgY3J1Y2lhbGx5LCB0cmFjZSBiYWNrIGhvdyBgbGluay1cdTAwM2VpZGAgZ2V0cyBwb3B1bGF0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHNvdXJjZSBvZiB0aGUgbGluayBJRCBpcyBnb2luZyB0byBiZSBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTUwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMTo1NS43Mzc0Nzc5NDdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYwMTA6XFx0e1xcbjYwMTE6XFx0XFx0cmV0dXJuIGF0b21pYzY0X2ZldGNoX2FkZF91bmxlc3MoXFx1MDAyNmxpbmstXFx1MDAzZXJlZmNudCwgMSwgMCkgPyBsaW5rIDogRVJSX1BUUigtRU5PRU5UKTtcXG42MDEyOlxcdH1cXG42MDEzOlxcdEVYUE9SVF9TWU1CT0woYnBmX2xpbmtfaW5jX25vdF96ZXJvKTtcXG42MDE0OlxcdFxcbjYwMTU6XFx0c3RydWN0IGJwZl9saW5rICpicGZfbGlua19ieV9pZCh1MzIgaWQpXFxuNjAxNjpcXHR7XFxuNjAxNzpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XFxuNjAxODpcXHRcXG42MDE5OlxcdFxcdGlmICghaWQpXFxuNjAyMDpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG42MDIxOlxcdFxcbjYwMjI6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG42MDIzOlxcdFxcdC8qIGJlZm9yZSBsaW5rIGlzIFxcXCJzZXR0bGVkXFxcIiwgSUQgaXMgMCwgcHJldGVuZCBpdCBkb2Vzbid0IGV4aXN0IHlldCAqL1xcbjYwMjQ6XFx0XFx0bGluayA9IGlkcl9maW5kKFxcdTAwMjZsaW5rX2lkciwgaWQpO1xcbjYwMjU6XFx0XFx0aWYgKGxpbmspIHtcXG42MDI2OlxcdFxcdFxcdGlmIChsaW5rLVxcdTAwM2VpZClcXG42MDI3OlxcdFxcdFxcdFxcdGxpbmsgPSBicGZfbGlua19pbmNfbm90X3plcm8obGluayk7XFxuNjAyODpcXHRcXHRcXHRlbHNlXFxuNjAyOTpcXHRcXHRcXHRcXHRsaW5rID0gRVJSX1BUUigtRUFHQUlOKTtcXG42MDMwOlxcdFxcdH0gZWxzZSB7XFxuNjAzMTpcXHRcXHRcXHRsaW5rID0gRVJSX1BUUigtRU5PRU5UKTtcXG42MDMyOlxcdFxcdH1cXG42MDMzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG42MDM0OlxcdFxcdHJldHVybiBsaW5rO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMTo1NS43Mzc2ODM0MTdaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjc4NTkwMzU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgQlBGIExpbmsgSUQgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIEJQRiBsaW5rIElEIGhhbmRsaW5nLiBGaXJzdCwgSSdtIGxvb2tpbmcgYXQgaG93IGBicGZfbGlua19ieV9pZGAgaGFuZGxlcyBsaW5rIGxvb2t1cHMuIEl0IHNlZW1zIGxpa2UgdGhlIElEIGlzIGNoZWNrZWQsIGFuZCBpZiBpdCdzIHplcm8sIHRoZSBsaW5rIGlzIGNvbnNpZGVyZWQgXCJ1bnNldHRsZWRcIiBhbmQgZG9lc24ndCBleGlzdCB5ZXQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJZiBgbGluay1cdTAwM2VpZGAgaXMgemVybywgd2UgcmV0dXJuIGAtRUFHQUlOYC4gT3RoZXJ3aXNlLCB3ZSBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudGVyIHVzaW5nIGBicGZfbGlua19pbmNfbm90X3plcm9gLlxuXG5OZXh0LCBJIHNlZSBhIGNvbXBhcmlzb24gd2l0aCBob3cgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGhhbmRsZWQgdGhpbmdzIHByZXZpb3VzbHksIGFuZCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIGEgc2ltaWxhciBjaGVjayBmb3IgYGxpbmstXHUwMDNlaWRgICpiZWZvcmUqIHRoZSByZWZlcmVuY2UgY291bnQgaXMgaW5jcmVtZW50ZWQuIElmIGl0J3MgemVybywgd2UgcmV0dXJuIGAtRUFHQUlOYCwgYW5kIHJldHJ5LiBUaGlzIGxvb2tzIGxpa2UgYSByYWNlIGNvbmRpdGlvbiBwcm90ZWN0aW9uLCBvciBwb3NzaWJseSBhbiBhdHRlbXB0IHRvIHByZXZlbnQgZ3JhYmJpbmcgYW4gaW4tZmxpZ2h0IGxpbmsuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IHRoZSBJRCBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBcInNldHRsZWQuXCIgTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhhdCBgYnBmX2xpbmtfYWxsb2NfaWRgIGFuZCBgYnBmX2xpbmtfc2V0dGxlYCBhcmUgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBoZXJlLCBhbmQgSSdsbCB1c2UgYGdyZXBgIHRvIGZpbmQgdGhlbSBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIHNlZSBob3cgdGhvc2Ugb3BlcmF0aW9ucyBpbnRlcmFjdCB3aXRoIGBsaW5rX2lkcmAuIFRoYXQgc2hvdWxkIGdpdmUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHN0YXRlIHRyYW5zaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTY5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTE6NTguNTIzNTg5Mjk1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDgwMTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaW5rX2lkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz02ND1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1hcF9pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjU6c3RhdGljIERFRklORV9JRFIobGlua19pZHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY2OnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjctXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zMjU5PXN0YXRpYyB2b2lkIGJwZl9saW5rX2ZyZWVfaWQoaW50IGlkKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI2My1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjY0OlxcdHNwaW5fbG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzI2NTpcXHRpZHJfcmVtb3ZlKFxcdTAwMjZsaW5rX2lkciwgaWQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNjY6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyNjctfVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzQ3Nj1zdGF0aWMgaW50IGJwZl9saW5rX2FsbG9jX2lkKHN0cnVjdCBicGZfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0ODAtXFx0aWRyX3ByZWxvYWQoR0ZQX0tFUk5FTCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ4MTpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0ODI6XFx0aWQgPSBpZHJfYWxsb2NfY3ljbGljKFxcdTAwMjZsaW5rX2lkciwgbGluaywgMSwgSU5UX01BWCwgR0ZQX0FUT01JQyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ4MzpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ4NC1cXHRpZHJfcHJlbG9hZF9lbmQoKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0ODktLyogUHJlcGFyZSBicGZfbGluayB0byBiZSBleHBvc2VkIHRvIHVzZXItc3BhY2UgYnkgYWxsb2NhdGluZyBhbm9uX2lub2RlIGZpbGUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ5MDogKiByZXNlcnZpbmcgdW51c2VkIEZEIGFuZCBhbGxvY2F0aW5nIElEIGZyb20gbGlua19pZHIuIFRoaXMgaXMgdG8gYmUgcGFpcmVkXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ5MS0gKiB3aXRoIGJwZl9saW5rX3NldHRsZSgpIHRvIGluc3RhbGwgRkQgYW5kIElEIGFuZCBleHBvc2UgYnBmX2xpbmsgdG9cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM1MzM9aW50IGJwZl9saW5rX3NldHRsZShzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyICpwcmltZXIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTM1LVxcdC8qIG1ha2UgYnBmX2xpbmsgZmV0Y2hhYmxlIGJ5IElEICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUzNjpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MzctXFx0cHJpbWVyLVxcdTAwM2VsaW5rLVxcdTAwM2VpZCA9IHByaW1lci1cXHUwMDNlaWQ7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUzODpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzOS1cXHQvKiBtYWtlIGJwZl9saW5rIGZldGNoYWJsZSBieSBGRCAqL1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjAxNT1zdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2J5X2lkKHUzMiBpZClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyMjpcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjMtXFx0LyogYmVmb3JlIGxpbmsgaXMgXFxcInNldHRsZWRcXFwiLCBJRCBpcyAwLCBwcmV0ZW5kIGl0IGRvZXNuJ3QgZXhpc3QgeWV0ICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyNDpcXHRsaW5rID0gaWRyX2ZpbmQoXFx1MDAyNmxpbmtfaWRyLCBpZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyNS1cXHRpZiAobGluaykge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAzMi1cXHR9XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAzMzpcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGlua19pZHJfbG9jayk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAzNC1cXHRyZXR1cm4gbGluaztcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYwMzc9c3RydWN0IGJwZl9saW5rICpicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDQwLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwNDE6XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDQyLWFnYWluOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwNDM6XFx0bGluayA9IGlkcl9nZXRfbmV4dChcXHUwMDI2bGlua19pZHIsIGlkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDQ0LVxcdGlmIChsaW5rKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDUzLVxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDU0OlxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZsaW5rX2lkcl9sb2NrKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDU1LVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjMwNj1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDU0LVxcdFxcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ1NTpcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZsaW5rX2lkciwgXFx1MDAyNmxpbmtfaWRyX2xvY2spO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NTYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjExOjU4LjU5ODQwMDc5NFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODcyMDU5NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dGAgVXNhZ2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBjb250ZXh0IG9mIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YC4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCdzICp1c2VkKiB3aWxsIGdpdmUgbWUgY3JpdGljYWwgaW5zaWdodHMgaW50byBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGguIEtub3dpbmcgdGhlIHNwZWNpZmljIGNvbnRleHRzIHdpbGwgaGVscCBtZSByYXBpZGx5IHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVudCBzY2VuYXJpb3MgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBlbXBsb3llZC4gSXMgaXQgZm9yIGVudW1lcmF0aW9uLCBpdGVyYXRpb24sIHNvbWUgZm9ybSBvZiBzdGF0ZSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gbGlua3MsIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgZXhwbG9yYXRpb24gb2YgaXRzIGNhbGwgc2l0ZXMgd2lsbCBjdXQgdGhyb3VnaCBwb3RlbnRpYWwgY29uZnVzaW9uIGFuZCBoZWxwIGZvY3VzIG15IGF0dGVudGlvbiBlZmZpY2llbnRseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjEyOjAwLjQ3MDQ2MzU2N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMjI4ODE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MjkwNj1zdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2dldF9mcm9tX2ZkKHUzMiB1ZmQpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MjkwNzpzdHJ1Y3QgYnBmX2xpbmsgKmJwZl9saW5rX2dldF9jdXJyX29yX25leHQodTMyICppZCk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0yOTA4LVxcbi0tXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYz0xMz1zdGF0aWMgdm9pZCAqYnBmX2xpbmtfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcXG4tLVxcbmtlcm5lbC9icGYvbGlua19pdGVyLmMtMTctXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzoxODpcXHRsaW5rID0gYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dChcXHUwMDI2aW5mby1cXHUwMDNlbGlua19pZCk7XFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0xOS1cXHRpZiAoIWxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jPTI3PXN0YXRpYyB2b2lkICpicGZfbGlua19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXFxuLS1cXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTMzLVxcdGJwZl9saW5rX3B1dCgoc3RydWN0IGJwZl9saW5rICopdik7XFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzozNDpcXHRyZXR1cm4gYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dChcXHUwMDI2aW5mby1cXHUwMDNlbGlua19pZCk7XFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0zNS19XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MDE1PXN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfYnlfaWQodTMyIGlkKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAzNi1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDM3OnN0cnVjdCBicGZfbGluayAqYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMjowMi4wMDI3NjA0ODRaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTkxNDA3NDM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBMaW5rIEl0ZXJhdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBCUEYgbGlua3MgYXJlIGJlaW5nIGl0ZXJhdGVkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBga2VybmVsL2JwZi9saW5rX2l0ZXIuY2AgZmlsZS4gSXQncyBjbGVhciB0aGF0IHRoaXMgZmlsZSBjb250YWlucyB0aGUgY29yZSBsb2dpYyBiZWhpbmQgdGhlIGl0ZXJhdG9yIHVzZWQgYnkgYGJwZl9saW5rX3NlcV9zdGFydGAgYW5kIGBicGZfbGlua19zZXFfbmV4dGAuIFRoZXNlIGZ1bmN0aW9uIG5hbWVzIHN1Z2dlc3QgYSBzZXF1ZW5jZS1iYXNlZCB0cmF2ZXJzYWwgb2YgQlBGIGxpbmtzLCBsaWtlbHkgdXNlZCB0byBwcmVzZW50IGEgbGlzdCBvZiBsaW5rcywgcGVyaGFwcyBmb3IgdXNlcnNwYWNlIGNvbnN1bXB0aW9uIG9yIGFub3RoZXIga2VybmVsIHN1YnN5c3RlbS4gVGhlIGNvcmUgb2YgbXkgaW52ZXN0aWdhdGlvbiB3aWxsIHRoZXJlZm9yZSBmb2N1cyBvbiBob3cgdGhpcyBpdGVyYXRvciBpcyBpbXBsZW1lbnRlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgdXRpbGl6ZXMgaW50ZXJuYWxseSB0byBtYW5hZ2UgdGhlIHRyYXZlcnNhbCwgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiBmb3IgcGVyZm9ybWFuY2Ugb3Igc3luY2hyb25pemF0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg3MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjEyOjAzLjkxNjgzNzA4NVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2xpbmtfaXRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChjKSAyMDIyIFJlZCBIYXQsIEluYy4gKi9cXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbHRlci5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0c3RydWN0IGJwZl9pdGVyX3NlcV9saW5rX2luZm8ge1xcbiAgMTA6XFx0XFx0dTMyIGxpbmtfaWQ7XFxuICAxMTpcXHR9O1xcbiAgMTI6XFx0XFxuICAxMzpcXHRzdGF0aWMgdm9pZCAqYnBmX2xpbmtfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcXG4gIDE0OlxcdHtcXG4gIDE1OlxcdFxcdHN0cnVjdCBicGZfaXRlcl9zZXFfbGlua19pbmZvICppbmZvID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbiAgMTY6XFx0XFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbiAgMTc6XFx0XFxuICAxODpcXHRcXHRsaW5rID0gYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dChcXHUwMDI2aW5mby1cXHUwMDNlbGlua19pZCk7XFxuICAxOTpcXHRcXHRpZiAoIWxpbmspXFxuICAyMDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0aWYgKCpwb3MgPT0gMClcXG4gIDIzOlxcdFxcdFxcdCsrKnBvcztcXG4gIDI0OlxcdFxcdHJldHVybiBsaW5rO1xcbiAgMjU6XFx0fVxcbiAgMjY6XFx0XFxuICAyNzpcXHRzdGF0aWMgdm9pZCAqYnBmX2xpbmtfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbiAgMjg6XFx0e1xcbiAgMjk6XFx0XFx0c3RydWN0IGJwZl9pdGVyX3NlcV9saW5rX2luZm8gKmluZm8gPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCsrKnBvcztcXG4gIDMyOlxcdFxcdCsraW5mby1cXHUwMDNlbGlua19pZDtcXG4gIDMzOlxcdFxcdGJwZl9saW5rX3B1dCgoc3RydWN0IGJwZl9saW5rICopdik7XFxuICAzNDpcXHRcXHRyZXR1cm4gYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dChcXHUwMDI2aW5mby1cXHUwMDNlbGlua19pZCk7XFxuICAzNTpcXHR9XFxuICAzNjpcXHRcXG4gIDM3OlxcdHN0cnVjdCBicGZfaXRlcl9fYnBmX2xpbmsge1xcbiAgMzg6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfaXRlcl9tZXRhICosIG1ldGEpO1xcbiAgMzk6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfbGluayAqLCBsaW5rKTtcXG4gIDQwOlxcdH07XFxuICA0MTpcXHRcXG4gIDQyOlxcdERFRklORV9CUEZfSVRFUl9GVU5DKGJwZl9saW5rLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbiAgNDM6XFx0XFxuICA0NDpcXHRzdGF0aWMgaW50IF9fYnBmX2xpbmtfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGJvb2wgaW5fc3RvcClcXG4gIDQ1OlxcdHtcXG4gIDQ2OlxcdFxcdHN0cnVjdCBicGZfaXRlcl9fYnBmX2xpbmsgY3R4O1xcbiAgNDc6XFx0XFx0c3RydWN0IGJwZl9pdGVyX21ldGEgbWV0YTtcXG4gIDQ4OlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4gIDQ5OlxcdFxcdGludCByZXQgPSAwO1xcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHRjdHgubWV0YSA9IFxcdTAwMjZtZXRhO1xcbiAgNTI6XFx0XFx0Y3R4LmxpbmsgPSB2O1xcbiAgNTM6XFx0XFx0bWV0YS5zZXEgPSBzZXE7XFxuICA1NDpcXHRcXHRwcm9nID0gYnBmX2l0ZXJfZ2V0X2luZm8oXFx1MDAyNm1ldGEsIGluX3N0b3ApO1xcbiAgNTU6XFx0XFx0aWYgKHByb2cpXFxuICA1NjpcXHRcXHRcXHRyZXQgPSBicGZfaXRlcl9ydW5fcHJvZyhwcm9nLCBcXHUwMDI2Y3R4KTtcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0cmV0dXJuIHJldDtcXG4gIDU5OlxcdH1cXG4gIDYwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMjowMy45MTY5MDA3NjVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODk0MjAwMTg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIExpbmsgSUQgQWxsb2NhdGlvbiBhbmQgUmV0cmlldmFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IEJQRiBsaW5rcyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHRoZSBJRCBhbGxvY2F0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGxpZmVjeWNsZSBvZiBhIGxpbmsuIExldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuSW5pdGlhbGx5LCB3aGVuIGEgbGluayBpcyBiZWluZyBjcmVhdGVkLCBgYnBmX2xpbmtfYWxsb2NfaWRgIGlzIGNhbGxlZCwgYW5kIGFuIElEIGlzIGFsbG9jYXRlZCBmcm9tIGBsaW5rX2lkcmAgdXNpbmcgYGlkcl9hbGxvY19jeWNsaWNgLiBOb3csIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyDigJMgdGhlIGxpbmsgaXMgKmluc2VydGVkKiBpbnRvIGBsaW5rX2lkcmAsIGJ1dCB0aGUgYGxpbmstXHUwMDNlaWRgIGZpZWxkICppc24ndCogc2V0IHlldC4gSXQgcmVtYWlucyB6ZXJvLiBUaGlzIG1lYW5zLCB0aGVyZSdzIGEgcGVyaW9kIHdoZXJlIHRoZSBsaW5rIGV4aXN0cyBpbiB0aGUgSURSIGJ1dCBpc24ndCBjb25zaWRlcmVkIFwic2V0dGxlZC5cIiBUaGUgYWN0dWFsIElEIGFzc2lnbm1lbnQgaGFwcGVucyBsYXRlciBpbiBgYnBmX2xpbmtfc2V0dGxlYCwgd2hlcmUgYGxpbmstXHUwMDNlaWRgIGlzIGZpbmFsbHkgcG9wdWxhdGVkIHdpdGggdGhlIGFsbG9jYXRlZCBJRC4gSWYgbGluayBjcmVhdGlvbiBmYWlscywgYGJwZl9saW5rX2NsZWFudXAoKWAgaXMgY2FsbGVkIHdoaWNoIHdpbGwgY2FsbCBgYnBmX2xpbmtfZnJlZV9pZCgpYCB0byB0ZWFyIGl0IGRvd24uXG5cbk5vdywgaW4gYGJwZl9saW5rX2J5X2lkYCwgdGhlIGNvZGUgKmNvcnJlY3RseSogY2hlY2tzIGBsaW5rLVx1MDAzZWlkYCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBsaW5rLiBJZiBpdCdzIHplcm8sIGl0IG1lYW5zIHRoZSBsaW5rIGlzbid0IHJlYWR5LCBhbmQgaXQncyB0cmVhdGVkIGFzIGlmIGl0IGRvZXNuJ3QgZXhpc3Qg4oCTIHJldHVybmluZyBhbiBgLUVBR0FJTmAgZXJyb3IuIEdvb2QuIFRoYXQgcHJldmVudHMgcmV0dXJuaW5nIGhhbGYtYmFrZWQgbGlua3MuXG5cbkhvd2V2ZXIsIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YCBwcmVzZW50cyBhIHBvdGVudGlhbCBpc3N1ZS4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgc2VlbXMgbGlrZSBpZiBpdCBzdHVtYmxlZCB1cG9uIGFuIHVuc2V0dGxlZCBsaW5rICh3aGVyZSBgbGluay1cdTAwM2VpZGAgaXMgc3RpbGwgMCksIGl0IHdvdWxkIGNhbGwgYGJwZl9saW5rX2luY19ub3RfemVybygpYCwgcG90ZW50aWFsbHkgcmV0dXJuaW5nIGFuIHVuc2V0dGxlZCBsaW5rLiBUaGF0J3MgY2xlYXJseSBhIGJ1Zy4gSXQncyBwb3NzaWJsZSBmb3Igc29tZW9uZSB0byBpdGVyYXRlIGl0IHdoaWxlIGl0J3MgYmVpbmcgY3JlYXRlZCwgdG9ybiBkb3duLCBvciBpZiB0aGUgaW5pdGlhbGl6YXRpb24gaGFkIGlzc3Vlcy5cblxuVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMuIE5vdywgaWYgYGJwZl9saW5rX2dldF9jdXJyX29yX25leHRgIGZpbmRzIGEgbGluayB3aXRoIGBsaW5rLVx1MDAzZWlkID09IDBgLCBpdCBhc3NpZ25zIGBFUlJfUFRSKC1FQUdBSU4pYCB0byBgbGlua2AsIHdoaWNoIGlzIHRoZW4gY2F1Z2h0IGJ5IGBJU19FUlIobGluaylgLCBhbmQgdGhlIGNvZGUgY29ycmVjdGx5IGluY3JlbWVudHMgdGhlIElEIGFuZCBjb250aW51ZXMgaXRlcmF0aW9uLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBJIG5lZWQgdG8gd29ycnkgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBsaW5rLVx1MDAzZWlkYCAqaXRzZWxmKiBpcyB1bmluaXRpYWxpemVkIHdoZW4gdGhlIGBicGZfbGlua2Agc3RydWN0IGlzIGFsbG9jYXRlZC4gU28sIEkgd2lsbCBzZWFyY2ggZm9yIHdoZXJlIGBicGZfbGlua2AgaXMgYWxsb2NhdGVkIGFuZCBob3cgdGhlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4gSSBuZWVkIHRvIHJldmlldyBgYnBmX2xpbmtfaW5pdGAgYW5kIGFueSBvdGhlciByZWxldmFudCBpbml0aWFsaXphdGlvbiBwYXRocy4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAgdG8gdmVyaWZ5IHRoZSBzdGF0ZSBvZiB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMDIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDoxMjoxMi44NTg5MDU2ODFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDQwMzA4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2xpbmtfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRraXQuYz05ODg9c3RhdGljIGludCBuZXRraXRfbGlua19pbml0KHN0cnVjdCBuZXRraXRfbGluayAqbmtsLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtOTkzLXtcXG5kcml2ZXJzL25ldC9uZXRraXQuYzo5OTQ6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bmtsLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX05FVEtJVCxcXG5kcml2ZXJzL25ldC9uZXRraXQuYy05OTUtXFx0XFx0ICAgICAgXFx1MDAyNm5ldGtpdF9saW5rX2xvcHMsIHByb2csIGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9Mjg4OD1pbnQgYnBmX3Byb2dfbmV3X2ZkKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0yODg5LVxcbmluY2x1ZGUvbGludXgvYnBmLmg6Mjg5MDp2b2lkIGJwZl9saW5rX2luaXQoc3RydWN0IGJwZl9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI4OTEtXFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyAqb3BzLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuaW5jbHVkZS9saW51eC9icGYuaC0yODkyLVxcdFxcdCAgIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjI4OTM6dm9pZCBicGZfbGlua19pbml0X3NsZWVwYWJsZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjg5NC1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgKm9wcywgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zMzA0PWJwZl9wcm9nX2luY19ub3RfemVybyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMzMDgtXFxuaW5jbHVkZS9saW51eC9icGYuaDozMzA5OnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfbGlua19pbml0KHN0cnVjdCBicGZfbGluayAqbGluaywgZW51bSBicGZfbGlua190eXBlIHR5cGUsXFxuaW5jbHVkZS9saW51eC9icGYuaC0zMzEwLVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMzMTQtXFxuaW5jbHVkZS9saW51eC9icGYuaDozMzE1OnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfbGlua19pbml0X3NsZWVwYWJsZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzMxNi1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYz01MDQ9aW50IGJwZl9pdGVyX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy01NTQtXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjU1NTpcXHRicGZfbGlua19pbml0KFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX0lURVIsIFxcdTAwMjZicGZfaXRlcl9saW5rX2xvcHMsIHByb2csXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTU1Ni1cXHRcXHQgICAgICBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTQzNz1pbnQgYnBmX3N0cnVjdF9vcHNfbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ2MC1cXHR9XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjE0NjE6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bGluay1cXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2YnBmX3N0cnVjdF9vcHNfbWFwX2xvcHMsIE5VTEwsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0NjItXFx0XFx0ICAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNTQwPWludCBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NTgtXFx0fVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTU1OTpcXHRicGZfbGlua19pbml0KFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX0NHUk9VUCwgXFx1MDAyNmJwZl9jZ3JvdXBfbGlua19sb3BzLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU2MC1cXHRcXHQgICAgICBwcm9nLCBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz00NzE9aW50IG5ldG5zX2JwZl9saW5rX2NyZWF0ZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDk2LVxcdH1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzo0OTc6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bmV0X2xpbmstXFx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfTkVUTlMsXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDk4LVxcdFxcdCAgICAgIFxcdTAwMjZicGZfbmV0bnNfbGlua19vcHMsIHByb2csIHR5cGUpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzIwND1zdGF0aWMgaW50IGJwZl9vYmpfZ2V0KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzIyMC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjIxOi8qIGJwZl9saW5rX2luaXRfc2xlZXBhYmxlKCkgYWxsb3dzIHRvIHNwZWNpZnkgd2hldGhlciBCUEYgbGluayBpdHNlbGYgaGFzXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzIyMi0gKiBcXFwic2xlZXBhYmxlXFxcIiBzZW1hbnRpY3MsIHdoaWNoIG5vcm1hbGx5IHdvdWxkIG1lYW4gdGhhdCBCUEYgbGluaydzIGF0dGFjaFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzIyOC0gKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjI5OnZvaWQgYnBmX2xpbmtfaW5pdF9zbGVlcGFibGUoc3RydWN0IGJwZl9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjMwLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyAqb3BzLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjQyLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNDM6dm9pZCBicGZfbGlua19pbml0KHN0cnVjdCBicGZfbGluayAqbGluaywgZW51bSBicGZfbGlua190eXBlIHR5cGUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI0NC1cXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyNDYte1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNDc6XFx0YnBmX2xpbmtfaW5pdF9zbGVlcGFibGUobGluaywgdHlwZSwgb3BzLCBwcm9nLCBhdHRhY2hfdHlwZSwgZmFsc2UpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyNDgtfVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzI1MD12b2lkIGJwZl90cmFtcF9saW5rX2luaXQoc3RydWN0IGJwZl90cmFtcF9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyNTMte1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMyNTQ6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bGluay1cXHUwMDNlbGluaywgdHlwZSwgb3BzLCBwcm9nLCBhdHRhY2hfdHlwZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzI1NS1cXHRsaW5rLVxcdTAwM2Vub2RlLmxpbmsgPSBcXHUwMDI2bGluay1cXHUwMDNlbGluaztcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQyNDU9c3RhdGljIGludCBicGZfcGVyZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDI2NC1cXHR9XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDI2NTpcXHRicGZfbGlua19pbml0KFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1BFUkZfRVZFTlQsIFxcdTAwMjZicGZfcGVyZl9saW5rX2xvcHMsIHByb2csXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDI2Ni1cXHRcXHQgICAgICBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00Mjk3PXN0YXRpYyBpbnQgYnBmX3Jhd190cF9saW5rX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MzQ3LVxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0MzQ4OlxcdGJwZl9saW5rX2luaXRfc2xlZXBhYmxlKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1JBV19UUkFDRVBPSU5ULFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQzNDktXFx0XFx0XFx0XFx0XFx1MDAyNmJwZl9yYXdfdHBfbGlua19sb3BzLCBwcm9nLCBhdHRhY2hfdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvdGN4LmM9Mjk4PXN0YXRpYyBpbnQgdGN4X2xpbmtfaW5pdChzdHJ1Y3QgdGN4X2xpbmsgKnRjeCxcXG4tLVxcbmtlcm5lbC9icGYvdGN4LmMtMzAzLXtcXG5rZXJuZWwvYnBmL3RjeC5jOjMwNDpcXHRicGZfbGlua19pbml0KFxcdTAwMjZ0Y3gtXFx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfVENYLCBcXHUwMDI2dGN4X2xpbmtfbG9wcywgcHJvZyxcXG5rZXJuZWwvYnBmL3RjeC5jLTMwNS1cXHRcXHQgICAgICBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mjc4MD1pbnQgYnBmX2twcm9iZV9tdWx0aV9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI4ODAtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI4ODE6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bGluay1cXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9LUFJPQkVfTVVMVEksXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI4ODItXFx0XFx0ICAgICAgXFx1MDAyNmJwZl9rcHJvYmVfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzI1MT1pbnQgYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMzNjgtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjMzNjk6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bGluay1cXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9VUFJPQkVfTVVMVEksXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMzNzAtXFx0XFx0ICAgICAgXFx1MDAyNmJwZl91cHJvYmVfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mzg0MD1pbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkwMC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkwMTpcXHRicGZfbGlua19pbml0KFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEksXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MDItXFx0XFx0ICAgICAgXFx1MDAyNmJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcywgcHJvZywgcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTA3MzE9aW50IGJwZl94ZHBfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNzUyLVxcbm5ldC9jb3JlL2Rldi5jOjEwNzUzOlxcdGJwZl9saW5rX2luaXQoXFx1MDAyNmxpbmstXFx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfWERQLCBcXHUwMDI2YnBmX3hkcF9saW5rX2xvcHMsIHByb2csXFxubmV0L2NvcmUvZGV2LmMtMTA3NTQtXFx0XFx0ICAgICAgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xODc1PWludCBzb2NrX21hcF9saW5rX2NyZWF0ZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTAwLVxcdGF0dGFjaF90eXBlID0gYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGU7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxOTAxOlxcdGJwZl9saW5rX2luaXQoXFx1MDAyNnNvY2ttYXBfbGluay1cXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9TT0NLTUFQLCBcXHUwMDI2c29ja19tYXBfbGlua19vcHMsIHByb2csXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTAyLVxcdFxcdCAgICAgIGF0dGFjaF90eXBlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfYnBmX2xpbmsuYz0yMTA9aW50IGJwZl9uZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9icGZfbGluay5jLTIyNy1cXG5uZXQvbmV0ZmlsdGVyL25mX2JwZl9saW5rLmM6MjI4OlxcdGJwZl9saW5rX2luaXQoXFx1MDAyNmxpbmstXFx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfTkVURklMVEVSLCBcXHUwMDI2YnBmX25mX2xpbmtfbG9wcywgcHJvZyxcXG5uZXQvbmV0ZmlsdGVyL25mX2JwZl9saW5rLmMtMjI5LVxcdFxcdCAgICAgIGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTI6MTQuOTAyOTQyMzhaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI4NTI1NTY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIGBicGZfbGlua19pbml0X3NsZWVwYWJsZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCB0aGlzIGZ1bmN0aW9uLCBgYnBmX2xpbmtfaW5pdF9zbGVlcGFibGVgLCByZXNpZGluZyBpbiB0aGUgaGVhcnQgb2YgdGhlIEJQRiBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlNsZWVwYWJsZT9cIiBJbnRlcmVzdGluZy4uLiB0aGlzIGltcGxpZXMgd2UncmUgZGVhbGluZyB3aXRoIGEgQlBGIGxpbmsgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB0aGF0LCBmb3Igc29tZSByZWFzb24sIG1pZ2h0IGJsb2NrIG9yIHJlcXVpcmUgYXN5bmNocm9ub3VzIGhhbmRsaW5nLiBUaGF0IGluc3RhbnRseSByYWlzZXMgYSBmbGFnOiB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgYWNxdWlyZWQgaGVyZSwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBtaWdodCB0aGV5IG5vdCBiZSBpbW1lZGlhdGVseSBhdmFpbGFibGU/IFdlJ3JlIHBvdGVudGlhbGx5IGVudGVyaW5nIGEgZG9tYWluIHdoZXJlIGNvbmN1cnJlbmN5IGFuZCBsb2NrIGNvbnRlbnRpb24gYXJlIGNyaXRpY2FsIGNvbnNpZGVyYXRpb25zLlxuXG5JJ2xsIG5lZWQgdG8gZHJpbGwgaW50byB0aGUgc3BlY2lmaWMgY29kZSB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBvZiB0aGUgXCJzbGVlcGFibGVcIiBhc3BlY3QuIElzIHRoaXMgcmVsYXRlZCB0byBsb2FkaW5nIGEgQlBGIHByb2dyYW0sIGF0dGFjaGluZyBpdCB0byBhIHNwZWNpZmljIGhvb2sgb3IgdHJhY2Vwb2ludCwgb3IgcGVyaGFwcyBpbml0aWFsaXppbmcgc29tZSBmb3JtIG9mIHNoYXJlZCBkYXRhIHN0cnVjdHVyZT8gVGhlIGZhY3QgdGhhdCBpdCdzIGluIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSBzdWdnZXN0cyB3ZSdyZSBsaWtlbHkgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGZvciB0aGUgQlBGIGxpbmssIHJhdGhlciB0aGFuIGhhbmRsaW5nIHRoZSBhY3R1YWwgZXhlY3V0aW9uIG9yIGRhdGEgdHJhbnNmZXIuIFRoYXQncyBhIGtleSBkaXN0aW5jdGlvbi4gSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucywgcG90ZW50aWFsIGRldmljZSBpbnRlcmFjdGlvbnMsIG9yIGFueSBvcGVyYXRpb25zIHRoYXQgbWlnaHQgaW52b2x2ZSB3YWl0aW5nIG9uIGV4dGVybmFsIGV2ZW50cy4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhpcyB3aWxsIGJlIHJlbGF0ZWQgdG8gYSBCUEYtdG8tQlBGIChvciBwZXJoYXBzIEJQRi10by11c2VyKSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDA1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTI6MTguMTg4MjAwODgxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjI1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMjI1OlxcdCAqIEJQRiBwcm9ncmFtIGl0c2VsZiBjYW4gYmUgbm9uLXNsZWVwYWJsZSwgeWV0LCBiZWNhdXNlIGl0J3MgdHJhbnNpdGl2ZWx5XFxuMzIyNjpcXHQgKiByZWFjaGFibGUgdGhyb3VnaCBCUEYgbGluaywgaXRzIGZyZWVpbmcgaGFzIHRvIGJlIGRlbGF5ZWQgdW50aWwgYWZ0ZXIgUkNVXFxuMzIyNzpcXHQgKiBUYXNrcyBUcmFjZSBHUC5cXG4zMjI4OlxcdCAqL1xcbjMyMjk6XFx0dm9pZCBicGZfbGlua19pbml0X3NsZWVwYWJsZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxcbjMyMzA6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzICpvcHMsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4zMjMxOlxcdFxcdFxcdFxcdCAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIGJvb2wgc2xlZXBhYmxlKVxcbjMyMzI6XFx0e1xcbjMyMzM6XFx0XFx0V0FSTl9PTihvcHMtXFx1MDAzZWRlYWxsb2MgXFx1MDAyNlxcdTAwMjYgb3BzLVxcdTAwM2VkZWFsbG9jX2RlZmVycmVkKTtcXG4zMjM0OlxcdFxcdGF0b21pYzY0X3NldChcXHUwMDI2bGluay1cXHUwMDNlcmVmY250LCAxKTtcXG4zMjM1OlxcdFxcdGxpbmstXFx1MDAzZXR5cGUgPSB0eXBlO1xcbjMyMzY6XFx0XFx0bGluay1cXHUwMDNlc2xlZXBhYmxlID0gc2xlZXBhYmxlO1xcbjMyMzc6XFx0XFx0bGluay1cXHUwMDNlaWQgPSAwO1xcbjMyMzg6XFx0XFx0bGluay1cXHUwMDNlb3BzID0gb3BzO1xcbjMyMzk6XFx0XFx0bGluay1cXHUwMDNlcHJvZyA9IHByb2c7XFxuMzI0MDpcXHRcXHRsaW5rLVxcdTAwM2VhdHRhY2hfdHlwZSA9IGF0dGFjaF90eXBlO1xcbjMyNDE6XFx0fVxcbjMyNDI6XFx0XFxuMzI0MzpcXHR2b2lkIGJwZl9saW5rX2luaXQoc3RydWN0IGJwZl9saW5rICpsaW5rLCBlbnVtIGJwZl9saW5rX3R5cGUgdHlwZSxcXG4zMjQ0OlxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgKm9wcywgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbjMyNDU6XFx0XFx0XFx0ICAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXFxuMzI0NjpcXHR7XFxuMzI0NzpcXHRcXHRicGZfbGlua19pbml0X3NsZWVwYWJsZShsaW5rLCB0eXBlLCBvcHMsIHByb2csIGF0dGFjaF90eXBlLCBmYWxzZSk7XFxuMzI0ODpcXHR9XFxuMzI0OTpcXHRcXG4zMjUwOlxcdHZvaWQgYnBmX3RyYW1wX2xpbmtfaW5pdChzdHJ1Y3QgYnBmX3RyYW1wX2xpbmsgKmxpbmssIGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlLFxcbjMyNTE6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgKm9wcywgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbjMyNTI6XFx0XFx0XFx0XFx0IGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLCB1NjQgY29va2llKVxcbjMyNTM6XFx0e1xcbjMyNTQ6XFx0XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bGluay1cXHUwMDNlbGluaywgdHlwZSwgb3BzLCBwcm9nLCBhdHRhY2hfdHlwZSk7XFxuMzI1NTpcXHRcXHRsaW5rLVxcdTAwM2Vub2RlLmxpbmsgPSBcXHUwMDI2bGluay1cXHUwMDNlbGluaztcXG4zMjU2OlxcdFxcdGxpbmstXFx1MDAzZW5vZGUuY29va2llID0gY29va2llO1xcbjMyNTc6XFx0fVxcbjMyNTg6XFx0XFxuMzI1OTpcXHRzdGF0aWMgdm9pZCBicGZfbGlua19mcmVlX2lkKGludCBpZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTI6MTguMTg4NDY3NjIxWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzNzUxNDU3MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIExpbmsgSUQgSW5pdGlhbGl6YXRpb24gYW5kIEl0ZXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTGluZSAzMjM3OiBgbGluay1cdTAwM2VpZCA9IDA7YCBUaGF0J3Mgd2hlcmUgaXQgc3RhcnRzLCBpbml0aWFsaXplZCB0byB6ZXJvIGluIGBicGZfbGlua19pbml0X3NsZWVwYWJsZWAhIEFuZCB0aGVuLCB3ZSBoYXZlIHRoaXMgYXNzaWdubWVudCBpbiBgYnBmX2xpbmtfc2V0dGxlKClgOiBgcHJpbWVyLVx1MDAzZWxpbmstXHUwMDNlaWQgPSBwcmltZXItXHUwMDNlaWQ7YCBTbywgY29uZmlybWVkLCBgbGluay1cdTAwM2VpZGAgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgdG8gemVybyB1cG9uIGNyZWF0aW9uLiBUaGlzIGlzIGtleS5cblxuVGhlIGlzc3VlIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGlzIGluIGBicGZfbGlua19nZXRfY3Vycl9vcl9uZXh0YC4gV2hlbiB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIGxpbmtzIHVzaW5nIHRoZSBJRFIgKGBpZHJfZ2V0X25leHRgKSwgaXQgd2FzIGdyYWJiaW5nIHJlZmVyZW5jZXMgdG8gbGlua3MgdGhhdCB3ZXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQuIE1lYW5pbmcsIHRoZXkgaGFkIGJlZW4gYWxsb2NhdGVkIGFuIElEIGluIGBsaW5rX2lkcmAsIGJ1dCBoYWRuJ3QgeWV0IGJlZW4gXCJzZXR0bGVkLFwiIHNvIHRoZWlyIGBsaW5rLVx1MDAzZWlkYCB3YXMgc3RpbGwgemVyby4gVGhpcyBpcyBhIHByb2JsZW0hIEl0IHdhcyByZXR1cm5pbmcgdGhpcyBsaW5rIHdpdGggYGxpbmstXHUwMDNlaWRgIG9mIDAuIFdhaXQsIHRoaXMgY291bGQgbWVhbiB0aGF0IGxpbmsgY3JlYXRpb24gZmFpbHMsIG9yIGl0ZXJhdGluZyBhbiB1bnNldHRsZWQgbGluayBjYXVzZXMgcHJvYmxlbXMsIGxpa2UgYSB1c2VyIHNlZWluZyBhIGxpbmsgd2l0aCBhbiBJRCBvZiAwLCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIHNpbXBsZSBidXQgZWZmZWN0aXZlOlxuYGBgZGlmZlxuIFx0bGluayA9IGlkcl9nZXRfbmV4dChcdTAwMjZsaW5rX2lkciwgaWQpO1xuIFx0aWYgKGxpbmspIHtcbi1cdFx0bGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTtcbitcdFx0aWYgKGxpbmstXHUwMDNlaWQpXG4rXHRcdFx0bGluayA9IGJwZl9saW5rX2luY19ub3RfemVybyhsaW5rKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGxpbmsgPSBFUlJfUFRSKC1FQUdBSU4pO1xuIFx0XHRpZiAoSVNfRVJSKGxpbmspKSB7XG4gXHRcdFx0KCppZCkrKztcbiBcdFx0XHRnb3RvIGFnYWluO1xuYGBgXG5JZiBgbGluay1cdTAwM2VpZCA9PSAwYCwgdGhlIGNvZGUgbm93IHNldHMgYGxpbmtgIHRvIGBFUlJfUFRSKC1FQUdBSU4pYC4gVGhpcyBpcyBjbGV2ZXIhIFRoZW4gYElTX0VSUihsaW5rKWAgYmVjb21lcyB0cnVlLCBhbmQgaXQgZG9lcyBgKCppZCkrK2AgYW5kIHNraXBzIHRvIHRoZSBuZXh0IElEIChgZ290byBhZ2FpbjtgKSwgYWN0aW5nICpleGFjdGx5KiBsaWtlIGlmIGBicGZfbGlua19pbmNfbm90X3plcm8obGluaylgIGhhZCBmYWlsZWQuIFRoaXMgaXMgZXhhY3RseSB3aGF0IGlzIG5lZWRlZC4gSXQgYXZvaWRzIHRoZSBwcm9ibGVtcyBvZiByZXR1cm5pbmcgbGlua3MgdGhhdCBhcmUgbm90IHJlYWR5LlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IGBicGZfb2JqX2dldF9uZXh0X2lkYCBmb3IgY29tcGFyaXNvbi5cbkxldCdzIHNlZSBob3cgdGhhdCB3b3JrcyB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgcmlnaHQgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDMyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTI6MzEuOTM5OTI4Nzg0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjY5NDEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfb2JqX2dldF9uZXh0X2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTQ3ODI9c3RhdGljIGludCBicGZfcHJvZ190ZXN0X3J1bihjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ4MTEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDgxMjpzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDgxMy1cXHRcXHRcXHQgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDY9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5MC1cXHRjYXNlIEJQRl9QUk9HX0dFVF9ORVhUX0lEOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTE6XFx0XFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzkyLVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnByb2dfaWRyLCBcXHUwMDI2cHJvZ19pZHJfbG9jayk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mzk0LVxcdGNhc2UgQlBGX01BUF9HRVRfTkVYVF9JRDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2Mzk1OlxcdFxcdGVyciA9IGJwZl9vYmpfZ2V0X25leHRfaWQoXFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5Ni1cXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZtYXBfaWRyLCBcXHUwMDI2bWFwX2lkcl9sb2NrKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTgtXFx0Y2FzZSBCUEZfQlRGX0dFVF9ORVhUX0lEOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTk6XFx0XFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDAwLVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmJ0Zl9pZHIsIFxcdTAwMjZidGZfaWRyX2xvY2spO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1My1cXHRjYXNlIEJQRl9MSU5LX0dFVF9ORVhUX0lEOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NTQ6XFx0XFx0ZXJyID0gYnBmX29ial9nZXRfbmV4dF9pZChcXHUwMDI2YXR0ciwgdWF0dHIudXNlcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDU1LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmxpbmtfaWRyLCBcXHUwMDI2bGlua19pZHJfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjEyOjMyLjAwMjYzMTUxM1oiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTU2NzM1MzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyBgYnBmX29ial9nZXRfbmV4dF9pZGA6XG5cbioqRGl2aW5nIGludG8gYnBmX29ial9nZXRfbmV4dF9pZCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IGBicGZfb2JqX2dldF9uZXh0X2lkYC4gUmlnaHQsIHRoaXMgaXMgYSBjb3JlIEJQRiBmdW5jdGlvbiwgbGlrZWx5IGNydWNpYWwgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIG9iamVjdCBJRHMgd2l0aGluIHRoZSBCUEYgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBkZXNpZ25lZCB0byByZXR1cm4gdGhlIG5leHQgYXZhaWxhYmxlIElELiBJcyB0aGlzIGZ1bmN0aW9uIGdvaW5nIHRvIG1haW50YWluIGFuIGludGVybmFsIGl0ZXJhdG9yLCBvciByZWx5IG9uIHNvbWUgZXh0ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgdG8gbWFuYWdlIG9iamVjdCBJRHM/IERvZXMgaXQgdXNlIGEgbGluZWFyIHNjYW4sIG9yIGlzIHRoZXJlIHNvbWUgbW9yZSBzb3BoaXN0aWNhdGVkIGluZGV4aW5nIGludm9sdmVkLCB3aGljaCBjb3VsZCBhZmZlY3QgcGVyZm9ybWFuY2UgZHJhc3RpY2FsbHksIGVzcGVjaWFsbHkgd2l0aCBtYW55IEJQRiBwcm9ncmFtcyBhbmQgbWFwcz8gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyBjb25jdXJyZW5jeSBpcyBoYW5kbGVkLCBvciBpZiBpdCdzIGhhbmRsZWQgYXQgYWxsLiBXaGF0IGtpbmQgb2YgbG9ja2luZyBpcyB1c2VkLCBpZiBhbnk/IEFsc28sIEkgd2lsbCBsb29rIGF0IGVycm9yIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGhvdyBkb2VzIGl0IHNpZ25hbCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIElEcywgb3IgaW4gdGhlIGNhc2Ugb2YgYSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBvZiB0aGUgSUQgbGlzdC4gQW55IGVkZ2UgY2FzZXMgSSBzaG91bGQgY29uc2lkZXI/IEkgaG9wZSBpdCdzIHdlbGwtZG9jdW1lbnRlZCEgVGltZSB0byBkaXNzZWN0IHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA0NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjEyOjM0LjE1OTM2OTY0MVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDgxMixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDgxMjpcXHRzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuNDgxMzpcXHRcXHRcXHRcXHQgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcXG40ODE0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWRyICppZHIsXFxuNDgxNTpcXHRcXHRcXHRcXHQgICAgICAgc3BpbmxvY2tfdCAqbG9jaylcXG40ODE2OlxcdHtcXG40ODE3OlxcdFxcdHUzMiBuZXh0X2lkID0gYXR0ci1cXHUwMDNlc3RhcnRfaWQ7XFxuNDgxODpcXHRcXHRpbnQgZXJyID0gMDtcXG40ODE5OlxcdFxcbjQ4MjA6XFx0XFx0aWYgKENIRUNLX0FUVFIoQlBGX09CSl9HRVRfTkVYVF9JRCkgfHwgbmV4dF9pZCBcXHUwMDNlPSBJTlRfTUFYKVxcbjQ4MjE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDgyMjpcXHRcXG40ODIzOlxcdFxcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcXG40ODI0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuNDgyNTpcXHRcXG40ODI2OlxcdFxcdG5leHRfaWQrKztcXG40ODI3OlxcdFxcdHNwaW5fbG9ja19iaChsb2NrKTtcXG40ODI4OlxcdFxcdGlmICghaWRyX2dldF9uZXh0KGlkciwgXFx1MDAyNm5leHRfaWQpKVxcbjQ4Mjk6XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG40ODMwOlxcdFxcdHNwaW5fdW5sb2NrX2JoKGxvY2spO1xcbjQ4MzE6XFx0XFxuNDgzMjpcXHRcXHRpZiAoIWVycilcXG40ODMzOlxcdFxcdFxcdGVyciA9IHB1dF91c2VyKG5leHRfaWQsIFxcdTAwMjZ1YXR0ci1cXHUwMDNlbmV4dF9pZCk7XFxuNDgzNDpcXHRcXG40ODM1OlxcdFxcdHJldHVybiBlcnI7XFxuNDgzNjpcXHR9XFxuNDgzNzpcXHRcXG40ODM4OlxcdHN0cnVjdCBicGZfbWFwICpicGZfbWFwX2dldF9jdXJyX29yX25leHQodTMyICppZClcXG40ODM5OlxcdHtcXG40ODQwOlxcdFxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuNDg0MTpcXHRcXG40ODQyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bWFwX2lkcl9sb2NrKTtcXG40ODQzOlxcdGFnYWluOlxcbjQ4NDQ6XFx0XFx0bWFwID0gaWRyX2dldF9uZXh0KFxcdTAwMjZtYXBfaWRyLCBpZCk7XFxuNDg0NTpcXHRcXHRpZiAobWFwKSB7XFxuNDg0NjpcXHRcXHRcXHRtYXAgPSBfX2JwZl9tYXBfaW5jX25vdF96ZXJvKG1hcCwgZmFsc2UpO1xcbjQ4NDc6XFx0XFx0XFx0aWYgKElTX0VSUihtYXApKSB7XFxuNDg0ODpcXHRcXHRcXHRcXHQoKmlkKSsrO1xcbjQ4NDk6XFx0XFx0XFx0XFx0Z290byBhZ2FpbjtcXG40ODUwOlxcdFxcdFxcdH1cXG40ODUxOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTI6MzQuMTU5NjE4ODYxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYzNzYyNTY5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBNZW1vcnkgU2FmZXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mb3JtYXRpb24gbGVha3MuIEknbGwgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmQgY2hlY2tzLCBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBrZXJuZWwgc3RydWN0dXJlcywgY29uZGl0aW9uYWwgbG9naWMsIGFuZCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi5cblxuRmlyc3QsIGRvZXMgdGhpcyBwYXRjaCB0b3VjaCBhbnl0aGluZyB0aGF0IGNvdWxkIHNlbmQgdW5pbml0aWFsaXplZCBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlPyBObywgbm90aGluZyBpcyBtb2RpZmllZCByZWdhcmRpbmcgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgU0tCIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCwgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzLiBUaGF0J3MgYSBjbGVhbiBzbGF0ZS5cblxuTmV4dCwgYXJlIHRoZXJlIGFueSBjaGFuZ2VzIHRvIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvciBsb2dpYyB0aGF0IGNvdWxkIHJlbHkgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gIE5vLiBUaGUga2V5IHZhcmlhYmxlLCBgbGluay1cdTAwM2VpZGAsIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCB3aXRoaW4gYGJwZl9saW5rX2luaXRfc2xlZXBhYmxlYCwgYW5kIGFueXRoaW5nIGNvbnRhaW5pbmcgYSBgYnBmX2xpbmtgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AuIFNvLCBpbml0aWFsaXphdGlvbiBpcyBoYW5kbGVkIGNvcnJlY3RseS5cblxuTm93LCB3aGF0IGFib3V0IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgbGF0ZXIgYmUgcmVhZD8gQWdhaW4sIG5vIGNoYW5nZXMgaGVyZS4gTm8gbmV3IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gcGF0dGVybnMgYXJlIGludHJvZHVjZWQgdGhhdCBJIGNhbiBzZWUuXG5cbkFuZCBmaW5hbGx5LCBkb2VzIHRoaXMgcGF0Y2ggbW9kaWZ5IGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0ICptaWdodCogYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycz8gTm9wZS5cblxuU28sICppcyogdGhlcmUgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3M/IEJhc2VkIG9uIG15IHJldmlldywgdGhlIHBhdGNoICpwcmV2ZW50cyogYGJwZl9saW5rX2dldF9jdXJyX29yX25leHQoKWAgZnJvbSByZXR1cm5pbmcgbGlua3MgdGhhdCBhcmUgc3RpbGwgYmVpbmcgY3JlYXRlZCAod2hlcmUgYGxpbmstXHUwMDNlaWQgPT0gMGApLiAgVGhpcyBmaXhlcyBhIGNvbmN1cnJlbmN5IGlzc3VlLCBwcmV2ZW50aW5nIGFuIHVuc2V0dGxlZCBsaW5rIGZyb20gYmVpbmcgcmV0dXJuZWQgYnkgdGhlIGl0ZXJhdG9yLiBUaGlzIGlzIGEgY29uY3VycmVuY3ksIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIHN0YXRlIHZhbGlkaXR5IGZpeC4gS01TQU4gaXMgbXkgcHJpbWFyeSB0b29sIGZvciBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBhbmQgcGFnZSksIGFuZCBhbnkga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gIEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyBhcmUgbXkgZ28tdG8gZm9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIChVQUYsIG91dC1vZi1ib3VuZHMsIHJhY2UgY29uZGl0aW9ucykuICBIZXJlLCBJIHNlZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIHRodXMgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSeKAmWxsIG5vdyBkb3VibGUtY2hlY2sgbXkgcmVhc29uaW5nIHRvIG1ha2UgY2VydGFpbiB0aGlzIGFzc2Vzc21lbnQgaXMgY29tcHJlaGVuc2l2ZSBhbmQgcHJlY2lzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MjgsIk91dHB1dFRva2VucyI6MjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjA6MTI6NDAuNTM1ODc5NzM1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIHZlcmlmeSB0aGF0IGBsaW5rLVxcdTAwM2VpZGAgaXMgbm9uLXplcm8gYmVmb3JlIGluY3JlbWVudGluZyB0aGUgbGluayByZWZjb3VudCBhbmQgcmV0dXJuaW5nIGl0LiBUaGlzIHByZXZlbnRzIHRoZSBsaW5rIGl0ZXJhdG9yIGZyb20gcmV0dXJuaW5nIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIG9yIHVuc2V0dGxlZCBCUEYgbGluayB0aGF0IHdhcyBhbGxvY2F0ZWQgYW4gSUQgaW4gYGxpbmtfaWRyYCBidXQgaGFzIG5vdCB5ZXQgYmVlbiBzZXR0bGVkIHZpYSBgYnBmX2xpbmtfc2V0dGxlKClgLlxcblxcbmBsaW5rLVxcdTAwM2VpZGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIHRvIDAgaW4gYGJwZl9saW5rX2luaXRfc2xlZXBhYmxlKClgIGR1cmluZyBsaW5rIGFsbG9jYXRpb24gYW5kIHNldCB0byBpdHMgSUQgb25seSB1cG9uIGBicGZfbGlua19zZXR0bGUoKWAuIFRoaXMgY2hhbmdlIG9ubHkgY2hlY2tzIGFuIGFscmVhZHktaW5pdGlhbGl6ZWQgZmllbGQgKGBsaW5rLVxcdTAwM2VpZGApIHRvIGhhbmRsZSBsaW5rIGxpZmVjeWNsZS9jb25jdXJyZW5jeSBzdGF0ZSwgYW5kIGRvZXMgbm90IHRvdWNoIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX2xpbmtfZ2V0X2N1cnJfb3JfbmV4dCgpYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIHZlcmlmeSB0aGF0IGBsaW5rLVxcdTAwM2VpZGAgaXMgbm9uLXplcm8gYmVmb3JlIGluY3JlbWVudGluZyB0aGUgbGluayByZWZjb3VudCBhbmQgcmV0dXJuaW5nIGl0LiBUaGlzIHByZXZlbnRzIHRoZSBsaW5rIGl0ZXJhdG9yIGZyb20gcmV0dXJuaW5nIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIG9yIHVuc2V0dGxlZCBCUEYgbGluayB0aGF0IHdhcyBhbGxvY2F0ZWQgYW4gSUQgaW4gYGxpbmtfaWRyYCBidXQgaGFzIG5vdCB5ZXQgYmVlbiBzZXR0bGVkIHZpYSBgYnBmX2xpbmtfc2V0dGxlKClgLlxcblxcbmBsaW5rLVxcdTAwM2VpZGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIHRvIDAgaW4gYGJwZl9saW5rX2luaXRfc2xlZXBhYmxlKClgIGR1cmluZyBsaW5rIGFsbG9jYXRpb24gYW5kIHNldCB0byBpdHMgSUQgb25seSB1cG9uIGBicGZfbGlua19zZXR0bGUoKWAuIFRoaXMgY2hhbmdlIG9ubHkgY2hlY2tzIGFuIGFscmVhZHktaW5pdGlhbGl6ZWQgZmllbGQgKGBsaW5rLVxcdTAwM2VpZGApIHRvIGhhbmRsZSBsaW5rIGxpZmVjeWNsZS9jb25jdXJyZW5jeSBzdGF0ZSwgYW5kIGRvZXMgbm90IHRvdWNoIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgccv[1] Phase: Succeeded StartedAt: 2026-09-14 20:12:51 +0000 UTC FinishedAt: 2026-09-14 20:12:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 20:12:51 +0000 UTC FinishedAt: 2026-09-14 20:12:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2] Phase: Succeeded StartedAt: 2026-09-14 20:12:51 +0000 UTC FinishedAt: 2026-09-15 00:39:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-14 20:12:51 +0000 UTC FinishedAt: 2026-09-15 00:39:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 20:12:51 +0000 UTC FinishedAt: 2026-09-14 20:13:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 20:12:51 +0000 UTC FinishedAt: 2026-09-14 20:12:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowvgccv/series-workflowvgccv-convert-artifact-1311873389/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 20:13:01 +0000 UTC FinishedAt: 2026-09-14 20:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 20:13:01 +0000 UTC FinishedAt: 2026-09-14 20:33:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cbc28060-c1d7-46f6-9801-70fd0fae0be3,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-workflowvgccv/series-workflowvgccv-convert-artifact-1311873389/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": "32489c84-d411-48ae-9966-2a7b01b5ec30", "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-workflowvgccv/series-workflowvgccv-build-action-3300262755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 20:13:01 +0000 UTC FinishedAt: 2026-09-14 20:33:32 +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:*cbc28060-c1d7-46f6-9801-70fd0fae0be3,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-workflowvgccv/series-workflowvgccv-convert-artifact-1311873389/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": "32489c84-d411-48ae-9966-2a7b01b5ec30", "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-workflowvgccv/series-workflowvgccv-build-action-3300262755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 20:33:58 +0000 UTC FinishedAt: 2026-09-14 20:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 20:33:58 +0000 UTC FinishedAt: 2026-09-14 20:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 20:33:58 +0000 UTC FinishedAt: 2026-09-14 20:34:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 20:33:58 +0000 UTC FinishedAt: 2026-09-14 20:34:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowvgccv/series-workflowvgccv-convert-artifact-2988772808/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-14 20:34:08 +0000 UTC FinishedAt: 2026-09-14 20:36:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-14 20:34:08 +0000 UTC FinishedAt: 2026-09-14 20:35:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*32489c84-d411-48ae-9966-2a7b01b5ec30,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-workflowvgccv/series-workflowvgccv-build-action-3300262755/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-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-14 20:36:05 +0000 UTC FinishedAt: 2026-09-14 20:36:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-14 20:36:05 +0000 UTC FinishedAt: 2026-09-14 20:36:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-14 20:36:05 +0000 UTC FinishedAt: 2026-09-14 20:56:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-14 20:36:05 +0000 UTC FinishedAt: 2026-09-14 20:56:57 +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:*cbc28060-c1d7-46f6-9801-70fd0fae0be3,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-workflowvgccv/series-workflowvgccv-convert-artifact-2988772808/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": "ec42f444-ce60-44e1-b6dc-3a9bae951fd9", "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-workflowvgccv/series-workflowvgccv-build-action-906904180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-14 20:36:05 +0000 UTC FinishedAt: 2026-09-14 20:56:47 +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:*cbc28060-c1d7-46f6-9801-70fd0fae0be3,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-workflowvgccv/series-workflowvgccv-convert-artifact-2988772808/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": "ec42f444-ce60-44e1-b6dc-3a9bae951fd9", "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-workflowvgccv/series-workflowvgccv-build-action-906904180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-14 20:56:57 +0000 UTC FinishedAt: 2026-09-14 20:56:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-14 20:56:57 +0000 UTC FinishedAt: 2026-09-14 20:56:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-14 20:56:57 +0000 UTC FinishedAt: 2026-09-14 20:58:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-14 20:56:57 +0000 UTC FinishedAt: 2026-09-14 20:58:43 +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:*ec42f444-ce60-44e1-b6dc-3a9bae951fd9,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-workflowvgccv/series-workflowvgccv-build-action-906904180/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-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-14 20:58:52 +0000 UTC FinishedAt: 2026-09-15 00:39:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-14 20:58:52 +0000 UTC FinishedAt: 2026-09-15 00:39:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"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:*32489c84-d411-48ae-9966-2a7b01b5ec30,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ec42f444-ce60-44e1-b6dc-3a9bae951fd9,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-workflowvgccv/series-workflowvgccv-build-action-3300262755/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-workflowvgccv/series-workflowvgccv-build-action-906904180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-14 20:58:52 +0000 UTC FinishedAt: 2026-09-14 20:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-14 20:58:52 +0000 UTC FinishedAt: 2026-09-14 20:59:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"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-workflowvgccv/series-workflowvgccv-convert-artifact-1393899905/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-14 20:58:52 +0000 UTC FinishedAt: 2026-09-14 20:58:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-14 20:58:52 +0000 UTC FinishedAt: 2026-09-14 20:58:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-14 20:58:52 +0000 UTC FinishedAt: 2026-09-14 20:58:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-14 20:59:14 +0000 UTC FinishedAt: 2026-09-15 00:39:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgccv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_link_get_curr_or_next","bpf_link_seq_start","bpf_link_seq_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f4c645f0-4ce6-40fd-ae6c-0dfd9af16df7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-14 20:59:14 +0000 UTC FinishedAt: 2026-09-15 00:39:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*32489c84-d411-48ae-9966-2a7b01b5ec30,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ec42f444-ce60-44e1-b6dc-3a9bae951fd9,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-workflowvgccv/series-workflowvgccv-build-action-3300262755/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-workflowvgccv/series-workflowvgccv-build-action-906904180/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-workflowvgccv/series-workflowvgccv-convert-artifact-1393899905/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,}