Name: series-workflowfgmmm Phase: Succeeded StartedAt: 2026-09-13 16:49:38 +0000 UTC FinishedAt: 2026-09-13 20:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[0] Phase: Succeeded StartedAt: 2026-09-13 16:49:38 +0000 UTC FinishedAt: 2026-09-13 17:11:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 16:49:38 +0000 UTC FinishedAt: 2026-09-13 17:11:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "collapse_file", "collapse_scan_file", "collapse_single_pmd", "madvise_collapse" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "cee9395acd8043be0644b25c34bfa86623f2b935", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29sbGFwc2VfZmlsZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9zY2FuX2ZpbGUmIzM0OywKICAgICYjMzQ7Y29sbGFwc2Vfc2luZ2xlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGNvbGxhcHNlX2ZpbGUoKWAgaW4gYG1tL2todWdlcGFnZWQuY2AgdG8gcHJldmVudCBhIGxvY2tpbmcgZGVhZGxvY2sgYmV0d2VlbiBgbWFwcGluZy1cdTAwM2VpbnZhbGlkYXRlX2xvY2tgIGFuZCBmb2xpbyBsb2NrcyAoZS5nLiBkdXJpbmcgY29uY3VycmVudCB0cnVuY2F0aW9uKS4gSXQgdGFrZXMgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKWAgcHJpb3IgdG8gZm9saW8gbG9ja2luZyBhbmQgZGlyZWN0bHkgaW52b2tlcyBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKWAgaW5zdGVhZCBvZiBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpYC5cblxuLSBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGBuZWVkX3VubG9ja2AsIGByYWN0bGAsIGBlb2ZgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGBuZWVkX3VubG9ja2AgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCwgYW5kIGByYWN0bGAgaXMgaW5pdGlhbGl6ZWQgdmlhIGBERUZJTkVfUkVBREFIRUFEKClgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIGFsbCB1bnNwZWNpZmllZCBzdHJ1Y3R1cmUgZmllbGRzIHBlciBDIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIgc2VtYW50aWNzLlxuLSBUaGUgY2hhbmdlcyBkbyBub3QgYWx0ZXIga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIGlvY3RscywgbmV0bGluayBtZXNzYWdlcywgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nLlxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGV4cG9zZWQuXG4tIExvY2tpbmcgY29ycmVjdG5lc3MgYW5kIGRlYWRsb2NrcyBhZGRyZXNzZWQgaGVyZSBhcmUgY292ZXJlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcgY29uZmlncy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbGxhcHNlX2ZpbGUoKSBpbiBtbS9raHVnZXBhZ2VkLmMgdG8gYWNxdWlyZSBtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayBlYXJsaWVyIChwcmlvciB0byBsb2NraW5nIGZvbGlvcykgYW5kIGhvbGQgaXQgc2hhcmVkIHRocm91Z2hvdXQgdGhlIGNvbGxhcHNlIG9wZXJhdGlvbiwgcmVwbGFjaW5nIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB3aXRoIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWx0ZXIgbG9ja2luZyBoaWVyYXJjaGllcywgY29uY3VycmVuY3ksIGFuZCByZWFkYWhlYWQgYmVoYXZpb3IgZHVyaW5nIFRIUCBmaWxlIGNvbGxhcHNlIChyZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3Iga2h1Z2VwYWdlZCBzY2FubmluZykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24sIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi9pbnZhbGlkYXRpb24sIGFuZCByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiYTIwYTllODVjM2ZhZDFlYzlkZTZiODMyYzcwYjRjZWI5YTBhYzVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTc6MDc6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCAxMWZmOThkNTVjNzZlLi5hNWZjYWZkNTc1MDU2IDEwMDY0NFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmNcbkBAIC0yMjU3LDYgJiM0MzsyMjU3LDcgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0ZW51bSBzY2FuX3Jlc3VsdCByZXN1bHQgPSBTQ0FOX1NVQ0NFRUQ7XG4gXHRpbnQgbnJfbm9uZSA9IDA7XG4gXHRib29sIGlzX3NobWVtID0gc2htZW1fZmlsZShmaWxlKTtcbiYjNDM7XHRib29sIG5lZWRfdW5sb2NrID0gZmFsc2U7XG4gXG4gXHQvKlxuIFx0ICogTUFEVl9DT0xMQVBTRSBpZ25vcmVzIHNobWVtIGh1Z2UgY29uZmlnLCBzbyBkbyBub3QgY2hlY2sgc2htZW1cbkBAIC0yMjcxLDYgJiM0MzsyMjcyLDE1IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRha2UgaW52YWxpZGF0ZV9sb2NrIGJlZm9yZSBhbnkgZm9saW8gbG9jazogdGhlIHJlYWRhaGVhZCBiZWxvd1xuJiM0MztcdCAqIG5lZWRzIGl0LCBhbmQgdHJ1bmNhdGUgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWlzX3NobWVtKSB7XG4mIzQzO1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG4mIzQzO1x0XHRuZWVkX3VubG9jayA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG1hcHBpbmdfc2V0X3VwZGF0ZShcdTAwMjZ4YXMsIG1hcHBpbmcpO1xuIFxuIFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XG5AQCAtMjMzNywxMCAmIzQzOzIzNDcsMjAgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcdC8qICFpc19zaG1lbSAqL1xuIFx0XHRcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XG4mIzQzO1x0XHRcdFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgXHUwMDI2ZmlsZS1cdTAwM2VmX3JhLFxuJiM0MztcdFx0XHRcdFx0XHQgIG1hcHBpbmcsIGluZGV4KTtcbiYjNDM7XHRcdFx0XHRwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVx1MDAzZWhvc3QpLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBQQUdFX1NJWkUpO1xuJiM0MztcbiBcdFx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4tXHRcdFx0XHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIFx1MDAyNmZpbGUtXHUwMDNlZl9yYSxcbi1cdFx0XHRcdFx0XHRcdCAgZmlsZSwgaW5kZXgsXG4tXHRcdFx0XHRcdFx0XHQgIGVuZCAtIGluZGV4KTtcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LlxuJiM0MztcdFx0XHRcdCAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCksIHVubGlrZSB0aGUgcmVhZGFoZWFkXG4mIzQzO1x0XHRcdFx0ICogaGVscGVyIHRoaXMgcmVwbGFjZXMsIGRvZXMgbm90IGNsYW1wIHRvIEVPRi5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRpZiAoaW5kZXggXHUwMDNjIGVvZilcbiYjNDM7XHRcdFx0XHRcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKFx1MDAyNnJhY3RsLFxuJiM0MztcdFx0XHRcdFx0XHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xuIFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuIFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuIFx0XHRcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xuQEAgLTI2NzIsNiAmIzQzOzI2OTIsOCBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRmb2xpb191bmxvY2sobmV3X2ZvbGlvKTtcbiBcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xuIG91dDpcbiYjNDM7XHRpZiAobmVlZF91bmxvY2spXG4mIzQzO1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcdFZNX0JVR19PTighbGlzdF9lbXB0eShcdTAwMjZwYWdlbGlzdCkpO1xuIFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xuIFx0cmV0dXJuIHJlc3VsdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbGxhcHNlX2ZpbGUmIzM0OywKICAgICYjMzQ7Y29sbGFwc2Vfc2Nhbl9maWxlJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3NpbmdsZV9wbWQmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb2xsYXBzZV9maWxlKCkgaW4gbW0va2h1Z2VwYWdlZC5jIHRvIGFjcXVpcmUgbWFwcGluZy1cdTAwM2VpbnZhbGlkYXRlX2xvY2sgZWFybGllciAocHJpb3IgdG8gbG9ja2luZyBmb2xpb3MpIGFuZCBob2xkIGl0IHNoYXJlZCB0aHJvdWdob3V0IHRoZSBjb2xsYXBzZSBvcGVyYXRpb24sIHJlcGxhY2luZyBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgd2l0aCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFsdGVyIGxvY2tpbmcgaGllcmFyY2hpZXMsIGNvbmN1cnJlbmN5LCBhbmQgcmVhZGFoZWFkIGJlaGF2aW9yIGR1cmluZyBUSFAgZmlsZSBjb2xsYXBzZSAocmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIGtodWdlcGFnZWQgc2Nhbm5pbmcpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgcG90ZW50aWFsIGxvY2sgaW52ZXJzaW9uLCBkZWFkbG9ja3Mgd2l0aCBmaWxlIHRydW5jYXRpb24vaW52YWxpZGF0aW9uLCBhbmQgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmEyMGE5ZTg1YzNmYWQxZWM5ZGU2YjgzMmM3MGI0Y2ViOWEwYWM1YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDE3OjA3OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDExZmY5OGQ1NWM3NmUuLmE1ZmNhZmQ1NzUwNTYgMTAwNjQ0Ci0tLSBhL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmMKQEAgLTIyNTcsNiAmIzQzOzIyNTcsNyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJZW51bSBzY2FuX3Jlc3VsdCByZXN1bHQgPSBTQ0FOX1NVQ0NFRUQ7CiAJaW50IG5yX25vbmUgPSAwOwogCWJvb2wgaXNfc2htZW0gPSBzaG1lbV9maWxlKGZpbGUpOwomIzQzOwlib29sIG5lZWRfdW5sb2NrID0gZmFsc2U7CiAKIAkvKgogCSAqIE1BRFZfQ09MTEFQU0UgaWdub3JlcyBzaG1lbSBodWdlIGNvbmZpZywgc28gZG8gbm90IGNoZWNrIHNobWVtCkBAIC0yMjcxLDYgJiM0MzsyMjcyLDE1IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkKIAkJZ290byBvdXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93CiYjNDM7CSAqIG5lZWRzIGl0LCBhbmQgdHJ1bmNhdGUgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy4KJiM0MzsJICovCiYjNDM7CWlmICghaXNfc2htZW0pIHsKJiM0MzsJCWZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTsKJiM0MzsJCW5lZWRfdW5sb2NrID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwogCW1hcHBpbmdfc2V0X3VwZGF0ZSgmYW1wO3hhcywgbWFwcGluZyk7CiAKIAlfX2ZvbGlvX3NldF9sb2NrZWQobmV3X2ZvbGlvKTsKQEAgLTIzMzcsMTAgJiM0MzsyMzQ3LDIwIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCX0KIAkJfSBlbHNlIHsJLyogIWlzX3NobWVtICovCiAJCQlpZiAoIWZvbGlvIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSkgewomIzQzOwkJCQlERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCAmYW1wO2ZpbGUtJmd0O2ZfcmEsCiYjNDM7CQkJCQkJICBtYXBwaW5nLCBpbmRleCk7CiYjNDM7CQkJCXBnb2ZmX3QgZW9mID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKG1hcHBpbmctJmd0O2hvc3QpLAomIzQzOwkJCQkJCQkgICAgUEFHRV9TSVpFKTsKJiM0MzsKIAkJCQl4YXNfdW5sb2NrX2lycSgmYW1wO3hhcyk7Ci0JCQkJcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChtYXBwaW5nLCAmYW1wO2ZpbGUtJmd0O2ZfcmEsCi0JCQkJCQkJICBmaWxlLCBpbmRleCwKLQkJCQkJCQkgIGVuZCAtIGluZGV4KTsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogaW52YWxpZGF0ZV9sb2NrIGhlbGQgYWJvdmU7IGRvbiYjMzk7dCByZXRha2UgaXQuCiYjNDM7CQkJCSAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCksIHVubGlrZSB0aGUgcmVhZGFoZWFkCiYjNDM7CQkJCSAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlpZiAoaW5kZXggJmx0OyBlb2YpCiYjNDM7CQkJCQlwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgmYW1wO3JhY3RsLAomIzQzOwkJCQkJCW1pbihlbmQsIGVvZikgLSBpbmRleCwgMCk7CiAJCQkJLyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqLwogCQkJCWxydV9hZGRfZHJhaW4oKTsKIAkJCQlmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyhtYXBwaW5nLCBpbmRleCk7CkBAIC0yNjcyLDYgJiM0MzsyNjkyLDggQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCWZvbGlvX3VubG9jayhuZXdfZm9saW8pOwogCWZvbGlvX3B1dChuZXdfZm9saW8pOwogb3V0OgomIzQzOwlpZiAobmVlZF91bmxvY2spCiYjNDM7CQlmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTsKIAlWTV9CVUdfT04oIWxpc3RfZW1wdHkoJmFtcDtwYWdlbGlzdCkpOwogCXRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTsKIAlyZXR1cm4gcmVzdWx0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTA3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUGF0Y2ggRXZhbHVhdGlvbiAtIEtodWdlcGFnZWQqKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBldmFsdWF0ZSB0aGlzIHBhdGNoIHRhcmdldGluZyBmdXp6aW5nLiBMZXQmIzM5O3MgZGlnIGluLiBGaXJzdCwgYSBxdWljayBnbGFuY2UgYXQgdGhlIGRpZmYgc2hvd3MgY2hhbmdlcyB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2AsIHNwZWNpZmljYWxseSB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLiBJIHNlZSBzb21lIGxvY2tpbmcgY2hhbmdlcywgbmFtZWx5IHRoZSBhZGRpdGlvbiBvZiBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCB3aGVuIGAhaXNfc2htZW1gLiBUaGUgcmVhZGFoZWFkIGxvZ2ljIGhhcyBiZWVuIG92ZXJoYXVsZWQ7IHRoZSBvbGQgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgIGhhcyBiZWVuIHN3YXBwZWQgZm9yIGEgbW9yZSBncmFudWxhciBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgIGltcGxlbWVudGF0aW9uLCBpbmNvcnBvcmF0aW5nIGEgYERFRklORV9SRUFEQUhFQURgIG1hY3JvIGFuZCBjaGVja3MgYWdhaW5zdCB0aGUgZmlsZSYjMzk7cyBlbmQuIEZpbmFsbHksIEkgbm90aWNlIHRoZSB1bmxvY2tpbmcgY2FsbCBgZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWRgIGFkZGVkIGF0IHRoZSBgb3V0OmAgbGFiZWwsIGNvbnRpbmdlbnQgb24gYSBgbmVlZF91bmxvY2tgIGNvbmRpdGlvbi4KClRoaXMgaXMgYWxsIHNxdWFyZWx5IHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYCwgd2hpY2gsIGFzIHdlIGtub3csIGRpcmVjdGx5IGltcGFjdHMgbWVtb3J5IG1hbmFnZW1lbnTigJRjcml0aWNhbCBzdHVmZi4gSXTigJlzIGZpZGRsaW5nIHdpdGggbG9ja2luZyBhbmQgcmVhZGFoZWFkLCBib3RoIG9mIHdoaWNoIGFyZSBjb21tb24gdGFyZ2V0cyBmb3IgZnV6emluZywgZXNwZWNpYWxseSBpbiBmaWxlLWJhY2tlZCBwYWdlIGhhbmRsaW5nLiBUaGF0IGBtYWR2aXNlKC4uLiwgTUFEVl9DT0xMQVBTRSlgIGFuZCBraHVnZXBhZ2VkIHNjYW5uaW5nIGRlZmluaXRlbHkgbWFrZSB0aGlzIGNvZGUgcGF0aCByZWFjaGFibGUsIHNvIGl04oCZcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpOb3csIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNvbnRleHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLCBga2h1Z2VwYWdlZC5jYCBpdHNlbGYgYW5kIHRoZSByZWxhdGVkIGBLY29uZmlnYCBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ3JhYiB0aG9zZSBmaWxlcywgc28gSSBjYW4gc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIGV4aXN0aW5nIGNvZGViYXNlIGFuZCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGludm9sdmVkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGNvbXBsZXRlIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTgxIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbi0tXG5tbS9jb21wYWN0aW9uLmM9NjA9c3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxubW0vY29tcGFjdGlvbi5jLTc1LSAqL1xubW0vY29tcGFjdGlvbi5jOjc2OiNpZiBkZWZpbmVkIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vY29tcGFjdGlvbi5jLTc3LSNkZWZpbmUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUlx0SFBBR0VfUE1EX09SREVSXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTczPXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc0LXtcbm1tL2RhbW9uL29wcy1jb21tb24uYzo3NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzYtXHRwbWRfdCBwbWR2YWwgPSBwbWRwX2dldChwbWQpO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy05Ny1cdGZvbGlvX3B1dChmb2xpbyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6OTg6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTk5LX1cbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTk0PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX3lvdW5nX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMTUtXHRcdH0gZWxzZSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjE2OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMTctXHRcdFx0cG1kX3QgcG1kID0gcG1kcF9nZXQocHZtdy5wbWQpO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjMtXHRcdFx0V0FSTl9PTl9PTkNFKDEpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIyNDojZW5kaWZcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyNS1cdFx0fVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9Mzg5PXN0YXRpYyBpbnQgZGFtb25feW91bmdfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTM5Ny1cbm1tL2RhbW9uL3ZhZGRyLmM6Mzk4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtMzk5LVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTQxNS1cdH1cbm1tL2RhbW9uL3ZhZGRyLmM6NDE2OiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTQxNy1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTYzNT1zdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY0Ni1cbm1tL2RhbW9uL3ZhZGRyLmM6NjQ3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtNjQ4LVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY2NC1cdH1cbm1tL2RhbW9uL3ZhZGRyLmM6NjY1OiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTY2Ni1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTc5NT1zdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTgwNi1cbm1tL2RhbW9uL3ZhZGRyLmM6ODA3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtODA4LVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTE3Mi1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxNzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTE3NC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQyMz1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDI0LSNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQyNTojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNi1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpIHsgfVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz00MzE9c3RhdGljIHZvaWQgX19pbml0IHB1ZF9sZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQzMjojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDMzLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz02NzE9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02ODItXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NjgzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02ODQtc3RhdGljIHZvaWQgX19pbml0IHBtZF9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02OTgtfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjY5OTojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTcwMC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX3Byb3Rub25lX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjcwMTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzAyLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03MTU9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9zd2FwX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzMxLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjczMjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzMzLXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03NDk9c3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzY3LX1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3Njg6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03Njktc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTc3MD1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3NzE6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTc3Mi1cbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTAxPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDMtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTA0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDUtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU1PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk1Ni0jZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5NTc6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTgtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU5PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk2MDojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTYxLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz05ODc9c3RhdGljIHZvaWQgX19pbml0IGRlc3Ryb3lfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05ODktXHQvKiBGcmVlIChodWdlKSBwYWdlICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTkwOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTEtXHQgICAgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTgtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTk5Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMDAwLVx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz0xMTQzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjM5LVx0ICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6MTI0MDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI0MS1cdCAgICBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkpIHtcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI1MC1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxMjUxOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjUyLVx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7XG4tLVxubW0vZmlsZW1hcC5jPTMzMjk9c3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2ZpbGVtYXAuYy0zMzQxLVx0LyogVXNlIHRoZSByZWFkYWhlYWQgY29kZSwgZXZlbiBpZiByZWFkYWhlYWQgaXMgZGlzYWJsZWQgKi9cbm1tL2ZpbGVtYXAuYzozMzQyOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSkpIHtcbm1tL2ZpbGVtYXAuYy0zMzQzLVx0XHQvKlxuLS1cbm1tL2d1cC5jPTcwMT1zdGF0aWMgc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ndXAuYy03MzQtXG5tbS9ndXAuYzo3MzU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZ3VwLmMtNzM2LVx0aWYgKHBtZF90cmFuc19odWdlKHBtZHZhbCkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgRk9MTF9UT1VDSCkpXG5tbS9ndXAuYy03MzctXHRcdHRvdWNoX3BtZCh2bWEsIGFkZHIsIHBtZCwgZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpO1xubW0vZ3VwLmM6NzM4OiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9ndXAuYy03MzktXG4tLVxubW0vaG1tLmM9MTg4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBobW1fcGZuX2ZsYWdzX29yZGVyKHVuc2lnbmVkIGxvbmcgb3JkZXIpXG4tLVxubW0vaG1tLmMtMTkyLVxubW0vaG1tLmM6MTkzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2htbS5jLTE5NC1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX3RvX2htbV9wZm5fZmxhZ3Moc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG4tLVxubW0vaG1tLmM9MjA0PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vaG1tLmMtMjI3LX1cbm1tL2htbS5jOjIyODojZWxzZSAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2htbS5jLTIyOS0vKiBzdHViIHRvIGFsbG93IHRoZSBjb2RlIGJlbG93IHRvIGNvbXBpbGUgKi9cbm1tL2htbS5jPTIzMD1pbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9obW0uYy0yMzEtXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGhtbV9wZm5zW10sIHBtZF90IHBtZCk7XG5tbS9obW0uYzoyMzI6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vaG1tLmMtMjMzLVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NjE9dW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyBfX3JlYWRfbW9zdGx5ID1cbm1tL2h1Z2VfbWVtb3J5LmM6NjI6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL2h1Z2VfbWVtb3J5LmMtNjMtXHQoMVx1MDAzY1x1MDAzY1RSQU5TUEFSRU5UX0hVR0VQQUdFX0ZMQUcpfFxubW0vaHVnZV9tZW1vcnkuYy02NC0jZW5kaWZcbm1tL2h1Z2VfbWVtb3J5LmM6NjU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9odWdlX21lbW9yeS5jLTY2LVx0KDFcdTAwM2NcdTAwM2NUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHKXxcbi0tXG5tbS9rc20uYz0yNTI3PXN0YXRpYyBpbnQga3NtX25leHRfcGFnZV9wbWRfZW50cnkocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0va3NtLmMtMjU0Ny1cbm1tL2tzbS5jOjI1NDg6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBwbWRfbGVhZihwbWQpKSB7XG5tbS9rc20uYy0yNTQ5LVx0XHRwdGwgPSBwbWRfbG9jayhtbSwgcG1kcCk7XG4tLVxubW0vbWFkdmlzZS5jPTM1ND1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy0zNzYtXG5tbS9tYWR2aXNlLmM6Mzc3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21hZHZpc2UuYy0zNzgtXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUzOS0jZW5kaWZcbm1tL21hZHZpc2UuYzoxNTQwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21hZHZpc2UuYy0xNTQxLVx0Y2FzZSBNQURWX0hVR0VQQUdFOlxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yMTY1PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2cxX3N0YXRzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTIxNjctXHROUl9BTk9OX01BUFBFRCxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMTY4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wtdjEuYy0yMTY5LVx0TlJfQU5PTl9USFBTLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yMTgzPXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1jZzFfc3RhdF9uYW1lc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMTg1LVx0XCYjMzQ7cnNzXCYjMzQ7LFxubW0vbWVtY29udHJvbC12MS5jOjIxODY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtY29udHJvbC12MS5jLTIxODctXHRcJiMzNDtyc3NfaHVnZVwmIzM0Oyxcbi0tXG5tbS9tZW1jb250cm9sLmM9NTk4PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy02MTktI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NjIwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wuYy02MjEtXHRUSFBfRkFVTFRfQUxMT0MsXG4tLVxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTYxMi0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzoxNjEzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wuYy0xNjE0LVx0eyBcJiMzNDthbm9uX3RocFwmIzM0OyxcdFx0XHROUl9BTk9OX1RIUFNcdFx0XHR9LFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Njg5PXN0YXRpYyBpbnQgY2hlY2tfaHdwb2lzb25lZF9lbnRyeShwdGVfdCBwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgc2hvcnQgc2hpZnQsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy03MTMtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjcxNDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1vcnktZmFpbHVyZS5jLTcxNS1zdGF0aWMgaW50IGNoZWNrX2h3cG9pc29uZWRfcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmM9NDE5OT1zdGF0aWMgdm1fZmF1bHRfdCB3cF9wYWdlX3NoYXJlZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1vcnkuYy00MjM4LVxubW0vbWVtb3J5LmM6NDIzOTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1vcnkuYy00MjQwLXN0YXRpYyBib29sIF9fd3BfY2FuX3JldXNlX2xhcmdlX2Fub25fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1vcnkuYy00MzA0LX1cbm1tL21lbW9yeS5jOjQzMDU6I2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vbWVtb3J5LmMtNDMwNi1zdGF0aWMgYm9vbCBfX3dwX2Nhbl9yZXVzZV9sYXJnZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtb3J5LmMtNDMxMC19XG5tbS9tZW1vcnkuYzo0MzExOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL21lbW9yeS5jLTQzMTItXG5tbS9tZW1vcnkuYz00MzEzPXN0YXRpYyBib29sIHdwX2Nhbl9yZXVzZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtb3J5LmMtNDMxOC1cbm1tL21lbW9yeS5jOjQzMTk6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcbm1tL21lbW9yeS5jLTQzMjAtXHRcdHJldHVybiBfX3dwX2Nhbl9yZXVzZV9sYXJnZV9hbm9uX2ZvbGlvKGZvbGlvLCB2bWEpO1xuLS1cbm1tL21lbW9yeS5jPTQ3MTk9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9tYXJrZXIoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDc0NS1cbm1tL21lbW9yeS5jOjQ3NDY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtb3J5LmMtNDc0Ny0vKlxuLS1cbm1tL21lbW9yeS5jPTQ3OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDg1NC19XG5tbS9tZW1vcnkuYzo0ODU1OiNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL21lbW9yeS5jLTQ4NTYtc3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDg1OS19XG5tbS9tZW1vcnkuYzo0ODYwOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL21lbW9yeS5jLTQ4NjEtXG4tLVxubW0vbWVtb3J5LmM9NTMwMT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTUzMDMtXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG5tbS9tZW1vcnkuYzo1MzA0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbW9yeS5jLTUzMDUtXHR1bnNpZ25lZCBsb25nIG9yZGVycztcbi0tXG5tbS9tZW1vcnkuYz01NTM4PXN0YXRpYyB2bV9mYXVsdF90IF9fZG9fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTU5My1cbm1tL21lbW9yeS5jOjU1OTQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtb3J5LmMtNTU5NS1zdGF0aWMgdm9pZCBkZXBvc2l0X3ByZWFsbG9jX3B0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYz02NDIxPXN0YXRpYyB2bV9mYXVsdF90IGNyZWF0ZV9odWdlX3B1ZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbm1tL21lbW9yeS5jLTY0MjIte1xubW0vbWVtb3J5LmM6NjQyMzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlx0XHRcdFxcXG5tbS9tZW1vcnkuYy02NDI0LVx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcbi0tXG5tbS9tZW1vcnkuYy02NDMwLVx0XHRyZXR1cm4gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VodWdlX2ZhdWx0KHZtZiwgUFVEX09SREVSKTtcbm1tL21lbW9yeS5jOjY0MzE6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vbWVtb3J5LmMtNjQzMi1cdHJldHVybiBWTV9GQVVMVF9GQUxMQkFDSztcbi0tXG5tbS9tZW1vcnkuYz02NDM1PXN0YXRpYyB2bV9mYXVsdF90IHdwX2h1Z2VfcHVkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBwdWRfdCBvcmlnX3B1ZClcbm1tL21lbW9yeS5jLTY0MzYte1xubW0vbWVtb3J5LmM6NjQzNzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlx0XHRcdFxcXG5tbS9tZW1vcnkuYy02NDM4LVx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcbi0tXG5tbS9tZW1vcnkuYy02NDU0LVx0X19zcGxpdF9odWdlX3B1ZCh2bWEsIHZtZi1cdTAwM2VwdWQsIHZtZi1cdTAwM2VhZGRyZXNzKTtcbm1tL21lbW9yeS5jOjY0NTU6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBcdTAwMjZcdTAwMjYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cbm1tL21lbW9yeS5jLTY0NTYtXHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XG4tLVxubW0vbWVtb3J5LmM9NzQ4ND1FWFBPUlRfU1lNQk9MKF9fbWlnaHRfZmF1bHQpO1xuLS1cbm1tL21lbW9yeS5jLTc0ODYtXG5tbS9tZW1vcnkuYzo3NDg3OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfSFVHRVRMQkZTKVxubW0vbWVtb3J5LmMtNzQ4OC0vKlxuLS1cbm1tL21lbW9yeS5jPTc2NzU9bG9uZyBjb3B5X2ZvbGlvX2Zyb21fdXNlcihzdHJ1Y3QgZm9saW8gKmRzdF9mb2xpbyxcbi0tXG5tbS9tZW1vcnkuYy03NzA0LX1cbm1tL21lbW9yeS5jOjc3MDU6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSB8fCBDT05GSUdfSFVHRVRMQkZTICovXG5tbS9tZW1vcnkuYy03NzA2LVxuLS1cbm1tL21lbXBvbGljeS5jPTI0NDE9c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19tcG9sKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL21lbXBvbGljeS5jLTI0NTEtXG5tbS9tZW1wb2xpY3kuYzoyNDUyOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL21lbXBvbGljeS5jLTI0NTMtXHQgICAgLyogZmlsdGVyIFwmIzM0O2h1Z2VwYWdlXCYjMzQ7IGFsbG9jYXRpb24sIHVubGVzcyBmcm9tIGFsbG9jX3BhZ2VzKCkgKi9cbi0tXG5tbS9taWdyYXRlLmM9MTU5MT1zdGF0aWMgaW5saW5lIGludCB0cnlfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYy0xNjA5LVxubW0vbWlncmF0ZS5jOjE2MTA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWlncmF0ZS5jLTE2MTEtI2RlZmluZSBOUl9NQVhfQkFUQ0hFRF9NSUdSQVRJT05cdEhQQUdFX1BNRF9OUlxuLS1cbm1tL21tYXAuYz04Mjc9X19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS9tbWFwLmMtODU4LVx0XHRhZGRyID0gZ2V0X2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpO1xubW0vbW1hcC5jOjg1OTpcdH0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiAhZmlsZVxubW0vbW1hcC5jLTg2MC1cdFx0ICAgXHUwMDI2XHUwMDI2ICFhZGRyIC8qIG5vIGhpbnQgKi9cbi0tXG5tbS9tcmVtYXAuYz00Nzk9c3RhdGljIGlubGluZSBib29sIG1vdmVfbm9ybWFsX3B1ZChzdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCAqcG1jLFxuLS1cbm1tL21yZW1hcC5jLTQ4NS1cbm1tL21yZW1hcC5jOjQ4NjojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxubW0vbXJlbWFwLmMtNDg3LXN0YXRpYyBib29sIG1vdmVfaHVnZV9wdWQoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcbi0tXG5tbS9tcmVtYXAuYz02MDU9c3RhdGljIGJvb2wgbW92ZV9wZ3RfZW50cnkoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcbi0tXG5tbS9tcmVtYXAuYy02MjItXHRjYXNlIEhQQUdFX1BNRDpcbm1tL21yZW1hcC5jOjYyMzpcdFx0bW92ZWQgPSBJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9tcmVtYXAuYy02MjQtXHRcdFx0bW92ZV9odWdlX3BtZChwbWMtXHUwMDNlb2xkLCBwbWMtXHUwMDNlb2xkX2FkZHIsIHBtYy1cdTAwM2VuZXdfYWRkciwgb2xkX2VudHJ5LFxuLS1cbm1tL21yZW1hcC5jLTYyNy1cdGNhc2UgSFBBR0VfUFVEOlxubW0vbXJlbWFwLmM6NjI4Olx0XHRtb3ZlZCA9IElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL21yZW1hcC5jLTYyOS1cdFx0XHRtb3ZlX2h1Z2VfcHVkKHBtYywgb2xkX2VudHJ5LCBuZXdfZW50cnkpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz02NTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb3JkZXJfdG9fcGluZGV4KGludCBtaWdyYXRldHlwZSwgaW50IG9yZGVyKVxubW0vcGFnZV9hbGxvYy5jLTY1Ni17XG5tbS9wYWdlX2FsbG9jLmM6NjU3Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkge1xubW0vcGFnZV9hbGxvYy5jLTY1OC1cdFx0Ym9vbCBtb3ZhYmxlID0gbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz02Njc9c3RhdGljIGlubGluZSBpbnQgcGluZGV4X3RvX29yZGVyKHVuc2lnbmVkIGludCBwaW5kZXgpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTY3MC1cbm1tL3BhZ2VfYWxsb2MuYzo2NzE6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKSB7XG5tbS9wYWdlX2FsbG9jLmMtNjcyLVx0XHRpZiAocGluZGV4IFx1MDAzZT0gTlJfTE9XT1JERVJfUENQX0xJU1RTKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz02Nzk9c3RhdGljIGlubGluZSBib29sIHBjcF9hbGxvd2VkX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNjgyLVx0XHRyZXR1cm4gdHJ1ZTtcbm1tL3BhZ2VfYWxsb2MuYzo2ODM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vcGFnZV9hbGxvYy5jLTY4NC1cdGlmIChpc19wbWRfb3JkZXIob3JkZXIpKVxuLS1cbm1tL3BhZ2VfaWRsZS5jPTUyPXN0YXRpYyBib29sIHBhZ2VfaWRsZV9jbGVhcl9wdGVfcmVmc19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9wYWdlX2lkbGUuYy03Mi1cdFx0XHRyZWZlcmVuY2VkIHw9IG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIGFkZHIgJiM0MzsgUEFHRV9TSVpFKTtcbm1tL3BhZ2VfaWRsZS5jOjczOlx0XHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkge1xubW0vcGFnZV9pZGxlLmMtNzQtXHRcdFx0cG1kX3QgcG1kdmFsID0gcG1kcF9nZXQocHZtdy5wbWQpO1xuLS1cbm1tL3BhZ2VfaW8uYz0zNzA9dm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy0zNzMtXG5tbS9wYWdlX2lvLmM6Mzc0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3BhZ2VfaW8uYy0zNzUtXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9wbWRfbWFwcGFibGUoZm9saW8pKSkge1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE4Nj1ib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTEtXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNTI6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTMtXHRcdCAgICAocG1kX3RyYW5zX2h1Z2UocG1kZSkgfHwgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRlKSB8fFxuLS1cbm1tL3BndGFibGUtZ2VuZXJpYy5jPTk3PXB0ZV90IHB0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0xMDgtXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoxMDk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMTEwLVxuLS1cbm1tL3BndGFibGUtZ2VuZXJpYy5jPTI1MD12b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yNTctI2VuZGlmIC8qIHB0ZV9mcmVlX2RlZmVyICovXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoyNTg6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vcGd0YWJsZS1nZW5lcmljLmMtMjU5LVxuLS1cbm1tL3JtYXAuYz05MTg9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtOTg3LVx0XHRcdFx0cmVmZXJlbmNlZCYjNDM7JiM0Mzs7XG5tbS9ybWFwLmM6OTg4Olx0XHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkge1xubW0vcm1hcC5jLTk4OS1cdFx0XHRpZiAocG1kcF9jbGVhcl9mbHVzaF95b3VuZ19ub3RpZnkodm1hLCBhZGRyZXNzLFxuLS1cbm1tL3JtYXAuYz0xMTA3PXN0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuLS1cbm1tL3JtYXAuYy0xMTQ3LVx0XHR9IGVsc2Uge1xubW0vcm1hcC5jOjExNDg6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vcm1hcC5jLTExNDktXHRcdFx0cG1kX3QgKnBtZCA9IHB2bXctXHUwMDNlcG1kO1xuLS1cbm1tL3JtYXAuYz0xNjIyPXZvaWQgZm9saW9fYWRkX2Fub25fcm1hcF9wbWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcm1hcC5jLTE2MjQte1xubW0vcm1hcC5jOjE2MjU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vcm1hcC5jLTE2MjYtXHRfX2ZvbGlvX2FkZF9hbm9uX3JtYXAoZm9saW8sIHBhZ2UsIEhQQUdFX1BNRF9OUiwgdm1hLCBhZGRyZXNzLCBmbGFncyxcbi0tXG5tbS9ybWFwLmM9MTc1MT12b2lkIGZvbGlvX2FkZF9maWxlX3JtYXBfcG1kKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3JtYXAuYy0xNzUzLXtcbm1tL3JtYXAuYzoxNzU0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3JtYXAuYy0xNzU1LVx0X19mb2xpb19hZGRfZmlsZV9ybWFwKGZvbGlvLCBwYWdlLCBIUEFHRV9QTURfTlIsIHZtYSwgUEdUQUJMRV9MRVZFTF9QTUQpO1xuLS1cbm1tL3JtYXAuYz0xNzcxPXZvaWQgZm9saW9fYWRkX2ZpbGVfcm1hcF9wdWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcm1hcC5jLTE3NzMte1xubW0vcm1hcC5jOjE3NzQ6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgXFxcbm1tL3JtYXAuYy0xNzc1LVx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcbi0tXG5tbS9ybWFwLmM9MTkxOT12b2lkIGZvbGlvX3JlbW92ZV9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9ybWFwLmMtMTkyMS17XG5tbS9ybWFwLmM6MTkyMjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9ybWFwLmMtMTkyMy1cdF9fZm9saW9fcmVtb3ZlX3JtYXAoZm9saW8sIHBhZ2UsIEhQQUdFX1BNRF9OUiwgdm1hLCBQR1RBQkxFX0xFVkVMX1BNRCk7XG4tLVxubW0vcm1hcC5jPTE5Mzk9dm9pZCBmb2xpb19yZW1vdmVfcm1hcF9wdWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcm1hcC5jLTE5NDEte1xubW0vcm1hcC5jOjE5NDI6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgXFxcbm1tL3JtYXAuYy0xOTQzLVx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcbi0tXG5tbS9zaG1lbS5jPTExND1zdHJ1Y3Qgc2htZW1fb3B0aW9ucyB7XG4tLVxubW0vc2htZW0uYy0xMzctXG5tbS9zaG1lbS5jOjEzODojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTEzOS1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdlX3NobWVtX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcbi0tXG5tbS9zaG1lbS5jPTUyMT1zdGF0aWMgaW50IHNobWVtX2NvbmZpcm1fc3dhcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTU2OS1cbm1tL3NobWVtLmM6NTcwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3NobWVtLmMtNTcxLS8qIGlmZGVmIGhlcmUgdG8gYXZvaWQgYmxvYXRpbmcgc2htZW0ubyB3aGVuIG5vdCBuZWNlc3NhcnkgKi9cbm1tL3NobWVtLmMtNTcyLVxubW0vc2htZW0uYzo1NzM6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVIpXG5tbS9zaG1lbS5jLTU3NC0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX05FVkVSXG5tbS9zaG1lbS5jOjU3NTojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZUylcbm1tL3NobWVtLmMtNTc2LSNkZWZpbmUgU0hNRU1fSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfQUxXQVlTXG5tbS9zaG1lbS5jOjU3NzojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFKVxubW0vc2htZW0uYy01NzgtI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vc2htZW0uYzo1Nzk6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0UpXG5tbS9zaG1lbS5jLTU4MC0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FEVklTRVxuLS1cbm1tL3NobWVtLmM9NTg1PXN0YXRpYyBpbnQgc2htZW1faHVnZSBfX3JlYWRfbW9zdGx5ID0gU0hNRU1fSFVHRV9ERUZBVUxUO1xuLS1cbm1tL3NobWVtLmMtNTg4LVxubW0vc2htZW0uYzo1ODk6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVIpXG5tbS9zaG1lbS5jLTU5MC0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX05FVkVSXG5tbS9zaG1lbS5jOjU5MTojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZUylcbm1tL3NobWVtLmMtNTkyLSNkZWZpbmUgVE1QRlNfSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfQUxXQVlTXG5tbS9zaG1lbS5jOjU5MzojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFKVxubW0vc2htZW0uYy01OTQtI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vc2htZW0uYzo1OTU6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0UpXG5tbS9zaG1lbS5jLTU5Ni0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FEVklTRVxuLS1cbm1tL3NobWVtLmM9ODQ2PXN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxubW0vc2htZW0uYy04NjEtfVxubW0vc2htZW0uYzo4NjI6I2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vc2htZW0uYy04NjMtXG4tLVxubW0vc2htZW0uYz04NzI9c3RhdGljIHVuc2lnbmVkIGludCBzaG1lbV9odWdlX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy04NzgtfVxubW0vc2htZW0uYzo4Nzk6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vc2htZW0uYy04ODAtXG4tLVxubW0vc2htZW0uYz0xNjA3PWludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9zaG1lbS5jLTE2NDktXG5tbS9zaG1lbS5jOjE2NTA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy0xNjUxLVx0XHRpZiAob3JkZXIgXHUwMDNlPSBIUEFHRV9QTURfT1JERVIpIHtcbi0tXG5tbS9zaG1lbS5jPTE4MDQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcGluX2NsdXN0ZXIoc3dwX2VudHJ5X3Qgc3dhcCwgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3NobWVtLmMtMTgxNy1cbm1tL3NobWVtLmM6MTgxODojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTE4MTktYm9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL3NobWVtLmM9MTkxNz1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc2htZW0uYy0xOTIyLX1cbm1tL3NobWVtLmM6MTkyMzojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9zaG1lbS5jLTE5MjQtXG4tLVxubW0vc2htZW0uYz0xOTM5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX2FsbG9jX2FuZF9hZGRfZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc2htZW0uYy0xOTUwLVxubW0vc2htZW0uYzoxOTUxOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG5tbS9zaG1lbS5jLTE5NTItXHRcdG9yZGVycyA9IDA7XG4tLVxubW0vc2htZW0uYz0yMDg5PXN0YXRpYyBpbnQgc2htZW1fcmVwbGFjZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGdmcF90IGdmcCxcbi0tXG5tbS9zaG1lbS5jLTIxMDMtXHRnZnAgXHUwMDI2PSB+R0ZQX0NPTlNUUkFJTlRfTUFTSztcbm1tL3NobWVtLmM6MjEwNDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTIxMDUtXHRpZiAobnJfcGFnZXMgXHUwMDNlIDEpIHtcbi0tXG5tbS9zaG1lbS5jPTI3NDA9dW5zaWduZWQgbG9uZyBzaG1lbV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5tbS9zaG1lbS5jLTI3NTUtXG5tbS9zaG1lbS5jOjI3NTY6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbm1tL3NobWVtLmMtMjc1Ny1cdFx0cmV0dXJuIGFkZHI7XG4tLVxubW0vc2htZW0uYy0yNzk5LVx0XHRcdCAqL1xubW0vc2htZW0uYzoyODAwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDYwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb2RlIHNlY3Rpb246CgoqKkRpdmluZyBpbnRvIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBgY29sbGFwc2VfZmlsZWAqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBraHVnZXBhZ2VkYCBpbnRlcm5hbHMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBsaW5lcyAyMjUwIHRvIDI3MDAgaW4gYG1tL2todWdlcGFnZWQuY2AuIFRoYXQmIzM5O3MgYSBwcmV0dHkgaGVmdHkgY2h1bmsgb2YgY29kZSwgc28gSSBhbnRpY2lwYXRlIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCB3aXRoIGEgY29yZSBvcGVyYXRpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gcGFnZSBjb2xsYXBzaW5nIG9yIG1heWJlIGRlZnJhZ2dpbmcuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGtodWdlcGFnZWQgd29ya3MsIG15IGh1bmNoIGlzIHRoYXQgdGhpcyBzZWN0aW9uIHdpbGwgaW52b2x2ZSBlaXRoZXIgdGhlIGlkZW50aWZpY2F0aW9uIG9mIGVsaWdpYmxlIHBhZ2VzIGZvciBtZXJnaW5nIG9yIHRoZSBhY3R1YWwgZXhlY3V0aW9uIG9mIHRoZSBjb2xsYXBzaW5nIGxvZ2ljLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoYXQgcmFuZ2UuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgbWFqb3IgcGFydCBvZiB0aGUgd29yayByZWxhdGVkIHRvIHRoZSBtYWluIGxvb3Agb2Yga2h1Z2VwYWdlZCB0byBkbyBpdHMgd29yay4KCkZ1cnRoZXJtb3JlLCBJIGtub3cgYGNvbGxhcHNlX2ZpbGVgIGlzIGNydWNpYWwsIHByb2JhYmx5IHJlbGF0ZWQgdG8gY29sbGFwc2luZyBmaWxlLWJhY2tlZCBtYXBwaW5ncy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgY29sbGFwc2VfZmlsZWAgd2l0aGluIHRoYXQgc3BlY2lmaWMgYXJlYSB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBwcm9jZXNzLiBJIHdhbnQgdG8gc2VlICpob3cqIGl0JiMzOTtzIGludm9rZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIHdoYXQgYXJndW1lbnRzIGl0JiMzOTtzIGdldHRpbmcuIFRoaXMgY29udGV4dCBpcyBlc3NlbnRpYWwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgbWFpbiBraHVnZXBhZ2VkIGxvb3Agd29yay4gTG9va2luZyBhdCB0aG9zZSBsaW5lcyBhbmQgdGhlIGNhbGxzIHRvIGBjb2xsYXBzZV9maWxlYCB3aWxsIGxpa2VseSBnaXZlIG1lIGluc2lnaHQgaW50byBhIHNwZWNpZmljIHNjZW5hcmlvIG9yIGFzcGVjdCBvZiB0aGUgd2hvbGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI1MDpcdHtcbjIyNTE6XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4yMjUyOlx0XHRzdHJ1Y3QgcGFnZSAqZHN0O1xuMjI1MzpcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgKnRtcCwgKm5ld19mb2xpbztcbjIyNTQ6XHRcdHBnb2ZmX3QgaW5kZXggPSAwLCBlbmQgPSBzdGFydCAmIzQzOyBIUEFHRV9QTURfTlI7XG4yMjU1Olx0XHRMSVNUX0hFQUQocGFnZWxpc3QpO1xuMjI1NjpcdFx0WEFfU1RBVEVfT1JERVIoeGFzLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWlfcGFnZXMsIHN0YXJ0LCBIUEFHRV9QTURfT1JERVIpO1xuMjI1NzpcdFx0ZW51bSBzY2FuX3Jlc3VsdCByZXN1bHQgPSBTQ0FOX1NVQ0NFRUQ7XG4yMjU4Olx0XHRpbnQgbnJfbm9uZSA9IDA7XG4yMjU5Olx0XHRib29sIGlzX3NobWVtID0gc2htZW1fZmlsZShmaWxlKTtcbjIyNjA6XHRcdGJvb2wgbmVlZF91bmxvY2sgPSBmYWxzZTtcbjIyNjE6XHRcbjIyNjI6XHRcdC8qXG4yMjYzOlx0XHQgKiBNQURWX0NPTExBUFNFIGlnbm9yZXMgc2htZW0gaHVnZSBjb25maWcsIHNvIGRvIG5vdCBjaGVjayBzaG1lbVxuMjI2NDpcdFx0ICpcbjIyNjU6XHRcdCAqIFRPRE86IG9uY2Ugc2htZW0gYWx3YXlzIGNhbGxzIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcygpIG9uIGl0c1xuMjI2NjpcdFx0ICogbWFwcGluZywgdGhlIHNobWVtIGNoZWNrIGNhbiBiZSByZW1vdmVkLlxuMjI2NzpcdFx0ICovXG4yMjY4Olx0XHRWTV9XQVJOX09OX09OQ0UoIWlzX3NobWVtIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChtYXBwaW5nKSk7XG4yMjY5Olx0XHRWTV9XQVJOX09OX09OQ0Uoc3RhcnQgXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XG4yMjcwOlx0XG4yMjcxOlx0XHRyZXN1bHQgPSBhbGxvY19jaGFyZ2VfZm9saW8oXHUwMDI2bmV3X2ZvbGlvLCBtbSwgY2MsIEhQQUdFX1BNRF9PUkRFUik7XG4yMjcyOlx0XHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcbjIyNzM6XHRcdFx0Z290byBvdXQ7XG4yMjc0Olx0XG4yMjc1Olx0XHQvKlxuMjI3NjpcdFx0ICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93XG4yMjc3Olx0XHQgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuXG4yMjc4Olx0XHQgKi9cbjIyNzk6XHRcdGlmICghaXNfc2htZW0pIHtcbjIyODA6XHRcdFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xuMjI4MTpcdFx0XHRuZWVkX3VubG9jayA9IHRydWU7XG4yMjgyOlx0XHR9XG4yMjgzOlx0XG4yMjg0Olx0XHRtYXBwaW5nX3NldF91cGRhdGUoXHUwMDI2eGFzLCBtYXBwaW5nKTtcbjIyODU6XHRcbjIyODY6XHRcdF9fZm9saW9fc2V0X2xvY2tlZChuZXdfZm9saW8pO1xuMjI4NzpcdFx0aWYgKGlzX3NobWVtKVxuMjI4ODpcdFx0XHRfX2ZvbGlvX3NldF9zd2FwYmFja2VkKG5ld19mb2xpbyk7XG4yMjg5Olx0XHRuZXdfZm9saW8tXHUwMDNlaW5kZXggPSBzdGFydDtcbjIyOTA6XHRcdG5ld19mb2xpby1cdTAwM2VtYXBwaW5nID0gbWFwcGluZztcbjIyOTE6XHRcbjIyOTI6XHRcdC8qXG4yMjkzOlx0XHQgKiBFbnN1cmUgd2UgaGF2ZSBzbG90cyBmb3IgYWxsIHRoZSBwYWdlcyBpbiB0aGUgcmFuZ2UuICBUaGlzIGlzXG4yMjk0Olx0XHQgKiBhbG1vc3QgY2VydGFpbmx5IGEgbm8tb3AgYmVjYXVzZSBtb3N0IG9mIHRoZSBwYWdlcyBtdXN0IGJlIHByZXNlbnRcbjIyOTU6XHRcdCAqL1xuMjI5NjpcdFx0ZG8ge1xuMjI5NzpcdFx0XHR4YXNfbG9ja19pcnEoXHUwMDI2eGFzKTtcbjIyOTg6XHRcdFx0eGFzX2NyZWF0ZV9yYW5nZShcdTAwMjZ4YXMpO1xuMjI5OTpcdFx0XHRpZiAoIXhhc19lcnJvcihcdTAwMjZ4YXMpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjYyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGNvbGxhcHNlX2ZpbGVgIGF0IExpbmUgMjM0MC0yNDAwKioKCk9rYXksIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIHRoYXQgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSByZWdpb24gYXJvdW5kIGxpbmVzIDIzNDAgdG8gMjQwMC4gVGhhdCByYW5nZSBpcyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBwcm9jZXNzaW5nIGhhcHBlbnMsIEkmIzM5O20gZ3Vlc3Npbmcgc29tZSBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBvciBsb2dpYy1pbnRlbnNpdmUgb3BlcmF0aW9uIG9jY3VycyB0aGVyZS4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgYWN0dWFsIGNvcmUgb2YgdGhlIGFsZ29yaXRobSwgb3IgcGVyaGFwcyBzb21lIGRhdGEgbWFuaXB1bGF0aW9uIHN0ZXAgdGhhdCYjMzk7cyBjYXVzaW5nIGlzc3Vlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyBhbnkgY3J1Y2lhbCBsb29wcywgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9yIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbnMgd2hpY2ggYXJlIGxpa2VseSB0byBoYXZlIGEgc2lnbmlmaWNhbnQgaW1wYWN0LiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjM0MDpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjM0MTpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbjIzNDI6XHRcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4yMzQzOlx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM0NDpcdFx0XHRcdH0gZWxzZSB7XG4yMzQ1Olx0XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcbjIzNDY6XHRcdFx0XHRcdGdvdG8geGFfbG9ja2VkO1xuMjM0NzpcdFx0XHRcdH1cbjIzNDg6XHRcdFx0fSBlbHNlIHtcdC8qICFpc19zaG1lbSAqL1xuMjM0OTpcdFx0XHRcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XG4yMzUwOlx0XHRcdFx0XHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEsXG4yMzUxOlx0XHRcdFx0XHRcdFx0ICBtYXBwaW5nLCBpbmRleCk7XG4yMzUyOlx0XHRcdFx0XHRwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVx1MDAzZWhvc3QpLFxuMjM1MzpcdFx0XHRcdFx0XHRcdFx0ICAgIFBBR0VfU0laRSk7XG4yMzU0Olx0XG4yMzU1Olx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM1NjpcdFx0XHRcdFx0LypcbjIzNTc6XHRcdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LlxuMjM1ODpcdFx0XHRcdFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcbjIzNTk6XHRcdFx0XHRcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXG4yMzYwOlx0XHRcdFx0XHQgKi9cbjIzNjE6XHRcdFx0XHRcdGlmIChpbmRleCBcdTAwM2MgZW9mKVxuMjM2MjpcdFx0XHRcdFx0XHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcdTAwMjZyYWN0bCxcbjIzNjM6XHRcdFx0XHRcdFx0XHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xuMjM2NDpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuMjM2NTpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjM2NjpcdFx0XHRcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xuMjM2NzpcdFx0XHRcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbjIzNjg6XHRcdFx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjM2OTpcdFx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjM3MDpcdFx0XHRcdFx0fVxuMjM3MTpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHtcbjIzNzI6XHRcdFx0XHRcdC8qXG4yMzczOlx0XHRcdFx0XHQgKiBUaGlzIHBhZ2UgaXMgZGlydHkgYmVjYXVzZSBpdCBoYXNuJiMzOTt0XG4yMzc0Olx0XHRcdFx0XHQgKiBiZWVuIGZsdXNoZWQgc2luY2UgZmlyc3Qgd3JpdGUuXG4yMzc1Olx0XHRcdFx0XHQgKlxuMjM3NjpcdFx0XHRcdFx0ICogVHJpZ2dlciBhc3luYyBmbHVzaCBmb3IgcmVhZC1vbmx5IGZpbGVzIGFuZFxuMjM3NzpcdFx0XHRcdFx0ICogaG9wZSB0aGUgd3JpdGViYWNrIGlzIGRvbmUgd2hlbiBraHVnZXBhZ2VkXG4yMzc4Olx0XHRcdFx0XHQgKiByZXZpc2l0cyB0aGlzIHBhZ2UuIFdyaXRhYmxlIGZpbGVzIGNhbiBoYXZlXG4yMzc5Olx0XHRcdFx0XHQgKiB0aGVpciBmb2xpb3MgZGlydHkgYXQgYW55IHRpbWU7IGJsaW5kbHlcbjIzODA6XHRcdFx0XHRcdCAqIGZsdXNoaW5nIHRoZW0gd291bGQgY2F1c2UgdW5kZXNpcmFibGVcbjIzODE6XHRcdFx0XHRcdCAqIHN5c3RlbS13aWRlIHdyaXRlYmFjay5cbjIzODI6XHRcdFx0XHRcdCAqXG4yMzgzOlx0XHRcdFx0XHQgKiBUaGlzIGlzIGEgb25lLW9mZiBzaXR1YXRpb24uIFdlIGFyZSBub3RcbjIzODQ6XHRcdFx0XHRcdCAqIGZvcmNpbmcgd3JpdGViYWNrIGluIGxvb3AuXG4yMzg1Olx0XHRcdFx0XHQgKi9cbjIzODY6XHRcdFx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4yMzg3Olx0XHRcdFx0XHRpZiAoIWlub2RlX2lzX29wZW5fZm9yX3dyaXRlKG1hcHBpbmctXHUwMDNlaG9zdCkpXG4yMzg4Olx0XHRcdFx0XHRcdGZpbGVtYXBfZmx1c2gobWFwcGluZyk7XG4yMzg5Olx0XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfRElSVFlfT1JfV1JJVEVCQUNLO1xuMjM5MDpcdFx0XHRcdFx0Z290byB4YV91bmxvY2tlZDtcbjIzOTE6XHRcdFx0XHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuMjM5MjpcdFx0XHRcdFx0eGFzX3VubG9ja19pcnEoXHUwMDI2eGFzKTtcbjIzOTM6XHRcdFx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9ESVJUWV9PUl9XUklURUJBQ0s7XG4yMzk0Olx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjM5NTpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbjIzOTY6XHRcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4yMzk3Olx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM5ODpcdFx0XHRcdH0gZWxzZSB7XG4yMzk5Olx0XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ0NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBsaW5lcyAyNjgwLTI3MTAgb2YgYG1tL2todWdlcGFnZWQuY2AuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGtodWdlcGFnZWQgbG9naWMgcmVzaWRlcywgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgc2VjdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBzY2FubmluZyBhbmQgcG90ZW50aWFsbHkgZnJlZWluZyBvZiBodWdlIHBhZ2VzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIGxpbmVzIGJlY2F1c2UgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBpc3N1ZSBJJiMzOTttIGRlYnVnZ2luZyByZWxhdGVkIHRvIGZyYWdtZW50YXRpb24gYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgd2hlbiBhbGxvY2F0aW5nIGh1Z2UgcGFnZXMsIGFuZCBJIHN1c3BlY3QgdGhlIGFuc3dlciBsaWVzIGhlcmUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaHVnZSBwYWdlcyBhcmUgY29uc2lkZXJlZCByZWNsYWltYWJsZSwgaWYgdGhlIGFjY291bnRpbmcgaXMgY29ycmVjdCwgYW5kIGlmIGFueSBzeW5jaHJvbml6YXRpb24gaXNzdWVzIG1pZ2h0IGJlIHByZXNlbnQgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2UgcGFnZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGtodWdlcGFnZWRgIGRhZW1vbiBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBwYWdlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBmdW5jdGlvbnMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdW5kZXJzdGFuZGluZyBob3cgZWZmaWNpZW50bHkgd2UgYXJlIG1hbmFnaW5nIGh1Z2UgcGFnZXMgYXQgdGhpcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2ODA6XHRcdFx0c2htZW1fdW5jaGFyZ2UobWFwcGluZy1cdTAwM2Vob3N0LCBucl9ub25lKTtcbjI2ODE6XHRcdH1cbjI2ODI6XHRcbjI2ODM6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgdG1wLCBcdTAwMjZwYWdlbGlzdCwgbHJ1KSB7XG4yNjg0Olx0XHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4yNjg1Olx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4yNjg2Olx0XHRcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcbjI2ODc6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjI2ODg6XHRcdH1cbjI2ODk6XHRcbjI2OTA6XHRcdG5ld19mb2xpby1cdTAwM2VtYXBwaW5nID0gTlVMTDtcbjI2OTE6XHRcbjI2OTI6XHRcdGZvbGlvX3VubG9jayhuZXdfZm9saW8pO1xuMjY5MzpcdFx0Zm9saW9fcHV0KG5ld19mb2xpbyk7XG4yNjk0Olx0b3V0OlxuMjY5NTpcdFx0aWYgKG5lZWRfdW5sb2NrKVxuMjY5NjpcdFx0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbjI2OTc6XHRcdFZNX0JVR19PTighbGlzdF9lbXB0eShcdTAwMjZwYWdlbGlzdCkpO1xuMjY5ODpcdFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xuMjY5OTpcdFx0cmV0dXJuIHJlc3VsdDtcbjI3MDA6XHR9XG4yNzAxOlx0XG4yNzAyOlx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuMjcwMzpcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LFxuMjcwNDpcdFx0XHRzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXG4yNzA1Olx0e1xuMjcwNjpcdFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX25vbmUgPSBjb2xsYXBzZV9tYXhfcHRlc19ub25lKGNjLCBOVUxMLCBIUEFHRV9QTURfT1JERVIpO1xuMjcwNzpcdFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX3N3YXAgPSBjb2xsYXBzZV9tYXhfcHRlc19zd2FwKGNjLCBIUEFHRV9QTURfT1JERVIpO1xuMjcwODpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XG4yNzA5Olx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIyMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgY29sbGFwc2VfZmlsZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbiBiZXR0ZXIsIGFuZCB0aGUgZmlyc3QgcGxhY2UgSSBhbHdheXMgc3RhcnQgd2l0aCB0aGF0IGlzIHVuZGVyc3RhbmRpbmcgKndobyogY2FsbHMgaXQuIFdoYXQgb3RoZXIgcGllY2VzIG9mIHRoZSBzeXN0ZW0gYXJlIHJlbHlpbmcgb24gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gZXhhbWluZSB0aGUgY2FsbGluZyBzdHJ1Y3R1cmUg4oCTIGhvdyBpcyBpdCBpbnZva2VkPyBJcyBpdCBhIGNvcmUgdXRpbGl0eSBmdW5jdGlvbiB1c2VkIGFjcm9zcyB0aGUgYm9hcmQsIG9yIGlzIGl0IGlzb2xhdGVkIHRvIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGNvbXBvbmVudD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyB3aWxsIGlsbHVtaW5hdGUgaXRzIHB1cnBvc2UsIGl0cyBpbXBvcnRhbmNlLCBhbmQgaG93IGNoYW5nZXMgdG8gaXQgbWlnaHQgcmlwcGxlIHRocm91Z2ggdGhlIHN5c3RlbS4gSSYjMzk7bSB0aGlua2luZyBhIHRob3JvdWdoIHRyYWNpbmcgb2YgdGhlIGNhbGwgZ3JhcGggaXMgaW4gb3JkZXI7IEkgd2FudCB0byBzZWUgdGhpcyBmdW5jdGlvbiBpbiBjb250ZXh0LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgZGlzY292ZXIgdGhlIGRlcGVuZGVudCByZWxhdGlvbnNoaXBzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgaWRlbnRpZnlpbmcgYWxsIHRoZSBjYWxsZXJzIGFuZCB0aGVuIEkgY2FuIHJlZmluZSBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xsYXBzZV9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0yMTM5PXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyMjMtLyoqXG5tbS9raHVnZXBhZ2VkLmM6MjIyNDogKiBjb2xsYXBzZV9maWxlIC0gY29sbGFwc2UgZmlsZW1hcC90bXBmcy9zaG1lbSBwYWdlcyBpbnRvIGh1Z2Ugb25lLlxubW0va2h1Z2VwYWdlZC5jLTIyMjUtICpcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjI0Ny0gKi9cbm1tL2todWdlcGFnZWQuYzoyMjQ4OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yMjQ5LVx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjk3LVx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG5tbS9raHVnZXBhZ2VkLmM6MjY5ODpcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcbm1tL2todWdlcGFnZWQuYy0yNjk5LVx0cmV0dXJuIHJlc3VsdDtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjcwMj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI3OTktXHRcdH0gZWxzZSB7XG5tbS9raHVnZXBhZ2VkLmM6MjgwMDpcdFx0XHRyZXN1bHQgPSBjb2xsYXBzZV9maWxlKG1tLCBhZGRyLCBmaWxlLCBzdGFydCwgY2MpO1xubW0va2h1Z2VwYWdlZC5jLTI4MDEtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcmVxdWVzdCwgdGhpbmtpbmcgYXMgYW4gZXhwZXJ0IGluIHNvZnR3YXJlIGFuYWx5c2lzL3JldmVyc2UgZW5naW5lZXJpbmc6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBgY29sbGFwc2Vfc2Nhbl9maWxlYCBDYWxsZXIgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBiZWluZyBhc2tlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsZXJzIG9mIGEgZnVuY3Rpb24gbmFtZWQgYGNvbGxhcHNlX3NjYW5fZmlsZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3Mgc3RhcnRzIHdpdGggdGhlIGNvbnRleHQuIElzIHRoaXMgYSBjb2RlIGFuYWx5c2lzIHRhc2s/IEFtIEkgZGVidWdnaW5nPyBBbSBJIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgcGllY2Ugb2Ygc29mdHdhcmU/IEtub3dpbmcgdGhlIGxhcmdlciBwcm9qZWN0IHdvdWxkIGRlZmluaXRlbHkgaGVscCBuYXJyb3cgZG93biB0aGUgcG9zc2liaWxpdGllcy4KCk15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIGZpZ3VyaW5nIG91dCAqd2hlcmUqIHRoaXMgYGNvbGxhcHNlX3NjYW5fZmlsZWAgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBDIGNvZGUsIFB5dGhvbiwgSmF2YVNjcmlwdCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBkaWN0YXRlcyBteSB0b29sc2V0LiBGb3IgQy9DJiM0MzsmIzQzOywgSSYjMzk7ZCByZWFjaCBmb3IgdG9vbHMgbGlrZSBgZ2RiYCwgYG9iamR1bXBgLCBzdGF0aWMgYW5hbHlzaXMgdG9vbHMgKGxpa2UgY2xhbmcmIzM5O3MgYW5hbHlzaXMgcGx1Z2lucyBvciBDb2RlUUwpLCBvciBldmVuIGEgZGlzYXNzZW1ibGVyIGlmIHNvdXJjZSBpc24mIzM5O3QgcmVhZGlseSBhdmFpbGFibGUuIFB5dGhvbiB3b3VsZCBsZW5kIGl0c2VsZiB0byBncmVwLCBhIGRlYnVnZ2VyLCBvciBwb3RlbnRpYWxseSB1c2luZyBhIGNhbGwgZ3JhcGggZ2VuZXJhdG9yLiBJJiMzOTtkIGRlZmluaXRlbHkgYmUgbG9va2luZyBmb3IgdG9vbHMgdGhhdCBjYW4gcGVyZm9ybSBjcm9zcy1yZWZlcmVuY2VzLiBKYXZhU2NyaXB0PyBEZWZpbml0ZWx5IG15IGJyb3dzZXImIzM5O3MgZGV2ZWxvcGVyIHRvb2xzIG9yIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGNvZGUgYW5hbHlzaXMgcGxhdGZvcm0gbGlrZSBzdGF0aWMgYW5hbHlzaXMgdG9vbHMuCgpCZXlvbmQgdGhlIHNwZWNpZmljIHRvb2xzLCB0aGUgZ29hbCBpcyB0byBzeXN0ZW1hdGljYWxseSBsb2NhdGUgZXZlcnkgc2luZ2xlIGNhbGwgc2l0ZSB0byBgY29sbGFwc2Vfc2Nhbl9maWxlYC4gSSYjMzk7ZCBzdGFydCB3aXRoIGEgYnJvYWQgc2VhcmNoLCBtYXliZSB1c2luZyBhIHRleHQgc2VhcmNoIGZvciB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgdGhlbiByZWZpbmluZyBmcm9tIHRoZXJlLiBJ4oCZZCBjb25zaWRlciBhbnkgcHJlZml4ZXMgb3IgbmFtZXNwYWNlcyBpdCBtaWdodCBiZSB3aXRoaW4gdG8gbmFycm93IHRoZSBzZWFyY2guIFRoZSBtb3JlIHNwZWNpZmljIHRoZSBzZWFyY2gsIHRoZSBiZXR0ZXIuCgpJJiMzOTtkIGFsc28gY29uc2lkZXIgYW55IGJ1aWxkIGNvbmZpZ3VyYXRpb25zIG9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgY29uZGl0aW9uYWxseSBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhlIGZ1bmN0aW9uIGNhbGxzLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgYWxsIHBvc3NpYmxlIGV4ZWN1dGlvbiBwYXRocy4gQXJlIHRoZXJlIHByZXByb2Nlc3NvciBtYWNyb3MgdGhhdCBtaWdodCByZWRlZmluZSBvciBjb25kaXRpb25hbGx5IGludm9rZSB0aGUgZnVuY3Rpb24/IEnigJlkIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhvc2UuCgpOZXh0LCBJJiMzOTtkIGV4YW1pbmUgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGF0IGVhY2ggY2FsbCBzaXRlLiBUaGF0JiMzOTtzIGdvaW5nIHRvIGJlIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyAqaG93KiBpdCYjMzk7cyBiZWluZyB1c2VkLiBXaGF0IGRhdGEgaXMgaXQgb3BlcmF0aW5nIG9uPyBXaGF0JiMzOTtzIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgdGhlIGNhbGxzPyBUaGlzIGluZm9ybWF0aW9uIHRlbGxzIG1lIHRoZSBmdW5jdGlvbiYjMzk7cyByZXNwb25zaWJpbGl0eSBhbmQgaXRzIHBvc2l0aW9uIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEkmIzM5O2Qgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBhcmd1bWVudHMgYXMgYSBzYW5pdHkgY2hlY2sgb2YgbXkgZmluZGluZ3MuCgpGaW5hbGx5LCBJJiMzOTtkIHdhbnQgdG8gYnVpbGQgYSBiYXNpYyBjYWxsIGdyYXBoIHRvIHZpc3VhbGl6ZSB0aGUgcmVsYXRpb25zaGlwcy4gV2hlcmUgZG9lcyB0aGUgY2FsbGluZyBjb2RlIHJlc2lkZT8gRG9lcyBpdCBoYXZlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBJcyBgY29sbGFwc2Vfc2Nhbl9maWxlYCBjYWxsZWQgZnJvbSBhIHNpbmdsZSBsb2NhdGlvbiBvciBmcm9tIG11bHRpcGxlIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgY29kZT8gVGhlIGFuc3dlcnMgaGVscCB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiYjMzk7cyBzY29wZSBvZiBpbmZsdWVuY2UgYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xsYXBzZV9zY2FuX2ZpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTIyNDg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNzAxLVxubW0va2h1Z2VwYWdlZC5jOjI3MDI6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxubW0va2h1Z2VwYWdlZC5jLTI3MDMtXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGZpbGUgKmZpbGUsIHBnb2ZmX3Qgc3RhcnQsXG4tLVxubW0va2h1Z2VwYWdlZC5jPTI4MTI9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4MzQtcmV0cnk6XG5tbS9raHVnZXBhZ2VkLmM6MjgzNTpcdHJlc3VsdCA9IGNvbGxhcHNlX3NjYW5fZmlsZShtbSwgYWRkciwgZmlsZSwgcGdvZmYsIGNjKTtcbm1tL2todWdlcGFnZWQuYy0yODM2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBDYWxsZXJzIG9mIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBjb2xsYXBzZV9zaW5nbGVfcG1kYCBpcyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIHBpZWNlcyBvZiBjb2RlIGFyZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAgaW4gYW55IGRlYnVnZ2luZywgcmVmYWN0b3JpbmcsIG9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIGdpdmVzIG1lIGNvbnRleHQg4oCTIGl0IHRlbGxzIG1lICp3aHkqIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgaW1wb3J0YW50LCB3aGF0IGl0cyBleHBlY3RlZCBpbnB1dHMgYXJlLCBhbmQgaG93IGl0cyBvdXRwdXQgaXMgYmVpbmcgdXRpbGl6ZWQuCgpNeSBpbml0aWFsIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGxldmVyYWdlIHRoZSB0b29scyBhdmFpbGFibGUgdG8gbWUuIEkmIzM5O2Qgc3RhcnQgd2l0aCBzdGF0aWMgYW5hbHlzaXMgaWYgaXQmIzM5O3MgYXZhaWxhYmxlLiBBIGNyb3NzLXJlZmVyZW5jZSBzZWFyY2gsIHdoZXRoZXIgdGhyb3VnaCBhbiBJREUsIGEgY29kZSBzZWFyY2ggdG9vbCBsaWtlIGBncmVwYCBvciBgYWdgIChkZXBlbmRpbmcgb24gdGhlIHByb2plY3QgYW5kIGxhbmd1YWdlKSwgb3IgYSBkZWRpY2F0ZWQgZGVwZW5kZW5jeSBhbmFseXplciwgd291bGQgYmUgdGhlIG1vc3QgZWZmaWNpZW50IG1ldGhvZC4gSSYjMzk7bSBsb29raW5nIGZvciBkaXJlY3QgY2FsbHMsIG9mIGNvdXJzZSwgYnV0IGFsc28gaW5kaXJlY3QgY2FsbHMg4oCTIHBlcmhhcHMgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycyBvciBkeW5hbWljIGRpc3BhdGNoIGlmIHRoZSBsYW5ndWFnZSBzdXBwb3J0cyB0aG9zZSBmZWF0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byBiZSBtaW5kZnVsIG9mIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBleGVjdXRpb24gcGF0aHMgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLgoKSWYgc3RhdGljIGFuYWx5c2lzIGlzIGluc3VmZmljaWVudCwgSSYjMzk7bGwgbmVlZCB0byB0dXJuIHRvIGR5bmFtaWMgYW5hbHlzaXMuIEkgbWlnaHQgaW5zdHJ1bWVudCB0aGUgY29kZSB3aXRoIGxvZ2dpbmcgdG8gdHJhY2UgZXhlY3V0aW9uIGZsb3csIG9yIHV0aWxpemUgYSBkZWJ1Z2dlciB0byBzdGVwIHRocm91Z2ggZXhlY3V0aW9uIGFuZCBvYnNlcnZlIHRoZSBjYWxscyBmaXJzdGhhbmQuIFRoZSBjaG9pY2Ugb2YgbWV0aG9kIHdpbGwgZGVwZW5kIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBjb2RlYmFzZSBhbmQgdGhlIGVhc2Ugd2l0aCB3aGljaCBJIGNhbiByZXByb2R1Y2UgdGhlIHJlbGV2YW50IHNjZW5hcmlvcy4gSSYjMzk7ZCBwcm9iYWJseSBhaW0gdG8gY2FwdHVyZSB0aGUgZnVuY3Rpb24gY2FsbHMgaW4gYSBsb2csIHBvdGVudGlhbGx5IGluY2x1ZGluZyB0aGUgaW5wdXQgYXJndW1lbnRzIGZvciBjb250ZXh0LgoKT25jZSBJIGhhdmUgdGhlIGxpc3Qgb2YgY2FsbGVycywgSeKAmWxsIG5lZWQgdG8gYW5hbHl6ZSB0aGVtIGluZGl2aWR1YWxseS4gSSYjMzk7bGwgaW52ZXN0aWdhdGUgZWFjaCBjYWxsZXIsIGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mICp0aGF0KiBjb2RlIGFuZCBob3cgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIHN5c3RlbSBhbmQgaXRzIGRlcGVuZGVuY2llcy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBrZXkgdG8gYW55IGRlZXBlciBpbnZlc3RpZ2F0aW9uLiBUaGlzIHdpbGwgZGljdGF0ZSB0aGUgbmV4dCBjb3Vyc2Ugb2YgYWN0aW9uLCB3aGljaCBjb3VsZCByYW5nZSBmcm9tIG9wdGltaXphdGlvbiwgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJ1ZyBzb3VyY2VzLCBvciBhc3Nlc3NpbmcgcG90ZW50aWFsIGltcGFjdHMgb2YgYSBjaGFuZ2UgdG8gdGhlIGZ1bmN0aW9uIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29sbGFwc2Vfc2luZ2xlX3BtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MjcwMj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4MTEtICovXG5tbS9raHVnZXBhZ2VkLmM6MjgxMjpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yODEzLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCAqbG9ja19kcm9wcGVkLFxuLS1cbm1tL2todWdlcGFnZWQuYz0yODY5PXN0YXRpYyB2b2lkIGNvbGxhcHNlX3NjYW5fbW1fc2xvdCh1bnNpZ25lZCBpbnQgcHJvZ3Jlc3NfbWF4LFxuLS1cbm1tL2todWdlcGFnZWQuYy0yOTM5LVxubW0va2h1Z2VwYWdlZC5jOjI5NDA6XHRcdFx0KnJlc3VsdCA9IGNvbGxhcHNlX3NpbmdsZV9wbWQoa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MsXG5tbS9raHVnZXBhZ2VkLmMtMjk0MS1cdFx0XHRcdFx0XHQgICAgICB2bWEsIFx1MDAyNmxvY2tfZHJvcHBlZCwgY2MpO1xuLS1cbm1tL2todWdlcGFnZWQuYz0zMjEwPWludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2todWdlcGFnZWQuYy0zMjU4LVxubW0va2h1Z2VwYWdlZC5jOjMyNTk6XHRcdHJlc3VsdCA9IGNvbGxhcHNlX3NpbmdsZV9wbWQoYWRkciwgdm1hLCBcdTAwMjZtbWFwX3VubG9ja2VkLCBjYyk7XG5tbS9raHVnZXBhZ2VkLmMtMzI2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NDUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgbWFkdmlzZV9jb2xsYXBzZWAgYW5kIGl0cyBUcmlnZ2VycyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgbWFkdmlzZV9jb2xsYXBzZWAgYW5kIGhvdyBpdCYjMzk7cyBhY3RpdmF0ZWQuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIHByaW1hcnkgdHJpZ2dlciBpcyB0aGUgc3lzdGVtIGNhbGwgYG1hZHZpc2VgIHVzZWQgd2l0aCB0aGUgYE1BRFZfQ09MTEFQU0VgIGZsYWcuIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZW4sIEkgc2VlIGBjb2xsYXBzZV9zY2FuX21tX3Nsb3RgIGFsc28gY2FsbHMgaXQsIGFuZCB0aGF0JiMzOTtzIHRpZWQgdG8gdGhlIGBraHVnZXBhZ2VkYCBrdGhyZWFkLiBTbywgZWZmZWN0aXZlbHksIGBtYWR2aXNlX2NvbGxhcHNlYCBjYW4gYmUgaW5pdGlhdGVkIGRpcmVjdGx5IGJ5IGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCBvbiBmaWxlIG1hcHBpbmdzLCBhcyB3ZWxsIGFzIGJlaW5nIGEgZnVuY3Rpb24gd2l0aGluIHRoZSBga2h1Z2VwYWdlZGAga3RocmVhZCBpdHNlbGYuIFRoaXMgaW1wbGllcyB0aGF0IHRoZXJlIGFyZSB0d28gZGlzdGluY3QgbWVjaGFuaXNtczogdXNlci1sZXZlbCBkaXJlY3RpdmUgdmlhIGBtYWR2aXNlYCBhbmQgYSBrZXJuZWwtbGV2ZWwgcHJvYWN0aXZlIHN0cmF0ZWd5IHRocm91Z2ggYGtodWdlcGFnZWRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBib3RoIHBhdGhzLiBJIHNob3VsZCBleGFtaW5lIHRoZSBmaWxlIG1hcHBpbmcgdXNlIGNhc2Ugd2l0aCBgTUFEVl9DT0xMQVBTRWAgZmlyc3QsIHRoZW4gYXNzZXNzIGhvdyBga2h1Z2VwYWdlZGAgaW50ZXJhY3RzLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgZm9yIGBtYWR2aXNlX2NvbGxhcHNlYCBpbiBtb3JlIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MzE3Mz1ib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKVxuLS1cbm1tL2todWdlcGFnZWQuYy0zMTc3LVxubW0va2h1Z2VwYWdlZC5jOjMxNzg6c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGVudW0gc2Nhbl9yZXN1bHQgcilcbm1tL2todWdlcGFnZWQuYy0zMTc5LXtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzIwOS1cbm1tL2todWdlcGFnZWQuYzozMjEwOmludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0va2h1Z2VwYWdlZC5jLTMyMTEtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgKmxvY2tfZHJvcHBlZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzI5Ny1cdHJldHVybiB0aHBzID09ICgoaGVuZCAtIGhzdGFydCkgXHUwMDNlXHUwMDNlIEhQQUdFX1BNRF9TSElGVCkgPyAwXG5tbS9raHVnZXBhZ2VkLmM6MzI5ODpcdFx0XHQ6IG1hZHZpc2VfY29sbGFwc2VfZXJybm8obGFzdF9mYWlsKTtcbm1tL2todWdlcGFnZWQuYy0zMjk5LX1cbi0tXG5tbS9tYWR2aXNlLmM9MTMzOT1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xMzYzLVx0Y2FzZSBNQURWX0NPTExBUFNFOlxubW0vbWFkdmlzZS5jOjEzNjQ6XHRcdHJldHVybiBtYWR2aXNlX2NvbGxhcHNlKHZtYSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbm1tL21hZHZpc2UuYy0xMzY1LVx0XHRcdFx1MDAyNm1hZHZfYmVoYXZpb3ItXHUwMDNlbG9ja19kcm9wcGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBLZXJuZWwgSHVnZSBQYWdlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBtbS9raHVnZXBhZ2VkLmNgLiBNeSBmaXJzdCBzdG9wIGlzIGdvaW5nIHRvIGJlIHRoZSBgbW0vTWFrZWZpbGVgLiBMZXQmIzM5O3Mgc2VlLi4uIGFoLCByaWdodCBoZXJlOiBgb2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9gLiBUaGF0IHRlbGxzIG1lIGBraHVnZXBhZ2VkYCBpcyBidWlsdCB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpOb3csIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gcGxheS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGBtbS9LY29uZmlnYC4gSXQmIzM5O3MgcG9zc2libGUgdGhlcmUgYXJlIG1vcmUgZ3JhbnVsYXIgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpdHNlbGYgb3IgbWF5YmUgZXZlbiBkaXJlY3RseSByZWxhdGVkIHRvIGBraHVnZXBhZ2VkYCB0aGF0IEkmIzM5O20gbWlzc2luZy4gTmVlZCB0byBiZSB0aG9yb3VnaCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODMyPWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODM0LVxubW0vS2NvbmZpZzo4MzU6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzYtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2OTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSYjMzk7cyBjb25maWd1cmF0aW9uIGlzIG1hbmFnZWQuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgODM1LiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIHRoZSBtb2R1bGUmIzM5O3MgcmVsZXZhbnQgc2V0dGluZ3MgYXJlIGxpa2VseSBpbnRlcndvdmVuIHdpdGggdGhvc2UuIExpbmUgODM1IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGVudHJ5IHBvaW50IHRvIG5hdmlnYXRlIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBmb3Igd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCwgZ2l2ZW4gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIEl0JiMzOTtzIHByb2JhYmx5IGEgZ29vZCBzcG90IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdHMgSSYjMzk7bSBsb29raW5nIGZvciwgYW5kIG1heWJlIGV2ZW4gc29tZSBoaW50cyBvbiBob3cgdGhlIG9wdGlvbnMgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IHN1YnN5c3RlbS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyBJIGNhbiB1bmVhcnRoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzNTpcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4MzY6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIDgzNzpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gODM4Olx0XHRzZWxlY3QgQ09NUEFDVElPTlxuIDgzOTpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuIDg0MDpcdFx0c2VsZWN0IE1NX0lEXG4gODQxOlx0XHRoZWxwXG4gODQyOlx0XHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbiA4NDM6XHRcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxuIDg0NDpcdFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cbiA4NDU6XHRcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcbiA4NDY6XHRcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xuIDg0NzpcdFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXG4gODQ4Olx0XG4gODQ5Olx0XHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxuIDg1MDpcdFxuIDg1MTpcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODUyOlx0XG4gODUzOlx0Y2hvaWNlXG4gODU0Olx0XHRwcm9tcHQgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1wmIzM0O1xuIDg1NTpcdFx0ZGVmYXVsdCBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbiA4NTY6XHRcdGhlbHBcbiA4NTc6XHRcdCAgU2VsZWN0cyB0aGUgc3lzZnMgZGVmYXVsdHMgZm9yIFRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQuXG4gODU4Olx0XG4gODU5Olx0XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG4gODYwOlx0XHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4gODYxOlx0XHRoZWxwXG4gODYyOlx0XHQgIEVuYWJsaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlIGFsd2F5cywgY2FuIGluY3JlYXNlIHRoZVxuIDg2MzpcdFx0ICBtZW1vcnkgZm9vdHByaW50IG9mIGFwcGxpY2F0aW9ucyB3aXRob3V0IGEgZ3VhcmFudGVlZFxuIDg2NDpcdFx0ICBiZW5lZml0IGJ1dCBpdCB3aWxsIHdvcmsgYXV0b21hdGljYWxseSBmb3IgYWxsIGFwcGxpY2F0aW9ucy5cbiA4NjU6XHRcbiA4NjY6XHRcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG4gODY3Olx0XHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuIDg2ODpcdFx0aGVscFxuIDg2OTpcdFx0ICBFbmFibGluZyBUcmFuc3BhcmVudCBIdWdlcGFnZSBtYWR2aXNlLCB3aWxsIG9ubHkgcHJvdmlkZSBhXG4gODcwOlx0XHQgIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGJlbmVmaXQgdG8gdGhlIGFwcGxpY2F0aW9ucyB1c2luZ1xuIDg3MTpcdFx0ICBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpIGJ1dCBpdCB3b24mIzM5O3QgcmlzayB0byBpbmNyZWFzZSB0aGVcbiA4NzI6XHRcdCAgbWVtb3J5IGZvb3RwcmludCBvZiBhcHBsaWNhdGlvbnMgd2l0aG91dCBhIGd1YXJhbnRlZWRcbiA4NzM6XHRcdCAgYmVuZWZpdC5cbiA4NzQ6XHRcbiA4NzU6XHRcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxuIDg3NjpcdFx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4gODc3Olx0XHRoZWxwXG4gODc4Olx0XHQgIERpc2FibGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgYnkgZGVmYXVsdC4gSXQgY2FuIHN0aWxsIGJlXG4gODc5Olx0XHQgIGVuYWJsZWQgYXQgcnVudGltZSB2aWEgc3lzZnMuXG4gODgwOlx0ZW5kY2hvaWNlXG4gODgxOlx0XG4gODgyOlx0Y2hvaWNlXG4gODgzOlx0XHRwcm9tcHQgXCYjMzQ7U2htZW0gaHVnZXBhZ2UgYWxsb2NhdGlvbiBkZWZhdWx0c1wmIzM0O1xuIDg4NDpcdFx0ZGVmYXVsdCBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjQ1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTU2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIHRoZSBtYWluIGNvbmNlcm4gaGVyZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBgY29sbGFwc2VfZmlsZWAgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggZmlsZSBtYXBwaW5nIGFuZCByZWFkYWhlYWQgYWZ0ZXIgdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2FzOiBkb2VzIHRoaXMgbmV3IGNoYW5nZSB0byB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjb2xsYXBzZV9maWxlYCwgZGVwZW5kIG9uIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgbGlrZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBpcyBjZW50cmFsIGhlcmU/IEkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgY29sbGFwc2VfZmlsZWAgaXMgdW5jb25kaXRpb25hbGx5IGRlZmluZWQgd2hlbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQsIHdoaWNoIG1hZGUgaXQgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuCgpJIHRoZW4gZHVnIGludG8gdGhlIGNvZGUsIGZvY3VzaW5nIG9uIHRoZSBsb2NrIGFjcXVpc2l0aW9uIHN0cmF0ZWd5LiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBjaGFuZ2UgaXMgYWJvdXQgdGFraW5nIHRoZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCAqYmVmb3JlKiBhY3F1aXJpbmcgZm9saW8gbG9ja3MuIFRoZSBjb21tZW50IGV4cGxpY2l0bHkgc3RhdGVzIHRoZSByZWFzb246IHJlYWRhaGVhZCBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIG1pZ2h0IGJlIGhvbGRpbmcgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy4gVGhpcyBpcyBhIGNydWNpYWwgZGV0YWlsLiBUaGUgb2xkIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCBpbXBsaWNpdGx5IGhlbGQgdGhpcyBsb2NrLCBidXQgdGhlIG5ldyBjb2RlIHVzZXMgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBpbnN0ZWFkLCBtZWFuaW5nIHRoZSBsb2NrIGlzIG5vdyBoZWxkIGV4cGxpY2l0bHkgZm9yIHRoZSBlbnRpcmUgcm91dGluZS4KCkkgdGhlbiBkaWQgYSBxdWljayBjaGVjayBvbiB3aGVyZSBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgIGlzIHVzZWQgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGFmZmVjdHMgaG90IHBhdGhzLgoKVGhlIHJlYWwgbWVhdCBvZiB0aGUgYW5hbHlzaXMsIGZyb20gbXkgcGVyc3BlY3RpdmUsIGlzIHRoYXQgdGhpcyBwYXRjaCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgbG9ja2luZyBvcmRlciwgYW5kIHdpdGggdGhlIGxvY2sgYmVpbmcgaGVsZCBmb3IgYSBwcm9sb25nZWQgb3BlcmF0aW9uLCB0aGlzIGhhcyBodWdlIGltcGxpY2F0aW9ucy4gQWNxdWlyaW5nIGBtYXBwaW5nLSZndDtpbnZhbGlkYXRlX2xvY2tgIGVhcmxpZXIgYW5kIG1haW50YWluaW5nIGl0IHRocm91Z2hvdXQgYGNvbGxhcHNlX2ZpbGVgLCBlc3BlY2lhbGx5IGFjcm9zcyBmb2xpbyBsb2NrcyBhbmQgcG90ZW50aWFsIGFsbG9jYXRpb25zLCBzZXRzIG9mZiBhbGFybSBiZWxscyBmb3IgcG90ZW50aWFsIGRlYWRsb2NrcywgbG9jayBpbnZlcnNpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVuaGFuZGxlZCBlcnJvcnMuIEludGVyYWN0aW5nIHdpdGggb3BlcmF0aW9ucyBsaWtlIHRydW5jYXRlLCBmYWxsb2NhdGUsIHBhZ2UgZmF1bHQsIG1lbW9yeSByZWNsYWltLCBvciBsb2NrZGVwIHVuZGVyIHRoZXNlIG5ldyBjb25kaXRpb25zIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciB0aGVzZSBraW5kcyBvZiBwcm9ibGVtcy4KClRoaXMgaXMgYSBjbGVhciBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjb3ZlciB0aGVzZSBhcmVhczoKKiAgIGBjb2xsYXBzZV9maWxlYAoqICAgYGNvbGxhcHNlX3NjYW5fZmlsZWAKKiAgIGBtYWR2aXNlX2NvbGxhcHNlYAoKVGhlc2UgYXJlIGFsbCBkaXJlY3QgdG91Y2ggcG9pbnRzIHdpdGggdGhlIGNoYW5nZS4gVGhpcyBoZWxwcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBhdGhzIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0PTEwMjQ9RXhhbXBsZSBvdXRwdXQuXG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdC0xMDMwLSAgICA1NjM3MzI0OCAgICAgNDczNyBtbS9zbHViLmM6MjI1OSBmdW5jOmFsbG9jX3NsYWJfcGFnZVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdDoxMDMxOiAgICAxNDg4MDc2OCAgICAgMzYzMyBtbS9yZWFkYWhlYWQuYzoyNDcgZnVuYzpwYWdlX2NhY2hlX3JhX3VuYm91bmRlZFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdC0xMDMyLSAgICAxNDQxNzkyMCAgICAgMzUyMCBtbS9tbV9pbml0LmM6MjUzMCBmdW5jOmFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3Q9NjU9RXhhbXBsZSBvdXRwdXQ6OlxuLS1cbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0LTc1LSAgICAgICAgIDE0TSAgICAgMzUyMCBtbS9tbV9pbml0LmM6MjUzMCBmdW5jOmFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdDo3NjogICAgICAgICAxNU0gICAgIDM2NTYgbW0vcmVhZGFoZWFkLmM6MjQ3IGZ1bmM6cGFnZV9jYWNoZV9yYV91bmJvdW5kZWRcbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0LTc3LSAgICAgICAgIDU1TSAgICAgNDg4NyBtbS9zbHViLmM6MjI1OSBmdW5jOmFsbG9jX3NsYWJfcGFnZVxuLS1cbmZzL2YyZnMvZmlsZS5jPTQ3OTQ9c3RhdGljIGludCByZWRpcnR5X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IHBhZ2VfaWR4LCBpbnQgbGVuKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTQ4MDItXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG5mcy9mMmZzL2ZpbGUuYzo0ODAzOlx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoXHUwMDI2cmFjdGwsIGxlbiwgMCk7XG5mcy9mMmZzL2ZpbGUuYy00ODA0LVx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XG4tLVxuZnMvdmVyaXR5L3BhZ2VjYWNoZS5jPTQyPXZvaWQgZ2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5mcy92ZXJpdHkvcGFnZWNhY2hlLmMtNTMtXG5mcy92ZXJpdHkvcGFnZWNhY2hlLmM6NTQ6XHRcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKFx1MDAyNnJhY3RsLCBucl9wYWdlcywgMCk7XG5mcy92ZXJpdHkvcGFnZWNhY2hlLmMtNTUtXHR9XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTQwOD1zdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wge1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MzAtXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxNDMxOnZvaWQgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICosXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDMyLVx0XHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlYWQsIHVuc2lnbmVkIGxvbmcgbG9va2FoZWFkX2NvdW50KTtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9yZWFkYWhlYWQuaC0xMy1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3JlYWRhaGVhZC5oOjE0OlRSQUNFX0VWRU5UKHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvcmVhZGFoZWFkLmgtMTUtXHRUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LCB1bnNpZ25lZCBsb25nIG5yX3RvX3JlYWQsXG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNDg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMzU3LVx0XHRcdFx0ICogaW52YWxpZGF0ZV9sb2NrIGhlbGQgYWJvdmU7IGRvbiYjMzk7dCByZXRha2UgaXQuXG5tbS9raHVnZXBhZ2VkLmM6MjM1ODpcdFx0XHRcdCAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCksIHVubGlrZSB0aGUgcmVhZGFoZWFkXG5tbS9raHVnZXBhZ2VkLmMtMjM1OS1cdFx0XHRcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIzNjEtXHRcdFx0XHRpZiAoaW5kZXggXHUwMDNjIGVvZilcbm1tL2todWdlcGFnZWQuYzoyMzYyOlx0XHRcdFx0XHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcdTAwMjZyYWN0bCxcbm1tL2todWdlcGFnZWQuYy0yMzYzLVx0XHRcdFx0XHRcdG1pbihlbmQsIGVvZikgLSBpbmRleCwgMCk7XG4tLVxubW0vcmVhZGFoZWFkLmM9MTk1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnJhY3RsX2FsbG9jX2ZvbGlvKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4tLVxubW0vcmVhZGFoZWFkLmMtMjA3LS8qKlxubW0vcmVhZGFoZWFkLmM6MjA4OiAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkIC0gU3RhcnQgdW5jaGVja2VkIHJlYWRhaGVhZC5cbm1tL3JlYWRhaGVhZC5jLTIwOS0gKiBAcmFjdGw6IFJlYWRhaGVhZCBjb250cm9sLlxuLS1cbm1tL3JlYWRhaGVhZC5jLTIyMS0gKi9cbm1tL3JlYWRhaGVhZC5jOjIyMjp2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG5tbS9yZWFkYWhlYWQuYy0yMjMtXHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVhZCwgdW5zaWduZWQgbG9uZyBsb29rYWhlYWRfc2l6ZSlcbi0tXG5tbS9yZWFkYWhlYWQuYy0yNDQtXG5tbS9yZWFkYWhlYWQuYzoyNDU6XHR0cmFjZV9wYWdlX2NhY2hlX3JhX3VuYm91bmRlZChtYXBwaW5nLVx1MDAzZWhvc3QsIGluZGV4LCBucl90b19yZWFkLFxubW0vcmVhZGFoZWFkLmMtMjQ2LVx0XHRcdFx0ICAgICAgbG9va2FoZWFkX3NpemUpO1xuLS1cbm1tL3JlYWRhaGVhZC5jLTMxNy19XG5tbS9yZWFkYWhlYWQuYzozMTg6RVhQT1JUX1NZTUJPTF9HUEwocGFnZV9jYWNoZV9yYV91bmJvdW5kZWQpO1xubW0vcmVhZGFoZWFkLmMtMzE5LVxuLS1cbm1tL3JlYWRhaGVhZC5jPTMyNj1zdGF0aWMgdm9pZCBkb19wYWdlX2NhY2hlX3JhKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4tLVxubW0vcmVhZGFoZWFkLmMtMzQ3LVx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xubW0vcmVhZGFoZWFkLmM6MzQ4Olx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQocmFjdGwsIG5yX3RvX3JlYWQsIGxvb2thaGVhZF9zaXplKTtcbm1tL3JlYWRhaGVhZC5jLTM0OS1cdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuLS1cbm1tL3JlYWRhaGVhZC5jPTQ4MT12b2lkIHBhZ2VfY2FjaGVfcmFfb3JkZXIoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbi0tXG5tbS9yZWFkYWhlYWQuYy01MTQtXG5tbS9yZWFkYWhlYWQuYzo1MTU6XHQvKiBTZWUgY29tbWVudCBpbiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpICovXG5tbS9yZWFkYWhlYWQuYy01MTYtXHRub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTgzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIb3QgUGF0aHMgYW5kIFRhcmdldGVkIENvZGUqKgoKT2theSwgc28gYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBpcyBjbGVhcmx5IGEgZnVuY3Rpb24gdGhhdCBnZXRzIGhpdCAqYSBsb3QqIGR1cmluZyBmaWxlIHJlYWRzLiBgZG9fcGFnZV9jYWNoZV9yYWAgY2FsbHMgaXQsIHdoaWNoIG1lYW5zIGFueSBmaWxlIHJlYWRpbmcgdXNpbmcgdGhlIHBhZ2UgY2FjaGUsIGxpa2UgdGhlIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcmVhZGFoZWFkIHBhdGhzLCBhcmUgZ29pbmcgdG8gYmUgdG91Y2hpbmcgdGhpcyBmdW5jdGlvbi4gTm8gbmVlZCB0byBsaXN0IHRoZSBjb21tb24gZnVuY3Rpb25zIGFnYWluLgoKTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIHRoaXMgcGF0Y2gsIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBHaXZlbiB0aGUgY29udGV4dCwgSSB3YW50IHRvIGNvbmZpcm0gdGhlIHByaW1hcnkgdGFyZ2V0cyBvZiB0aGUgcGF0Y2ggYXJlIHdpdGhpbiB0aGUga2h1Z2VwYWdlZCBzdWJzeXN0ZW0uIExldCYjMzk7cyBzZWUuLi4gdGhlIG1vc3QgY3JpdGljYWwgZnVuY3Rpb24gaXMgYGNvbGxhcHNlX2ZpbGVgLCB3aGljaCBpcyBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLiBUaGUgaW1tZWRpYXRlIGNhbGxlcnMgYXJlIGdvaW5nIHRvIGJlIGBjb2xsYXBzZV9zY2FuX2ZpbGVgIGFuZCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAuIEFsc28sIHRoZXJlJiMzOTtzIGBtYWR2aXNlX2NvbGxhcHNlYCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGBNQURWX0NPTExBUFNFYC4KCk5vdywgYmVmb3JlIEkgZGlnIGludG8gc3BlY2lmaWNzLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBjYWxsZXJzIG9mIGBjb2xsYXBzZV9maWxlYC4gVGhpcyBpcyBjcnVjaWFsLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAyNzkwLTI4MTAgaW4gYG1tL2todWdlcGFnZWQuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGlyZWN0IGNhbGxzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc5MDpcdFx0aWYgKHJlc3VsdCA9PSBTQ0FOX1BURV9NQVBQRURfSFVHRVBBR0UpXG4yNzkxOlx0XHRcdGNjLVx1MDAzZXByb2dyZXNzJiM0MzsmIzQzOztcbjI3OTI6XHRcdGVsc2VcbjI3OTM6XHRcdFx0Y2MtXHUwMDNlcHJvZ3Jlc3MgJiM0Mzs9IEhQQUdFX1BNRF9OUjtcbjI3OTQ6XHRcbjI3OTU6XHRcdGlmIChyZXN1bHQgPT0gU0NBTl9TVUNDRUVEKSB7XG4yNzk2Olx0XHRcdGlmIChwcmVzZW50IFx1MDAzYyBIUEFHRV9QTURfTlIgLSBtYXhfcHRlc19ub25lKSB7XG4yNzk3Olx0XHRcdFx0cmVzdWx0ID0gU0NBTl9FWENFRURfTk9ORV9QVEU7XG4yNzk4Olx0XHRcdFx0Y291bnRfdm1fZXZlbnQoVEhQX1NDQU5fRVhDRUVEX05PTkVfUFRFKTtcbjI3OTk6XHRcdFx0fSBlbHNlIHtcbjI4MDA6XHRcdFx0XHRyZXN1bHQgPSBjb2xsYXBzZV9maWxlKG1tLCBhZGRyLCBmaWxlLCBzdGFydCwgY2MpO1xuMjgwMTpcdFx0XHR9XG4yODAyOlx0XHR9XG4yODAzOlx0XG4yODA0Olx0XHR0cmFjZV9tbV9raHVnZXBhZ2VkX3NjYW5fZmlsZShtbSwgZm9saW8sIGZpbGUsIHByZXNlbnQsIHN3YXAsIHJlc3VsdCk7XG4yODA1Olx0XHRyZXR1cm4gcmVzdWx0O1xuMjgwNjpcdH1cbjI4MDc6XHRcbjI4MDg6XHQvKlxuMjgwOTpcdCAqIFRyeSB0byBjb2xsYXBzZSBhIHNpbmdsZSBQTUQgc3RhcnRpbmcgYXQgYSBQTUQgYWxpZ25lZCBhZGRyLCBhbmQgcmV0dXJuXG4yODEwOlx0ICogdGhlIHJlc3VsdHMuXG4yODExOlx0ICovXG4yODEyOlx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4yODEzOlx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sICpsb2NrX2Ryb3BwZWQsXG4yODE0Olx0XHRcdHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcbjI4MTU6XHR7XG4yODE2Olx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cdTAwM2V2bV9tbTtcbjI4MTc6XHRcdGJvb2wgdHJpZ2dlcmVkX3diID0gZmFsc2U7XG4yODE4Olx0XHRlbnVtIHNjYW5fcmVzdWx0IHJlc3VsdDtcbjI4MTk6XHRcdHN0cnVjdCBmaWxlICpmaWxlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjE4MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gRmlsZS1CYWNrZWQgVEhQIENvbGxhcHNlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGNvZGUgbWVudGlvbnMgYGtodWdlcGFnZWRfc2Nhbl9maWxlYCwgYnV0IGhvbGQgb24sIGxpbmUgMjgwNCBzaG93cyBhIHRyYWNlcG9pbnQsIG5vdCB0aGUgYWN0dWFsIGZ1bmN0aW9uLiBUaGUgcmVhbCBmdW5jdGlvbiBuYW1lIGlzIGBjb2xsYXBzZV9zY2FuX2ZpbGVgLiBMZXQmIzM5O3Mgc2VlIHdobyYjMzk7cyBjYWxsaW5nICp0aGF0Ki4KCkEgcXVpY2sgY2hlY2sgc2hvd3MgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIG9uIGxpbmUgMjgzNS4gQW5kLCB0cmFjaW5nIGZ1cnRoZXIgYmFjaywgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGdldHMgY2FsbGVkIGZyb20gYm90aCBgY29sbGFwc2Vfc2Nhbl9tbV9zbG90YCBhbmQgYG1hZHZpc2VfY29sbGFwc2VgLiBJbnRlcmVzdGluZy4KCk5vdywgYXJlIGBraHVnZXBhZ2VkX2RvX3NjYW5gIG9yIGBraHVnZXBhZ2VkX3NjYW5fbW1fc2xvdGAgaW52b2x2ZWQgaGVyZT8gTG9va3MgbGlrZSBga2h1Z2VwYWdlZF9zY2FuX21tX3Nsb3RgIGlzIGNhbGxlZCBieSBga2h1Z2VwYWdlZF9kb19zY2FuYCB3aXRoaW4gdGhhdCBiYWNrZ3JvdW5kIHRocmVhZC4gQW5kLCBjcnVjaWFsbHksIGBtYWR2aXNlX2NvbGxhcHNlYCBoYW5kbGVzIHRoZSBgbWFkdmlzZShNQURWX0NPTExBUFNFKWAgdXNlcnNwYWNlIGNhbGwuIEdvdCBpdC4KCkxldCYjMzk7cyBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3MgdG8gc2VlIHdoYXQmIzM5O3MgbmVlZGVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuIEhlYWQgdG8gYG1tL0tjb25maWdgLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSB0b3AtbGV2ZWwgb3B0aW9uLCBvZiBjb3Vyc2UuIEFueSBkZXBlbmRlbmNpZXM/IEFoLCBgZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgJmFtcDsmYW1wOyAhUFJFRU1QVF9SVGAuIE9uIG91ciBhbWQ2NCB0YXJnZXQsIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgZm9yIGZpbGUtYmFja2VkIFRIUCBjb2xsYXBzZT8gTGV0IG1lIGNoZWNrIGZvciB0aGluZ3MgbGlrZSBgUkVBRF9BSEVBRGAsIGBSRUFEQUhFQURgLCBvciBgRklMRV9USFBgIGluIGBtbS9LY29uZmlnYCBvciBldmVuIGBmcy9LY29uZmlnYC4gVGltZSB0byBkbyBzb21lIGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UkVBREFIRUFEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTg2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgRGVlcCBpbnRvIGBraHVnZXBhZ2VkLmNgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGludG8gYGtodWdlcGFnZWQuY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCYjMzk7cyBiZWhhdmluZyB3aXRoIHJlc3BlY3QgdG8gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbnMsIGFuZCBJIGhhdmUgYSBmZWVsaW5nIHdlJiMzOTtyZSBnb2luZyB0byBzZWUgc29tZSBtb3JlIENPTkZJRyBkZWZpbmVzIGluIHRoZXJlLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIHdlJiMzOTtyZSB0cm91Ymxlc2hvb3RpbmcuIExldCYjMzk7cyBzdGFydCB3aXRoIGBraHVnZXBhZ2VkLmNgIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSB3YW50IHRvIG1ha2UgY2VydGFpbiBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBjb2RlJiMzOTtzIGNvbmRpdGlvbmFsIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0xMzY9c3RhdGljIHN0cnVjdCBraHVnZXBhZ2VkX3NjYW4ga2h1Z2VwYWdlZF9zY2FuID0ge1xuLS1cbm1tL2todWdlcGFnZWQuYy0xMzktXG5tbS9raHVnZXBhZ2VkLmM6MTQwOiNpZmRlZiBDT05GSUdfU1lTRlNcbm1tL2todWdlcGFnZWQuYy0xNDEtc3RhdGljIHNzaXplX3Qgc2Nhbl9zbGVlcF9taWxsaXNlY3Nfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MzQ1PXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAga2h1Z2VwYWdlZF9hdHRyX2dyb3VwID0ge1xuLS1cbm1tL2todWdlcGFnZWQuYy0zNDgtfTtcbm1tL2todWdlcGFnZWQuYzozNDk6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xubW0va2h1Z2VwYWdlZC5jLTM1MC1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTAzMz1zdGF0aWMgaW5saW5lIGdmcF90IGFsbG9jX2h1Z2VwYWdlX2todWdlcGFnZWRfZ2ZwbWFzayh2b2lkKVxuLS1cbm1tL2todWdlcGFnZWQuYy0xMDM3LVxubW0va2h1Z2VwYWdlZC5jOjEwMzg6I2lmZGVmIENPTkZJR19OVU1BXG5tbS9raHVnZXBhZ2VkLmMtMTAzOS1zdGF0aWMgaW50IGNvbGxhcHNlX2ZpbmRfdGFyZ2V0X25vZGUoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQ5MQoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiA1MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2Yga2h1Z2VwYWdlZC5jIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgYGtodWdlcGFnZWQuY2AgZmlsZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSYjMzk7dmUgcmVhbGl6ZWQgdGhhdCB0aGUgY29kZSBvbmx5IGRlcGVuZHMgaW50ZXJuYWxseSBvbiBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCwgYnV0IHRoZXNlIGRvbiYjMzk7dCBzZWVtIHRvIGd1YXJkIHRoZSBgY29sbGFwc2VfZmlsZWAgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGBtbS9NYWtlZmlsZWAsIGl0JiMzOTtzIGNsZWFyIHRoYXQgYGtodWdlcGFnZWQub2AgZ2V0cyBidWlsdCBvbmx5IGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3Mgb3VyIHByaW1hcnkgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudCB0aGVuLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBgRm9jdXNTeW1ib2xzYC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQ6IGBjb2xsYXBzZV9maWxlYCwgYGNvbGxhcHNlX3NjYW5fZmlsZWAsIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGxhcHNlYC4gQXJlIHRoZXNlIHN5bWJvbHMgc3BlY2lmaWMgZW5vdWdoIHRvIHdhcnJhbnQgYXR0ZW50aW9uPyBBYnNvbHV0ZWx5LiBgY29sbGFwc2VfZmlsZWAgaXMgaGlnaGx5IHNwZWNpZmljIGFuZCB3YXMgZGlyZWN0bHkgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBgY29sbGFwc2Vfc2Nhbl9maWxlYCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGFyZSBhbHNvIHZlcnkgdGFyZ2V0ZWQsIGFzIHRoZWlyIGNhbGxlcnMgYXJlIGxpbWl0ZWQgdG8gdGhlIGBraHVnZXBhZ2VkLmNgIG1vZHVsZS4gVGhlbiwgYG1hZHZpc2VfY29sbGFwc2VgIGlzIGEgY2xlYXJseSBkZWZpbmVkIGVudHJ5IHBvaW50IGZvciB0aGUgYE1BRFZfQ09MTEFQU0VgIG9wZXJhdGlvbi4KCk5vbmUgb2YgdGhlc2UgYXJlIGdlbmVyaWMgb3IgYWxsLW92ZXItdGhlLXBsYWNlIGxpa2UgeW91ciBjb21tb24gYGttYWxsb2NgIGNhbGxzLCBwYWdlIGZhdWx0IGhhbmRsZXJzIG9yIGxvY2tzLiBUaGV5IGFsbCBleGVjdXRlIG9ubHkgZHVyaW5nIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBjb2xsYXBzZSwgZWl0aGVyIHRocm91Z2ggdGhlIGBNQURWX0NPTExBUFNFYCBzeXNjYWxsIG9yIHRoZSBga2h1Z2VwYWdlZGAgZGFlbW9uLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIGZ1enppbmcgcmVhc29uaW5nIGFuZCBjb25maWcuIEl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIG1vZGlmaWVzIGBjb2xsYXBzZV9maWxlYCB0byBhY3F1aXJlIGBtYXBwaW5nLSZndDtpbnZhbGlkYXRlX2xvY2tgIGVhcmxpZXIgYW5kIGhvbGQgaXQgdGhyb3VnaG91dCB0aGUgY29sbGFwc2UgcHJvY2Vzcy4gVGhpcyBjaGFuZ2VzIHRoZSBsb2NraW5nIG9yZGVyIGFuZCBmaWxlIHJlYWQgYWhlYWQgYmVoYXZpb3IuIEJlY2F1c2Ugb2YgdGhpcyBsb2NraW5nIG1vZGlmaWNhdGlvbiwgcGx1cyB0aGUgcmVwbGFjZW1lbnQgb2YgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKWAgd2l0aCBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKWAsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbiYjMzk7dCBoYXZlIGxvY2sgaW52ZXJzaW9ucywgZGVhZGxvY2tzLCByYWNlcyB3aXRoIHRydW5jYXRlL2ludmFsaWRhdGlvbiwgb3IgdW5leHBlY3RlZCBlcnJvcnMhIFRoZSBlbmFibGluZyBjb25maWcgaXMganVzdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgbXkgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFyIHRvby4gQWxsIGNoZWNrcyBhcmUgZ3JlZW4uIFRpbWUgdG8gY2FsbCBpdCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29sbGFwc2VfZmlsZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9zY2FuX2ZpbGUmIzM0OywKICAgICYjMzQ7Y29sbGFwc2Vfc2luZ2xlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbGxhcHNlX2ZpbGUoKSBpbiBtbS9raHVnZXBhZ2VkLmMgdG8gYWNxdWlyZSBtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayBlYXJsaWVyIChwcmlvciB0byBsb2NraW5nIGZvbGlvcykgYW5kIGhvbGQgaXQgc2hhcmVkIHRocm91Z2hvdXQgdGhlIGNvbGxhcHNlIG9wZXJhdGlvbiwgcmVwbGFjaW5nIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB3aXRoIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWx0ZXIgbG9ja2luZyBoaWVyYXJjaGllcywgY29uY3VycmVuY3ksIGFuZCByZWFkYWhlYWQgYmVoYXZpb3IgZHVyaW5nIFRIUCBmaWxlIGNvbGxhcHNlIChyZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3Iga2h1Z2VwYWdlZCBzY2FubmluZykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24sIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi9pbnZhbGlkYXRpb24sIGFuZCByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29sbGFwc2VfZmlsZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9zY2FuX2ZpbGUmIzM0OywKICAgICYjMzQ7Y29sbGFwc2Vfc2luZ2xlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbGxhcHNlX2ZpbGUoKSBpbiBtbS9raHVnZXBhZ2VkLmMgdG8gYWNxdWlyZSBtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayBlYXJsaWVyIChwcmlvciB0byBsb2NraW5nIGZvbGlvcykgYW5kIGhvbGQgaXQgc2hhcmVkIHRocm91Z2hvdXQgdGhlIGNvbGxhcHNlIG9wZXJhdGlvbiwgcmVwbGFjaW5nIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB3aXRoIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWx0ZXIgbG9ja2luZyBoaWVyYXJjaGllcywgY29uY3VycmVuY3ksIGFuZCByZWFkYWhlYWQgYmVoYXZpb3IgZHVyaW5nIFRIUCBmaWxlIGNvbGxhcHNlIChyZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3Iga2h1Z2VwYWdlZCBzY2FubmluZykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24sIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi9pbnZhbGlkYXRpb24sIGFuZCByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgY29sbGFwc2VfZmlsZSgpYCBpbiBgbW0va2h1Z2VwYWdlZC5jYCB0byBwcmV2ZW50IGEgbG9ja2luZyBkZWFkbG9jayBiZXR3ZWVuIGBtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9ja2AgYW5kIGZvbGlvIGxvY2tzIChlLmcuIGR1cmluZyBjb25jdXJyZW50IHRydW5jYXRpb24pLiBJdCB0YWtlcyBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYCBwcmlvciB0byBmb2xpbyBsb2NraW5nIGFuZCBkaXJlY3RseSBpbnZva2VzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpYCBpbnN0ZWFkIG9mIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgLlxuXG4tIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlcyAoYG5lZWRfdW5sb2NrYCwgYHJhY3RsYCwgYGVvZmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZDogYG5lZWRfdW5sb2NrYCBpcyBpbml0aWFsaXplZCB0byBgZmFsc2VgLCBhbmQgYHJhY3RsYCBpcyBpbml0aWFsaXplZCB2aWEgYERFRklORV9SRUFEQUhFQUQoKWAsIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgYWxsIHVuc3BlY2lmaWVkIHN0cnVjdHVyZSBmaWVsZHMgcGVyIEMgZGVzaWduYXRlZCBpbml0aWFsaXplciBzZW1hbnRpY3MuXG4tIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbHRlciBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgaW9jdGxzLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZC5cbi0gTG9ja2luZyBjb3JyZWN0bmVzcyBhbmQgZGVhZGxvY2tzIGFkZHJlc3NlZCBoZXJlIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBjb25maWdzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJhMjBhOWU4NWMzZmFkMWVjOWRlNmI4MzJjNzBiNGNlYjlhMGFjNWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAxNzowNzozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuYwppbmRleCAxMWZmOThkNTVjNzZlLi5hNWZjYWZkNTc1MDU2IDEwMDY0NAotLS0gYS9tbS9raHVnZXBhZ2VkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va2h1Z2VwYWdlZC5jCkBAIC0yMjU3LDYgJiM0MzsyMjU3LDcgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCWVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0ID0gU0NBTl9TVUNDRUVEOwogCWludCBucl9ub25lID0gMDsKIAlib29sIGlzX3NobWVtID0gc2htZW1fZmlsZShmaWxlKTsKJiM0MzsJYm9vbCBuZWVkX3VubG9jayA9IGZhbHNlOwogCiAJLyoKIAkgKiBNQURWX0NPTExBUFNFIGlnbm9yZXMgc2htZW0gaHVnZSBjb25maWcsIHNvIGRvIG5vdCBjaGVjayBzaG1lbQpAQCAtMjI3MSw2ICYjNDM7MjI3MiwxNSBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpCiAJCWdvdG8gb3V0OwogCiYjNDM7CS8qCiYjNDM7CSAqIFRha2UgaW52YWxpZGF0ZV9sb2NrIGJlZm9yZSBhbnkgZm9saW8gbG9jazogdGhlIHJlYWRhaGVhZCBiZWxvdwomIzQzOwkgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWlzX3NobWVtKSB7CiYjNDM7CQlmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7CiYjNDM7CQluZWVkX3VubG9jayA9IHRydWU7CiYjNDM7CX0KJiM0MzsKIAltYXBwaW5nX3NldF91cGRhdGUoJmFtcDt4YXMsIG1hcHBpbmcpOwogCiAJX19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7CkBAIC0yMzM3LDEwICYjNDM7MjM0NywyMCBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQl9CiAJCX0gZWxzZSB7CS8qICFpc19zaG1lbSAqLwogCQkJaWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpIHsKJiM0MzsJCQkJREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgJmFtcDtmaWxlLSZndDtmX3JhLAomIzQzOwkJCQkJCSAgbWFwcGluZywgaW5kZXgpOwomIzQzOwkJCQlwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLSZndDtob3N0KSwKJiM0MzsJCQkJCQkJICAgIFBBR0VfU0laRSk7CiYjNDM7CiAJCQkJeGFzX3VubG9ja19pcnEoJmFtcDt4YXMpOwotCQkJCXBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgJmFtcDtmaWxlLSZndDtmX3JhLAotCQkJCQkJCSAgZmlsZSwgaW5kZXgsCi0JCQkJCQkJICBlbmQgLSBpbmRleCk7CiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LgomIzQzOwkJCQkgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZAomIzQzOwkJCQkgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJaWYgKGluZGV4ICZsdDsgZW9mKQomIzQzOwkJCQkJcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoJmFtcDtyYWN0bCwKJiM0MzsJCQkJCQltaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApOwogCQkJCS8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi8KIAkJCQlscnVfYWRkX2RyYWluKCk7CiAJCQkJZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpOwpAQCAtMjY3Miw2ICYjNDM7MjY5Miw4IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlmb2xpb191bmxvY2sobmV3X2ZvbGlvKTsKIAlmb2xpb19wdXQobmV3X2ZvbGlvKTsKIG91dDoKJiM0MzsJaWYgKG5lZWRfdW5sb2NrKQomIzQzOwkJZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7CiAJVk1fQlVHX09OKCFsaXN0X2VtcHR5KCZhbXA7cGFnZWxpc3QpKTsKIAl0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb246IFBhdGNoIGluIGBtbS9raHVnZXBhZ2VkLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgcGF0Y2ggZm9yIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgdXNlciBpcyBhc2tpbmcgd2hldGhlciB0aGlzIGNoYW5nZSBuZWNlc3NpdGF0ZXMgZ29pbmcgYmV5b25kIG91ciBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGNvdmVyYWdlLiBNeSBqb2IgaXMgdG8gYXNzZXNzIGlmIHRoZXJlJiMzOTtzIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgS01TQU4gd291bGQgc3BlY2lmaWNhbGx5IGNhdGNoLgoKRmlyc3QsIEkgbmVlZCB0byBrZWVwIHRoZSBydWxlcyBmcm9udCBhbmQgY2VudGVyOiBLQVNBTiBjb3ZlcnMgT09CLCBVQUYsIGV0Yy47IExPQ0tERVAgaGFuZGxlcyBsb2NraW5nIGlzc3VlczsgVUIgc2FuaXRpemVycyBsb29rIGF0IHVuZGVmaW5lZCBiZWhhdmlvcjsgYW5kIEtNU0FOJiMzOTtzIHNwZWNpYWx0eSBpcyBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGJvdGggb24gdGhlIHN0YWNrLCBoZWFwLCBhbmQgcGFnZSBhbGxvY2F0aW9ucywgYW5kIGFueSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuIENydWNpYWxseSwgSSYjMzk7bSAqbm90KiBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgIGlmIEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBzdGFuZGFyZCB0b29scyB3b3VsZCBhbHJlYWR5IGZpbmQgdGhlIGJ1Zy4KCkkgbmVlZCB0byBmbGFnIGBOZWVkc0tNU0FOPXRydWVgIGlmIHRoZSBwYXRjaCB0b3VjaGVzIGFueSBvZiB0aGVzZToKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMvcGFkZGluZyBtaWdodCBiZSB1bmluaXRpYWxpemVkLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLgo0LiAgQm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHdoaWNoIG1pZ2h0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzLgoKQ29udmVyc2VseSwgSSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGlmOgoqICAgVGhlIGNvZGUgY2hhbmdlcyByaXNrIG91dC1vZi1ib3VuZHMsIG92ZXJmbG93cywgTlVMTCBkZXJlZmVyZW5jZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKEtBU0FOIGhhbmRsZXMgdGhlc2UpLgoqICAgQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkL2luaXRpYWxpemVkIGJlZm9yZSB1c2UuCiogICBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLiBJdCYjMzk7cyBpbiBgY29sbGFwc2VfZmlsZSgpYCB3aXRoaW4gdGhlIGtodWdlcGFnZWQgbW9kdWxlLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGxvY2tpbmcgYW5kIHJlYWRhaGVhZCBvcGVyYXRpb25zLiBBIG5ldyBgbmVlZF91bmxvY2tgIHZhcmlhYmxlIGlzIGludHJvZHVjZWQsIGFuZCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgbm93IHRha2VzIGBpbnZhbGlkYXRlX2xvY2tgIGJlZm9yZSBhbnkgZm9saW8gbG9jaywgd2hpY2ggaXMgdGhlbiB1bmxvY2tlZCBhdCB0aGUgZW5kLiBUaGUgY2hhbmdlIGludHJvZHVjZXMgYSBgREVGSU5FX1JFQURBSEVBRGAgbWFjcm8gYW5kIHNvbWUgbG9naWMgaW52b2x2aW5nIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpYCwgcmVwbGFjaW5nIGFuIG9sZGVyIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgLgoKSSBuZWVkIHRvIHJlYWQgdGhpcyBtYWNybyBhbmQgdGhlIGNhbGxzIGl0IG1ha2VzIHRvIGdldCB0byB0aGUgdHJ1dGggb2YgdGhpcy4gQmFzZWQgb24gbXkgcXVpY2sgc2NhbiwgdGhlIGNvZGUgaXMgdG91Y2hpbmcgdGhlIGZpbGUgbWFwcGluZyBhbmQgZm9saW9zLCB3aGljaCBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlmIHRoZSBzdHJ1Y3R1cmVzIGFuZCBwYWdlcyBhcmUgbm90IHNldCBjb3JyZWN0bHkuIFRoZSByZWFkYWhlYWQgbG9naWMgYW5kIHRoZSBsb2NraW5nIGNoYW5nZSBhcmUgdGhlIGhvdCBzcG90cyBJIG5lZWQgdG8gdmVyaWZ5LiBJIHdpbGwgbG9vayB1cCBgREVGSU5FX1JFQURBSEVBRGAgdG8gdmVyaWZ5LiBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gdG8gc2VlIHdoYXQgdGhlIHJlYWRhaGVhZCBsb2dpYyBpcyBkb2luZyBhbmQgd2hhdCBkYXRhIGl0JiMzOTtzIHRvdWNoaW5nLiBJcyB0aGVyZSBhbnkgY2hhbmNlIHRoYXQgdGhlIHBhdGNoIGFsbG93cyB1bmluaXRpYWxpemVkIGRhdGEgdG8gbGVhayB0byB1c2VyIHNwYWNlPyBJIHN1c3BlY3QgdGhhdCBiYXNlZCBvbiBteSBxdWljayByZWFkIHRoZSByaXNrIGlzIGxvdywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBERUZJTkVfUkVBREFIRUFEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZW1hcC5oPTE0MDg9c3RydWN0IHJlYWRhaGVhZF9jb250cm9sIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDIwLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTQyMTojZGVmaW5lIERFRklORV9SRUFEQUhFQUQocmFjdGwsIGYsIHIsIG0sIGkpXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQyMi1cdHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCByYWN0bCA9IHtcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgUmVhZGFoZWFkIE1hY3JvKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYERFRklORV9SRUFEQUhFQURgIGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJJiMzOTt2ZSBiZWVuIHdvcmtpbmcgd2l0aCBwYWdlIGNhY2hpbmcgYW5kIHJlYWRhaGVhZCByZWNlbnRseSwgYW5kIHRoZXJlJiMzOTtzIGEgcGFydGljdWxhciBhc3BlY3QgdGhhdCBJIHdhbnQgdG8gcmV2aWV3LiBJdCBsb29rcyBsaWtlIGxpbmUgMTQyMCBvZiBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgIGlzIHdoZXJlIHRoZSByZWxldmFudCBkZWZpbml0aW9uIHNob3VsZCBiZS4gTGV0JiMzOTtzIHB1bGwgdGhhdCBmaWxlIHVwIGFuZCBnZXQgYSBjbG9zZXIgbG9vayBhdCB3aGF0IHRoZSBtYWNybyBpcyBkb2luZyB1bmRlciB0aGUgaG9vZCwgSSYjMzk7bSBzdXJlIEkmIzM5O2xsIHJlY2FsbCBxdWlja2x5IG9uY2UgSSBoYXZlIHRoZSBzb3VyY2UgaW4gZnJvbnQgb2YgbWUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGluc2lnaHQgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZW1hcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDEwOlx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbjE0MTE6XHRcdHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYTtcbjE0MTI6XHQvKiBwcml2YXRlOiB1c2UgdGhlIHJlYWRhaGVhZF8qIGFjY2Vzc29ycyBpbnN0ZWFkICovXG4xNDEzOlx0XHRwZ29mZl90IF9pbmRleDtcbjE0MTQ6XHRcdHVuc2lnbmVkIGludCBfbnJfcGFnZXM7XG4xNDE1Olx0XHR1bnNpZ25lZCBpbnQgX2JhdGNoX2NvdW50O1xuMTQxNjpcdFx0Ym9vbCBkcm9wYmVoaW5kO1xuMTQxNzpcdFx0Ym9vbCBfd29ya2luZ3NldDtcbjE0MTg6XHRcdHVuc2lnbmVkIGxvbmcgX3BmbGFncztcbjE0MTk6XHR9O1xuMTQyMDpcdFxuMTQyMTpcdCNkZWZpbmUgREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZiwgciwgbSwgaSlcdFx0XHRcdFxcXG4xNDIyOlx0XHRzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgcmFjdGwgPSB7XHRcdFx0XHRcXFxuMTQyMzpcdFx0XHQuZmlsZSA9IGYsXHRcdFx0XHRcdFx0XFxcbjE0MjQ6XHRcdFx0Lm1hcHBpbmcgPSBtLFx0XHRcdFx0XHRcdFxcXG4xNDI1Olx0XHRcdC5yYSA9IHIsXHRcdFx0XHRcdFx0XFxcbjE0MjY6XHRcdFx0Ll9pbmRleCA9IGksXHRcdFx0XHRcdFx0XFxcbjE0Mjc6XHRcdH1cbjE0Mjg6XHRcbjE0Mjk6XHQjZGVmaW5lIFZNX1JFQURBSEVBRF9QQUdFU1x0KFNaXzEyOEsgLyBQQUdFX1NJWkUpXG4xNDMwOlx0XG4xNDMxOlx0dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKixcbjE0MzI6XHRcdFx0dW5zaWduZWQgbG9uZyBucl90b19yZWFkLCB1bnNpZ25lZCBsb25nIGxvb2thaGVhZF9jb3VudCk7XG4xNDMzOlx0dm9pZCBwYWdlX2NhY2hlX3N5bmNfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICosIHVuc2lnbmVkIGxvbmcgcmVxX2NvdW50KTtcbjE0MzQ6XHR2b2lkIHBhZ2VfY2FjaGVfYXN5bmNfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICosIHN0cnVjdCBmb2xpbyAqLFxuMTQzNTpcdFx0XHR1bnNpZ25lZCBsb25nIHJlcV9jb3VudCk7XG4xNDM2Olx0dm9pZCByZWFkYWhlYWRfZXhwYW5kKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4xNDM3Olx0XHRcdCAgICAgIGxvZmZfdCBuZXdfc3RhcnQsIHNpemVfdCBuZXdfbGVuKTtcbjE0Mzg6XHRcbjE0Mzk6XHQvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ1NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHJhY3RsYCBJbml0aWFsaXphdGlvbiBhbmQgS2h1Z2VwYWdlZCoqCgpPa2F5LCBzbyBgREVGSU5FX1JFQURBSEVBRGAgaXMgc2V0dGluZyB1cCBgcmFjdGxgLiBUaGUga2V5IGhlcmUgaXMgdGhlIGluaXRpYWxpemVycy4gQnkgZGVzaWduLCBhbnkgZmllbGRzIEkgZG9uJiMzOTt0IGV4cGxpY2l0bHkgc3BlY2lmeSBnZXQgemVyb2VkIG91dCwgdGhhbmtzIHRvIEMgc2VtYW50aWNzLiBUaGF0IGdpdmVzIG1lIGEgY2xlYW4gc3RhcnRpbmcgcG9pbnQuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgcmVhbCB3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgY29sbGFwc2VfZmlsZWAgd2l0aGluIHRoZSBjb250ZXh0IG9mIGtodWdlcGFnZWQuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIGFyb3VuZCBsaW5lcyAyMjUwIHRvIDI3MDAgaW4gYG1tL2todWdlcGFnZWQuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0LCB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBsb29rIHRvIGZpbmQgdGhlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBmaWxlIGNvbGxhcHNpbmcgd29ya3Mgd2l0aGluIGtodWdlcGFnZWQuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjUwOlx0e1xuMjI1MTpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbjIyNTI6XHRcdHN0cnVjdCBwYWdlICpkc3Q7XG4yMjUzOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqdG1wLCAqbmV3X2ZvbGlvO1xuMjI1NDpcdFx0cGdvZmZfdCBpbmRleCA9IDAsIGVuZCA9IHN0YXJ0ICYjNDM7IEhQQUdFX1BNRF9OUjtcbjIyNTU6XHRcdExJU1RfSEVBRChwYWdlbGlzdCk7XG4yMjU2Olx0XHRYQV9TVEFURV9PUkRFUih4YXMsIFx1MDAyNm1hcHBpbmctXHUwMDNlaV9wYWdlcywgc3RhcnQsIEhQQUdFX1BNRF9PUkRFUik7XG4yMjU3Olx0XHRlbnVtIHNjYW5fcmVzdWx0IHJlc3VsdCA9IFNDQU5fU1VDQ0VFRDtcbjIyNTg6XHRcdGludCBucl9ub25lID0gMDtcbjIyNTk6XHRcdGJvb2wgaXNfc2htZW0gPSBzaG1lbV9maWxlKGZpbGUpO1xuMjI2MDpcdFx0Ym9vbCBuZWVkX3VubG9jayA9IGZhbHNlO1xuMjI2MTpcdFxuMjI2MjpcdFx0LypcbjIyNjM6XHRcdCAqIE1BRFZfQ09MTEFQU0UgaWdub3JlcyBzaG1lbSBodWdlIGNvbmZpZywgc28gZG8gbm90IGNoZWNrIHNobWVtXG4yMjY0Olx0XHQgKlxuMjI2NTpcdFx0ICogVE9ETzogb25jZSBzaG1lbSBhbHdheXMgY2FsbHMgbWFwcGluZ19zZXRfbGFyZ2VfZm9saW9zKCkgb24gaXRzXG4yMjY2Olx0XHQgKiBtYXBwaW5nLCB0aGUgc2htZW0gY2hlY2sgY2FuIGJlIHJlbW92ZWQuXG4yMjY3Olx0XHQgKi9cbjIyNjg6XHRcdFZNX1dBUk5fT05fT05DRSghaXNfc2htZW0gXHUwMDI2XHUwMDI2ICFtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KG1hcHBpbmcpKTtcbjIyNjk6XHRcdFZNX1dBUk5fT05fT05DRShzdGFydCBcdTAwMjYgKEhQQUdFX1BNRF9OUiAtIDEpKTtcbjIyNzA6XHRcbjIyNzE6XHRcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcdTAwMjZuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTtcbjIyNzI6XHRcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxuMjI3MzpcdFx0XHRnb3RvIG91dDtcbjIyNzQ6XHRcbjIyNzU6XHRcdC8qXG4yMjc2Olx0XHQgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3dcbjIyNzc6XHRcdCAqIG5lZWRzIGl0LCBhbmQgdHJ1bmNhdGUgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy5cbjIyNzg6XHRcdCAqL1xuMjI3OTpcdFx0aWYgKCFpc19zaG1lbSkge1xuMjI4MDpcdFx0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG4yMjgxOlx0XHRcdG5lZWRfdW5sb2NrID0gdHJ1ZTtcbjIyODI6XHRcdH1cbjIyODM6XHRcbjIyODQ6XHRcdG1hcHBpbmdfc2V0X3VwZGF0ZShcdTAwMjZ4YXMsIG1hcHBpbmcpO1xuMjI4NTpcdFxuMjI4NjpcdFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XG4yMjg3Olx0XHRpZiAoaXNfc2htZW0pXG4yMjg4Olx0XHRcdF9fZm9saW9fc2V0X3N3YXBiYWNrZWQobmV3X2ZvbGlvKTtcbjIyODk6XHRcdG5ld19mb2xpby1cdTAwM2VpbmRleCA9IHN0YXJ0O1xuMjI5MDpcdFx0bmV3X2ZvbGlvLVx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xuMjI5MTpcdFxuMjI5MjpcdFx0LypcbjIyOTM6XHRcdCAqIEVuc3VyZSB3ZSBoYXZlIHNsb3RzIGZvciBhbGwgdGhlIHBhZ2VzIGluIHRoZSByYW5nZS4gIFRoaXMgaXNcbjIyOTQ6XHRcdCAqIGFsbW9zdCBjZXJ0YWlubHkgYSBuby1vcCBiZWNhdXNlIG1vc3Qgb2YgdGhlIHBhZ2VzIG11c3QgYmUgcHJlc2VudFxuMjI5NTpcdFx0ICovXG4yMjk2Olx0XHRkbyB7XG4yMjk3Olx0XHRcdHhhc19sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjI5ODpcdFx0XHR4YXNfY3JlYXRlX3JhbmdlKFx1MDAyNnhhcyk7XG4yMjk5Olx0XHRcdGlmICgheGFzX2Vycm9yKFx1MDAyNnhhcykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUgc25pcHBldC4KCioqQW5hbHl6aW5nIHRoZSBSZWFkLUFoZWFkIFN0cmF0ZWd5IENvbXBhcmlzb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyByZWFkLWFoZWFkIGxvZ2ljIGJldHRlci4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZGVsdGEgYmV0d2VlbiBjYWxscyB0byBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAgYW5kIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAuIEkgd2FudCB0byBpZGVudGlmeSAqZXhhY3RseSogd2hhdCBkaWZmZXJlbnRpYXRlcyB0aGVpciBiZWhhdmlvcnMuIE15IHRoaW5raW5nIGlzIHRoYXQgYnkgdW5kZXJzdGFuZGluZyB0aGUgY29udHJhc3RpbmcgbG9naWMgaW4gdGhlc2UgZnVuY3Rpb25zLCBJIGNhbiB0aGVuIGJldHRlciB1bmRlcnN0YW5kIHRoZSBpbnRlbnRpb24gb2YgdGhlIGNvZGUuIFNvLCBmaXJzdCwgSSBuZWVkIGEgcHJlY2lzZSBkZWZpbml0aW9uIG9mIHRoZWlyIGluZGl2aWR1YWwgZnVuY3Rpb25hbGl0eS4gTGV0IG1lIHB1bGwgdXAgdGhlIGRlZmluaXRpb25zIGZvciBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAgYW5kIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgcmlnaHQgbm93LiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZXkgaGFuZGxlIHN5bmNocm9ub3VzIHZlcnN1cyBhc3luY2hyb25vdXMgcmVhZHMsIHRoZSBhbW91bnQgb2YgZGF0YSB0aGV5IHByZWZldGNoLCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggb25lIGlzIGNob3NlbiBvdmVyIHRoZSBvdGhlci4gVGhpcyBpcyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIHRoZSByZWFkIHBhdGgsIGVzcGVjaWFsbHkgdW5kZXIgdmFyeWluZyBJL08gbG9hZC4gVGhpcyBkaXJlY3QgY29tcGFyaXNvbiBpcyB0aGUga2V5IHRvIHNwb3R0aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODU5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNrIGRvd24gaW5zdGFuY2VzIG9mIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBzZWFyY2g7IEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBpdCBtZXRob2RpY2FsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyB1c2FnZSwgaXRzIGNvbnRleHQsIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIHVzZSBhIHJvYnVzdCBzZWFyY2ggdG9vbCDigJMgc29tZXRoaW5nIHRoYXQgY2FuIGhhbmRsZSBhIGxhcmdlIHByb2plY3QgYW5kIG9mZmVycyBnb29kIGNyb3NzLXJlZmVyZW5jaW5nIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHdoZXJlIHRoaXMgbGlrZWx5IHNpdHM6IGtlcm5lbCBjb3JlPyBmaWxlc3lzdGVtIGRyaXZlcnM/IGRldmljZSBkcml2ZXJzPyBvciBtYXliZSBldmVuIGluIHNvbWUgb2JzY3VyZSBuZXR3b3JrIHN1YnN5c3RlbSBjb2RlPyBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGNvZGViYXNlLCB0aGlzIG1pZ2h0IHRha2UgYSBiaXQgb2YgdGltZSwgc28gSSYjMzk7bGwgbmVlZCB0byBidWRnZXQgYWNjb3JkaW5nbHkuIE9uY2UgSSBoYXZlIHRoZSByZXN1bHRzLCBJJiMzOTtsbCBmaWx0ZXIgZm9yIGJvdGggZGlyZWN0IGNhbGxzIGFuZCBhbnkgaW5kaXJlY3QgdXNhZ2UgdmlhIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgdXNlIGNhc2VzOyB0aGlzIG1pZ2h0IGJlIGEga2V5IGZ1bmN0aW9uLCBidXQgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgZnVuY3Rpb24gc2lnbmF0dXJlLCBqdXN0IGluIGNhc2UgdGhlcmUgYXJlIHZhcmlhdGlvbnMgb3Igc3BlY2lmaWMgaW5jbHVkZXMgdGhhdCBhcmUgcmVsZXZhbnQuIEFmdGVyIEkmIzM5O3ZlIGNvbXBpbGVkIG15IGhpdCBsaXN0LCBJJiMzOTtsbCBsb29rIGludG8gcmV2aWV3aW5nIGVhY2ggbG9jYXRpb24gdG8gcHJvcGVybHkgdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyBzZWFyY2ggaXMgdGhlIG5lY2Vzc2FyeSBmaXJzdCBzdGVwLCBidXQgaXQmIzM5O3Mgb25seSB0aGUgc3RhcnQgb2Ygd2hhdCBuZWVkcyB0byBiZSBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J0cmZzL2RlZnJhZy5jPTEyNjE9c3RhdGljIGludCBkZWZyYWdfb25lX2NsdXN0ZXIoc3RydWN0IGJ0cmZzX2lub2RlICppbm9kZSxcbi0tXG5mcy9idHJmcy9kZWZyYWcuYy0xMzAyLVxuZnMvYnRyZnMvZGVmcmFnLmM6MTMwMzpcdFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChpbm9kZS1cdTAwM2V2ZnNfaW5vZGUuaV9tYXBwaW5nLFxuZnMvYnRyZnMvZGVmcmFnLmMtMTMwNC1cdFx0XHRcdHJhLCBOVUxMLCBlbnRyeS1cdTAwM2VzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbi0tXG5mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmM9MzY3PXN0YXRpYyB2b2lkIHJlYWRhaGVhZF9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYy0zNzQtXG5mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmM6Mzc1Olx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChpbm9kZS1cdTAwM2VpX21hcHBpbmcsIFx1MDAyNnJhLCBOVUxMLCAwLCBsYXN0X2luZGV4KTtcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYy0zNzYtfVxuLS1cbmZzL2J0cmZzL3JlbG9jYXRpb24uYz0yOTAzPXN0YXRpYyBpbnQgcmVsb2NhdGVfb25lX2ZvbGlvKHN0cnVjdCByZWxvY19jb250cm9sICpyYyxcbi0tXG5mcy9idHJmcy9yZWxvY2F0aW9uLmMtMjkzNi1cdFx0aWYgKCF1c2VfcnN0KVxuZnMvYnRyZnMvcmVsb2NhdGlvbi5jOjI5Mzc6XHRcdFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChpbm9kZS1cdTAwM2VpX21hcHBpbmcsIHJhLCBOVUxMLFxuZnMvYnRyZnMvcmVsb2NhdGlvbi5jLTI5MzgtXHRcdFx0XHRcdFx0ICBpbmRleCwgbGFzdF9pbmRleCAmIzQzOyAxIC0gaW5kZXgpO1xuLS1cbmZzL2J0cmZzL3NlbmQuYz01MTcwPXN0YXRpYyBpbnQgcHV0X2ZpbGVfZGF0YShzdHJ1Y3Qgc2VuZF9jdHggKnNjdHgsIHU2NCBvZmZzZXQsIHUzMiBsZW4pXG4tLVxuZnMvYnRyZnMvc2VuZC5jLTUxOTEtXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG5mcy9idHJmcy9zZW5kLmM6NTE5MjpcdFx0XHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsXG5mcy9idHJmcy9zZW5kLmMtNTE5My1cdFx0XHRcdFx0XHQgIFx1MDAyNnNjdHgtXHUwMDNlcmEsIE5VTEwsIGluZGV4LFxuLS1cbmZzL2J0cmZzL3NlbmQuYz01NjAwPXN0YXRpYyBpbnQgc2VuZF9leHRlbnRfZGF0YShzdHJ1Y3Qgc2VuZF9jdHggKnNjdHgsIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLFxuLS1cbmZzL2J0cmZzL3NlbmQuYy01NjYxLVx0XHQgKiBwYWdlcyBmcm9tIGJleW9uZCB0aGF0IHJhbmdlIChzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yXG5mcy9idHJmcy9zZW5kLmM6NTY2MjpcdFx0ICogcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpKSwgc28gaXQgd291bGQgbm90IGJlIHJlbGlhYmxlLFxuZnMvYnRyZnMvc2VuZC5jLTU2NjMtXHRcdCAqIGJlY2F1c2UgYWZ0ZXIgcmVhZGluZyB0aGUgZmlyc3QgZXh0ZW50IGZ1dHVyZSBjYWxscyB0b1xuLS1cbmZzL2J0cmZzL3NlbmQuYy01Njk2LVx0XHQgKlxuZnMvYnRyZnMvc2VuZC5jOjU2OTc6XHRcdCAqIFdoZW4gd2UgYXNrIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB0byByZWFkIGV4dGVudCBBLCBpdFxuZnMvYnRyZnMvc2VuZC5jLTU2OTgtXHRcdCAqIG1heSBhbHNvIHRyaWdnZXIgcmVhZHMgZm9yIHBhZ2VzIG9mIGV4dGVudCBCLiBJZiB3ZSBhcmUgZG9pbmdcbi0tXG5mcy9jcmFtZnMvaW5vZGUuYz0xOTI9c3RhdGljIHZvaWQgKmNyYW1mc19ibGtkZXZfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuLS1cbmZzL2NyYW1mcy9pbm9kZS5jLTIyNi1cdGZpbGVfcmFfc3RhdGVfaW5pdChcdTAwMjZyYSwgbWFwcGluZyk7XG5mcy9jcmFtZnMvaW5vZGUuYzoyMjc6XHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIFx1MDAyNnJhLCBOVUxMLCBibG9ja25yLCBCTEtTX1BFUl9CVUYpO1xuZnMvY3JhbWZzL2lub2RlLmMtMjI4LVxuLS1cbmZzL2Vyb2ZzL2Rpci5jPTQ5PXN0YXRpYyBpbnQgZXJvZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4tLVxuZnMvZXJvZnMvZGlyLmMtNzktXHRcdFx0aWYgKHBhZ2VzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiAhcmFfaGFzX2luZGV4KHJhLCBpZHgpKVxuZnMvZXJvZnMvZGlyLmM6ODA6XHRcdFx0XHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKGRpci1cdTAwM2VpX21hcHBpbmcsIHJhLFxuZnMvZXJvZnMvZGlyLmMtODEtXHRcdFx0XHRcdFx0XHQgIGYsIGlkeCwgcGFnZXMpO1xuLS1cbmZzL2V4dDQvZGlyLmM9MTMwPXN0YXRpYyBpbnQgZXh0NF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbi0tXG5mcy9leHQ0L2Rpci5jLTE5OS1cdFx0XHRpZiAoIXJhX2hhc19pbmRleChcdTAwMjZmaWxlLVx1MDAzZWZfcmEsIGluZGV4KSlcbmZzL2V4dDQvZGlyLmM6MjAwOlx0XHRcdFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChcbmZzL2V4dDQvZGlyLmMtMjAxLVx0XHRcdFx0XHRzYi1cdTAwM2VzX2JkZXYtXHUwMDNlYmRfbWFwcGluZyxcbi0tXG5mcy9mMmZzL2Rpci5jPTEwNjU9c3RhdGljIGludCBmMmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuLS1cbmZzL2YyZnMvZGlyLmMtMTEwNC1cdFx0aWYgKG5wYWdlcyAtIG4gXHUwMDNlIDEgXHUwMDI2XHUwMDI2ICFyYV9oYXNfaW5kZXgocmEsIG4pKVxuZnMvZjJmcy9kaXIuYzoxMTA1Olx0XHRcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCByYSwgZmlsZSwgbixcbmZzL2YyZnMvZGlyLmMtMTEwNi1cdFx0XHRcdG1pbihucGFnZXMgLSBuLCAocGdvZmZfdClNQVhfRElSX1JBX1BBR0VTKSk7XG4tLVxuZnMvbnRmcy9kaXIuYz02OTE9c3RhdGljIGludCBudGZzX2lhX2Jsb2Nrc19yZWFkYWhlYWQoc3RydWN0IG50ZnNfaW5vZGUgKmlhX25pLCBsb2ZmX3QgcG9zKVxuLS1cbmZzL250ZnMvZGlyLmMtNzEwLVx0ZGlyX3JhLVx1MDAzZXJhX3BhZ2VzID0gZGlyX2VuZF9pbmRleCAtIGRpcl9zdGFydF9pbmRleDtcbmZzL250ZnMvZGlyLmM6NzExOlx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChpYV92aS1cdTAwM2VpX21hcHBpbmcsIGRpcl9yYSwgTlVMTCxcbmZzL250ZnMvZGlyLmMtNzEyLVx0XHRcdGRpcl9zdGFydF9pbmRleCwgZGlyX2VuZF9pbmRleCAtIGRpcl9zdGFydF9pbmRleCk7XG4tLVxuZnMvbnRmcy9kaXIuYz03MTg9c3RhdGljIGludCBudGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqYWN0b3IpXG4tLVxuZnMvbnRmcy9kaXIuYy05OTYtXHRcdHJhLVx1MDAzZXJhX3BhZ2VzID0gY25pci1cdTAwM2Vjb3VudDtcbmZzL250ZnMvZGlyLmM6OTk3Olx0XHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKHZvbC1cdTAwM2VtZnRfaW5vLVx1MDAzZWlfbWFwcGluZywgcmEsIE5VTEwsXG5mcy9udGZzL2Rpci5jLTk5OC1cdFx0XHRcdGNuaXItXHUwMDNlc3RhcnRfaW5kZXgsIGNuaXItXHUwMDNlY291bnQpO1xuLS1cbmZzL250ZnMvaW5vZGUuYz0zODYzPXN0cnVjdCBmb2xpbyAqbnRmc19nZXRfbG9ja2VkX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL250ZnMvaW5vZGUuYy0zODcyLVxuZnMvbnRmcy9pbm9kZS5jOjM4NzM6XHRcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgcmEsIE5VTEwsIGluZGV4LFxuZnMvbnRmcy9pbm9kZS5jLTM4NzQtXHRcdFx0XHRlbmRfaW5kZXggLSBpbmRleCk7XG4tLVxuZnMvbnRmcy9sb2dmaWxlLmM9NjQwPWJvb2wgbnRmc19lbXB0eV9sb2dmaWxlKHN0cnVjdCBpbm9kZSAqbG9nX3ZpKVxuLS1cbmZzL250ZnMvbG9nZmlsZS5jLTcyOC1cbmZzL250ZnMvbG9nZmlsZS5jOjcyOTpcdFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChzYi1cdTAwM2VzX2JkZXYtXHUwMDNlYmRfbWFwcGluZywgcmEsIE5VTEwsXG5mcy9udGZzL2xvZ2ZpbGUuYy03MzAtXHRcdFx0c3RhcnQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsIChlbmQgLSBzdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuLS1cbmZzL250ZnMzL2JpdG1hcC5jPTQ5Nz1zdGF0aWMgaW50IHduZF9yZXNjYW4oc3RydWN0IHduZF9iaXRtYXAgKnduZClcbi0tXG5mcy9udGZzMy9iaXRtYXAuYy01NjYtXHRcdFx0aWYgKCFyYV9oYXNfaW5kZXgocmEsIGlkeCkpXG5mcy9udGZzMy9iaXRtYXAuYzo1Njc6XHRcdFx0XHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIHJhLCBOVUxMLFxuZnMvbnRmczMvYml0bWFwLmMtNTY4LVx0XHRcdFx0XHRcdFx0ICBpZHgsIDEpO1xuLS1cbmZzL250ZnMzL2ZzbnRmcy5jPTExOTA9aW50IG50ZnNfcmVhZF9ydW5fbmJfcmEoc3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpLCBjb25zdCBzdHJ1Y3QgcnVuc190cmVlICpydW4sXG4tLVxuZnMvbnRmczMvZnNudGZzLmMtMTI0NS1cdFx0XHRpZiAoIXJhX2hhc19pbmRleChyYSwgaW5kZXgpKSB7XG5mcy9udGZzMy9mc250ZnMuYzoxMjQ2Olx0XHRcdFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChtYXBwaW5nLCByYSwgTlVMTCxcbmZzL250ZnMzL2ZzbnRmcy5jLTEyNDctXHRcdFx0XHRcdFx0XHQgIGluZGV4LCAxKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xNDM2PXZvaWQgcmVhZGFoZWFkX2V4cGFuZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MzktLyoqXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxNDQwOiAqIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQgLSBnZW5lcmljIGZpbGUgcmVhZGFoZWFkXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDQxLSAqIEBtYXBwaW5nOiBhZGRyZXNzX3NwYWNlIHdoaWNoIGhvbGRzIHRoZSBwYWdlY2FjaGUgYW5kIEkvTyB2ZWN0b3JzXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQ0Ni0gKlxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTQ0NzogKiBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGEgY2FjaGUgbWlzcyBoYXBwZW5lZDpcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0NDgtICogaXQgd2lsbCBzdWJtaXQgdGhlIHJlYWQuICBUaGUgcmVhZGFoZWFkIGxvZ2ljIG1heSBkZWNpZGUgdG8gcGlnZ3liYWNrIG1vcmVcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xNDUyPXN0YXRpYyBpbmxpbmVcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjE0NTM6dm9pZCBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQ1NC1cdFx0c3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9yZWFkYWhlYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmFjdGxfYWxsb2NfZm9saW8oc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbi0tXG5tbS9yZWFkYWhlYWQuYy0yMTUtICogbm90IHRoZSBmdW5jdGlvbiB5b3Ugd2FudCB0byBjYWxsLiAgVXNlIHBhZ2VfY2FjaGVfYXN5bmNfcmVhZGFoZWFkKClcbm1tL3JlYWRhaGVhZC5jOjIxNjogKiBvciBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgaW5zdGVhZC5cbm1tL3JlYWRhaGVhZC5jLTIxNy0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjM4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBSZWFkYWhlYWQgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGhvdyByZWFkYWhlYWQgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQsIHNwZWNpZmljYWxseSB0aGUgYHBhZ2VfY2FjaGVfc3luY19yYWAgYW5kIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgZnVuY3Rpb25zLiBUaGVzZSBhcmUgbGlrZWx5IHRoZSBjb3JlIG9mIHRoZSByZWFkLWFoZWFkIGxvZ2ljLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGVpciBpbnRlcnBsYXksIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXkmIzM5O3JlIGludm9rZWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhleSBpbXBhY3QgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBwYWdlIGNhY2hlLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSBkZWxpY2F0ZSBiYWxhbmNlIGhlcmUsIGEgdHJhZGUtb2ZmIGJldHdlZW4gYWdncmVzc2l2ZWx5IHByZS1mZXRjaGluZyBwYWdlcyBhbmQgcG90ZW50aWFsbHkgd2FzdGluZyByZXNvdXJjZXMgb24gcmVhZHMgdGhhdCBhcmVuJiMzOTt0IGFjdHVhbGx5IG5lZWRlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb250cm9scyB0aGUgcGFyYW1ldGVycyBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBib3VuZGVkIGFuZCB1bmJvdW5kZWQgcmVhZGFoZWFkIGRpZmZlciBpbiB0aGVpciBiZWhhdmlvci4gVW5kZXJzdGFuZGluZyB0aG9zZSBkaWZmZXJlbmNlcyB3aWxsIGJlIGtleSB0byBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlIGZvciB2YXJpb3VzIHdvcmtsb2Fkcy4gVGltZSB0byBkaWcgaW50byBgbW0vcmVhZGFoZWFkLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZW1hcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDUwOlx0ICogcGVyZm9ybWFuY2UuXG4xNDUxOlx0ICovXG4xNDUyOlx0c3RhdGljIGlubGluZVxuMTQ1MzpcdHZvaWQgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbjE0NTQ6XHRcdFx0c3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBpbmRleCxcbjE0NTU6XHRcdFx0dW5zaWduZWQgbG9uZyByZXFfY291bnQpXG4xNDU2Olx0e1xuMTQ1NzpcdFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgcmEsIG1hcHBpbmcsIGluZGV4KTtcbjE0NTg6XHRcdHBhZ2VfY2FjaGVfc3luY19yYShcdTAwMjZyYWN0bCwgcmVxX2NvdW50KTtcbjE0NTk6XHR9XG4xNDYwOlx0XG4xNDYxOlx0LyoqXG4xNDYyOlx0ICogcGFnZV9jYWNoZV9hc3luY19yZWFkYWhlYWQgLSBmaWxlIHJlYWRhaGVhZCBmb3IgbWFya2VkIHBhZ2VzXG4xNDYzOlx0ICogQG1hcHBpbmc6IGFkZHJlc3Nfc3BhY2Ugd2hpY2ggaG9sZHMgdGhlIHBhZ2VjYWNoZSBhbmQgSS9PIHZlY3RvcnNcbjE0NjQ6XHQgKiBAcmE6IGZpbGVfcmFfc3RhdGUgd2hpY2ggaG9sZHMgdGhlIHJlYWRhaGVhZCBzdGF0ZVxuMTQ2NTpcdCAqIEBmaWxlOiBVc2VkIGJ5IHRoZSBmaWxlc3lzdGVtIGZvciBhdXRoZW50aWNhdGlvbi5cbjE0NjY6XHQgKiBAZm9saW86IFRoZSBmb2xpbyB3aGljaCB0cmlnZ2VyZWQgdGhlIHJlYWRhaGVhZCBjYWxsLlxuMTQ2NzpcdCAqIEByZXFfY291bnQ6IFRvdGFsIG51bWJlciBvZiBwYWdlcyBiZWluZyByZWFkIGJ5IHRoZSBjYWxsZXIuXG4xNDY4Olx0ICpcbjE0Njk6XHQgKiBwYWdlX2NhY2hlX2FzeW5jX3JlYWRhaGVhZCgpIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgdXNlZCB3aGljaFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI3NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgcGFnZV9jYWNoZV9zeW5jX3JhYCoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgcGFnZV9jYWNoZV9zeW5jX3JhYCB3aXRoaW4gYG1tL3JlYWRhaGVhZC5jYC4gSSYjMzk7bSBzdGFydGluZyBoZXJlIGJlY2F1c2UgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqcHJlY2lzZWx5KiBob3cgc3luY2hyb25vdXMgcmVhZC1haGVhZCBpcyBoYW5kbGVkIGluIHRoZSBwYWdlIGNhY2hlLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciByZWFkYWhlYWQgbWVjaGFuaXNtcy4gSSB3YW50IHRvIHNlZSB0aGUgY29udHJvbCBmbG93IGluIHRoaXMgY3JpdGljYWwgcGF0aC4gTXkgaW5pdGlhbCBxdWVzdGlvbnMgYXJlOiB3aGF0IHRyaWdnZXJzIGl0LCB3aGF0IHRoZSBleGFjdCBzeW5jIGJlaGF2aW91ciBpcyByZWxhdGl2ZSB0byBhc3luY2hyb25vdXMgcmVhZGFoZWFkLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHJhY2VzIHdpdGggb3RoZXIgcHJvY2Vzc2VzIGFjY2Vzc2luZyB0aGUgc2FtZSBkYXRhLCBhbmQsIGlmIHBvc3NpYmxlLCB3aGVyZSBpdCBpcyB1c2VkIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgb2Z0ZW4gd2hlcmUgc3VidGxlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBjYW4gbHVyaywgYW5kIEkmIzM5O2QgbGlrZSBhIHZlcnkgY3Jpc3AgdmlldyBvZiBpdHMgcHVycG9zZSBhbmQgb3BlcmF0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IHdoZXJlIHRoZSBrZXJuZWwgZGVjaWRlcyB3aGVuIGl0IGlzIHNhZmUgdG8gaXNzdWUgcHJlZmV0Y2ggSS9PIHJlcXVlc3RzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgaW50dWl0aW9uIGhvbGRzIHVwLCBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgbW9yZSBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9jYWNoZV9zeW5jX3JhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcmVhZGFoZWFkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcmVhZGFoZWFkLmM9NTYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJhY3RsX21heF9wYWdlcyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbm1tL3JlYWRhaGVhZC5jLTU3Ni1cbm1tL3JlYWRhaGVhZC5jOjU3Nzp2b2lkIHBhZ2VfY2FjaGVfc3luY19yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxubW0vcmVhZGFoZWFkLmMtNTc4LVx0XHR1bnNpZ25lZCBsb25nIHJlcV9jb3VudClcbi0tXG5tbS9yZWFkYWhlYWQuYy01ODUtXG5tbS9yZWFkYWhlYWQuYzo1ODY6XHR0cmFjZV9wYWdlX2NhY2hlX3N5bmNfcmEocmFjdGwtXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0LCBpbmRleCwgcmEsIHJlcV9jb3VudCk7XG5tbS9yZWFkYWhlYWQuYy01ODctXHQvKlxuLS1cbm1tL3JlYWRhaGVhZC5jLTY1MC19XG5tbS9yZWFkYWhlYWQuYzo2NTE6RVhQT1JUX1NZTUJPTF9HUEwocGFnZV9jYWNoZV9zeW5jX3JhKTtcbm1tL3JlYWRhaGVhZC5jLTY1Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcGFnZV9jYWNoZV9zeW5jX3JhYCB3aXRoaW4gYG1tL3JlYWRhaGVhZC5jYC4gSXQmIzM5O3MgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdW5kZXJzdGFuZCBwcmVjaXNlbHkgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgc3luY2hyb25pemF0aW9uIGFzcGVjdCBvZiByZWFkLWFoZWFkIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBwYWdlIGNhY2hlLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiBlbnN1cmluZyBkYXRhIGludGVncml0eSBhbmQgb3B0aW1pemluZyBJL08uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciByZWFkYWhlYWQgbWVjaGFuaXNtLCBhbmQgd2hhdCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpdCYjMzk7cyB1c2luZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFzIHN0cmFpZ2h0Zm9yd2FyZCBhcyBpdCBzZWVtcyBvciBpZiBpdOKAmXMgbW9yZSBudWFuY2VkLCBnaXZlbiB0aGF0IHdlIGFyZSB3aXRoaW4gdGhlIG1tIHN1YnN5c3RlbS4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpbW1lZGlhdGVseSBncmFzcCB0aGUgbG9naWMgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9yZWFkYWhlYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTc2Olx0XG4gNTc3Olx0dm9pZCBwYWdlX2NhY2hlX3N5bmNfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbiA1Nzg6XHRcdFx0dW5zaWduZWQgbG9uZyByZXFfY291bnQpXG4gNTc5Olx0e1xuIDU4MDpcdFx0cGdvZmZfdCBpbmRleCA9IHJlYWRhaGVhZF9pbmRleChyYWN0bCk7XG4gNTgxOlx0XHRib29sIGRvX2ZvcmNlZF9yYSA9IHJhY3RsLVx1MDAzZWZpbGUgXHUwMDI2XHUwMDI2IChyYWN0bC1cdTAwM2VmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfUkFORE9NKTtcbiA1ODI6XHRcdHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSA9IHJhY3RsLVx1MDAzZXJhO1xuIDU4MzpcdFx0dW5zaWduZWQgbG9uZyBtYXhfcGFnZXMsIGNvbnRpZ19jb3VudDtcbiA1ODQ6XHRcdHBnb2ZmX3QgcHJldl9pbmRleCwgbWlzcztcbiA1ODU6XHRcbiA1ODY6XHRcdHRyYWNlX3BhZ2VfY2FjaGVfc3luY19yYShyYWN0bC1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QsIGluZGV4LCByYSwgcmVxX2NvdW50KTtcbiA1ODc6XHRcdC8qXG4gNTg4Olx0XHQgKiBFdmVuIGlmIHJlYWRhaGVhZCBpcyBkaXNhYmxlZCwgaXNzdWUgdGhpcyByZXF1ZXN0IGFzIHJlYWRhaGVhZFxuIDU4OTpcdFx0ICogYXMgd2UmIzM5O2xsIG5lZWQgaXQgdG8gc2F0aXNmeSB0aGUgcmVxdWVzdGVkIHJhbmdlLiBUaGUgZm9yY2VkXG4gNTkwOlx0XHQgKiByZWFkYWhlYWQgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgYW5kIGxpbWl0IHRoZSByZWFkIHRvIGp1c3QgdGhlXG4gNTkxOlx0XHQgKiByZXF1ZXN0ZWQgcmFuZ2UsIHdoaWNoIHdlJiMzOTtsbCBzZXQgdG8gMSBwYWdlIGZvciB0aGlzIGNhc2UuXG4gNTkyOlx0XHQgKi9cbiA1OTM6XHRcdGlmICghcmEtXHUwMDNlcmFfcGFnZXMgfHwgYmxrX2Nncm91cF9jb25nZXN0ZWQoKSkge1xuIDU5NDpcdFx0XHRpZiAoIXJhY3RsLVx1MDAzZWZpbGUpXG4gNTk1Olx0XHRcdFx0cmV0dXJuO1xuIDU5NjpcdFx0XHRyZXFfY291bnQgPSAxO1xuIDU5NzpcdFx0XHRkb19mb3JjZWRfcmEgPSB0cnVlO1xuIDU5ODpcdFx0fVxuIDU5OTpcdFxuIDYwMDpcdFx0LyogYmUgZHVtYiAqL1xuIDYwMTpcdFx0aWYgKGRvX2ZvcmNlZF9yYSkge1xuIDYwMjpcdFx0XHRmb3JjZV9wYWdlX2NhY2hlX3JhKHJhY3RsLCByZXFfY291bnQpO1xuIDYwMzpcdFx0XHRyZXR1cm47XG4gNjA0Olx0XHR9XG4gNjA1Olx0XG4gNjA2Olx0XHRtYXhfcGFnZXMgPSByYWN0bF9tYXhfcGFnZXMocmFjdGwsIHJlcV9jb3VudCk7XG4gNjA3Olx0XHRwcmV2X2luZGV4ID0gKHVuc2lnbmVkIGxvbmcgbG9uZylyYS1cdTAwM2VwcmV2X3BvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiA2MDg6XHRcdC8qXG4gNjA5Olx0XHQgKiBBIHN0YXJ0IG9mIGZpbGUsIG92ZXJzaXplZCByZWFkLCBvciBzZXF1ZW50aWFsIGNhY2hlIG1pc3M6XG4gNjEwOlx0XHQgKiB0cml2aWFsIGNhc2U6IChpbmRleCAtIHByZXZfaW5kZXgpID09IDFcbiA2MTE6XHRcdCAqIHVuYWxpZ25lZCByZWFkczogKGluZGV4IC0gcHJldl9pbmRleCkgPT0gMFxuIDYxMjpcdFx0ICovXG4gNjEzOlx0XHRpZiAoIWluZGV4IHx8IHJlcV9jb3VudCBcdTAwM2UgbWF4X3BhZ2VzIHx8IGluZGV4IC0gcHJldl9pbmRleCBcdTAwM2M9IDFVTCkge1xuIDYxNDpcdFx0XHRyYS1cdTAwM2VzdGFydCA9IGluZGV4O1xuIDYxNTpcdFx0XHRyYS1cdTAwM2VzaXplID0gZ2V0X2luaXRfcmFfc2l6ZShyZXFfY291bnQsIG1heF9wYWdlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzE3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0LCBnaXZlbiBteSBhc3N1bWVkIGV4cGVydGlzZToKCioqRXhhbWluaW5nIHRoZSAmIzM5O3BhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkJiMzOTsgUGFyYW1ldGVyKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBzZXR0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyByZXZvbHZlcyBhcm91bmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgcmVhZC1haGVhZCBiZWhhdmlvciB3aXRoaW4gdGhlIHBhZ2UgY2FjaGUuIEVzc2VudGlhbGx5LCB0aGlzIHBhcmFtZXRlciBsaWtlbHkgZ292ZXJucyBob3cgYWdncmVzc2l2ZWx5IHRoZSBzeXN0ZW0gYXR0ZW1wdHMgdG8gcHJlZmV0Y2ggZGF0YSBpbnRvIHRoZSBwYWdlIGNhY2hlLCBiZXlvbmQgdGhlIGltbWVkaWF0ZSByZXF1ZXN0LiBBcyBhbiBleHBlcnQsIEkmIzM5O20gaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgdGhlIHRyYWRlb2ZmcyBpbnZvbHZlZC4gQSBib3VuZGVkIHJlYWQtYWhlYWQgd291bGQsIGlkZWFsbHksIHJlc3RyaWN0IHByZWZldGNoaW5nIHRvIGEgbWFuYWdlYWJsZSBhbW91bnQsIHByZXZlbnRpbmcgZXhjZXNzaXZlIG1lbW9yeSBwcmVzc3VyZS4gQnV0IGFuICp1bmJvdW5kZWQqIHNldHRpbmc/IFRoYXQgcmFpc2VzIHNvbWUgaW50ZXJlc3RpbmcgcG9pbnRzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYmVuZWZpdHMuIFdpdGggYW4gdW5ib3VuZGVkIHNldHRpbmcsIHlvdSBjb3VsZCBhY2hpZXZlIG1heGltdW0gcmVhZCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBmb3Igc2VxdWVudGlhbCBvciBwcmVkaWN0YWJsZSBhY2Nlc3MgcGF0dGVybnMuIE5vIG5lZWQgdG8gd29ycnkgYWJvdXQgYmVpbmcgdGhyb3R0bGVkIGR1ZSB0byBhIGZpeGVkIHVwcGVyIGxpbWl0LiBJdCBzaG91bGQgYmUgZmFudGFzdGljIGZvciBsYXJnZSwgaGlnaGx5IHNlcXVlbnRpYWwgcmVhZHMsIGxpa2UgZGF0YWJhc2UgYmFja3VwcyBvciBjZXJ0YWluIHZpZGVvIHByb2Nlc3Npbmcgb3BlcmF0aW9ucy4KCkhvd2V2ZXIsIEkmIzM5O20gYWxzbyByYXBpZGx5IGNhbGN1bGF0aW5nIHRoZSBwb3RlbnRpYWwgZG93bnNpZGVzIGluIG15IGhlYWQuIFVuY2hlY2tlZCByZWFkLWFoZWFkIGNvdWxkIHF1aWNrbHkgZXhoYXVzdCBhdmFpbGFibGUgbWVtb3J5LCBsZWFkaW5nIHRvIHBhZ2UgZXZpY3Rpb24gb2YgKm90aGVyKiBpbXBvcnRhbnQgZGF0YS4gVGhpcyBpcyB3aGVyZSB0aGUgaW50cmljYWNpZXMgb2Ygd29ya2xvYWQgYmVoYXZpb3IgYW5kIHRoZSBvdmVyYWxsIG1lbW9yeSBwcm9maWxlIG9mIHRoZSBzeXN0ZW0gYmVjb21lIGNyaXRpY2FsLiBJdCBtaWdodCBiZSBncmVhdCBmb3Igb25lIHdvcmtsb2FkLCBidXQgZGlzYXN0cm91cyBmb3IgYW5vdGhlciwgc2F5IGlmIHRoZSB3b3JrbG9hZCBpcyBoZWF2aWx5IGludGVyYWN0aXZlIHdpdGggYSBzbWFsbCB3b3JraW5nIHNldC4gSSYjMzk7ZCBiZSBlc3BlY2lhbGx5IGtlZW4gdG8ga25vdyB0aGUgZGVmYXVsdCBzZXR0aW5nIGFuZCB3aGF0IHRyaWdnZXJlZCB0aGlzIHRvcGljIHRvIGNvbWUgdXAuCgpNeSBpbnN0aW5jdCBpcyB0byBhc2s6IFdoYXQgc3BlY2lmaWMgcHJvYmxlbSBhcmUgd2UgdHJ5aW5nIHRvIHNvbHZlIGhlcmU/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgYXJlIHRoZSBhY2Nlc3MgcGF0dGVybnMgb2YgdGhlIHdvcmtsb2FkcyBydW5uaW5nIG9uIHRoZSBzeXN0ZW0/IEhvdyBtdWNoIG1lbW9yeSBpcyBhdmFpbGFibGU/IFdoYXQgYXJlIHRoZSBvdGhlciBrZXJuZWwgcGFyYW1ldGVycyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50IHRvIHRoaXMgc2l0dWF0aW9uIChlLmcuIGB2bS5zd2FwcGluZXNzYCwgYHZtLmRpcnR5XypgLCBhbmQgc28gb24pPyBUaGUgdHJ1ZSBiZWF1dHkgb2YgYSBwYXJhbWV0ZXIgbGlrZSB0aGlzIGlzIGl0IGNhbiBiZSB0dW5lZCwgYnV0IHlvdSBtdXN0IGhhdmUgYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb3N0cyBvZiB1c2UuCgpTbywgaW4gc3VtbWFyeSwgSSYjMzk7bSBzZWVpbmcgYW4gYXJlYSBmb3IgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgZ2FpbnMsIGJ1dCBhbHNvIGEgcG90ZW50aWFsIG1pbmVmaWVsZCBpZiB3ZSYjMzk7cmUgbm90IGNhcmVmdWwuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGFzc2VzcyBpdHMgYXBwbGljYWJpbGl0eSB0byBhIHBhcnRpY3VsYXIgc2NlbmFyaW8uIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVyZSYjMzk7cyBubyBvbmUtc2l6ZS1maXRzLWFsbCBhbnN3ZXIgaGVyZS4gSXQmIzM5O3MgYWxsIGFib3V0IGNhcmVmdWwgdHVuaW5nIGJhc2VkIG9uIGRlZXAgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3JlYWRhaGVhZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JlYWRhaGVhZC5jPTE5NT1zdGF0aWMgc3RydWN0IGZvbGlvICpyYWN0bF9hbGxvY19mb2xpbyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbm1tL3JlYWRhaGVhZC5jLTIyMS0gKi9cbm1tL3JlYWRhaGVhZC5jOjIyMjp2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG5tbS9yZWFkYWhlYWQuYy0yMjMtXHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVhZCwgdW5zaWduZWQgbG9uZyBsb29rYWhlYWRfc2l6ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYG1tL3JlYWRhaGVhZC5jYCBhbmQgZm9jdXMgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIyMi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSByZWFkYWhlYWQgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgbG9naWMgZm9yIHByZS1mZXRjaGluZyBkYXRhIGludG8gdGhlIHBhZ2UgY2FjaGUsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBJL08gcGVyZm9ybWFuY2UuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGhldXJpc3RpYyB0aGF0IGRldGVybWluZXMgd2hlbiByZWFkYWhlYWQgaXMgdHJpZ2dlcmVkLCBvciBtYXliZSB0aGUgc3BlY2lmaWMgY2FsY3VsYXRpb25zIHVzZWQgdG8gZGVjaWRlIGhvdyBtYW55IHBhZ2VzIHRvIHByZWZldGNoLiBEZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uLCBJIG1heSBhbHNvIHNlZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGluZ3MgbGlrZSBhZGFwdGl2ZSByZWFkYWhlYWQgb3IgdGhlIHZhcmlvdXMgdHVuaW5nIHBhcmFtZXRlcnMuIExpbmUgMjIyIHNwZWNpZmljYWxseeKApiBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYmVpbmcgZG9uZSBoZXJlLiBJ4oCZbSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIHRyeWluZyB0byBwcmVkaWN0IHN1YnNlcXVlbnQgYWNjZXNzIHBhdHRlcm5zLiBUaGlzIGlzIHRoZSBoZWFydCBvZiBtYWtpbmcgSS9PIGxvb2sgZmFzdGVyIHRoYW4gaXQgcmVhbGx5IGlzLiBSaWdodCwgbGV0JiMzOTtzIGdldCBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JlYWRhaGVhZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMjA6XHQgKiBjYWxsZXIuICBNYXkgc2xlZXAsIGJ1dCB3aWxsIG5vdCByZWVudGVyIGZpbGVzeXN0ZW0gdG8gcmVjbGFpbSBtZW1vcnkuXG4gMjIxOlx0ICovXG4gMjIyOlx0dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuIDIyMzpcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlYWQsIHVuc2lnbmVkIGxvbmcgbG9va2FoZWFkX3NpemUpXG4gMjI0Olx0e1xuIDIyNTpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSByYWN0bC1cdTAwM2VtYXBwaW5nO1xuIDIyNjpcdFx0dW5zaWduZWQgbG9uZyBpbmRleCA9IHJlYWRhaGVhZF9pbmRleChyYWN0bCk7XG4gMjI3Olx0XHRnZnBfdCBnZnBfbWFzayA9IHJlYWRhaGVhZF9nZnBfbWFzayhtYXBwaW5nKTtcbiAyMjg6XHRcdHVuc2lnbmVkIGxvbmcgbWFyayA9IFVMT05HX01BWCwgaSA9IDA7XG4gMjI5Olx0XHR1bnNpZ25lZCBpbnQgbWluX25ycGFnZXMgPSBtYXBwaW5nX21pbl9mb2xpb19ucnBhZ2VzKG1hcHBpbmcpO1xuIDIzMDpcdFxuIDIzMTpcdFx0LypcbiAyMzI6XHRcdCAqIFBhcnR3YXkgdGhyb3VnaCB0aGUgcmVhZGFoZWFkIG9wZXJhdGlvbiwgd2Ugd2lsbCBoYXZlIGFkZGVkXG4gMjMzOlx0XHQgKiBsb2NrZWQgcGFnZXMgdG8gdGhlIHBhZ2UgY2FjaGUsIGJ1dCB3aWxsIG5vdCB5ZXQgaGF2ZSBzdWJtaXR0ZWRcbiAyMzQ6XHRcdCAqIHRoZW0gZm9yIEkvTy4gIEFkZGluZyBhbm90aGVyIHBhZ2UgbWF5IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5LFxuIDIzNTpcdFx0ICogd2hpY2ggY2FuIHRyaWdnZXIgbWVtb3J5IHJlY2xhaW0uICBUZWxsaW5nIHRoZSBWTSB3ZSYjMzk7cmUgaW5cbiAyMzY6XHRcdCAqIHRoZSBtaWRkbGUgb2YgYSBmaWxlc3lzdGVtIG9wZXJhdGlvbiB3aWxsIGNhdXNlIGl0IHRvIG5vdFxuIDIzNzpcdFx0ICogdG91Y2ggZmlsZS1iYWNrZWQgcGFnZXMsIHByZXZlbnRpbmcgYSBkZWFkbG9jay4gIE1vc3QgKGFsbD8pXG4gMjM4Olx0XHQgKiBmaWxlc3lzdGVtcyBhbHJlYWR5IHNwZWNpZnkgX19HRlBfTk9GUyBpbiB0aGVpciBtYXBwaW5nJiMzOTtzXG4gMjM5Olx0XHQgKiBnZnBfbWFzaywgYnV0IGxldCYjMzk7cyBiZSBleHBsaWNpdCBoZXJlLlxuIDI0MDpcdFx0ICovXG4gMjQxOlx0XHR1bnNpZ25lZCBpbnQgbm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuIDI0MjpcdFxuIDI0MzpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayk7XG4gMjQ0Olx0XG4gMjQ1Olx0XHR0cmFjZV9wYWdlX2NhY2hlX3JhX3VuYm91bmRlZChtYXBwaW5nLVx1MDAzZWhvc3QsIGluZGV4LCBucl90b19yZWFkLFxuIDI0NjpcdFx0XHRcdFx0ICAgICAgbG9va2FoZWFkX3NpemUpO1xuIDI0NzpcdFx0aW5kZXggPSBtYXBwaW5nX2FsaWduX2luZGV4KG1hcHBpbmcsIGluZGV4KTtcbiAyNDg6XHRcbiAyNDk6XHRcdC8qXG4gMjUwOlx0XHQgKiBBcyBpdGVyYXRvciBgaWAgaXMgYWxpZ25lZCB0byBtaW5fbnJwYWdlcywgcm91bmRfdXAgdGhlXG4gMjUxOlx0XHQgKiBkaWZmZXJlbmNlIGJldHdlZW4gbnJfdG9fcmVhZCBhbmQgbG9va2FoZWFkX3NpemUgdG8gbWFyayB0aGVcbiAyNTI6XHRcdCAqIGluZGV4IHRoYXQgb25seSBoYXMgbG9va2FoZWFkIG9yIFwmIzM0O2FzeW5jX3JlZ2lvblwmIzM0OyB0byBzZXQgdGhlXG4gMjUzOlx0XHQgKiByZWFkYWhlYWQgZmxhZy5cbiAyNTQ6XHRcdCAqL1xuIDI1NTpcdFx0aWYgKGxvb2thaGVhZF9zaXplIFx1MDAzYz0gbnJfdG9fcmVhZCkge1xuIDI1NjpcdFx0XHR1bnNpZ25lZCBsb25nIHJhX2ZvbGlvX2luZGV4O1xuIDI1NzpcdFxuIDI1ODpcdFx0XHRyYV9mb2xpb19pbmRleCA9IHJvdW5kX3VwKHJlYWRhaGVhZF9pbmRleChyYWN0bCkgJiM0MztcbiAyNTk6XHRcdFx0XHRcdFx0ICBucl90b19yZWFkIC0gbG9va2FoZWFkX3NpemUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzY1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvbmN1cnJlbmN5IElzc3VlIGluIGBjb2xsYXBzZV9maWxlYCB3aXRoaW4gYGtodWdlcGFnZWRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBrZXkgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO21hcHBpbmctJmd0O2ludmFsaWRhdGVfbG9jayk7YCBvbiBsaW5lIDI0My4gVGhpcyBpcyBhIGNydWNpYWwgY2hlY2sgYW5kIHRoZSBmYWN0IHRoYXQgaXQgaXMgaW5jbHVkZWQsIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgYSBsb2NrIG9yZGVyaW5nIGlzIGludm9sdmVkLgoKTG9va2luZyBhdCB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLCBJIHNlZSBhIHNpZ25pZmljYW50IGNoYW5nZSBpbnRyb2R1Y2VkIGluIGEgcGF0Y2guIEJlZm9yZSB0aGUgcGF0Y2gsIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCB3YXMgY2FsbGVkIHdpdGhvdXQgaG9sZGluZyB0aGUgYGludmFsaWRhdGVfbG9ja2AuIFdoaWxlIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCBtaWdodCBoYXZlIGFjcXVpcmVkIHRoZSBsb2NrIGludGVybmFsbHkgd2l0aGluIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAsIHRoZSBsYWNrIG9mIGV4cGxpY2l0IGhvbGRpbmcgYXQgdGhlIGhpZ2hlciBsZXZlbCBjb3VsZCBoYXZlIGxlZCB0byBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIHJhY2VzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRydW5jYXRlIG9wZXJhdGlvbnMuCgpUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMuIFRoZSBrZXkgbGluZXMgaGVyZSBhcmUgdGhlIG9uZXMgdGhhdCB0YWtlIHRoZSBgaW52YWxpZGF0ZV9sb2NrYCAqYmVmb3JlKiBhY3F1aXJpbmcgYW55IGZvbGlvIGxvY2tzLiBJdCYjMzk7cyBkb25lIHRvIGVuc3VyZSBwcm9wZXIgbG9jayBvcmRlcmluZy4gSXQgZ29lcyBsaWtlIHRoaXM6CgpgYGBjCiYjNDM7CS8qCiYjNDM7CSAqIFRha2UgaW52YWxpZGF0ZV9sb2NrIGJlZm9yZSBhbnkgZm9saW8gbG9jazogdGhlIHJlYWRhaGVhZCBiZWxvdwomIzQzOwkgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWlzX3NobWVtKSB7CiYjNDM7CQlmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7CiYjNDM7CQluZWVkX3VubG9jayA9IHRydWU7CiYjNDM7CX0KYGBgCgpOb3csIHdpdGhpbiBgY29sbGFwc2VfZmlsZWAgaXRzZWxmLCB0aGUgbW9kaWZpZWQgY29kZSB1c2VzIGEgYERFRklORV9SRUFEQUhFQURgIG1hY3JvIGFuZCB0aGVuIGNhbGxzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgaW5zdGVhZCBvZiBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAuIEltcG9ydGFudGx5LCBhIGNvbW1lbnQgbm90ZXMgdGhhdCB0aGUgYGludmFsaWRhdGVfbG9ja2AgaXMgYWxyZWFkeSBoZWxkIGF0IHRoaXMgcG9pbnQsIGFuZCB0aGlzIG5ldyByZWFkYWhlYWQgZnVuY3Rpb24gZG9lc24mIzM5O3QgbmVlZCB0byBiZSBsaW1pdGVkIHRvIHRoZSBlbmQtb2YtZmlsZS4KClRoZSBjcml0aWNhbCBwaWVjZSwgdGhlbiwgaXMgdGhhdCB0aGUgY29kZSAqZXhwbGljaXRseSogcmVsZWFzZXMgdGhlIGBpbnZhbGlkYXRlX2xvY2tgIGF0IHRoZSBlbmQgaWYgaXQgd2FzIGFjcXVpcmVkOgoKYGBgYwpvdXQ6CiYjNDM7CWlmIChuZWVkX3VubG9jaykKJiM0MzsJCWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpOwpgYGAKClNvLCB0aGUgcGF0Y2ggaXMgYSBkZWxpYmVyYXRlIGVmZm9ydCB0byBlbmZvcmNlIGEgc3BlY2lmaWMgbG9jayBvcmRlcmluZyB0byBwcmV2ZW50IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0JiMzOTtzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGFkZHJlc3NpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIHJlYWQtYWhlYWQsIGZpbGUgdHJ1bmNhdGlvbiwgYW5kIHRoZSBgaW52YWxpZGF0ZV9sb2NrYC4gIE15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYGludmFsaWRhdGVfbG9ja2AsIGZvbGlvIGxvY2tzLCB0cnVuY2F0ZSBvcGVyYXRpb25zLCBhbmQgdGhlIHJlYWRhaGVhZCBtZWNoYW5pc20gd2l0aGluIHRoZSBjb250ZXh0IG9mIGBraHVnZXBhZ2VkYCBhbmQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgZmlsZSBzeXN0ZW1zIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIEkmIzM5O2QgZGVmaW5pdGVseSB3YW50IHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgb2YgYGNvbGxhcHNlX2ZpbGVgIGFyb3VuZCB0aG9zZSBsaW5lIG51bWJlcnMgeW91IGdhdmUgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzMwOlx0XG4yMzMxOlx0XHRcdFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSB8fCAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpIHtcbjIzMzI6XHRcdFx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4yMzMzOlx0XHRcdFx0XHQvKiBzd2FwIGluIG9yIGluc3RhbnRpYXRlIGZhbGxvY2F0ZWQgcGFnZSAqL1xuMjMzNDpcdFx0XHRcdFx0aWYgKHNobWVtX2dldF9mb2xpbyhtYXBwaW5nLVx1MDAzZWhvc3QsIGluZGV4LCAwLFxuMjMzNTpcdFx0XHRcdFx0XHRcdFx1MDAyNmZvbGlvLCBTR1BfTk9BTExPQykpIHtcbjIzMzY6XHRcdFx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjMzNzpcdFx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjMzODpcdFx0XHRcdFx0fVxuMjMzOTpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuMjM0MDpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjM0MTpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbjIzNDI6XHRcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4yMzQzOlx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM0NDpcdFx0XHRcdH0gZWxzZSB7XG4yMzQ1Olx0XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcbjIzNDY6XHRcdFx0XHRcdGdvdG8geGFfbG9ja2VkO1xuMjM0NzpcdFx0XHRcdH1cbjIzNDg6XHRcdFx0fSBlbHNlIHtcdC8qICFpc19zaG1lbSAqL1xuMjM0OTpcdFx0XHRcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XG4yMzUwOlx0XHRcdFx0XHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEsXG4yMzUxOlx0XHRcdFx0XHRcdFx0ICBtYXBwaW5nLCBpbmRleCk7XG4yMzUyOlx0XHRcdFx0XHRwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVx1MDAzZWhvc3QpLFxuMjM1MzpcdFx0XHRcdFx0XHRcdFx0ICAgIFBBR0VfU0laRSk7XG4yMzU0Olx0XG4yMzU1Olx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM1NjpcdFx0XHRcdFx0LypcbjIzNTc6XHRcdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LlxuMjM1ODpcdFx0XHRcdFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcbjIzNTk6XHRcdFx0XHRcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXG4yMzYwOlx0XHRcdFx0XHQgKi9cbjIzNjE6XHRcdFx0XHRcdGlmIChpbmRleCBcdTAwM2MgZW9mKVxuMjM2MjpcdFx0XHRcdFx0XHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcdTAwMjZyYWN0bCxcbjIzNjM6XHRcdFx0XHRcdFx0XHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xuMjM2NDpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuMjM2NTpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjM2NjpcdFx0XHRcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xuMjM2NzpcdFx0XHRcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbjIzNjg6XHRcdFx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjM2OTpcdFx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjM3MDpcdFx0XHRcdFx0fVxuMjM3MTpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHtcbjIzNzI6XHRcdFx0XHRcdC8qXG4yMzczOlx0XHRcdFx0XHQgKiBUaGlzIHBhZ2UgaXMgZGlydHkgYmVjYXVzZSBpdCBoYXNuJiMzOTt0XG4yMzc0Olx0XHRcdFx0XHQgKiBiZWVuIGZsdXNoZWQgc2luY2UgZmlyc3Qgd3JpdGUuXG4yMzc1Olx0XHRcdFx0XHQgKlxuMjM3NjpcdFx0XHRcdFx0ICogVHJpZ2dlciBhc3luYyBmbHVzaCBmb3IgcmVhZC1vbmx5IGZpbGVzIGFuZFxuMjM3NzpcdFx0XHRcdFx0ICogaG9wZSB0aGUgd3JpdGViYWNrIGlzIGRvbmUgd2hlbiBraHVnZXBhZ2VkXG4yMzc4Olx0XHRcdFx0XHQgKiByZXZpc2l0cyB0aGlzIHBhZ2UuIFdyaXRhYmxlIGZpbGVzIGNhbiBoYXZlXG4yMzc5Olx0XHRcdFx0XHQgKiB0aGVpciBmb2xpb3MgZGlydHkgYXQgYW55IHRpbWU7IGJsaW5kbHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQW5hbHl6aW5nIExvY2sgUmVsZWFzZSBQb2ludHMgaW4gYGNvbGxhcHNlX2ZpbGVgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBjb2xsYXBzZV9maWxlYCBhZ2Fpbi4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIGxvY2tpbmcgY29ycmVjdGx5LCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBwaW5wb2ludGluZyAqZXZlcnkqIHNpbmdsZSBzcG90IHdoZXJlIHRoZSBsb2NrIGlzIHJlbGVhc2VkLiBXZSBhbGwga25vdyBob3cgZWFzeSBpdCBpcyB0byBpbnRyb2R1Y2UgYSBzdWJ0bGUgYnVnIGlmIHlvdSBtaXNzIGV2ZW4gb25lLiBJIG5lZWQgdG8gYWNjb3VudCBmb3IgYWxsIG9mIHRoZW0uCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYmV5b25kIHRoZSBzaW1wbGUgbG9jay91bmxvY2sgcGFpci4gSSBuZWVkIHRvIG1lbnRhbGx5IHRyYWNlIGV2ZXJ5IHBvc3NpYmxlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlIHBvaW50IHdoZXJlIHRoZSBsb2NrIGlzIGFjcXVpcmVkIHRvIGl0cyBldmVudHVhbCByZWxlYXNlLiBUaGlzIG1lYW5zIG5vdCBqdXN0IGZvbGxvd2luZyB0aGUgc3RyYWlnaHRmb3J3YXJkLCBoYXBweS1wYXRoIGxvZ2ljLCBidXQgYWxzbyBjb25zaWRlcmluZyBhbGwgdGhlICYjMzQ7ZXhpdCYjMzQ7IHBvaW50cy4gVGhhdCBtZWFucyBgZ290byBvdXRgIHN0YXRlbWVudHMsIGV4cGxpY2l0IGByZXR1cm5gIHN0YXRlbWVudHMgdGhhdCBzaG9ydC1jaXJjdWl0IHRoZSB1c3VhbCBleGVjdXRpb24gZmxvdywgYW5kIGFueSBvdGhlciBtZWNoYW5pc20gdGhhdCBtaWdodCB0ZXJtaW5hdGUgdGhlIGZ1bmN0aW9uIHByZW1hdHVyZWx5ICpiZWZvcmUqIHRoZSBsb2NrIGNhbiBiZSBleHBsaWNpdGx5IHJlbGVhc2VkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZWFjaCBvZiB0aGVzZSBwb2ludHMgZWl0aGVyIHJlbGVhc2VzIHRoZSBsb2NrIGNsZWFubHkgb3IsIGlmIG5vdCwgdGhhdCB0aGVyZSYjMzk7cyBhIGdvb2QgZXhwbGFuYXRpb24gZm9yIHdoeSBpdCYjMzk7cyBub3QgbmVjZXNzYXJ5ICh3aGljaCB3aWxsIG5lZWQgdG8gYmUgd2VsbC1kb2N1bWVudGVkKS4gSXQmIzM5O3MgYSBtZXRob2RpY2FsIHByb2Nlc3MsIGJ1dCBpdCYjMzk7cyBlc3NlbnRpYWwgZm9yIG1haW50YWluaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhpcyBjcml0aWNhbCBjb2RlIHNlY3Rpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgbm90aGluZyBlc2NhcGVzIHRoaXMgZXhhbWluYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dvdG8gb3V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz02OTM9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2VfaXNvbGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNzE0LVx0XHRcdFx0XHRcdCAgICAgTVRIUF9TVEFUX0NPTExBUFNFX0VYQ0VFRF9OT05FKTtcbm1tL2todWdlcGFnZWQuYzo3MTU6XHRcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy03MTYtXHRcdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy03MjAtXHRcdFx0cmVzdWx0ID0gU0NBTl9QVEVfTk9OX1BSRVNFTlQ7XG5tbS9raHVnZXBhZ2VkLmM6NzIxOlx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTcyMi1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy03MjQtXHRcdFx0cmVzdWx0ID0gU0NBTl9QVEVfVUZGRDtcbm1tL2todWdlcGFnZWQuYzo3MjU6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtNzI2LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTcyOS1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTlVMTDtcbm1tL2todWdlcGFnZWQuYzo3MzA6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtNzMxLVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTc0Mi1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTEFaWUZSRUU7XG5tbS9raHVnZXBhZ2VkLmM6NzQzOlx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTc0NC1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy03NTctXHRcdFx0XHRcdFx0ICAgICBNVEhQX1NUQVRfQ09MTEFQU0VfRVhDRUVEX1NIQVJFRCk7XG5tbS9raHVnZXBhZ2VkLmM6NzU4Olx0XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtNzU5LVx0XHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtNzY2LVx0XHRcdHJlc3VsdCA9IFNDQU5fUFRFX01BUFBFRF9IVUdFUEFHRTtcbm1tL2todWdlcGFnZWQuYzo3Njc6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtNzY4LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTc5MC1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcbm1tL2todWdlcGFnZWQuYzo3OTE6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtNzkyLVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTgwNy1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfQ09VTlQ7XG5tbS9raHVnZXBhZ2VkLmM6ODA4Olx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTgwOS1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy04MTctXHRcdFx0cmVzdWx0ID0gU0NBTl9ERUxfUEFHRV9MUlU7XG5tbS9raHVnZXBhZ2VkLmM6ODE4Olx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTgxOS1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYz0xMTY1PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IF9fY29sbGFwc2VfaHVnZV9wYWdlX3N3YXBpbihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTE5My1cdFx0XHRcdHJlc3VsdCA9IFNDQU5fTk9fUFRFX1RBQkxFO1xubW0va2h1Z2VwYWdlZC5jOjExOTQ6XHRcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy0xMTk1LVx0XHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTIxMy1cdFx0XHRyZXN1bHQgPSBTQ0FOX0VYQ0VFRF9TV0FQX1BURTtcbm1tL2todWdlcGFnZWQuYzoxMjE0Olx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTEyMTUtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTIzMS1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcbm1tL2todWdlcGFnZWQuYzoxMjMyOlx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTEyMzMtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTIzNi1cdFx0XHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XG5tbS9raHVnZXBhZ2VkLmM6MTIzNzpcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy0xMjM4LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jPTEyOTM9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfaHVnZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEzMTEtXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcbm1tL2todWdlcGFnZWQuYzoxMzEyOlx0XHRnb3RvIG91dF9ub2xvY2s7XG5tbS9raHVnZXBhZ2VkLmMtMTMxMy1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTMxNS1cdFx0cmVzdWx0ID0gU0NBTl9BTExPQ19IVUdFX1BBR0VfRkFJTDtcbm1tL2todWdlcGFnZWQuYzoxMzE2Olx0XHRnb3RvIG91dF9ub2xvY2s7XG5tbS9raHVnZXBhZ2VkLmMtMTMxNy1cdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTMyMy1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG5tbS9raHVnZXBhZ2VkLmM6MTMyNDpcdFx0Z290byBvdXRfbm9sb2NrO1xubW0va2h1Z2VwYWdlZC5jLTEzMjUtXHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTEzMjktXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xubW0va2h1Z2VwYWdlZC5jOjEzMzA6XHRcdGdvdG8gb3V0X25vbG9jaztcbm1tL2todWdlcGFnZWQuYy0xMzMxLVx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xMzQxLVx0XHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcbm1tL2todWdlcGFnZWQuYzoxMzQyOlx0XHRcdGdvdG8gb3V0X25vbG9jaztcbm1tL2todWdlcGFnZWQuYy0xMzQzLVx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xMzU3LVx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXG5tbS9raHVnZXBhZ2VkLmM6MTM1ODpcdFx0Z290byBvdXRfdXBfd3JpdGU7XG5tbS9raHVnZXBhZ2VkLmMtMTM1OS1cdC8qIGNoZWNrIGlmIHRoZSBwbWQgaXMgc3RpbGwgdmFsaWQgKi9cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTM2Mi1cdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxubW0va2h1Z2VwYWdlZC5jOjEzNjM6XHRcdGdvdG8gb3V0X3VwX3dyaXRlO1xubW0va2h1Z2VwYWdlZC5jLTEzNjQtXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE0MTEtXHRcdHNwaW5fdW5sb2NrKHBtZF9wdGwpO1xubW0va2h1Z2VwYWdlZC5jOjE0MTI6XHRcdGdvdG8gb3V0X3VwX3dyaXRlO1xubW0va2h1Z2VwYWdlZC5jLTE0MTMtXHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE0MzAtXHRpZiAodW5saWtlbHkocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkpXG5tbS9raHVnZXBhZ2VkLmM6MTQzMTpcdFx0Z290byBvdXRfdXBfd3JpdGU7XG5tbS9raHVnZXBhZ2VkLmMtMTQzMi1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTYwNj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTYzMC1cdFx0Y2MtXHUwMDNlcHJvZ3Jlc3MmIzQzOyYjNDM7O1xubW0va2h1Z2VwYWdlZC5jOjE2MzE6XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTE2MzItXHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE2NDktXHRcdHJlc3VsdCA9IFNDQU5fTk9fUFRFX1RBQkxFO1xubW0va2h1Z2VwYWdlZC5jOjE2NTA6XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTE2NTEtXHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE2NjQtXHRcdFx0XHRcdFx0ICAgICBNVEhQX1NUQVRfQ09MTEFQU0VfRVhDRUVEX05PTkUpO1xubW0va2h1Z2VwYWdlZC5jOjE2NjU6XHRcdFx0XHRnb3RvIG91dF91bm1hcDtcbm1tL2todWdlcGFnZWQuYy0xNjY2LVx0XHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTY3My1cdFx0XHRcdFx0XHQgICAgIE1USFBfU1RBVF9DT0xMQVBTRV9FWENFRURfU1dBUCk7XG5tbS9raHVnZXBhZ2VkLmM6MTY3NDpcdFx0XHRcdGdvdG8gb3V0X3VubWFwO1xubW0va2h1Z2VwYWdlZC5jLTE2NzUtXHRcdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xNjgyLVx0XHRcdFx0cmVzdWx0ID0gU0NBTl9QVEVfVUZGRDtcbm1tL2todWdlcGFnZWQuYzoxNjgzOlx0XHRcdFx0Z290byBvdXRfdW5tYXA7XG5tbS9raHVnZXBhZ2VkLmMtMTY4NC1cdFx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE2OTctXHRcdFx0cmVzdWx0ID0gU0NBTl9QVEVfVUZGRDtcbm1tL2todWdlcGFnZWQuYzoxNjk4Olx0XHRcdGdvdG8gb3V0X3VubWFwO1xubW0va2h1Z2VwYWdlZC5jLTE2OTktXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTcwMy1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTlVMTDtcbm1tL2todWdlcGFnZWQuYzoxNzA0Olx0XHRcdGdvdG8gb3V0X3VubWFwO1xubW0va2h1Z2VwYWdlZC5jLTE3MDUtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTcxNC1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTEFaWUZSRUU7XG5tbS9raHVnZXBhZ2VkLmM6MTcxNTpcdFx0XHRnb3RvIG91dF91bm1hcDtcbm1tL2todWdlcGFnZWQuYy0xNzE2LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE3MTktXHRcdFx0cmVzdWx0ID0gU0NBTl9QQUdFX0FOT047XG5tbS9raHVnZXBhZ2VkLmM6MTcyMDpcdFx0XHRnb3RvIG91dF91bm1hcDtcbm1tL2todWdlcGFnZWQuYy0xNzIxLVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE3MzEtXHRcdFx0XHRcdFx0ICAgICBNVEhQX1NUQVRfQ09MTEFQU0VfRVhDRUVEX1NIQVJFRCk7XG5tbS9raHVnZXBhZ2VkLmM6MTczMjpcdFx0XHRcdGdvdG8gb3V0X3VubWFwO1xubW0va2h1Z2VwYWdlZC5jLTE3MzMtXHRcdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xNzQ2LVx0XHRcdHJlc3VsdCA9IFNDQU5fU0NBTl9BQk9SVDtcbm1tL2todWdlcGFnZWQuYzoxNzQ3Olx0XHRcdGdvdG8gb3V0X3VubWFwO1xubW0va2h1Z2VwYWdlZC5jLTE3NDgtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTc1MS1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTFJVO1xubW0va2h1Z2VwYWdlZC5jOjE3NTI6XHRcdFx0Z290byBvdXRfdW5tYXA7XG5tbS9raHVnZXBhZ2VkLmMtMTc1My1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xNzU1LVx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9MT0NLO1xubW0va2h1Z2VwYWdlZC5jOjE3NTY6XHRcdFx0Z290byBvdXRfdW5tYXA7XG5tbS9raHVnZXBhZ2VkLmMtMTc1Ny1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xNzY3LVx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9DT1VOVDtcbm1tL2todWdlcGFnZWQuYzoxNzY4Olx0XHRcdGdvdG8gb3V0X3VubWFwO1xubW0va2h1Z2VwYWdlZC5jLTE3NjktXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjI0OD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyNzItXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcbm1tL2todWdlcGFnZWQuYzoyMjczOlx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy0yMjc0LVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNDEyLVx0XHRcdHJlc3VsdCA9IFNDQU5fRkFJTDtcbm1tL2todWdlcGFnZWQuYzoyNDEzOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbm1tL2todWdlcGFnZWQuYy0yNDE0LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0MjItXHRcdFx0cmVzdWx0ID0gU0NBTl9QVEVfTUFQUEVEX0hVR0VQQUdFO1xubW0va2h1Z2VwYWdlZC5jOjI0MjM6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xubW0va2h1Z2VwYWdlZC5jLTI0MjQtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjQyNy1cdFx0XHRyZXN1bHQgPSBTQ0FOX1RSVU5DQVRFRDtcbm1tL2todWdlcGFnZWQuYzoyNDI4Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbm1tL2todWdlcGFnZWQuYy0yNDI5LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0MzgtXHRcdFx0cmVzdWx0ID0gU0NBTl9QQUdFX0RJUlRZX09SX1dSSVRFQkFDSztcbm1tL2todWdlcGFnZWQuYzoyNDM5Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbm1tL2todWdlcGFnZWQuYy0yNDQwLVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0NDMtXHRcdFx0cmVzdWx0ID0gU0NBTl9ERUxfUEFHRV9MUlU7XG5tbS9raHVnZXBhZ2VkLmM6MjQ0NDpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG5tbS9raHVnZXBhZ2VkLmMtMjQ0NS1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNDQ5LVx0XHRcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcbm1tL2todWdlcGFnZWQuYzoyNDUwOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbm1tL2todWdlcGFnZWQuYy0yNDUxLVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0NzUtXHRcdFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xubW0va2h1Z2VwYWdlZC5jOjI0NzY6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xubW0va2h1Z2VwYWdlZC5jLTI0NzctXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjQ5Ni1cdFx0XHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XG5tbS9raHVnZXBhZ2VkLmM6MjQ5NzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG5tbS9raHVnZXBhZ2VkLmMtMjQ5OC1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjcxLVxubW0va2h1Z2VwYWdlZC5jOjI2NzI6XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy0yNjczLVxuLS1cbm1tL2todWdlcGFnZWQuYz0zMjEwPWludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2todWdlcGFnZWQuYy0zMjUyLVx0XHRcdFx0bGFzdF9mYWlsID0gcmVzdWx0O1xubW0va2h1Z2VwYWdlZC5jOjMyNTM6XHRcdFx0XHRnb3RvIG91dF9ub2xvY2s7XG5tbS9raHVnZXBhZ2VkLmMtMzI1NC1cdFx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTMyODEtXHRcdFx0LyogT3RoZXIgZXJyb3IsIGV4aXQgKi9cbm1tL2todWdlcGFnZWQuYzozMjgyOlx0XHRcdGdvdG8gb3V0X21heWJlbG9jaztcbm1tL2todWdlcGFnZWQuYy0zMjgzLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTA2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBGbG93IGluIGBraHVnZXBhZ2VkLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIGBvdXRfdW5sb2NrYCBhbmQgaXRzIGNvbm5lY3Rpb24gdG8gYG91dGAgd2l0aGluIHRoZSBgbW0va2h1Z2VwYWdlZC5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgZnJvbSBsaW5lcyAyNjYwIHRvIDI3MDAuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgaG93IHRoaXMgc3BlY2lmaWMgdW5sb2NrIG9wZXJhdGlvbiwgcmVsZXZhbnQgdG8gaHVnZSBwYWdlcywgY29ubmVjdHMgdG8gb3RoZXIgZnVuY3Rpb25hbGl0aWVzLCBsaWtlbHkgZGVhbGxvY2F0aW9uIG9yIGZyZWVpbmcgbWVjaGFuaXNtcywgcmVwcmVzZW50ZWQgYnkgYG91dGAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIGRpcmVjdCBjYWxsIHBhdGgsIG9yIHBlcmhhcHMgYW4gaW5kaXJlY3QgbWVjaGFuaXNtIHRoYXQgaXMgdHJpZ2dlcmVkIGFmdGVyIHRoZSBgb3V0X3VubG9ja2Agc3RhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHRyYWNrIGFueSBjb25kaXRpb25hbCBsb2dpYywgc3RhdGUgY2hhbmdlcywgb3IgcG90ZW50aWFsIGRhdGEgZGVwZW5kZW5jaWVzIGluIHRoaXMgc2VjdGlvbiB0byB0cmFjZSB0aGUgZW50aXJlIG1lbW9yeSBtYW5hZ2VtZW50IHNlcXVlbmNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjcml0aWNhbCB2YXJpYWJsZXMsIGRhdGEgc3RydWN0dXJlcywgb3IgZnVuY3Rpb24gY2FsbHMgaW4gdGhpcyB2aWNpbml0eSB0aGF0IGRlZmluZSB3aGF0IGhhcHBlbnMgbmV4dCBpbiB0aGUgcHJvY2Vzcy4gVGhpcyBzcGVjaWZpYyBjaHVuayBvZiBjb2RlIGlzIGxpa2VseSBrZXkgdG8gYSBsYXJnZXIgc3lzdGVtIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjYwOlx0XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUyxcbjI2NjE6XHRcdFx0XHRcdCAgICAgIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuMjY2MjpcdFx0XHRpZiAoaXNfc2htZW0pXG4yNjYzOlx0XHRcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TSE1FTSxcbjI2NjQ6XHRcdFx0XHRcdFx0ICAgICAgLWZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4yNjY1Olx0XHRcdGZvbGlvLVx1MDAzZW1hcHBpbmcgPSBOVUxMO1xuMjY2NjpcdFx0XHRmb2xpb19jbGVhcl9hY3RpdmUoZm9saW8pO1xuMjY2NzpcdFx0XHRmb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XG4yNjY4Olx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4yNjY5Olx0XHRcdGZvbGlvX3B1dF9yZWZzKGZvbGlvLCAyICYjNDM7IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4yNjcwOlx0XHR9XG4yNjcxOlx0XG4yNjcyOlx0XHRnb3RvIG91dDtcbjI2NzM6XHRcbjI2NzQ6XHRyb2xsYmFjazpcbjI2NzU6XHRcdC8qIFNvbWV0aGluZyB3ZW50IHdyb25nOiByb2xsIGJhY2sgcGFnZSBjYWNoZSBjaGFuZ2VzICovXG4yNjc2Olx0XHRpZiAobnJfbm9uZSkge1xuMjY3NzpcdFx0XHR4YXNfbG9ja19pcnEoXHUwMDI2eGFzKTtcbjI2Nzg6XHRcdFx0bWFwcGluZy1cdTAwM2VucnBhZ2VzIC09IG5yX25vbmU7XG4yNjc5Olx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4yNjgwOlx0XHRcdHNobWVtX3VuY2hhcmdlKG1hcHBpbmctXHUwMDNlaG9zdCwgbnJfbm9uZSk7XG4yNjgxOlx0XHR9XG4yNjgyOlx0XG4yNjgzOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRtcCwgXHUwMDI2cGFnZWxpc3QsIGxydSkge1xuMjY4NDpcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuMjY4NTpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMjY4NjpcdFx0XHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XG4yNjg3Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4yNjg4Olx0XHR9XG4yNjg5Olx0XG4yNjkwOlx0XHRuZXdfZm9saW8tXHUwMDNlbWFwcGluZyA9IE5VTEw7XG4yNjkxOlx0XG4yNjkyOlx0XHRmb2xpb191bmxvY2sobmV3X2ZvbGlvKTtcbjI2OTM6XHRcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xuMjY5NDpcdG91dDpcbjI2OTU6XHRcdGlmIChuZWVkX3VubG9jaylcbjI2OTY6XHRcdFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XG4yNjk3Olx0XHRWTV9CVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2cGFnZWxpc3QpKTtcbjI2OTg6XHRcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcbjI2OTk6XHRcdHJldHVybiByZXN1bHQ7XG4yNzAwOlx0fVxuMjcwMTpcdFxuMjcwMjpcdHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbjI3MDM6XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCxcbjI3MDQ6XHRcdFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA5MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKktodWdlcGFnZWQgYW5kIHRoZSBFbHVzaXZlIGBvdXRfdW5sb2NrYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgbW0va2h1Z2VwYWdlZC5jYCBhZ2Fpbiwgc3BlY2lmaWNhbGx5IHRyeWluZyB0byB0cmFjZSB0aGUgZmxvdyBvZiBgb3V0X3VubG9ja2AuIE15IG1lbW9yeSBpc24mIzM5O3QgcGVyZmVjdCwgYW5kIEkga25vdyBJJiMzOTt2ZSBiZWVuIGluIHRoaXMgY29kZSBiZWZvcmUsIGJ1dCBhIHF1aWNrIHJlbWluZGVyIGlzIGFsd2F5cyBnb29kLiBMZXQmIzM5O3Mgc2VlLi4ud2hlcmUgKmV4YWN0bHkqIGlzIHRoYXQgYG91dF91bmxvY2tgIGZ1bmN0aW9uIGRlZmluZWQgd2l0aGluIHRoaXMgZmlsZT8gQWgsIHJpZ2h0LCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGxpa2VseSB0byBiZSBzb21ld2hlcmUgaW4gbGluZXMgMjY0MC0yNjc1LiBUaW1lIHRvIGdvIHRha2UgYSBsb29rIGFuZCBqb2cgbXkgbWVtb3J5LiBUaGF0IHNob3VsZCBnZXQgbWUgb3JpZW50ZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjQwOlx0XHQvKiBKb2luIGFsbCB0aGUgc21hbGwgZW50cmllcyBpbnRvIGEgc2luZ2xlIG11bHRpLWluZGV4IGVudHJ5LiAqL1xuMjY0MTpcdFx0eGFzX3NldF9vcmRlcihcdTAwMjZ4YXMsIHN0YXJ0LCBIUEFHRV9QTURfT1JERVIpO1xuMjY0MjpcdFx0eGFzX3N0b3JlKFx1MDAyNnhhcywgbmV3X2ZvbGlvKTtcbjI2NDM6XHRcdFdBUk5fT05fT05DRSh4YXNfZXJyb3IoXHUwMDI2eGFzKSk7XG4yNjQ0Olx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjY0NTpcdFxuMjY0NjpcdFx0LypcbjI2NDc6XHRcdCAqIFJlbW92ZSBwdGUgcGFnZSB0YWJsZXMsIHNvIHdlIGNhbiByZS1mYXVsdCB0aGUgcGFnZSBhcyBodWdlLlxuMjY0ODpcdFx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxuMjY0OTpcdFx0ICovXG4yNjUwOlx0XHRyZXRyYWN0X3BhZ2VfdGFibGVzKG1hcHBpbmcsIHN0YXJ0KTtcbjI2NTE6XHRcdGlmIChjYyBcdTAwMjZcdTAwMjYgIWNjLVx1MDAzZWlzX2todWdlcGFnZWQpXG4yNjUyOlx0XHRcdHJlc3VsdCA9IFNDQU5fUFRFX01BUFBFRF9IVUdFUEFHRTtcbjI2NTM6XHRcdGZvbGlvX3VubG9jayhuZXdfZm9saW8pO1xuMjY1NDpcdFxuMjY1NTpcdFx0LypcbjI2NTY6XHRcdCAqIFRoZSBjb2xsYXBzZSBoYXMgc3VjY2VlZGVkLCBzbyBmcmVlIHRoZSBvbGQgZm9saW9zLlxuMjY1NzpcdFx0ICovXG4yNjU4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRtcCwgXHUwMDI2cGFnZWxpc3QsIGxydSkge1xuMjY1OTpcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuMjY2MDpcdFx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsXG4yNjYxOlx0XHRcdFx0XHQgICAgICAtZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbjI2NjI6XHRcdFx0aWYgKGlzX3NobWVtKVxuMjY2MzpcdFx0XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU0hNRU0sXG4yNjY0Olx0XHRcdFx0XHRcdCAgICAgIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuMjY2NTpcdFx0XHRmb2xpby1cdTAwM2VtYXBwaW5nID0gTlVMTDtcbjI2NjY6XHRcdFx0Zm9saW9fY2xlYXJfYWN0aXZlKGZvbGlvKTtcbjI2Njc6XHRcdFx0Zm9saW9fY2xlYXJfdW5ldmljdGFibGUoZm9saW8pO1xuMjY2ODpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMjY2OTpcdFx0XHRmb2xpb19wdXRfcmVmcyhmb2xpbywgMiAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg2MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkxvY2F0aW5nIHRoZSBNaXNzaW5nIFBpZWNlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgb3V0X3VubG9ja2AgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZGVmaW5lZC4gSSBrbm93IGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCYjMzk7cyBodWdlIHBhZ2UgbWFuYWdlbWVudCwgbGlrZWx5IHdpdGhpbiB0aGUgYGtodWdlcGFnZWRgIHN1YnN5c3RlbS4gVGhlcmVmb3JlLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBtbS9raHVnZXBhZ2VkLmNgIGZpbGUuIEkmIzM5O2xsIGRvIGEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aGF0IHNvdXJjZSBmaWxlIGZvciB0aGUgZXhhY3QgbGFiZWwsIGBvdXRfdW5sb2NrOmAuIFRoYXQgc2hvdWxkIGxlYWQgbWUgZGlyZWN0bHkgdG8gdGhlIGZ1bmN0aW9uJiMzOTtzIGRlY2xhcmF0aW9uIG9yIGRlZmluaXRpb24sIGFuZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gSXTigJlzIHRoZSBvYnZpb3VzIGZpcnN0IHRoaW5nIHRvIGNoZWNrLCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdXRfdW5sb2NrOiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MjI0OD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI1MDUtXHRcdGNvbnRpbnVlO1xubW0va2h1Z2VwYWdlZC5jOjI1MDY6b3V0X3VubG9jazpcbm1tL2todWdlcGFnZWQuYy0yNTA3LVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE4MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgbW0va2h1Z2VwYWdlZC5jYCBhbmQgemVybyBpbiBvbiBsaW5lcyAyNTA1LTI1MzAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0IGEgc3BlY2lmaWMgcGFydCBvZiBpdCwgcmVsYXRlZCB0byBraHVnZXBhZ2VkLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gZGVhbCB3aXRoIGEgY3J1Y2lhbCBhc3BlY3Qgb2YgdGhlIHByb2Nlc3MsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYWxsb2NhdGluZyBvciBtYW5hZ2luZyBodWdlIHBhZ2VzLCBzaW5jZSB0aGF0JiMzOTtzIHdoYXQga2h1Z2VwYWdlZCBpcyBhbGwgYWJvdXQuIAoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gSXMgdGhpcyBhIGNvcmUgYWxsb2NhdGlvbiBmdW5jdGlvbj8gSXMgaXQgaGFuZGxpbmcgcGFnZSBmYXVsdHMsIHByZWZldGNoaW5nLCBvciBwZXJoYXBzIHNvbWUga2luZCBvZiBkZWZyYWdtZW50YXRpb24gb3IgY29tcGFjdGlvbiByZWxhdGVkIHRvIGh1Z2UgcGFnZSBtYW5hZ2VtZW50PyBHaXZlbiB0aGUgbGluZSBudW1iZXJzLCBpdCYjMzk7cyBsaWtlbHkgYSByZWxhdGl2ZWx5IHNlbGYtY29udGFpbmVkIGNodW5rIG9mIGNvZGUsIHdoaWNoIGhlbHBzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9uYWwgYnJhbmNoZXMsIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IGhpbnQgb2YgbG9jayBhY3F1aXNpdGlvbiBvciByZWxlYXNlLCBhcyBjb25jdXJyZW5jeSBpcyBhbHdheXMgYSBrZXkgY29uc2lkZXJhdGlvbiBpbiBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIGVycm9yIGhhbmRsaW5nLCBiZWNhdXNlIHRoZSBrZXJuZWwgaXMgbmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgYSBwYXNzIG9uIHRoYXQuIE15IG92ZXJhbGwgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGVzZSBsaW5lcywgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwga2h1Z2VwYWdlZCBtZWNoYW5pc20uIE5vdywgbGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1MDU6XHRcdFx0Y29udGludWU7XG4yNTA2Olx0b3V0X3VubG9jazpcbjI1MDc6XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjI1MDg6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjI1MDk6XHRcdFx0Z290byB4YV91bmxvY2tlZDtcbjI1MTA6XHRcdH1cbjI1MTE6XHRcbjI1MTI6XHR4YV9sb2NrZWQ6XG4yNTEzOlx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjUxNDpcdHhhX3VubG9ja2VkOlxuMjUxNTpcdFxuMjUxNjpcdFx0LypcbjI1MTc6XHRcdCAqIElmIGNvbGxhcHNlIGlzIHN1Y2Nlc3NmdWwsIGZsdXNoIG11c3QgYmUgZG9uZSBub3cgYmVmb3JlIGNvcHlpbmcuXG4yNTE4Olx0XHQgKiBJZiBjb2xsYXBzZSBpcyB1bnN1Y2Nlc3NmdWwsIGRvZXMgZmx1c2ggYWN0dWFsbHkgbmVlZCB0byBiZSBkb25lP1xuMjUxOTpcdFx0ICogRG8gaXQgYW55d2F5LCB0byBjbGVhciB0aGUgc3RhdGUuXG4yNTIwOlx0XHQgKi9cbjI1MjE6XHRcdHRyeV90b191bm1hcF9mbHVzaCgpO1xuMjUyMjpcdFxuMjUyMzpcdFx0aWYgKHJlc3VsdCA9PSBTQ0FOX1NVQ0NFRUQgXHUwMDI2XHUwMDI2IG5yX25vbmUgXHUwMDI2XHUwMDI2XG4yNTI0Olx0XHQgICAgIXNobWVtX2NoYXJnZShtYXBwaW5nLVx1MDAzZWhvc3QsIG5yX25vbmUpKVxuMjUyNTpcdFx0XHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XG4yNTI2Olx0XHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkge1xuMjUyNzpcdFx0XHRucl9ub25lID0gMDtcbjI1Mjg6XHRcdFx0Z290byByb2xsYmFjaztcbjI1Mjk6XHRcdH1cbjI1MzA6XHRcbjI1MzE6XHRcdC8qXG4yNTMyOlx0XHQgKiBUaGUgb2xkIGZvbGlvcyBhcmUgbG9ja2VkLCBzbyB0aGV5IHdvbiYjMzk7dCBjaGFuZ2UgYW55bW9yZS5cbjI1MzM6XHRcdCAqL1xuMjUzNDpcdFx0aW5kZXggPSBzdGFydDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5MTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIFJlbGF0ZWQgdG8gRmlsZSBTeXN0ZW0gSW52YWxpZGF0aW9uKioKCk9rYXksIHNvIHRoaXMgYHJvbGxiYWNrYCBkaXJlY3RseSBwb2ludHMgdG8gYSBqdW1wIHRvIGBvdXQ6YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBGaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSBjb21taXQgaXRzZWxmICpkb2VzKi4gTGV0JiMzOTtzIGRpZyBpbnRvIGBjb2xsYXBzZV9maWxlYC4KCkFoLCBiZWZvcmUgdGhpcyBwYXRjaCwgaXQgbG9va3MgbGlrZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYCB3YXNuJiMzOTt0IGhlbGQgYWNyb3NzIGBjb2xsYXBzZV9maWxlYC4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBhcmVhIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgcmlnaHQuIE5vdywgdGhhdCByYWlzZXMgYSBxdWVzdGlvbi4gV2h5IGV4YWN0bHkgZG9lcyBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgICpyZXF1aXJlKiBgbWFwcGluZy0mZ3Q7aW52YWxpZGF0ZV9sb2NrYCB0byBiZSBoZWxkPyBTb21ldGhpbmcgaXNuJiMzOTt0IHNpdHRpbmcgcXVpdGUgcmlnaHQuCgpBaGEhIExvb2tpbmcgY2xvc2VyIGF0IHRoZSBjb2RlLCBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKWAgY29udGFpbnMgYGxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDttYXBwaW5nLSZndDtpbnZhbGlkYXRlX2xvY2spO2AuIFRoYXQgY29uZmlybXMgaXQuIE5vdywgcHJldmlvdXNseSwgSSByZW1lbWJlciBgY29sbGFwc2VfZmlsZWAgY2FsbGVkIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgLiBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSwgd2hhdCBkaWQgKnRoYXQqIGRvPyBMZXQmIzM5O3MgcmVmcmVzaCBteXNlbGYuCgpJbiBgcGFnZV9jYWNoZV9zeW5jX3JhKClgLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nOiBkb2VzIGl0IGFjdHVhbGx5IGFjcXVpcmUgYGludmFsaWRhdGVfbG9ja2A/IEkmIzM5O2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBgbW0vcmVhZGFoZWFkLmNgIGZpbGUgZm9yIGluc3RhbmNlcyBvZiBgcGFnZV9jYWNoZV9zeW5jX3JhYCB0byBjb25maXJtIGhvdyBpdCBoYW5kbGVzIGxvY2tzLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGNyaXRpY2FsIGFyZWEgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludmFsaWRhdGVfbG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3JlYWRhaGVhZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JlYWRhaGVhZC5jPTE5NT1zdGF0aWMgc3RydWN0IGZvbGlvICpyYWN0bF9hbGxvY19mb2xpbyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbm1tL3JlYWRhaGVhZC5jLTIxNy0gKlxubW0vcmVhZGFoZWFkLmM6MjE4OiAqIENvbnRleHQ6IEZpbGUgaXMgcmVmZXJlbmNlZCBieSBjYWxsZXIsIGFuZCByYWN0bC1cdTAwM2VtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9ja1xubW0vcmVhZGFoZWFkLmMtMjE5LSAqIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGF0IGxlYXN0IGluIHNoYXJlZCBtb2RlLiAgTXV0ZXhlcyBtYXkgYmUgaGVsZCBieVxuLS1cbm1tL3JlYWRhaGVhZC5jPTIyMj12b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4tLVxubW0vcmVhZGFoZWFkLmMtMjQyLVxubW0vcmVhZGFoZWFkLmM6MjQzOlx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayk7XG5tbS9yZWFkYWhlYWQuYy0yNDQtXG4tLVxubW0vcmVhZGFoZWFkLmM9MzI2PXN0YXRpYyB2b2lkIGRvX3BhZ2VfY2FjaGVfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbi0tXG5tbS9yZWFkYWhlYWQuYy0zNDYtXG5tbS9yZWFkYWhlYWQuYzozNDc6XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG5tbS9yZWFkYWhlYWQuYy0zNDgtXHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChyYWN0bCwgbnJfdG9fcmVhZCwgbG9va2FoZWFkX3NpemUpO1xuLS1cbm1tL3JlYWRhaGVhZC5jPTQ4MT12b2lkIHBhZ2VfY2FjaGVfcmFfb3JkZXIoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbi0tXG5tbS9yZWFkYWhlYWQuYy01MTYtXHRub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5tbS9yZWFkYWhlYWQuYzo1MTc6XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG5tbS9yZWFkYWhlYWQuYy01MTgtXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQW5hbHlzaXMgb2YgYSBGaWxlIE1hcHBpbmcgTG9jayBPcmRlcmluZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBjb2xsYXBzZV9maWxlYCBhbmQgaW1tZWRpYXRlbHkgbm90aWNlIHRoZSBjaGFuZ2UgaW4gbG9jayBhY3F1aXNpdGlvbiBvcmRlci4gSXQmIzM5O3MgYWNxdWlyaW5nIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZylgICpiZWZvcmUqIGFueSBmb2xpbyBsb2NrcywgcmlnaHQ/IFRoYXQmIzM5O3MgdGhlIGtleS4gIEkgc2VlIHRoYXQgYGRvX3BhZ2VfY2FjaGVfcmFgIGlzIGFsc28gZ3JhYmJpbmcgdGhpcyBzYW1lIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWRgLgoKVGhlIHByb2JsZW0gd2FzIHRoYXQsICpiZWZvcmUqIHRoaXMgY2hhbmdlLCBgY29sbGFwc2VfZmlsZWAgY291bGQgZGVhZGxvY2sgd2l0aCB0cnVuY2F0ZS4gIGBjb2xsYXBzZV9maWxlYCB3YXMgaG9sZGluZyBmb2xpbyBsb2NrcyB3aGlsZSB0cnVuY2F0ZSB3YXMgcnVubmluZy4gVHJ1bmNhdGUgd291bGQgYWNxdWlyZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfZXhjbHVzaXZlYCBhbmQgdGhlbiAqd2FpdCogb24gdGhvc2Ugc2FtZSBmb2xpbyBsb2Nrcy4gSWYgYGNvbGxhcHNlX2ZpbGVgIHRoZW4gY2FsbGVkIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgLCB3aGljaCBjYWxscyBgZG9fcGFnZV9jYWNoZV9yYSgpYCwgd2UgZ2V0IGEgZGVhZGxvY2suIGBkb19wYWdlX2NhY2hlX3JhYCB0cmllcyB0byBhY3F1aXJlIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWRgIHdoaWxlIGB0cnVuY2F0ZWAgaG9sZHMgdGhlIGV4Y2x1c2l2ZSBsb2NrIGFuZCB3YWl0cyBvbiBmb2xpbyBsb2NrcyBoZWxkIGJ5IGBjb2xsYXBzZV9maWxlYC4gVGhlIGZpeCBpcyB0byB0YWtlIHRoZSBpbnZhbGlkYXRlIGxvY2sgZWFybGllciB0byBhdm9pZCB0aGUgb3JkZXJpbmcgaXNzdWUuCgpUaGUgY29tbWVudCBjbGVhcmx5IGV4cGxhaW5zIHRoZSByYXRpb25hbGU6ICAmIzM0O1Rha2UgaW52YWxpZGF0ZV9sb2NrIGJlZm9yZSBhbnkgZm9saW8gbG9jazogdGhlIHJlYWRhaGVhZCBiZWxvdyBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuJiMzNDsgU21hcnQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHJlYWRhaGVhZCBsb29wIGNoYW5nZXMuIFdlJiMzOTt2ZSBnb3QgYERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsICZhbXA7ZmlsZS0mZ3Q7Zl9yYSwgbWFwcGluZywgaW5kZXgpO2AgYW5kIHRoZW4gYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgLiBUaGUgY29tbWVudHMgZXhwbGFpbiB0aGF0IGBpbnZhbGlkYXRlX2xvY2tgIGlzIGFscmVhZHkgaGVsZCwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gcmVhY3F1aXJlIGl0LiAgQWxzbywgdGhlIHJlYWRhaGVhZCBoZWxwZXIgaXQgcmVwbGFjZXMgZG9lcyBub3QgY2xhbXAgdG8gRU9GLCBzbyB0aGlzIG5ldyBpbXBsZW1lbnRhdGlvbiBlbnN1cmVzIHRoYXQgcmVhZGFoZWFkIGRvZXMgbm90IGdvIHBhc3QgRU9GLiBUaGUgdmFyaWFibGUgYHJhY3RsYCBpcyBpbml0aWFsaXplZCwgYW5kIGFsbCB0aGUgZmllbGRzIGFyZSBmaWxsZWQuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBtZW1vcnkgbGVha3Mgb3IgbWVtb3J5IHJlYWQgZXJyb3JzLgoKVGhlIHBhdGNoIGluY2x1ZGVzIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uOiBgYm9vbCBuZWVkX3VubG9jayA9IGZhbHNlO2AgYW5kIHRoZSBjb25kaXRpb25hbCBmb3IgdGhlIGludmFsaWRhdGUgbG9jayBpcyBub3c6IGBpZiAoIWlzX3NobWVtKSB7IGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTsgbmVlZF91bmxvY2sgPSB0cnVlOyB9YC4gVGhpcyBtYWtlcyBzdXJlIHdlIGFjdHVhbGx5IHJlbGVhc2UgdGhlIGxvY2sgaWYgd2UgYWNxdWlyZSBpdC4gVGhlIGBERUZJTkVfUkVBREFIRUFEYCBpcyBhbHNvIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBzbyBubyBwcm9ibGVtcyB0aGVyZS4gIFRoZSBpbmRleCBjYWxjdWxhdGlvbiB1c2VzIHZhbHVlcyBpbml0aWFsaXplZCBlYXJsaWVyLCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpTbyBmYXIsIGl0IGxvb2tzIGNsZWFuLgoKTGV0JiMzOTtzIGNhcmVmdWxseSB2ZXJpZnkgdGhlIGxvb3Agd2l0aCB0aGUgYGluZGV4YCBjb3VudGVyLiAgYGluZGV4YCBzdGFydHMgYXQgMCwgZ29lcyB0byBgZW5kYCB2aWEgYHhhc2AuIE5vIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiAgVGhlIGxvb3AgaW4gYGNvbGxhcHNlX2ZpbGVgIHdpdGggdGhlIGB4YXNfZm9yX2VhY2hgIGlzIHNhZmUuCgpOb3csIGNoZWNraW5nIGFnYWluc3QgS01TQU4gY3JpdGVyaWE6CgoxLiAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSBkaXJlY3RseS4gVGhpcyBpcyBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCwgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuCjIuICBDb25kaXRpb25hbCBsb2dpYyBzZWVtcyBzYWZlLiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9ucyBhcmUgaW5pdGlhbGl6ZWQuCgpPdmVyYWxsLCBpdCBsb29rcyBsaWtlIGEgd2VsbC10aG91Z2h0LW91dCBmaXggdGhhdCBhZGRyZXNzZXMgYSBjbGVhciBkZWFkbG9jayBjb25kaXRpb24sIGFuZCBJJiMzOTttIG5vdCBzZWVpbmcgYW55IGltbWVkaWF0ZSBLTVNBTiB2aW9sYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMwMDpcdFx0XHRcdGJyZWFrO1xuMjMwMTpcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjMwMjpcdFx0XHRpZiAoIXhhc19ub21lbShcdTAwMjZ4YXMsIEdGUF9LRVJORUwpKSB7XG4yMzAzOlx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjMwNDpcdFx0XHRcdGdvdG8gcm9sbGJhY2s7XG4yMzA1Olx0XHRcdH1cbjIzMDY6XHRcdH0gd2hpbGUgKDEpO1xuMjMwNzpcdFxuMjMwODpcdFx0Zm9yIChpbmRleCA9IHN0YXJ0OyBpbmRleCBcdTAwM2MgZW5kOykge1xuMjMwOTpcdFx0XHR4YXNfc2V0KFx1MDAyNnhhcywgaW5kZXgpO1xuMjMxMDpcdFx0XHRmb2xpbyA9IHhhc19sb2FkKFx1MDAyNnhhcyk7XG4yMzExOlx0XG4yMzEyOlx0XHRcdFZNX0JVR19PTihpbmRleCAhPSB4YXMueGFfaW5kZXgpO1xuMjMxMzpcdFx0XHRpZiAoaXNfc2htZW0pIHtcbjIzMTQ6XHRcdFx0XHRpZiAoIWZvbGlvKSB7XG4yMzE1Olx0XHRcdFx0XHQvKlxuMjMxNjpcdFx0XHRcdFx0ICogU3RvcCBpZiBleHRlbnQgaGFzIGJlZW4gdHJ1bmNhdGVkIG9yXG4yMzE3Olx0XHRcdFx0XHQgKiBob2xlLXB1bmNoZWQsIGFuZCBpcyBub3cgY29tcGxldGVseVxuMjMxODpcdFx0XHRcdFx0ICogZW1wdHkuXG4yMzE5Olx0XHRcdFx0XHQgKi9cbjIzMjA6XHRcdFx0XHRcdGlmIChpbmRleCA9PSBzdGFydCkge1xuMjMyMTpcdFx0XHRcdFx0XHRpZiAoIXhhc19uZXh0X2VudHJ5KFx1MDAyNnhhcywgZW5kIC0gMSkpIHtcbjIzMjI6XHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX1RSVU5DQVRFRDtcbjIzMjM6XHRcdFx0XHRcdFx0XHRnb3RvIHhhX2xvY2tlZDtcbjIzMjQ6XHRcdFx0XHRcdFx0fVxuMjMyNTpcdFx0XHRcdFx0fVxuMjMyNjpcdFx0XHRcdFx0bnJfbm9uZSYjNDM7JiM0Mzs7XG4yMzI3Olx0XHRcdFx0XHRpbmRleCYjNDM7JiM0Mzs7XG4yMzI4Olx0XHRcdFx0XHRjb250aW51ZTtcbjIzMjk6XHRcdFx0XHR9XG4yMzMwOlx0XG4yMzMxOlx0XHRcdFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSB8fCAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpIHtcbjIzMzI6XHRcdFx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4yMzMzOlx0XHRcdFx0XHQvKiBzd2FwIGluIG9yIGluc3RhbnRpYXRlIGZhbGxvY2F0ZWQgcGFnZSAqL1xuMjMzNDpcdFx0XHRcdFx0aWYgKHNobWVtX2dldF9mb2xpbyhtYXBwaW5nLVx1MDAzZWhvc3QsIGluZGV4LCAwLFxuMjMzNTpcdFx0XHRcdFx0XHRcdFx1MDAyNmZvbGlvLCBTR1BfTk9BTExPQykpIHtcbjIzMzY6XHRcdFx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjMzNzpcdFx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjMzODpcdFx0XHRcdFx0fVxuMjMzOTpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE4NQoJCQkJCQkJb3V0cHV0OiAyNTMKCQkJCQkJCXRob3VnaHRzOiA4MjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEtNU0FOIE5lZWRzIEZsYWcgZm9yIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29kZSBleHBsaWNpdGx5IG1hbmFnZXMgdGhlIGxvb3AgaW5kZXggKGBpbmRleGApLCBzbyBpbml0aWFsaXphdGlvbiBpc24mIzM5O3QgYW4gaXNzdWUuIFRoZW4sIHdlIHNlZSB0aGF0IGBuZWVkX3VubG9ja2AgaXMgYWxzbyBpbml0aWFsaXplZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGF0IGl0IGlzIHByb3Blcmx5IGhhbmRsZWQgZXZlbiBpbiB0aGUgZXZlbnQgb2YgYW4gYGFsbG9jX2NoYXJnZV9mb2xpb2AgZmFpbHVyZS4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgYW55IG5ldyBzY2VuYXJpb3Mgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZC4gRXZlbiBpZiBgYWxsb2NfY2hhcmdlX2ZvbGlvYCBmYWlscywgdGhlIGBuZWVkX3VubG9ja2AgZmxhZyBwcm9wZXJseSBjb250cm9scyB0aGUgbG9ja2luZy91bmxvY2tpbmcgYmVoYXZpb3IgaW4gYWxsIGV4aXQgcGF0aHMsIGluY2x1ZGluZyB0aGUgZXJyb3IgcGF0aHMuCgpNb3Zpbmcgb24sIGByYWN0bGAgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZWQgdXNpbmcgYERFRklORV9SRUFEQUhFQUQoKWAsIHdoaWNoIGVuc3VyZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgcmVtYWluaW5nIHN0cnVjdCBmaWVsZHMuIFRoaXMgaXMgZ29vZC4gRnVydGhlciwgdGhlIHVzZSBvZiBgZW9mYCBhbmQgYm91bmRzIGNoZWNrcyBhcHBlYXIgc291bmQuIFdlJiMzOTtyZSB1c2luZyBzdGFuZGFyZCBwYWdlIGNhY2hlIHJlYWRhaGVhZCB3aXRoIGEgYG1pbihlbmQsIGVvZilgIGNhbGN1bGF0aW9uLiBUaGUgcGF0Y2ggbGV2ZXJhZ2VzIGV4aXN0aW5nIGZpbGVzeXN0ZW0gSS9PIHByYWN0aWNlcyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMgaGVyZS4KCk5vdywgd2hhdCBpcyB0aGUgKmJ1ZyogdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3Nlcz8gSXQmIzM5O3MgYSBsb2NraW5nIGRlYWRsb2NrLiBTcGVjaWZpY2FsbHksIGEgZGVhZGxvY2sgLyBpbnZlcnNpb24gYmV0d2VlbiB0aGUgYGludmFsaWRhdGVfbG9ja2AgYW5kIHRoZSBmb2xpbyBsb2NrLiBJdCYjMzk7cyBhYm91dCByZWFkYWhlYWQgcG90ZW50aWFsbHkgZ3JhYmJpbmcgdGhlIGBpbnZhbGlkYXRlX2xvY2tgIHdoaWxlICphbHJlYWR5KiBob2xkaW5nIGEgZm9saW8gbG9jaywgdmVyc3VzIHRydW5jYXRlIGdyYWJiaW5nIHRoZSBgaW52YWxpZGF0ZV9sb2NrYCBhbmQgdGhlbiB3YWl0aW5nIG9uIHRoZSBmb2xpbyBsb2NrLiBMT0NLREVQIGlzIHRoZSB0b29sIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIGNhdGNoaW5nIGFuZCBmbGFnZ2luZyB0aGVzZSBsb2NraW5nIGlzc3Vlcywgbm90IEtNU0FOLgoKVGhpbmtpbmcgYWJvdXQgdGhlIEtNU0FOIHJ1bGVzOgoKMS4gIFRoaXMgcGF0Y2ggKnByaW1hcmlseSogZml4ZXMgYSBsb2NraW5nIGhpZXJhcmNoeSBpc3N1ZS4gS01TQU4gZG9lc24mIzM5O3QgZm9jdXMgb24gbG9ja2luZyBpc3N1ZXM7IExPQ0tERVAgZG9lcy4KMi4gIEFsbCBzdGFjay0gYW5kIGhlYXAtYWxsb2NhdGVkIHN0cnVjdHVyZXMgYXJlIGVpdGhlciBmdWxseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgYmVmb3JlIGFueSBhY2Nlc3Mgb2NjdXJzIChlLmcuLCBgbmVlZF91bmxvY2tgLCBgcmFjdGxgLCBldGMuKQozLiAgTm8gdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGJlaW5nIHRvdWNoZWQgb3IgaW50cm9kdWNlZC4KNC4gIFRoZSBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBiZWNhdXNlIHRoZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGxvY2tpbmcgaXNzdWVzIGFyZSB0cmFja2VkIGJ5IExPQ0tERVAuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgc2V0IHRvIGBmYWxzZWAuIFRpbWUgdG8gbW92ZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgY29sbGFwc2VfZmlsZSgpYCBpbiBgbW0va2h1Z2VwYWdlZC5jYCB0byBwcmV2ZW50IGEgbG9ja2luZyBkZWFkbG9jayBiZXR3ZWVuIGBtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9ja2AgYW5kIGZvbGlvIGxvY2tzIChlLmcuIGR1cmluZyBjb25jdXJyZW50IHRydW5jYXRpb24pLiBJdCB0YWtlcyBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYCBwcmlvciB0byBmb2xpbyBsb2NraW5nIGFuZCBkaXJlY3RseSBpbnZva2VzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpYCBpbnN0ZWFkIG9mIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgLlxuXG4tIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlcyAoYG5lZWRfdW5sb2NrYCwgYHJhY3RsYCwgYGVvZmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZDogYG5lZWRfdW5sb2NrYCBpcyBpbml0aWFsaXplZCB0byBgZmFsc2VgLCBhbmQgYHJhY3RsYCBpcyBpbml0aWFsaXplZCB2aWEgYERFRklORV9SRUFEQUhFQUQoKWAsIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgYWxsIHVuc3BlY2lmaWVkIHN0cnVjdHVyZSBmaWVsZHMgcGVyIEMgZGVzaWduYXRlZCBpbml0aWFsaXplciBzZW1hbnRpY3MuXG4tIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbHRlciBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgaW9jdGxzLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZC5cbi0gTG9ja2luZyBjb3JyZWN0bmVzcyBhbmQgZGVhZGxvY2tzIGFkZHJlc3NlZCBoZXJlIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBjb25maWdzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBjb2xsYXBzZV9maWxlKClgIGluIGBtbS9raHVnZXBhZ2VkLmNgIHRvIHByZXZlbnQgYSBsb2NraW5nIGRlYWRsb2NrIGJldHdlZW4gYG1hcHBpbmctXHUwMDNlaW52YWxpZGF0ZV9sb2NrYCBhbmQgZm9saW8gbG9ja3MgKGUuZy4gZHVyaW5nIGNvbmN1cnJlbnQgdHJ1bmNhdGlvbikuIEl0IHRha2VzIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZylgIHByaW9yIHRvIGZvbGlvIGxvY2tpbmcgYW5kIGRpcmVjdGx5IGludm9rZXMgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgIGluc3RlYWQgb2YgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKWAuXG5cbi0gQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChgbmVlZF91bmxvY2tgLCBgcmFjdGxgLCBgZW9mYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkOiBgbmVlZF91bmxvY2tgIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAsIGFuZCBgcmFjdGxgIGlzIGluaXRpYWxpemVkIHZpYSBgREVGSU5FX1JFQURBSEVBRCgpYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyBhbGwgdW5zcGVjaWZpZWQgc3RydWN0dXJlIGZpZWxkcyBwZXIgQyBkZXNpZ25hdGVkIGluaXRpYWxpemVyIHNlbWFudGljcy5cbi0gVGhlIGNoYW5nZXMgZG8gbm90IGFsdGVyIGtlcm5lbC10by11c2VyIGRhdGEgY29waWVzLCBpb2N0bHMsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy5cbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBleHBvc2VkLlxuLSBMb2NraW5nIGNvcnJlY3RuZXNzIGFuZCBkZWFkbG9ja3MgYWRkcmVzc2VkIGhlcmUgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGNvbmZpZ3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowNzozMS41NTE3MDE5MjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA3OTA0MDk2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb2xsYXBzZV9maWxlXCIsXG4gICAgXCJjb2xsYXBzZV9zY2FuX2ZpbGVcIixcbiAgICBcImNvbGxhcHNlX3NpbmdsZV9wbWRcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBjb2xsYXBzZV9maWxlKClgIGluIGBtbS9raHVnZXBhZ2VkLmNgIHRvIHByZXZlbnQgYSBsb2NraW5nIGRlYWRsb2NrIGJldHdlZW4gYG1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9ja2AgYW5kIGZvbGlvIGxvY2tzIChlLmcuIGR1cmluZyBjb25jdXJyZW50IHRydW5jYXRpb24pLiBJdCB0YWtlcyBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYCBwcmlvciB0byBmb2xpbyBsb2NraW5nIGFuZCBkaXJlY3RseSBpbnZva2VzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpYCBpbnN0ZWFkIG9mIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgLlxcblxcbi0gQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChgbmVlZF91bmxvY2tgLCBgcmFjdGxgLCBgZW9mYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkOiBgbmVlZF91bmxvY2tgIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAsIGFuZCBgcmFjdGxgIGlzIGluaXRpYWxpemVkIHZpYSBgREVGSU5FX1JFQURBSEVBRCgpYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyBhbGwgdW5zcGVjaWZpZWQgc3RydWN0dXJlIGZpZWxkcyBwZXIgQyBkZXNpZ25hdGVkIGluaXRpYWxpemVyIHNlbWFudGljcy5cXG4tIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbHRlciBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgaW9jdGxzLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcuXFxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGV4cG9zZWQuXFxuLSBMb2NraW5nIGNvcnJlY3RuZXNzIGFuZCBkZWFkbG9ja3MgYWRkcmVzc2VkIGhlcmUgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGNvbmZpZ3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29sbGFwc2VfZmlsZSgpIGluIG1tL2todWdlcGFnZWQuYyB0byBhY3F1aXJlIG1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9jayBlYXJsaWVyIChwcmlvciB0byBsb2NraW5nIGZvbGlvcykgYW5kIGhvbGQgaXQgc2hhcmVkIHRocm91Z2hvdXQgdGhlIGNvbGxhcHNlIG9wZXJhdGlvbiwgcmVwbGFjaW5nIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB3aXRoIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWx0ZXIgbG9ja2luZyBoaWVyYXJjaGllcywgY29uY3VycmVuY3ksIGFuZCByZWFkYWhlYWQgYmVoYXZpb3IgZHVyaW5nIFRIUCBmaWxlIGNvbGxhcHNlIChyZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3Iga2h1Z2VwYWdlZCBzY2FubmluZykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24sIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi9pbnZhbGlkYXRpb24sIGFuZCByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA3OjMxLjU1MTcwOTc2M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMTcwOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmEyMGE5ZTg1YzNmYWQxZWM5ZGU2YjgzMmM3MGI0Y2ViOWEwYWM1YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAxNzowNzozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcXG5pbmRleCAxMWZmOThkNTVjNzZlLi5hNWZjYWZkNTc1MDU2IDEwMDY0NFxcbi0tLSBhL21tL2todWdlcGFnZWQuY1xcbisrKyBiL21tL2todWdlcGFnZWQuY1xcbkBAIC0yMjU3LDYgKzIyNTcsNyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0ID0gU0NBTl9TVUNDRUVEO1xcbiBcXHRpbnQgbnJfbm9uZSA9IDA7XFxuIFxcdGJvb2wgaXNfc2htZW0gPSBzaG1lbV9maWxlKGZpbGUpO1xcbitcXHRib29sIG5lZWRfdW5sb2NrID0gZmFsc2U7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBNQURWX0NPTExBUFNFIGlnbm9yZXMgc2htZW0gaHVnZSBjb25maWcsIHNvIGRvIG5vdCBjaGVjayBzaG1lbVxcbkBAIC0yMjcxLDYgKzIyNzIsMTUgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3dcXG4rXFx0ICogbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFpc19zaG1lbSkge1xcbitcXHRcXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XFxuK1xcdFxcdG5lZWRfdW5sb2NrID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gXFx0bWFwcGluZ19zZXRfdXBkYXRlKFxcdTAwMjZ4YXMsIG1hcHBpbmcpO1xcbiBcXG4gXFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XFxuQEAgLTIzMzcsMTAgKzIzNDcsMjAgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH0gZWxzZSB7XFx0LyogIWlzX3NobWVtICovXFxuIFxcdFxcdFxcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XFxuK1xcdFxcdFxcdFxcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIFxcdTAwMjZmaWxlLVxcdTAwM2VmX3JhLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIG1hcHBpbmcsIGluZGV4KTtcXG4rXFx0XFx0XFx0XFx0cGdvZmZfdCBlb2YgPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQobWFwcGluZy1cXHUwMDNlaG9zdCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBQQUdFX1NJWkUpO1xcbitcXG4gXFx0XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuLVxcdFxcdFxcdFxcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgXFx1MDAyNmZpbGUtXFx1MDAzZWZfcmEsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZmlsZSwgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZW5kIC0gaW5kZXgpO1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiBpbnZhbGlkYXRlX2xvY2sgaGVsZCBhYm92ZTsgZG9uJ3QgcmV0YWtlIGl0LlxcbitcXHRcXHRcXHRcXHQgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZFxcbitcXHRcXHRcXHRcXHQgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0aWYgKGluZGV4IFxcdTAwM2MgZW9mKVxcbitcXHRcXHRcXHRcXHRcXHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcXHUwMDI2cmFjdGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG1pbihlbmQsIGVvZikgLSBpbmRleCwgMCk7XFxuIFxcdFxcdFxcdFxcdC8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi9cXG4gXFx0XFx0XFx0XFx0bHJ1X2FkZF9kcmFpbigpO1xcbiBcXHRcXHRcXHRcXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyhtYXBwaW5nLCBpbmRleCk7XFxuQEAgLTI2NzIsNiArMjY5Miw4IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XFxuIFxcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xcbiBvdXQ6XFxuK1xcdGlmIChuZWVkX3VubG9jaylcXG4rXFx0XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XFxuIFxcdFZNX0JVR19PTighbGlzdF9lbXB0eShcXHUwMDI2cGFnZWxpc3QpKTtcXG4gXFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xcbiBcXHRyZXR1cm4gcmVzdWx0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowNzozMi4wMTI3MjExNTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjg4Nzk5MDc0NTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29sbGFwc2VfZmlsZVwiLFxuICAgIFwiY29sbGFwc2Vfc2Nhbl9maWxlXCIsXG4gICAgXCJjb2xsYXBzZV9zaW5nbGVfcG1kXCIsXG4gICAgXCJtYWR2aXNlX2NvbGxhcHNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29sbGFwc2VfZmlsZSgpIGluIG1tL2todWdlcGFnZWQuYyB0byBhY3F1aXJlIG1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9jayBlYXJsaWVyIChwcmlvciB0byBsb2NraW5nIGZvbGlvcykgYW5kIGhvbGQgaXQgc2hhcmVkIHRocm91Z2hvdXQgdGhlIGNvbGxhcHNlIG9wZXJhdGlvbiwgcmVwbGFjaW5nIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB3aXRoIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWx0ZXIgbG9ja2luZyBoaWVyYXJjaGllcywgY29uY3VycmVuY3ksIGFuZCByZWFkYWhlYWQgYmVoYXZpb3IgZHVyaW5nIFRIUCBmaWxlIGNvbGxhcHNlIChyZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3Iga2h1Z2VwYWdlZCBzY2FubmluZykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24sIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi9pbnZhbGlkYXRpb24sIGFuZCByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmEyMGE5ZTg1YzNmYWQxZWM5ZGU2YjgzMmM3MGI0Y2ViOWEwYWM1YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDE3OjA3OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCAxMWZmOThkNTVjNzZlLi5hNWZjYWZkNTc1MDU2IDEwMDY0NFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXG4rKysgYi9tbS9raHVnZXBhZ2VkLmNcbkBAIC0yMjU3LDYgKzIyNTcsNyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRlbnVtIHNjYW5fcmVzdWx0IHJlc3VsdCA9IFNDQU5fU1VDQ0VFRDtcbiBcdGludCBucl9ub25lID0gMDtcbiBcdGJvb2wgaXNfc2htZW0gPSBzaG1lbV9maWxlKGZpbGUpO1xuK1x0Ym9vbCBuZWVkX3VubG9jayA9IGZhbHNlO1xuIFxuIFx0LypcbiBcdCAqIE1BRFZfQ09MTEFQU0UgaWdub3JlcyBzaG1lbSBodWdlIGNvbmZpZywgc28gZG8gbm90IGNoZWNrIHNobWVtXG5AQCAtMjI3MSw2ICsyMjcyLDE1IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdC8qXG4rXHQgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3dcbitcdCAqIG5lZWRzIGl0LCBhbmQgdHJ1bmNhdGUgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy5cbitcdCAqL1xuK1x0aWYgKCFpc19zaG1lbSkge1xuK1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG4rXHRcdG5lZWRfdW5sb2NrID0gdHJ1ZTtcbitcdH1cbitcbiBcdG1hcHBpbmdfc2V0X3VwZGF0ZShcdTAwMjZ4YXMsIG1hcHBpbmcpO1xuIFxuIFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XG5AQCAtMjMzNywxMCArMjM0NywyMCBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1x0LyogIWlzX3NobWVtICovXG4gXHRcdFx0aWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpIHtcbitcdFx0XHRcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIFx1MDAyNmZpbGUtXHUwMDNlZl9yYSxcbitcdFx0XHRcdFx0XHQgIG1hcHBpbmcsIGluZGV4KTtcbitcdFx0XHRcdHBnb2ZmX3QgZW9mID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKG1hcHBpbmctXHUwMDNlaG9zdCksXG4rXHRcdFx0XHRcdFx0XHQgICAgUEFHRV9TSVpFKTtcbitcbiBcdFx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4tXHRcdFx0XHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIFx1MDAyNmZpbGUtXHUwMDNlZl9yYSxcbi1cdFx0XHRcdFx0XHRcdCAgZmlsZSwgaW5kZXgsXG4tXHRcdFx0XHRcdFx0XHQgIGVuZCAtIGluZGV4KTtcbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBpbnZhbGlkYXRlX2xvY2sgaGVsZCBhYm92ZTsgZG9uJ3QgcmV0YWtlIGl0LlxuK1x0XHRcdFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcbitcdFx0XHRcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdGlmIChpbmRleCBcdTAwM2MgZW9mKVxuK1x0XHRcdFx0XHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcdTAwMjZyYWN0bCxcbitcdFx0XHRcdFx0XHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xuIFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuIFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuIFx0XHRcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xuQEAgLTI2NzIsNiArMjY5Miw4IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGZvbGlvX3VubG9jayhuZXdfZm9saW8pO1xuIFx0Zm9saW9fcHV0KG5ld19mb2xpbyk7XG4gb3V0OlxuK1x0aWYgKG5lZWRfdW5sb2NrKVxuK1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcdFZNX0JVR19PTighbGlzdF9lbXB0eShcdTAwMjZwYWdlbGlzdCkpO1xuIFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xuIFx0cmV0dXJuIHJlc3VsdDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA3OjMyLjAxMjcyMzM3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5ODI3MDU2MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUGF0Y2ggRXZhbHVhdGlvbiAtIEtodWdlcGFnZWQqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIGZ1enppbmcuIExldCdzIGRpZyBpbi4gRmlyc3QsIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBkaWZmIHNob3dzIGNoYW5nZXMgd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbi4gSSBzZWUgc29tZSBsb2NraW5nIGNoYW5nZXMsIG5hbWVseSB0aGUgYWRkaXRpb24gb2YgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZGAgd2hlbiBgIWlzX3NobWVtYC4gVGhlIHJlYWRhaGVhZCBsb2dpYyBoYXMgYmVlbiBvdmVyaGF1bGVkOyB0aGUgb2xkIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCBoYXMgYmVlbiBzd2FwcGVkIGZvciBhIG1vcmUgZ3JhbnVsYXIgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBpbXBsZW1lbnRhdGlvbiwgaW5jb3Jwb3JhdGluZyBhIGBERUZJTkVfUkVBREFIRUFEYCBtYWNybyBhbmQgY2hlY2tzIGFnYWluc3QgdGhlIGZpbGUncyBlbmQuIEZpbmFsbHksIEkgbm90aWNlIHRoZSB1bmxvY2tpbmcgY2FsbCBgZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWRgIGFkZGVkIGF0IHRoZSBgb3V0OmAgbGFiZWwsIGNvbnRpbmdlbnQgb24gYSBgbmVlZF91bmxvY2tgIGNvbmRpdGlvbi5cblxuVGhpcyBpcyBhbGwgc3F1YXJlbHkgd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgLCB3aGljaCwgYXMgd2Uga25vdywgZGlyZWN0bHkgaW1wYWN0cyBtZW1vcnkgbWFuYWdlbWVudOKAlGNyaXRpY2FsIHN0dWZmLiBJdOKAmXMgZmlkZGxpbmcgd2l0aCBsb2NraW5nIGFuZCByZWFkYWhlYWQsIGJvdGggb2Ygd2hpY2ggYXJlIGNvbW1vbiB0YXJnZXRzIGZvciBmdXp6aW5nLCBlc3BlY2lhbGx5IGluIGZpbGUtYmFja2VkIHBhZ2UgaGFuZGxpbmcuIFRoYXQgYG1hZHZpc2UoLi4uLCBNQURWX0NPTExBUFNFKWAgYW5kIGtodWdlcGFnZWQgc2Nhbm5pbmcgZGVmaW5pdGVseSBtYWtlIHRoaXMgY29kZSBwYXRoIHJlYWNoYWJsZSwgc28gaXTigJlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbiwgYGtodWdlcGFnZWQuY2AgaXRzZWxmIGFuZCB0aGUgcmVsYXRlZCBgS2NvbmZpZ2Agb3B0aW9ucy4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ3JhYiB0aG9zZSBmaWxlcywgc28gSSBjYW4gc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIGV4aXN0aW5nIGNvZGViYXNlIGFuZCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGludm9sdmVkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGNvbXBsZXRlIGF0dGFjayBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDc6NTEuODM5NzgxOTQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTkwMDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1ODEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9NjA9c3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtNzUtICovXFxubW0vY29tcGFjdGlvbi5jOjc2OiNpZiBkZWZpbmVkIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2NvbXBhY3Rpb24uYy03Ny0jZGVmaW5lIENPTVBBQ1RJT05fSFBBR0VfT1JERVJcXHRIUEFHRV9QTURfT1JERVJcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz03Mz12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzQte1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzo3NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc2LVxcdHBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHBtZCk7XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtOTctXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6OTg6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy05OS19XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTk0PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX3lvdW5nX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIxNS1cXHRcXHR9IGVsc2Uge1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMTY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMTctXFx0XFx0XFx0cG1kX3QgcG1kID0gcG1kcF9nZXQocHZtdy5wbWQpO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyMy1cXHRcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIyNDojZW5kaWZcXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjI1LVxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9Mzg5PXN0YXRpYyBpbnQgZGFtb25feW91bmdfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMzk3LVxcbm1tL2RhbW9uL3ZhZGRyLmM6Mzk4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kYW1vbi92YWRkci5jLTM5OS1cXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cXHUwMDNldm1hKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNDE1LVxcdH1cXG5tbS9kYW1vbi92YWRkci5jOjQxNjojZW5kaWZcXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kYW1vbi92YWRkci5jLTQxNy1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NjM1PXN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy02NDYtXFxubW0vZGFtb24vdmFkZHIuYzo2NDc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL3ZhZGRyLmMtNjQ4LVxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVxcdTAwM2V2bWEpO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy02NjQtXFx0fVxcbm1tL2RhbW9uL3ZhZGRyLmM6NjY1OiNlbmRpZlxcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RhbW9uL3ZhZGRyLmMtNjY2LVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz03OTU9c3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTgwNi1cXG5tbS9kYW1vbi92YWRkci5jOjgwNzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZGFtb24vdmFkZHIuYy04MDgtXFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBwdGVfYWR2YW5jZWRfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xNzItXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjE3MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTE3NC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9NDIzPXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfbGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDI0LSNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo0MjU6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDI2LXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfYmFzaWNfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncywgaW50IGlkeCkgeyB9XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9NDMxPXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfbGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NDMyOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDMzLVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTY3MT1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX3Byb3Rub25lX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNjgyLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo2ODM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02ODQtc3RhdGljIHZvaWQgX19pbml0IHBtZF9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTY5OC19XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjY5OTojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03MDAtc3RhdGljIHZvaWQgX19pbml0IHBtZF9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NzAxOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzAyLVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTcxNT1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX3N3YXBfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTczMS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NzMyOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzMzLXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTc0OT1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTc2Ny19XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjc2ODojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03Njktc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03NzA9c3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjc3MTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTc3Mi1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz05MDE9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfYmFzaWNfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTAzLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5MDQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDUtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz05NTU9c3RhdGljIHZvaWQgX19pbml0IHB1ZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk1Ni0jZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTU3OiNlbHNlICAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk1OC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX3RocF90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU5PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5NjA6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NjEtXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTg3PXN0YXRpYyB2b2lkIF9faW5pdCBkZXN0cm95X2FyZ3Moc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05ODktXFx0LyogRnJlZSAoaHVnZSkgcGFnZSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5OTA6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTEtXFx0ICAgIGhhc190cmFuc3BhcmVudF9wdWRfaHVnZXBhZ2UoKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk5OC1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTk5OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTAwMC1cXHQgICAgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz0xMTQzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTEyMzktXFx0ICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjEyNDA6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjQxLVxcdCAgICBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkpIHtcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjUwLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxMjUxOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI1Mi1cXHQgICAgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpIHtcXG4tLVxcbm1tL2ZpbGVtYXAuYz0zMzI5PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2ZpbGVtYXAuYy0zMzQxLVxcdC8qIFVzZSB0aGUgcmVhZGFoZWFkIGNvZGUsIGV2ZW4gaWYgcmVhZGFoZWFkIGlzIGRpc2FibGVkICovXFxubW0vZmlsZW1hcC5jOjMzNDI6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiAodm1fZmxhZ3MgXFx1MDAyNiBWTV9IVUdFUEFHRSkpIHtcXG5tbS9maWxlbWFwLmMtMzM0My1cXHRcXHQvKlxcbi0tXFxubW0vZ3VwLmM9NzAxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vZ3VwLmMtNzM0LVxcbm1tL2d1cC5jOjczNTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZ3VwLmMtNzM2LVxcdGlmIChwbWRfdHJhbnNfaHVnZShwbWR2YWwpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IEZPTExfVE9VQ0gpKVxcbm1tL2d1cC5jLTczNy1cXHRcXHR0b3VjaF9wbWQodm1hLCBhZGRyLCBwbWQsIGZsYWdzIFxcdTAwMjYgRk9MTF9XUklURSk7XFxubW0vZ3VwLmM6NzM4OiNlbmRpZlxcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2d1cC5jLTczOS1cXG4tLVxcbm1tL2htbS5jPTE4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaG1tX3Bmbl9mbGFnc19vcmRlcih1bnNpZ25lZCBsb25nIG9yZGVyKVxcbi0tXFxubW0vaG1tLmMtMTkyLVxcbm1tL2htbS5jOjE5MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vaG1tLmMtMTk0LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwbWRfdG9faG1tX3Bmbl9mbGFncyhzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG4tLVxcbm1tL2htbS5jPTIwND1zdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vaG1tLmMtMjI3LX1cXG5tbS9obW0uYzoyMjg6I2Vsc2UgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vaG1tLmMtMjI5LS8qIHN0dWIgdG8gYWxsb3cgdGhlIGNvZGUgYmVsb3cgdG8gY29tcGlsZSAqL1xcbm1tL2htbS5jPTIzMD1pbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vaG1tLmMtMjMxLVxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGhtbV9wZm5zW10sIHBtZF90IHBtZCk7XFxubW0vaG1tLmM6MjMyOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9obW0uYy0yMzMtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTYxPXVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgX19yZWFkX21vc3RseSA9XFxubW0vaHVnZV9tZW1vcnkuYzo2MjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL2h1Z2VfbWVtb3J5LmMtNjMtXFx0KDFcXHUwMDNjXFx1MDAzY1RSQU5TUEFSRU5UX0hVR0VQQUdFX0ZMQUcpfFxcbm1tL2h1Z2VfbWVtb3J5LmMtNjQtI2VuZGlmXFxubW0vaHVnZV9tZW1vcnkuYzo2NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9odWdlX21lbW9yeS5jLTY2LVxcdCgxXFx1MDAzY1xcdTAwM2NUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHKXxcXG4tLVxcbm1tL2tzbS5jPTI1Mjc9c3RhdGljIGludCBrc21fbmV4dF9wYWdlX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL2tzbS5jLTI1NDctXFxubW0va3NtLmM6MjU0ODpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IHBtZF9sZWFmKHBtZCkpIHtcXG5tbS9rc20uYy0yNTQ5LVxcdFxcdHB0bCA9IHBtZF9sb2NrKG1tLCBwbWRwKTtcXG4tLVxcbm1tL21hZHZpc2UuYz0zNTQ9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zNzYtXFxubW0vbWFkdmlzZS5jOjM3NzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWFkdmlzZS5jLTM3OC1cXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcXG4tLVxcbm1tL21hZHZpc2UuYz0xNTE5PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1MzktI2VuZGlmXFxubW0vbWFkdmlzZS5jOjE1NDA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21hZHZpc2UuYy0xNTQxLVxcdGNhc2UgTUFEVl9IVUdFUEFHRTpcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yMTY1PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2cxX3N0YXRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjE2Ny1cXHROUl9BTk9OX01BUFBFRCxcXG5tbS9tZW1jb250cm9sLXYxLmM6MjE2ODojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtY29udHJvbC12MS5jLTIxNjktXFx0TlJfQU5PTl9USFBTLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIxODM9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1lbWNnMV9zdGF0X25hbWVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjE4NS1cXHRcXFwicnNzXFxcIixcXG5tbS9tZW1jb250cm9sLXYxLmM6MjE4NjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtY29udHJvbC12MS5jLTIxODctXFx0XFxcInJzc19odWdlXFxcIixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01OTg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjE5LSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo2MjA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbWNvbnRyb2wuYy02MjEtXFx0VEhQX0ZBVUxUX0FMTE9DLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjEyLSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzoxNjEzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tZW1jb250cm9sLmMtMTYxNC1cXHR7IFxcXCJhbm9uX3RocFxcXCIsXFx0XFx0XFx0TlJfQU5PTl9USFBTXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Njg5PXN0YXRpYyBpbnQgY2hlY2tfaHdwb2lzb25lZF9lbnRyeShwdGVfdCBwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgc2hvcnQgc2hpZnQsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTcxMy1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjcxNDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtb3J5LWZhaWx1cmUuYy03MTUtc3RhdGljIGludCBjaGVja19od3BvaXNvbmVkX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmM9NDE5OT1zdGF0aWMgdm1fZmF1bHRfdCB3cF9wYWdlX3NoYXJlZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbW9yeS5jLTQyMzgtXFxubW0vbWVtb3J5LmM6NDIzOTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtb3J5LmMtNDI0MC1zdGF0aWMgYm9vbCBfX3dwX2Nhbl9yZXVzZV9sYXJnZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1vcnkuYy00MzA0LX1cXG5tbS9tZW1vcnkuYzo0MzA1OiNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9tZW1vcnkuYy00MzA2LXN0YXRpYyBib29sIF9fd3BfY2FuX3JldXNlX2xhcmdlX2Fub25fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbW9yeS5jLTQzMTAtfVxcbm1tL21lbW9yeS5jOjQzMTE6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL21lbW9yeS5jLTQzMTItXFxubW0vbWVtb3J5LmM9NDMxMz1zdGF0aWMgYm9vbCB3cF9jYW5fcmV1c2VfYW5vbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWVtb3J5LmMtNDMxOC1cXG5tbS9tZW1vcnkuYzo0MzE5OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXFxubW0vbWVtb3J5LmMtNDMyMC1cXHRcXHRyZXR1cm4gX193cF9jYW5fcmV1c2VfbGFyZ2VfYW5vbl9mb2xpbyhmb2xpbywgdm1hKTtcXG4tLVxcbm1tL21lbW9yeS5jPTQ3MTk9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9tYXJrZXIoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00NzQ1LVxcbm1tL21lbW9yeS5jOjQ3NDY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbW9yeS5jLTQ3NDctLypcXG4tLVxcbm1tL21lbW9yeS5jPTQ3OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00ODU0LX1cXG5tbS9tZW1vcnkuYzo0ODU1OiNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9tZW1vcnkuYy00ODU2LXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDg1OS19XFxubW0vbWVtb3J5LmM6NDg2MDojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vbWVtb3J5LmMtNDg2MS1cXG4tLVxcbm1tL21lbW9yeS5jPTUzMDE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTUzMDMtXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXFx1MDAzZXZtYTtcXG5tbS9tZW1vcnkuYzo1MzA0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tZW1vcnkuYy01MzA1LVxcdHVuc2lnbmVkIGxvbmcgb3JkZXJzO1xcbi0tXFxubW0vbWVtb3J5LmM9NTUzOD1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTU5My1cXG5tbS9tZW1vcnkuYzo1NTk0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tZW1vcnkuYy01NTk1LXN0YXRpYyB2b2lkIGRlcG9zaXRfcHJlYWxsb2NfcHRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmM9NjQyMT1zdGF0aWMgdm1fZmF1bHRfdCBjcmVhdGVfaHVnZV9wdWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vbWVtb3J5LmMtNjQyMi17XFxubW0vbWVtb3J5LmM6NjQyMzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0XFxcXFxcbm1tL21lbW9yeS5jLTY0MjQtXFx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG4tLVxcbm1tL21lbW9yeS5jLTY0MzAtXFx0XFx0cmV0dXJuIHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VodWdlX2ZhdWx0KHZtZiwgUFVEX09SREVSKTtcXG5tbS9tZW1vcnkuYzo2NDMxOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9tZW1vcnkuYy02NDMyLVxcdHJldHVybiBWTV9GQVVMVF9GQUxMQkFDSztcXG4tLVxcbm1tL21lbW9yeS5jPTY0MzU9c3RhdGljIHZtX2ZhdWx0X3Qgd3BfaHVnZV9wdWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHB1ZF90IG9yaWdfcHVkKVxcbm1tL21lbW9yeS5jLTY0MzYte1xcbm1tL21lbW9yeS5jOjY0Mzc6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcdFxcXFxcXG5tbS9tZW1vcnkuYy02NDM4LVxcdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXFxuLS1cXG5tbS9tZW1vcnkuYy02NDU0LVxcdF9fc3BsaXRfaHVnZV9wdWQodm1hLCB2bWYtXFx1MDAzZXB1ZCwgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG5tbS9tZW1vcnkuYzo2NDU1OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cXG5tbS9tZW1vcnkuYy02NDU2LVxcdHJldHVybiBWTV9GQVVMVF9GQUxMQkFDSztcXG4tLVxcbm1tL21lbW9yeS5jPTc0ODQ9RVhQT1JUX1NZTUJPTChfX21pZ2h0X2ZhdWx0KTtcXG4tLVxcbm1tL21lbW9yeS5jLTc0ODYtXFxubW0vbWVtb3J5LmM6NzQ4NzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IGRlZmluZWQoQ09ORklHX0hVR0VUTEJGUylcXG5tbS9tZW1vcnkuYy03NDg4LS8qXFxuLS1cXG5tbS9tZW1vcnkuYz03Njc1PWxvbmcgY29weV9mb2xpb19mcm9tX3VzZXIoc3RydWN0IGZvbGlvICpkc3RfZm9saW8sXFxuLS1cXG5tbS9tZW1vcnkuYy03NzA0LX1cXG5tbS9tZW1vcnkuYzo3NzA1OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgfHwgQ09ORklHX0hVR0VUTEJGUyAqL1xcbm1tL21lbW9yeS5jLTc3MDYtXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNDQxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI0NTEtXFxubW0vbWVtcG9saWN5LmM6MjQ1MjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtcG9saWN5LmMtMjQ1My1cXHQgICAgLyogZmlsdGVyIFxcXCJodWdlcGFnZVxcXCIgYWxsb2NhdGlvbiwgdW5sZXNzIGZyb20gYWxsb2NfcGFnZXMoKSAqL1xcbi0tXFxubW0vbWlncmF0ZS5jPTE1OTE9c3RhdGljIGlubGluZSBpbnQgdHJ5X3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNjA5LVxcbm1tL21pZ3JhdGUuYzoxNjEwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9taWdyYXRlLmMtMTYxMS0jZGVmaW5lIE5SX01BWF9CQVRDSEVEX01JR1JBVElPTlxcdEhQQUdFX1BNRF9OUlxcbi0tXFxubW0vbW1hcC5jPTgyNz1fX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbi0tXFxubW0vbW1hcC5jLTg1OC1cXHRcXHRhZGRyID0gZ2V0X2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpO1xcbm1tL21tYXAuYzo4NTk6XFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgIWZpbGVcXG5tbS9tbWFwLmMtODYwLVxcdFxcdCAgIFxcdTAwMjZcXHUwMDI2ICFhZGRyIC8qIG5vIGhpbnQgKi9cXG4tLVxcbm1tL21yZW1hcC5jPTQ3OT1zdGF0aWMgaW5saW5lIGJvb2wgbW92ZV9ub3JtYWxfcHVkKHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsXFxuLS1cXG5tbS9tcmVtYXAuYy00ODUtXFxubW0vbXJlbWFwLmM6NDg2OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG5tbS9tcmVtYXAuYy00ODctc3RhdGljIGJvb2wgbW92ZV9odWdlX3B1ZChzdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCAqcG1jLFxcbi0tXFxubW0vbXJlbWFwLmM9NjA1PXN0YXRpYyBib29sIG1vdmVfcGd0X2VudHJ5KHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsXFxuLS1cXG5tbS9tcmVtYXAuYy02MjItXFx0Y2FzZSBIUEFHRV9QTUQ6XFxubW0vbXJlbWFwLmM6NjIzOlxcdFxcdG1vdmVkID0gSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxubW0vbXJlbWFwLmMtNjI0LVxcdFxcdFxcdG1vdmVfaHVnZV9wbWQocG1jLVxcdTAwM2VvbGQsIHBtYy1cXHUwMDNlb2xkX2FkZHIsIHBtYy1cXHUwMDNlbmV3X2FkZHIsIG9sZF9lbnRyeSxcXG4tLVxcbm1tL21yZW1hcC5jLTYyNy1cXHRjYXNlIEhQQUdFX1BVRDpcXG5tbS9tcmVtYXAuYzo2Mjg6XFx0XFx0bW92ZWQgPSBJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tcmVtYXAuYy02MjktXFx0XFx0XFx0bW92ZV9odWdlX3B1ZChwbWMsIG9sZF9lbnRyeSwgbmV3X2VudHJ5KTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz02NTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb3JkZXJfdG9fcGluZGV4KGludCBtaWdyYXRldHlwZSwgaW50IG9yZGVyKVxcbm1tL3BhZ2VfYWxsb2MuYy02NTYte1xcbm1tL3BhZ2VfYWxsb2MuYzo2NTc6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkge1xcbm1tL3BhZ2VfYWxsb2MuYy02NTgtXFx0XFx0Ym9vbCBtb3ZhYmxlID0gbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTY2Nz1zdGF0aWMgaW5saW5lIGludCBwaW5kZXhfdG9fb3JkZXIodW5zaWduZWQgaW50IHBpbmRleClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy02NzAtXFxubW0vcGFnZV9hbGxvYy5jOjY3MTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKSB7XFxubW0vcGFnZV9hbGxvYy5jLTY3Mi1cXHRcXHRpZiAocGluZGV4IFxcdTAwM2U9IE5SX0xPV09SREVSX1BDUF9MSVNUUylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz02Nzk9c3RhdGljIGlubGluZSBib29sIHBjcF9hbGxvd2VkX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy02ODItXFx0XFx0cmV0dXJuIHRydWU7XFxubW0vcGFnZV9hbGxvYy5jOjY4MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vcGFnZV9hbGxvYy5jLTY4NC1cXHRpZiAoaXNfcG1kX29yZGVyKG9yZGVyKSlcXG4tLVxcbm1tL3BhZ2VfaWRsZS5jPTUyPXN0YXRpYyBib29sIHBhZ2VfaWRsZV9jbGVhcl9wdGVfcmVmc19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3BhZ2VfaWRsZS5jLTcyLVxcdFxcdFxcdHJlZmVyZW5jZWQgfD0gbW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIGFkZHIgKyBQQUdFX1NJWkUpO1xcbm1tL3BhZ2VfaWRsZS5jOjczOlxcdFxcdH0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKSB7XFxubW0vcGFnZV9pZGxlLmMtNzQtXFx0XFx0XFx0cG1kX3QgcG1kdmFsID0gcG1kcF9nZXQocHZtdy5wbWQpO1xcbi0tXFxubW0vcGFnZV9pby5jPTM3MD12b2lkIF9fc3dhcF93cml0ZXBhZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9wYWdlX2lvLmMtMzczLVxcbm1tL3BhZ2VfaW8uYzozNzQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3BhZ2VfaW8uYy0zNzUtXFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKSkpIHtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE4Nj1ib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI1MS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNTI6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI1My1cXHRcXHQgICAgKHBtZF90cmFuc19odWdlKHBtZGUpIHx8IHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kZSkgfHxcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jPTk3PXB0ZV90IHB0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTEwOC1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoxMDk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTExMC1cXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jPTI1MD12b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1Ny0jZW5kaWYgLyogcHRlX2ZyZWVfZGVmZXIgKi9cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoyNTg6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1OS1cXG4tLVxcbm1tL3JtYXAuYz05MTg9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy05ODctXFx0XFx0XFx0XFx0cmVmZXJlbmNlZCsrO1xcbm1tL3JtYXAuYzo5ODg6XFx0XFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpIHtcXG5tbS9ybWFwLmMtOTg5LVxcdFxcdFxcdGlmIChwbWRwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsXFxuLS1cXG5tbS9ybWFwLmM9MTEwNz1zdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG4tLVxcbm1tL3JtYXAuYy0xMTQ3LVxcdFxcdH0gZWxzZSB7XFxubW0vcm1hcC5jOjExNDg6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3JtYXAuYy0xMTQ5LVxcdFxcdFxcdHBtZF90ICpwbWQgPSBwdm13LVxcdTAwM2VwbWQ7XFxuLS1cXG5tbS9ybWFwLmM9MTYyMj12b2lkIGZvbGlvX2FkZF9hbm9uX3JtYXBfcG1kKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcm1hcC5jLTE2MjQte1xcbm1tL3JtYXAuYzoxNjI1OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9ybWFwLmMtMTYyNi1cXHRfX2ZvbGlvX2FkZF9hbm9uX3JtYXAoZm9saW8sIHBhZ2UsIEhQQUdFX1BNRF9OUiwgdm1hLCBhZGRyZXNzLCBmbGFncyxcXG4tLVxcbm1tL3JtYXAuYz0xNzUxPXZvaWQgZm9saW9fYWRkX2ZpbGVfcm1hcF9wbWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9ybWFwLmMtMTc1My17XFxubW0vcm1hcC5jOjE3NTQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3JtYXAuYy0xNzU1LVxcdF9fZm9saW9fYWRkX2ZpbGVfcm1hcChmb2xpbywgcGFnZSwgSFBBR0VfUE1EX05SLCB2bWEsIFBHVEFCTEVfTEVWRUxfUE1EKTtcXG4tLVxcbm1tL3JtYXAuYz0xNzcxPXZvaWQgZm9saW9fYWRkX2ZpbGVfcm1hcF9wdWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9ybWFwLmMtMTc3My17XFxubW0vcm1hcC5jOjE3NzQ6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubW0vcm1hcC5jLTE3NzUtXFx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG4tLVxcbm1tL3JtYXAuYz0xOTE5PXZvaWQgZm9saW9fcmVtb3ZlX3JtYXBfcG1kKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcm1hcC5jLTE5MjEte1xcbm1tL3JtYXAuYzoxOTIyOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9ybWFwLmMtMTkyMy1cXHRfX2ZvbGlvX3JlbW92ZV9ybWFwKGZvbGlvLCBwYWdlLCBIUEFHRV9QTURfTlIsIHZtYSwgUEdUQUJMRV9MRVZFTF9QTUQpO1xcbi0tXFxubW0vcm1hcC5jPTE5Mzk9dm9pZCBmb2xpb19yZW1vdmVfcm1hcF9wdWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9ybWFwLmMtMTk0MS17XFxubW0vcm1hcC5jOjE5NDI6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubW0vcm1hcC5jLTE5NDMtXFx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG4tLVxcbm1tL3NobWVtLmM9MTE0PXN0cnVjdCBzaG1lbV9vcHRpb25zIHtcXG4tLVxcbm1tL3NobWVtLmMtMTM3LVxcbm1tL3NobWVtLmM6MTM4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTEzOS1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdlX3NobWVtX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcXG4tLVxcbm1tL3NobWVtLmM9NTIxPXN0YXRpYyBpbnQgc2htZW1fY29uZmlybV9zd2FwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy01NjktXFxubW0vc2htZW0uYzo1NzA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtNTcxLS8qIGlmZGVmIGhlcmUgdG8gYXZvaWQgYmxvYXRpbmcgc2htZW0ubyB3aGVuIG5vdCBuZWNlc3NhcnkgKi9cXG5tbS9zaG1lbS5jLTU3Mi1cXG5tbS9zaG1lbS5jOjU3MzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUilcXG5tbS9zaG1lbS5jLTU3NC0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX05FVkVSXFxubW0vc2htZW0uYzo1NzU6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVMpXFxubW0vc2htZW0uYy01NzYtI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9zaG1lbS5jOjU3NzojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFKVxcbm1tL3NobWVtLmMtNTc4LSNkZWZpbmUgU0hNRU1fSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9zaG1lbS5jOjU3OTojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRSlcXG5tbS9zaG1lbS5jLTU4MC0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FEVklTRVxcbi0tXFxubW0vc2htZW0uYz01ODU9c3RhdGljIGludCBzaG1lbV9odWdlIF9fcmVhZF9tb3N0bHkgPSBTSE1FTV9IVUdFX0RFRkFVTFQ7XFxuLS1cXG5tbS9zaG1lbS5jLTU4OC1cXG5tbS9zaG1lbS5jOjU4OTojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUilcXG5tbS9zaG1lbS5jLTU5MC0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX05FVkVSXFxubW0vc2htZW0uYzo1OTE6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVMpXFxubW0vc2htZW0uYy01OTItI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9zaG1lbS5jOjU5MzojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFKVxcbm1tL3NobWVtLmMtNTk0LSNkZWZpbmUgVE1QRlNfSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9zaG1lbS5jOjU5NTojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRSlcXG5tbS9zaG1lbS5jLTU5Ni0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FEVklTRVxcbi0tXFxubW0vc2htZW0uYz04NDY9c3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2VfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbm1tL3NobWVtLmMtODYxLX1cXG5tbS9zaG1lbS5jOjg2MjojZWxzZSAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vc2htZW0uYy04NjMtXFxuLS1cXG5tbS9zaG1lbS5jPTg3Mj1zdGF0aWMgdW5zaWduZWQgaW50IHNobWVtX2h1Z2VfZ2xvYmFsX2VuYWJsZWQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtODc4LX1cXG5tbS9zaG1lbS5jOjg3OTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vc2htZW0uYy04ODAtXFxuLS1cXG5tbS9zaG1lbS5jPTE2MDc9aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vc2htZW0uYy0xNjQ5LVxcbm1tL3NobWVtLmM6MTY1MDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vc2htZW0uYy0xNjUxLVxcdFxcdGlmIChvcmRlciBcXHUwMDNlPSBIUEFHRV9QTURfT1JERVIpIHtcXG4tLVxcbm1tL3NobWVtLmM9MTgwND1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwaW5fY2x1c3Rlcihzd3BfZW50cnlfdCBzd2FwLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zaG1lbS5jLTE4MTctXFxubW0vc2htZW0uYzoxODE4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTE4MTktYm9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxcbi0tXFxubW0vc2htZW0uYz0xOTE3PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL3NobWVtLmMtMTkyMi19XFxubW0vc2htZW0uYzoxOTIzOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9zaG1lbS5jLTE5MjQtXFxuLS1cXG5tbS9zaG1lbS5jPTE5Mzk9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fYWxsb2NfYW5kX2FkZF9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL3NobWVtLmMtMTk1MC1cXG5tbS9zaG1lbS5jOjE5NTE6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxubW0vc2htZW0uYy0xOTUyLVxcdFxcdG9yZGVycyA9IDA7XFxuLS1cXG5tbS9zaG1lbS5jPTIwODk9c3RhdGljIGludCBzaG1lbV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vc2htZW0uYy0yMTAzLVxcdGdmcCBcXHUwMDI2PSB+R0ZQX0NPTlNUUkFJTlRfTUFTSztcXG5tbS9zaG1lbS5jOjIxMDQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtMjEwNS1cXHRpZiAobnJfcGFnZXMgXFx1MDAzZSAxKSB7XFxuLS1cXG5tbS9zaG1lbS5jPTI3NDA9dW5zaWduZWQgbG9uZyBzaG1lbV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbm1tL3NobWVtLmMtMjc1NS1cXG5tbS9zaG1lbS5jOjI3NTY6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxubW0vc2htZW0uYy0yNzU3LVxcdFxcdHJldHVybiBhZGRyO1xcbi0tXFxubW0vc2htZW0uYy0yNzk5LVxcdFxcdFxcdCAqL1xcbm1tL3NobWVtLmM6MjgwMDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA3OjUxLjg5Nzc3NTc1MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0OTU5MTIwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb2RlIHNlY3Rpb246XG5cbioqRGl2aW5nIGludG8gYG1tL2todWdlcGFnZWQuY2AgYW5kIGBjb2xsYXBzZV9maWxlYCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBraHVnZXBhZ2VkYCBpbnRlcm5hbHMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBsaW5lcyAyMjUwIHRvIDI3MDAgaW4gYG1tL2todWdlcGFnZWQuY2AuIFRoYXQncyBhIHByZXR0eSBoZWZ0eSBjaHVuayBvZiBjb2RlLCBzbyBJIGFudGljaXBhdGUgaXQncyBsaWtlbHkgaW52b2x2ZWQgd2l0aCBhIGNvcmUgb3BlcmF0aW9uLCBwcm9iYWJseSByZWxhdGVkIHRvIHBhZ2UgY29sbGFwc2luZyBvciBtYXliZSBkZWZyYWdnaW5nLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBraHVnZXBhZ2VkIHdvcmtzLCBteSBodW5jaCBpcyB0aGF0IHRoaXMgc2VjdGlvbiB3aWxsIGludm9sdmUgZWl0aGVyIHRoZSBpZGVudGlmaWNhdGlvbiBvZiBlbGlnaWJsZSBwYWdlcyBmb3IgbWVyZ2luZyBvciB0aGUgYWN0dWFsIGV4ZWN1dGlvbiBvZiB0aGUgY29sbGFwc2luZyBsb2dpYy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGF0IHJhbmdlLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgbWFqb3IgcGFydCBvZiB0aGUgd29yayByZWxhdGVkIHRvIHRoZSBtYWluIGxvb3Agb2Yga2h1Z2VwYWdlZCB0byBkbyBpdHMgd29yay5cblxuRnVydGhlcm1vcmUsIEkga25vdyBgY29sbGFwc2VfZmlsZWAgaXMgY3J1Y2lhbCwgcHJvYmFibHkgcmVsYXRlZCB0byBjb2xsYXBzaW5nIGZpbGUtYmFja2VkIG1hcHBpbmdzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBjb2xsYXBzZV9maWxlYCB3aXRoaW4gdGhhdCBzcGVjaWZpYyBhcmVhIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgcHJvY2Vzcy4gSSB3YW50IHRvIHNlZSAqaG93KiBpdCdzIGludm9rZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIHdoYXQgYXJndW1lbnRzIGl0J3MgZ2V0dGluZy4gVGhpcyBjb250ZXh0IGlzIGVzc2VudGlhbCB0byBkZXRlcm1pbmUgd2hldGhlciBpdCdzIHJlbGF0ZWQgdG8gdGhlIG1haW4ga2h1Z2VwYWdlZCBsb29wIHdvcmsuIExvb2tpbmcgYXQgdGhvc2UgbGluZXMgYW5kIHRoZSBjYWxscyB0byBgY29sbGFwc2VfZmlsZWAgd2lsbCBsaWtlbHkgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gYSBzcGVjaWZpYyBzY2VuYXJpbyBvciBhc3BlY3Qgb2YgdGhlIHdob2xlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDYwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDc6NTQuMzkzNjg5NjA0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjUwOlxcdHtcXG4yMjUxOlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nO1xcbjIyNTI6XFx0XFx0c3RydWN0IHBhZ2UgKmRzdDtcXG4yMjUzOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sICp0bXAsICpuZXdfZm9saW87XFxuMjI1NDpcXHRcXHRwZ29mZl90IGluZGV4ID0gMCwgZW5kID0gc3RhcnQgKyBIUEFHRV9QTURfTlI7XFxuMjI1NTpcXHRcXHRMSVNUX0hFQUQocGFnZWxpc3QpO1xcbjIyNTY6XFx0XFx0WEFfU1RBVEVfT1JERVIoeGFzLCBcXHUwMDI2bWFwcGluZy1cXHUwMDNlaV9wYWdlcywgc3RhcnQsIEhQQUdFX1BNRF9PUkRFUik7XFxuMjI1NzpcXHRcXHRlbnVtIHNjYW5fcmVzdWx0IHJlc3VsdCA9IFNDQU5fU1VDQ0VFRDtcXG4yMjU4OlxcdFxcdGludCBucl9ub25lID0gMDtcXG4yMjU5OlxcdFxcdGJvb2wgaXNfc2htZW0gPSBzaG1lbV9maWxlKGZpbGUpO1xcbjIyNjA6XFx0XFx0Ym9vbCBuZWVkX3VubG9jayA9IGZhbHNlO1xcbjIyNjE6XFx0XFxuMjI2MjpcXHRcXHQvKlxcbjIyNjM6XFx0XFx0ICogTUFEVl9DT0xMQVBTRSBpZ25vcmVzIHNobWVtIGh1Z2UgY29uZmlnLCBzbyBkbyBub3QgY2hlY2sgc2htZW1cXG4yMjY0OlxcdFxcdCAqXFxuMjI2NTpcXHRcXHQgKiBUT0RPOiBvbmNlIHNobWVtIGFsd2F5cyBjYWxscyBtYXBwaW5nX3NldF9sYXJnZV9mb2xpb3MoKSBvbiBpdHNcXG4yMjY2OlxcdFxcdCAqIG1hcHBpbmcsIHRoZSBzaG1lbSBjaGVjayBjYW4gYmUgcmVtb3ZlZC5cXG4yMjY3OlxcdFxcdCAqL1xcbjIyNjg6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFpc19zaG1lbSBcXHUwMDI2XFx1MDAyNiAhbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChtYXBwaW5nKSk7XFxuMjI2OTpcXHRcXHRWTV9XQVJOX09OX09OQ0Uoc3RhcnQgXFx1MDAyNiAoSFBBR0VfUE1EX05SIC0gMSkpO1xcbjIyNzA6XFx0XFxuMjI3MTpcXHRcXHRyZXN1bHQgPSBhbGxvY19jaGFyZ2VfZm9saW8oXFx1MDAyNm5ld19mb2xpbywgbW0sIGNjLCBIUEFHRV9QTURfT1JERVIpO1xcbjIyNzI6XFx0XFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXFxuMjI3MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjc0OlxcdFxcbjIyNzU6XFx0XFx0LypcXG4yMjc2OlxcdFxcdCAqIFRha2UgaW52YWxpZGF0ZV9sb2NrIGJlZm9yZSBhbnkgZm9saW8gbG9jazogdGhlIHJlYWRhaGVhZCBiZWxvd1xcbjIyNzc6XFx0XFx0ICogbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLlxcbjIyNzg6XFx0XFx0ICovXFxuMjI3OTpcXHRcXHRpZiAoIWlzX3NobWVtKSB7XFxuMjI4MDpcXHRcXHRcXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XFxuMjI4MTpcXHRcXHRcXHRuZWVkX3VubG9jayA9IHRydWU7XFxuMjI4MjpcXHRcXHR9XFxuMjI4MzpcXHRcXG4yMjg0OlxcdFxcdG1hcHBpbmdfc2V0X3VwZGF0ZShcXHUwMDI2eGFzLCBtYXBwaW5nKTtcXG4yMjg1OlxcdFxcbjIyODY6XFx0XFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XFxuMjI4NzpcXHRcXHRpZiAoaXNfc2htZW0pXFxuMjI4ODpcXHRcXHRcXHRfX2ZvbGlvX3NldF9zd2FwYmFja2VkKG5ld19mb2xpbyk7XFxuMjI4OTpcXHRcXHRuZXdfZm9saW8tXFx1MDAzZWluZGV4ID0gc3RhcnQ7XFxuMjI5MDpcXHRcXHRuZXdfZm9saW8tXFx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xcbjIyOTE6XFx0XFxuMjI5MjpcXHRcXHQvKlxcbjIyOTM6XFx0XFx0ICogRW5zdXJlIHdlIGhhdmUgc2xvdHMgZm9yIGFsbCB0aGUgcGFnZXMgaW4gdGhlIHJhbmdlLiAgVGhpcyBpc1xcbjIyOTQ6XFx0XFx0ICogYWxtb3N0IGNlcnRhaW5seSBhIG5vLW9wIGJlY2F1c2UgbW9zdCBvZiB0aGUgcGFnZXMgbXVzdCBiZSBwcmVzZW50XFxuMjI5NTpcXHRcXHQgKi9cXG4yMjk2OlxcdFxcdGRvIHtcXG4yMjk3OlxcdFxcdFxcdHhhc19sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMjk4OlxcdFxcdFxcdHhhc19jcmVhdGVfcmFuZ2UoXFx1MDAyNnhhcyk7XFxuMjI5OTpcXHRcXHRcXHRpZiAoIXhhc19lcnJvcihcXHUwMDI2eGFzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDc6NTQuMzkzODQzMjI0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg1Njc3MzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGNvbGxhcHNlX2ZpbGVgIGF0IExpbmUgMjM0MC0yNDAwKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgcmVnaW9uIGFyb3VuZCBsaW5lcyAyMzQwIHRvIDI0MDAuIFRoYXQgcmFuZ2UgaXMgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgcHJvY2Vzc2luZyBoYXBwZW5zLCBJJ20gZ3Vlc3Npbmcgc29tZSBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBvciBsb2dpYy1pbnRlbnNpdmUgb3BlcmF0aW9uIG9jY3VycyB0aGVyZS4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoZSBhY3R1YWwgY29yZSBvZiB0aGUgYWxnb3JpdGhtLCBvciBwZXJoYXBzIHNvbWUgZGF0YSBtYW5pcHVsYXRpb24gc3RlcCB0aGF0J3MgY2F1c2luZyBpc3N1ZXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gTGV0J3Mgc2VlIGlmIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyBhbnkgY3J1Y2lhbCBsb29wcywgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9yIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbnMgd2hpY2ggYXJlIGxpa2VseSB0byBoYXZlIGEgc2lnbmlmaWNhbnQgaW1wYWN0LiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA3OjU3LjI1MDYxODI5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM0MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM0MDpcXHRcXHRcXHRcXHRcXHRscnVfYWRkX2RyYWluKCk7XFxuMjM0MTpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxuMjM0MjpcXHRcXHRcXHRcXHRcXHRmb2xpb19nZXQoZm9saW8pO1xcbjIzNDM6XFx0XFx0XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjM0NDpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjIzNDU6XFx0XFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX0xPQ0s7XFxuMjM0NjpcXHRcXHRcXHRcXHRcXHRnb3RvIHhhX2xvY2tlZDtcXG4yMzQ3OlxcdFxcdFxcdFxcdH1cXG4yMzQ4OlxcdFxcdFxcdH0gZWxzZSB7XFx0LyogIWlzX3NobWVtICovXFxuMjM0OTpcXHRcXHRcXHRcXHRpZiAoIWZvbGlvIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xcbjIzNTA6XFx0XFx0XFx0XFx0XFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgXFx1MDAyNmZpbGUtXFx1MDAzZWZfcmEsXFxuMjM1MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG1hcHBpbmcsIGluZGV4KTtcXG4yMzUyOlxcdFxcdFxcdFxcdFxcdHBnb2ZmX3QgZW9mID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKG1hcHBpbmctXFx1MDAzZWhvc3QpLFxcbjIzNTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFBBR0VfU0laRSk7XFxuMjM1NDpcXHRcXG4yMzU1OlxcdFxcdFxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjIzNTY6XFx0XFx0XFx0XFx0XFx0LypcXG4yMzU3OlxcdFxcdFxcdFxcdFxcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24ndCByZXRha2UgaXQuXFxuMjM1ODpcXHRcXHRcXHRcXHRcXHQgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZFxcbjIzNTk6XFx0XFx0XFx0XFx0XFx0ICogaGVscGVyIHRoaXMgcmVwbGFjZXMsIGRvZXMgbm90IGNsYW1wIHRvIEVPRi5cXG4yMzYwOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjIzNjE6XFx0XFx0XFx0XFx0XFx0aWYgKGluZGV4IFxcdTAwM2MgZW9mKVxcbjIzNjI6XFx0XFx0XFx0XFx0XFx0XFx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoXFx1MDAyNnJhY3RsLFxcbjIzNjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0bWluKGVuZCwgZW9mKSAtIGluZGV4LCAwKTtcXG4yMzY0OlxcdFxcdFxcdFxcdFxcdC8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi9cXG4yMzY1OlxcdFxcdFxcdFxcdFxcdGxydV9hZGRfZHJhaW4oKTtcXG4yMzY2OlxcdFxcdFxcdFxcdFxcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKG1hcHBpbmcsIGluZGV4KTtcXG4yMzY3OlxcdFxcdFxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuMjM2ODpcXHRcXHRcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XFxuMjM2OTpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHhhX3VubG9ja2VkO1xcbjIzNzA6XFx0XFx0XFx0XFx0XFx0fVxcbjIzNzE6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkge1xcbjIzNzI6XFx0XFx0XFx0XFx0XFx0LypcXG4yMzczOlxcdFxcdFxcdFxcdFxcdCAqIFRoaXMgcGFnZSBpcyBkaXJ0eSBiZWNhdXNlIGl0IGhhc24ndFxcbjIzNzQ6XFx0XFx0XFx0XFx0XFx0ICogYmVlbiBmbHVzaGVkIHNpbmNlIGZpcnN0IHdyaXRlLlxcbjIzNzU6XFx0XFx0XFx0XFx0XFx0ICpcXG4yMzc2OlxcdFxcdFxcdFxcdFxcdCAqIFRyaWdnZXIgYXN5bmMgZmx1c2ggZm9yIHJlYWQtb25seSBmaWxlcyBhbmRcXG4yMzc3OlxcdFxcdFxcdFxcdFxcdCAqIGhvcGUgdGhlIHdyaXRlYmFjayBpcyBkb25lIHdoZW4ga2h1Z2VwYWdlZFxcbjIzNzg6XFx0XFx0XFx0XFx0XFx0ICogcmV2aXNpdHMgdGhpcyBwYWdlLiBXcml0YWJsZSBmaWxlcyBjYW4gaGF2ZVxcbjIzNzk6XFx0XFx0XFx0XFx0XFx0ICogdGhlaXIgZm9saW9zIGRpcnR5IGF0IGFueSB0aW1lOyBibGluZGx5XFxuMjM4MDpcXHRcXHRcXHRcXHRcXHQgKiBmbHVzaGluZyB0aGVtIHdvdWxkIGNhdXNlIHVuZGVzaXJhYmxlXFxuMjM4MTpcXHRcXHRcXHRcXHRcXHQgKiBzeXN0ZW0td2lkZSB3cml0ZWJhY2suXFxuMjM4MjpcXHRcXHRcXHRcXHRcXHQgKlxcbjIzODM6XFx0XFx0XFx0XFx0XFx0ICogVGhpcyBpcyBhIG9uZS1vZmYgc2l0dWF0aW9uLiBXZSBhcmUgbm90XFxuMjM4NDpcXHRcXHRcXHRcXHRcXHQgKiBmb3JjaW5nIHdyaXRlYmFjayBpbiBsb29wLlxcbjIzODU6XFx0XFx0XFx0XFx0XFx0ICovXFxuMjM4NjpcXHRcXHRcXHRcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMzg3OlxcdFxcdFxcdFxcdFxcdGlmICghaW5vZGVfaXNfb3Blbl9mb3Jfd3JpdGUobWFwcGluZy1cXHUwMDNlaG9zdCkpXFxuMjM4ODpcXHRcXHRcXHRcXHRcXHRcXHRmaWxlbWFwX2ZsdXNoKG1hcHBpbmcpO1xcbjIzODk6XFx0XFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX0RJUlRZX09SX1dSSVRFQkFDSztcXG4yMzkwOlxcdFxcdFxcdFxcdFxcdGdvdG8geGFfdW5sb2NrZWQ7XFxuMjM5MTpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xcbjIzOTI6XFx0XFx0XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjM5MzpcXHRcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfRElSVFlfT1JfV1JJVEVCQUNLO1xcbjIzOTQ6XFx0XFx0XFx0XFx0XFx0Z290byB4YV91bmxvY2tlZDtcXG4yMzk1OlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4yMzk2OlxcdFxcdFxcdFxcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuMjM5NzpcXHRcXHRcXHRcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMzk4OlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMjM5OTpcXHRcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDc6NTcuMjUwNzY5OTEyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMwNTM2OTc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBwdWxsIHVwIGxpbmVzIDI2ODAtMjcxMCBvZiBgbW0va2h1Z2VwYWdlZC5jYC4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUga2h1Z2VwYWdlZCBsb2dpYyByZXNpZGVzLCBhbmQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBzZWN0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIHNjYW5uaW5nIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIG9mIGh1Z2UgcGFnZXMuIEknbSBmb2N1c2luZyBvbiB0aGVzZSBsaW5lcyBiZWNhdXNlIHRoZXJlJ3MgYSBzcGVjaWZpYyBpc3N1ZSBJJ20gZGVidWdnaW5nIHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyB3aGVuIGFsbG9jYXRpbmcgaHVnZSBwYWdlcywgYW5kIEkgc3VzcGVjdCB0aGUgYW5zd2VyIGxpZXMgaGVyZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGh1Z2UgcGFnZXMgYXJlIGNvbnNpZGVyZWQgcmVjbGFpbWFibGUsIGlmIHRoZSBhY2NvdW50aW5nIGlzIGNvcnJlY3QsIGFuZCBpZiBhbnkgc3luY2hyb25pemF0aW9uIGlzc3VlcyBtaWdodCBiZSBwcmVzZW50IHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIHBhZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBraHVnZXBhZ2VkYCBkYWVtb24gaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgcGFnZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZnVuY3Rpb25zLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHVuZGVyc3RhbmRpbmcgaG93IGVmZmljaWVudGx5IHdlIGFyZSBtYW5hZ2luZyBodWdlIHBhZ2VzIGF0IHRoaXMgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDQ2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowNzo1OS41NTYxNDE1ODdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjgwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjgwOlxcdFxcdFxcdHNobWVtX3VuY2hhcmdlKG1hcHBpbmctXFx1MDAzZWhvc3QsIG5yX25vbmUpO1xcbjI2ODE6XFx0XFx0fVxcbjI2ODI6XFx0XFxuMjY4MzpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRtcCwgXFx1MDAyNnBhZ2VsaXN0LCBscnUpIHtcXG4yNjg0OlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1KTtcXG4yNjg1OlxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMjY4NjpcXHRcXHRcXHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XFxuMjY4NzpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjI2ODg6XFx0XFx0fVxcbjI2ODk6XFx0XFxuMjY5MDpcXHRcXHRuZXdfZm9saW8tXFx1MDAzZW1hcHBpbmcgPSBOVUxMO1xcbjI2OTE6XFx0XFxuMjY5MjpcXHRcXHRmb2xpb191bmxvY2sobmV3X2ZvbGlvKTtcXG4yNjkzOlxcdFxcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xcbjI2OTQ6XFx0b3V0OlxcbjI2OTU6XFx0XFx0aWYgKG5lZWRfdW5sb2NrKVxcbjI2OTY6XFx0XFx0XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XFxuMjY5NzpcXHRcXHRWTV9CVUdfT04oIWxpc3RfZW1wdHkoXFx1MDAyNnBhZ2VsaXN0KSk7XFxuMjY5ODpcXHRcXHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XFxuMjY5OTpcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbjI3MDA6XFx0fVxcbjI3MDE6XFx0XFxuMjcwMjpcXHRzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuMjcwMzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LFxcbjI3MDQ6XFx0XFx0XFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbjI3MDU6XFx0e1xcbjI3MDY6XFx0XFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX25vbmUgPSBjb2xsYXBzZV9tYXhfcHRlc19ub25lKGNjLCBOVUxMLCBIUEFHRV9QTURfT1JERVIpO1xcbjI3MDc6XFx0XFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX3N3YXAgPSBjb2xsYXBzZV9tYXhfcHRlc19zd2FwKGNjLCBIUEFHRV9QTURfT1JERVIpO1xcbjI3MDg6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XFxuMjcwOTpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDc6NTkuNTU2MzAwNDk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNTQ2NjgwNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBjb2xsYXBzZV9maWxlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbiBiZXR0ZXIsIGFuZCB0aGUgZmlyc3QgcGxhY2UgSSBhbHdheXMgc3RhcnQgd2l0aCB0aGF0IGlzIHVuZGVyc3RhbmRpbmcgKndobyogY2FsbHMgaXQuIFdoYXQgb3RoZXIgcGllY2VzIG9mIHRoZSBzeXN0ZW0gYXJlIHJlbHlpbmcgb24gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBJJ20gZ29pbmcgdG8gd2FudCB0byBleGFtaW5lIHRoZSBjYWxsaW5nIHN0cnVjdHVyZSDigJMgaG93IGlzIGl0IGludm9rZWQ/IElzIGl0IGEgY29yZSB1dGlsaXR5IGZ1bmN0aW9uIHVzZWQgYWNyb3NzIHRoZSBib2FyZCwgb3IgaXMgaXQgaXNvbGF0ZWQgdG8gYSBzcGVjaWZpYyBtb2R1bGUgb3IgY29tcG9uZW50PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgaWxsdW1pbmF0ZSBpdHMgcHVycG9zZSwgaXRzIGltcG9ydGFuY2UsIGFuZCBob3cgY2hhbmdlcyB0byBpdCBtaWdodCByaXBwbGUgdGhyb3VnaCB0aGUgc3lzdGVtLiBJJ20gdGhpbmtpbmcgYSB0aG9yb3VnaCB0cmFjaW5nIG9mIHRoZSBjYWxsIGdyYXBoIGlzIGluIG9yZGVyOyBJIHdhbnQgdG8gc2VlIHRoaXMgZnVuY3Rpb24gaW4gY29udGV4dC4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgZGlzY292ZXIgdGhlIGRlcGVuZGVudCByZWxhdGlvbnNoaXBzLiBMZXQncyBzdGFydCBieSBpZGVudGlmeWluZyBhbGwgdGhlIGNhbGxlcnMgYW5kIHRoZW4gSSBjYW4gcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjIzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowODowMS43MTA5NzIzOTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTY0NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2h1Z2VwYWdlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0yMTM5PXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjIyMy0vKipcXG5tbS9raHVnZXBhZ2VkLmM6MjIyNDogKiBjb2xsYXBzZV9maWxlIC0gY29sbGFwc2UgZmlsZW1hcC90bXBmcy9zaG1lbSBwYWdlcyBpbnRvIGh1Z2Ugb25lLlxcbm1tL2todWdlcGFnZWQuYy0yMjI1LSAqXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjI0Ny0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6MjI0ODpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTIyNDktXFx0XFx0c3RydWN0IGZpbGUgKmZpbGUsIHBnb2ZmX3Qgc3RhcnQsIHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNjk3LVxcdFZNX0JVR19PTighbGlzdF9lbXB0eShcXHUwMDI2cGFnZWxpc3QpKTtcXG5tbS9raHVnZXBhZ2VkLmM6MjY5ODpcXHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XFxubW0va2h1Z2VwYWdlZC5jLTI2OTktXFx0cmV0dXJuIHJlc3VsdDtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yNzAyPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNzk5LVxcdFxcdH0gZWxzZSB7XFxubW0va2h1Z2VwYWdlZC5jOjI4MDA6XFx0XFx0XFx0cmVzdWx0ID0gY29sbGFwc2VfZmlsZShtbSwgYWRkciwgZmlsZSwgc3RhcnQsIGNjKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjgwMS1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjAxLjc2MjE0NjExNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNjM2MjUyNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHRoaW5raW5nIGFzIGFuIGV4cGVydCBpbiBzb2Z0d2FyZSBhbmFseXNpcy9yZXZlcnNlIGVuZ2luZWVyaW5nOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBgY29sbGFwc2Vfc2Nhbl9maWxlYCBDYWxsZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gYmVpbmcgYXNrZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbGVycyBvZiBhIGZ1bmN0aW9uIG5hbWVkIGBjb2xsYXBzZV9zY2FuX2ZpbGVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzIHN0YXJ0cyB3aXRoIHRoZSBjb250ZXh0LiBJcyB0aGlzIGEgY29kZSBhbmFseXNpcyB0YXNrPyBBbSBJIGRlYnVnZ2luZz8gQW0gSSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIHBpZWNlIG9mIHNvZnR3YXJlPyBLbm93aW5nIHRoZSBsYXJnZXIgcHJvamVjdCB3b3VsZCBkZWZpbml0ZWx5IGhlbHAgbmFycm93IGRvd24gdGhlIHBvc3NpYmlsaXRpZXMuXG5cbk15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIGZpZ3VyaW5nIG91dCAqd2hlcmUqIHRoaXMgYGNvbGxhcHNlX3NjYW5fZmlsZWAgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBDIGNvZGUsIFB5dGhvbiwgSmF2YVNjcmlwdCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBkaWN0YXRlcyBteSB0b29sc2V0LiBGb3IgQy9DKyssIEknZCByZWFjaCBmb3IgdG9vbHMgbGlrZSBgZ2RiYCwgYG9iamR1bXBgLCBzdGF0aWMgYW5hbHlzaXMgdG9vbHMgKGxpa2UgY2xhbmcncyBhbmFseXNpcyBwbHVnaW5zIG9yIENvZGVRTCksIG9yIGV2ZW4gYSBkaXNhc3NlbWJsZXIgaWYgc291cmNlIGlzbid0IHJlYWRpbHkgYXZhaWxhYmxlLiBQeXRob24gd291bGQgbGVuZCBpdHNlbGYgdG8gZ3JlcCwgYSBkZWJ1Z2dlciwgb3IgcG90ZW50aWFsbHkgdXNpbmcgYSBjYWxsIGdyYXBoIGdlbmVyYXRvci4gSSdkIGRlZmluaXRlbHkgYmUgbG9va2luZyBmb3IgdG9vbHMgdGhhdCBjYW4gcGVyZm9ybSBjcm9zcy1yZWZlcmVuY2VzLiBKYXZhU2NyaXB0PyBEZWZpbml0ZWx5IG15IGJyb3dzZXIncyBkZXZlbG9wZXIgdG9vbHMgb3IgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgY29kZSBhbmFseXNpcyBwbGF0Zm9ybSBsaWtlIHN0YXRpYyBhbmFseXNpcyB0b29scy5cblxuQmV5b25kIHRoZSBzcGVjaWZpYyB0b29scywgdGhlIGdvYWwgaXMgdG8gc3lzdGVtYXRpY2FsbHkgbG9jYXRlIGV2ZXJ5IHNpbmdsZSBjYWxsIHNpdGUgdG8gYGNvbGxhcHNlX3NjYW5fZmlsZWAuIEknZCBzdGFydCB3aXRoIGEgYnJvYWQgc2VhcmNoLCBtYXliZSB1c2luZyBhIHRleHQgc2VhcmNoIGZvciB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgdGhlbiByZWZpbmluZyBmcm9tIHRoZXJlLiBJ4oCZZCBjb25zaWRlciBhbnkgcHJlZml4ZXMgb3IgbmFtZXNwYWNlcyBpdCBtaWdodCBiZSB3aXRoaW4gdG8gbmFycm93IHRoZSBzZWFyY2guIFRoZSBtb3JlIHNwZWNpZmljIHRoZSBzZWFyY2gsIHRoZSBiZXR0ZXIuXG5cbkknZCBhbHNvIGNvbnNpZGVyIGFueSBidWlsZCBjb25maWd1cmF0aW9ucyBvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbmRpdGlvbmFsbHkgaW5jbHVkZSBvciBleGNsdWRlIHRoZSBmdW5jdGlvbiBjYWxscy4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGFsbCBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHMuIEFyZSB0aGVyZSBwcmVwcm9jZXNzb3IgbWFjcm9zIHRoYXQgbWlnaHQgcmVkZWZpbmUgb3IgY29uZGl0aW9uYWxseSBpbnZva2UgdGhlIGZ1bmN0aW9uPyBJ4oCZZCBuZWVkIHRvIGFjY291bnQgZm9yIHRob3NlLlxuXG5OZXh0LCBJJ2QgZXhhbWluZSB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gYXQgZWFjaCBjYWxsIHNpdGUuIFRoYXQncyBnb2luZyB0byBiZSBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgKmhvdyogaXQncyBiZWluZyB1c2VkLiBXaGF0IGRhdGEgaXMgaXQgb3BlcmF0aW5nIG9uPyBXaGF0J3MgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyB0aGUgY2FsbHM/IFRoaXMgaW5mb3JtYXRpb24gdGVsbHMgbWUgdGhlIGZ1bmN0aW9uJ3MgcmVzcG9uc2liaWxpdHkgYW5kIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBJJ2Qgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBhcmd1bWVudHMgYXMgYSBzYW5pdHkgY2hlY2sgb2YgbXkgZmluZGluZ3MuXG5cbkZpbmFsbHksIEknZCB3YW50IHRvIGJ1aWxkIGEgYmFzaWMgY2FsbCBncmFwaCB0byB2aXN1YWxpemUgdGhlIHJlbGF0aW9uc2hpcHMuIFdoZXJlIGRvZXMgdGhlIGNhbGxpbmcgY29kZSByZXNpZGU/IERvZXMgaXQgaGF2ZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudD8gSXMgYGNvbGxhcHNlX3NjYW5fZmlsZWAgY2FsbGVkIGZyb20gYSBzaW5nbGUgbG9jYXRpb24gb3IgZnJvbSBtdWx0aXBsZSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGNvZGU/IFRoZSBhbnN3ZXJzIGhlbHAgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyBzY29wZSBvZiBpbmZsdWVuY2UgYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg3NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjA1LjM5ODQwMTA4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MDMyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2Vfc2Nhbl9maWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MjI0OD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjcwMS1cXG5tbS9raHVnZXBhZ2VkLmM6MjcwMjpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubW0va2h1Z2VwYWdlZC5jLTI3MDMtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yODEyPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI4MzQtcmV0cnk6XFxubW0va2h1Z2VwYWdlZC5jOjI4MzU6XFx0cmVzdWx0ID0gY29sbGFwc2Vfc2Nhbl9maWxlKG1tLCBhZGRyLCBmaWxlLCBwZ29mZiwgY2MpO1xcbm1tL2todWdlcGFnZWQuYy0yODM2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowODowNS40NDM4MDczM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzI4NDk0ODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQ2FsbGVycyBvZiBgY29sbGFwc2Vfc2luZ2xlX3BtZGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBjb2xsYXBzZV9zaW5nbGVfcG1kYCBpcyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIHBpZWNlcyBvZiBjb2RlIGFyZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAgaW4gYW55IGRlYnVnZ2luZywgcmVmYWN0b3JpbmcsIG9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIGdpdmVzIG1lIGNvbnRleHQg4oCTIGl0IHRlbGxzIG1lICp3aHkqIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgaW1wb3J0YW50LCB3aGF0IGl0cyBleHBlY3RlZCBpbnB1dHMgYXJlLCBhbmQgaG93IGl0cyBvdXRwdXQgaXMgYmVpbmcgdXRpbGl6ZWQuXG5cbk15IGluaXRpYWwgYXBwcm9hY2ggd291bGQgYmUgdG8gbGV2ZXJhZ2UgdGhlIHRvb2xzIGF2YWlsYWJsZSB0byBtZS4gSSdkIHN0YXJ0IHdpdGggc3RhdGljIGFuYWx5c2lzIGlmIGl0J3MgYXZhaWxhYmxlLiBBIGNyb3NzLXJlZmVyZW5jZSBzZWFyY2gsIHdoZXRoZXIgdGhyb3VnaCBhbiBJREUsIGEgY29kZSBzZWFyY2ggdG9vbCBsaWtlIGBncmVwYCBvciBgYWdgIChkZXBlbmRpbmcgb24gdGhlIHByb2plY3QgYW5kIGxhbmd1YWdlKSwgb3IgYSBkZWRpY2F0ZWQgZGVwZW5kZW5jeSBhbmFseXplciwgd291bGQgYmUgdGhlIG1vc3QgZWZmaWNpZW50IG1ldGhvZC4gSSdtIGxvb2tpbmcgZm9yIGRpcmVjdCBjYWxscywgb2YgY291cnNlLCBidXQgYWxzbyBpbmRpcmVjdCBjYWxscyDigJMgcGVyaGFwcyB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIGR5bmFtaWMgZGlzcGF0Y2ggaWYgdGhlIGxhbmd1YWdlIHN1cHBvcnRzIHRob3NlIGZlYXR1cmVzLiBJJ2xsIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgZXhlY3V0aW9uIHBhdGhzIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy5cblxuSWYgc3RhdGljIGFuYWx5c2lzIGlzIGluc3VmZmljaWVudCwgSSdsbCBuZWVkIHRvIHR1cm4gdG8gZHluYW1pYyBhbmFseXNpcy4gSSBtaWdodCBpbnN0cnVtZW50IHRoZSBjb2RlIHdpdGggbG9nZ2luZyB0byB0cmFjZSBleGVjdXRpb24gZmxvdywgb3IgdXRpbGl6ZSBhIGRlYnVnZ2VyIHRvIHN0ZXAgdGhyb3VnaCBleGVjdXRpb24gYW5kIG9ic2VydmUgdGhlIGNhbGxzIGZpcnN0aGFuZC4gVGhlIGNob2ljZSBvZiBtZXRob2Qgd2lsbCBkZXBlbmQgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGNvZGViYXNlIGFuZCB0aGUgZWFzZSB3aXRoIHdoaWNoIEkgY2FuIHJlcHJvZHVjZSB0aGUgcmVsZXZhbnQgc2NlbmFyaW9zLiBJJ2QgcHJvYmFibHkgYWltIHRvIGNhcHR1cmUgdGhlIGZ1bmN0aW9uIGNhbGxzIGluIGEgbG9nLCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgdGhlIGlucHV0IGFyZ3VtZW50cyBmb3IgY29udGV4dC5cblxuT25jZSBJIGhhdmUgdGhlIGxpc3Qgb2YgY2FsbGVycywgSeKAmWxsIG5lZWQgdG8gYW5hbHl6ZSB0aGVtIGluZGl2aWR1YWxseS4gSSdsbCBpbnZlc3RpZ2F0ZSBlYWNoIGNhbGxlciwgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgKnRoYXQqIGNvZGUgYW5kIGhvdyBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZS4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgc3lzdGVtIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGluZm9ybWF0aW9uIGlzIGtleSB0byBhbnkgZGVlcGVyIGludmVzdGlnYXRpb24uIFRoaXMgd2lsbCBkaWN0YXRlIHRoZSBuZXh0IGNvdXJzZSBvZiBhY3Rpb24sIHdoaWNoIGNvdWxkIHJhbmdlIGZyb20gb3B0aW1pemF0aW9uLCBpZGVudGlmeWluZyBwb3RlbnRpYWwgYnVnIHNvdXJjZXMsIG9yIGFzc2Vzc2luZyBwb3RlbnRpYWwgaW1wYWN0cyBvZiBhIGNoYW5nZSB0byB0aGUgZnVuY3Rpb24gaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcwNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjA5LjE3MjMwNDQ1OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyODU5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2Vfc2luZ2xlX3BtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTI3MDI9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI4MTEtICovXFxubW0va2h1Z2VwYWdlZC5jOjI4MTI6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTI4MTMtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgKmxvY2tfZHJvcHBlZCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yODY5PXN0YXRpYyB2b2lkIGNvbGxhcHNlX3NjYW5fbW1fc2xvdCh1bnNpZ25lZCBpbnQgcHJvZ3Jlc3NfbWF4LFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI5MzktXFxubW0va2h1Z2VwYWdlZC5jOjI5NDA6XFx0XFx0XFx0KnJlc3VsdCA9IGNvbGxhcHNlX3NpbmdsZV9wbWQoa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MsXFxubW0va2h1Z2VwYWdlZC5jLTI5NDEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdm1hLCBcXHUwMDI2bG9ja19kcm9wcGVkLCBjYyk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzIxMD1pbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zMjU4LVxcbm1tL2todWdlcGFnZWQuYzozMjU5OlxcdFxcdHJlc3VsdCA9IGNvbGxhcHNlX3NpbmdsZV9wbWQoYWRkciwgdm1hLCBcXHUwMDI2bW1hcF91bmxvY2tlZCwgY2MpO1xcbm1tL2todWdlcGFnZWQuYy0zMjYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowODowOS4yMTg1OTMyMDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTU4NjM0ODA0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgbWFkdmlzZV9jb2xsYXBzZWAgYW5kIGl0cyBUcmlnZ2VycyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG1hZHZpc2VfY29sbGFwc2VgIGFuZCBob3cgaXQncyBhY3RpdmF0ZWQuIEl0J3MgY2xlYXIgdGhhdCB0aGUgcHJpbWFyeSB0cmlnZ2VyIGlzIHRoZSBzeXN0ZW0gY2FsbCBgbWFkdmlzZWAgdXNlZCB3aXRoIHRoZSBgTUFEVl9DT0xMQVBTRWAgZmxhZy4gVGhhdCBtYWtlcyBzZW5zZSwgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlbiwgSSBzZWUgYGNvbGxhcHNlX3NjYW5fbW1fc2xvdGAgYWxzbyBjYWxscyBpdCwgYW5kIHRoYXQncyB0aWVkIHRvIHRoZSBga2h1Z2VwYWdlZGAga3RocmVhZC4gU28sIGVmZmVjdGl2ZWx5LCBgbWFkdmlzZV9jb2xsYXBzZWAgY2FuIGJlIGluaXRpYXRlZCBkaXJlY3RseSBieSBgbWFkdmlzZShNQURWX0NPTExBUFNFKWAgb24gZmlsZSBtYXBwaW5ncywgYXMgd2VsbCBhcyBiZWluZyBhIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYGtodWdlcGFnZWRgIGt0aHJlYWQgaXRzZWxmLiBUaGlzIGltcGxpZXMgdGhhdCB0aGVyZSBhcmUgdHdvIGRpc3RpbmN0IG1lY2hhbmlzbXM6IHVzZXItbGV2ZWwgZGlyZWN0aXZlIHZpYSBgbWFkdmlzZWAgYW5kIGEga2VybmVsLWxldmVsIHByb2FjdGl2ZSBzdHJhdGVneSB0aHJvdWdoIGBraHVnZXBhZ2VkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgYm90aCBwYXRocy4gSSBzaG91bGQgZXhhbWluZSB0aGUgZmlsZSBtYXBwaW5nIHVzZSBjYXNlIHdpdGggYE1BRFZfQ09MTEFQU0VgIGZpcnN0LCB0aGVuIGFzc2VzcyBob3cgYGtodWdlcGFnZWRgIGludGVyYWN0cy4gTGV0IG1lIGNoZWNrIHRoZSBjb2RlIGZvciBgbWFkdmlzZV9jb2xsYXBzZWAgaW4gbW9yZSBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTQ1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDg6MTguODA0OTQzMTg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzEzMzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2NvbGxhcHNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MzE3Mz1ib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMxNzctXFxubW0va2h1Z2VwYWdlZC5jOjMxNzg6c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGVudW0gc2Nhbl9yZXN1bHQgcilcXG5tbS9raHVnZXBhZ2VkLmMtMzE3OS17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzIwOS1cXG5tbS9raHVnZXBhZ2VkLmM6MzIxMDppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9raHVnZXBhZ2VkLmMtMzIxMS1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzI5Ny1cXHRyZXR1cm4gdGhwcyA9PSAoKGhlbmQgLSBoc3RhcnQpIFxcdTAwM2VcXHUwMDNlIEhQQUdFX1BNRF9TSElGVCkgPyAwXFxubW0va2h1Z2VwYWdlZC5jOjMyOTg6XFx0XFx0XFx0OiBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGxhc3RfZmFpbCk7XFxubW0va2h1Z2VwYWdlZC5jLTMyOTktfVxcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzYzLVxcdGNhc2UgTUFEVl9DT0xMQVBTRTpcXG5tbS9tYWR2aXNlLmM6MTM2NDpcXHRcXHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCxcXG5tbS9tYWR2aXNlLmMtMTM2NS1cXHRcXHRcXHRcXHUwMDI2bWFkdl9iZWhhdmlvci1cXHUwMDNlbG9ja19kcm9wcGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDg6MTguODU4MDgwNDU0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5Nzc2MDIxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgS2VybmVsIEh1Z2UgUGFnZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBtbS9raHVnZXBhZ2VkLmNgLiBNeSBmaXJzdCBzdG9wIGlzIGdvaW5nIHRvIGJlIHRoZSBgbW0vTWFrZWZpbGVgLiBMZXQncyBzZWUuLi4gYWgsIHJpZ2h0IGhlcmU6IGBvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vYC4gVGhhdCB0ZWxscyBtZSBga2h1Z2VwYWdlZGAgaXMgYnVpbHQgd2hlbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBwbGF5LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYG1tL0tjb25maWdgLiBJdCdzIHBvc3NpYmxlIHRoZXJlIGFyZSBtb3JlIGdyYW51bGFyIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXRzZWxmIG9yIG1heWJlIGV2ZW4gZGlyZWN0bHkgcmVsYXRlZCB0byBga2h1Z2VwYWdlZGAgdGhhdCBJJ20gbWlzc2luZy4gTmVlZCB0byBiZSB0aG9yb3VnaCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMwMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjIwLjgzNTY4NTA4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5Njg0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzNC1cXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzYtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDg6MjAuODg0NjU4MjY0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU1MjI0NzU2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBtb2R1bGUncyBjb25maWd1cmF0aW9uIGlzIG1hbmFnZWQuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBhdCBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4MzUuIEknbSBndWVzc2luZyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB0aGUgbW9kdWxlJ3MgcmVsZXZhbnQgc2V0dGluZ3MgYXJlIGxpa2VseSBpbnRlcndvdmVuIHdpdGggdGhvc2UuIExpbmUgODM1IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGVudHJ5IHBvaW50IHRvIG5hdmlnYXRlIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBmb3Igd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCwgZ2l2ZW4gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIEl0J3MgcHJvYmFibHkgYSBnb29kIHNwb3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cyBJJ20gbG9va2luZyBmb3IsIGFuZCBtYXliZSBldmVuIHNvbWUgaGludHMgb24gaG93IHRoZSBvcHRpb25zIGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0cmVhc3VyZXMgSSBjYW4gdW5lYXJ0aCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjA2OTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowODoyNi40MDcxMzc3NjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODM1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODM1OlxcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gODM2OlxcdFxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuIDgzNzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiAhUFJFRU1QVF9SVFxcbiA4Mzg6XFx0XFx0c2VsZWN0IENPTVBBQ1RJT05cXG4gODM5OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4gODQwOlxcdFxcdHNlbGVjdCBNTV9JRFxcbiA4NDE6XFx0XFx0aGVscFxcbiA4NDI6XFx0XFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXFxuIDg0MzpcXHRcXHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cXG4gODQ0OlxcdFxcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXFxuIDg0NTpcXHRcXHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XFxuIDg0NjpcXHRcXHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcXG4gODQ3OlxcdFxcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxcbiA4NDg6XFx0XFxuIDg0OTpcXHRcXHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxcbiA4NTA6XFx0XFxuIDg1MTpcXHRpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4NTI6XFx0XFxuIDg1MzpcXHRjaG9pY2VcXG4gODU0OlxcdFxcdHByb21wdCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1xcXCJcXG4gODU1OlxcdFxcdGRlZmF1bHQgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxuIDg1NjpcXHRcXHRoZWxwXFxuIDg1NzpcXHRcXHQgIFNlbGVjdHMgdGhlIHN5c2ZzIGRlZmF1bHRzIGZvciBUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0LlxcbiA4NTg6XFx0XFxuIDg1OTpcXHRcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxuIDg2MDpcXHRcXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuIDg2MTpcXHRcXHRoZWxwXFxuIDg2MjpcXHRcXHQgIEVuYWJsaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlIGFsd2F5cywgY2FuIGluY3JlYXNlIHRoZVxcbiA4NjM6XFx0XFx0ICBtZW1vcnkgZm9vdHByaW50IG9mIGFwcGxpY2F0aW9ucyB3aXRob3V0IGEgZ3VhcmFudGVlZFxcbiA4NjQ6XFx0XFx0ICBiZW5lZml0IGJ1dCBpdCB3aWxsIHdvcmsgYXV0b21hdGljYWxseSBmb3IgYWxsIGFwcGxpY2F0aW9ucy5cXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG4gODY3OlxcdFxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuIDg2ODpcXHRcXHRoZWxwXFxuIDg2OTpcXHRcXHQgIEVuYWJsaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlIG1hZHZpc2UsIHdpbGwgb25seSBwcm92aWRlIGFcXG4gODcwOlxcdFxcdCAgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgYmVuZWZpdCB0byB0aGUgYXBwbGljYXRpb25zIHVzaW5nXFxuIDg3MTpcXHRcXHQgIG1hZHZpc2UoTUFEVl9IVUdFUEFHRSkgYnV0IGl0IHdvbid0IHJpc2sgdG8gaW5jcmVhc2UgdGhlXFxuIDg3MjpcXHRcXHQgIG1lbW9yeSBmb290cHJpbnQgb2YgYXBwbGljYXRpb25zIHdpdGhvdXQgYSBndWFyYW50ZWVkXFxuIDg3MzpcXHRcXHQgIGJlbmVmaXQuXFxuIDg3NDpcXHRcXG4gODc1OlxcdFxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbiA4NzY6XFx0XFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuIDg3NzpcXHRcXHRoZWxwXFxuIDg3ODpcXHRcXHQgIERpc2FibGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgYnkgZGVmYXVsdC4gSXQgY2FuIHN0aWxsIGJlXFxuIDg3OTpcXHRcXHQgIGVuYWJsZWQgYXQgcnVudGltZSB2aWEgc3lzZnMuXFxuIDg4MDpcXHRlbmRjaG9pY2VcXG4gODgxOlxcdFxcbiA4ODI6XFx0Y2hvaWNlXFxuIDg4MzpcXHRcXHRwcm9tcHQgXFxcIlNobWVtIGh1Z2VwYWdlIGFsbG9jYXRpb24gZGVmYXVsdHNcXFwiXFxuIDg4NDpcXHRcXHRkZWZhdWx0IFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDg6MjYuNDA3MjU3MjM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg1NTgyNjA1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBtYWluIGNvbmNlcm4gaGVyZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBgY29sbGFwc2VfZmlsZWAgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggZmlsZSBtYXBwaW5nIGFuZCByZWFkYWhlYWQgYWZ0ZXIgdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2FzOiBkb2VzIHRoaXMgbmV3IGNoYW5nZSB0byB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjb2xsYXBzZV9maWxlYCwgZGVwZW5kIG9uIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgbGlrZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBpcyBjZW50cmFsIGhlcmU/IEkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgY29sbGFwc2VfZmlsZWAgaXMgdW5jb25kaXRpb25hbGx5IGRlZmluZWQgd2hlbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQsIHdoaWNoIG1hZGUgaXQgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuXG5cbkkgdGhlbiBkdWcgaW50byB0aGUgY29kZSwgZm9jdXNpbmcgb24gdGhlIGxvY2sgYWNxdWlzaXRpb24gc3RyYXRlZ3kuIFRoZSBwYXRjaCdzIGNvcmUgY2hhbmdlIGlzIGFib3V0IHRha2luZyB0aGUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZGAgKmJlZm9yZSogYWNxdWlyaW5nIGZvbGlvIGxvY2tzLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IHN0YXRlcyB0aGUgcmVhc29uOiByZWFkYWhlYWQgbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBtaWdodCBiZSBob2xkaW5nIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbC4gVGhlIG9sZCBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAgaW1wbGljaXRseSBoZWxkIHRoaXMgbG9jaywgYnV0IHRoZSBuZXcgY29kZSB1c2VzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgaW5zdGVhZCwgbWVhbmluZyB0aGUgbG9jayBpcyBub3cgaGVsZCBleHBsaWNpdGx5IGZvciB0aGUgZW50aXJlIHJvdXRpbmUuXG5cbkkgdGhlbiBkaWQgYSBxdWljayBjaGVjayBvbiB3aGVyZSBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgIGlzIHVzZWQgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGFmZmVjdHMgaG90IHBhdGhzLlxuXG5UaGUgcmVhbCBtZWF0IG9mIHRoZSBhbmFseXNpcywgZnJvbSBteSBwZXJzcGVjdGl2ZSwgaXMgdGhhdCB0aGlzIHBhdGNoIHNpZ25pZmljYW50bHkgYWx0ZXJzIHRoZSBsb2NraW5nIG9yZGVyLCBhbmQgd2l0aCB0aGUgbG9jayBiZWluZyBoZWxkIGZvciBhIHByb2xvbmdlZCBvcGVyYXRpb24sIHRoaXMgaGFzIGh1Z2UgaW1wbGljYXRpb25zLiBBY3F1aXJpbmcgYG1hcHBpbmctXHUwMDNlaW52YWxpZGF0ZV9sb2NrYCBlYXJsaWVyIGFuZCBtYWludGFpbmluZyBpdCB0aHJvdWdob3V0IGBjb2xsYXBzZV9maWxlYCwgZXNwZWNpYWxseSBhY3Jvc3MgZm9saW8gbG9ja3MgYW5kIHBvdGVudGlhbCBhbGxvY2F0aW9ucywgc2V0cyBvZmYgYWxhcm0gYmVsbHMgZm9yIHBvdGVudGlhbCBkZWFkbG9ja3MsIGxvY2sgaW52ZXJzaW9ucywgcmFjZSBjb25kaXRpb25zLCBvciB1bmhhbmRsZWQgZXJyb3JzLiBJbnRlcmFjdGluZyB3aXRoIG9wZXJhdGlvbnMgbGlrZSB0cnVuY2F0ZSwgZmFsbG9jYXRlLCBwYWdlIGZhdWx0LCBtZW1vcnkgcmVjbGFpbSwgb3IgbG9ja2RlcCB1bmRlciB0aGVzZSBuZXcgY29uZGl0aW9ucyBpcyBhIHByaW1lIHRhcmdldCBmb3IgdGhlc2Uga2luZHMgb2YgcHJvYmxlbXMuXG5cblRoaXMgaXMgYSBjbGVhciBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjb3ZlciB0aGVzZSBhcmVhczpcbiogICBgY29sbGFwc2VfZmlsZWBcbiogICBgY29sbGFwc2Vfc2Nhbl9maWxlYFxuKiAgIGBtYWR2aXNlX2NvbGxhcHNlYFxuXG5UaGVzZSBhcmUgYWxsIGRpcmVjdCB0b3VjaCBwb2ludHMgd2l0aCB0aGUgY2hhbmdlLiBUaGlzIGhlbHBzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcGF0aHMgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjM0Ljk2NTUyMDYyOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNjU5NDk3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX2NhY2hlX3JhX3VuYm91bmRlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0PTEwMjQ9RXhhbXBsZSBvdXRwdXQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0LTEwMzAtICAgIDU2MzczMjQ4ICAgICA0NzM3IG1tL3NsdWIuYzoyMjU5IGZ1bmM6YWxsb2Nfc2xhYl9wYWdlXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdDoxMDMxOiAgICAxNDg4MDc2OCAgICAgMzYzMyBtbS9yZWFkYWhlYWQuYzoyNDcgZnVuYzpwYWdlX2NhY2hlX3JhX3VuYm91bmRlZFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QtMTAzMi0gICAgMTQ0MTc5MjAgICAgIDM1MjAgbW0vbW1faW5pdC5jOjI1MzAgZnVuYzphbGxvY19sYXJnZV9zeXN0ZW1faGFzaFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3Q9NjU9RXhhbXBsZSBvdXRwdXQ6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QtNzUtICAgICAgICAgMTRNICAgICAzNTIwIG1tL21tX2luaXQuYzoyNTMwIGZ1bmM6YWxsb2NfbGFyZ2Vfc3lzdGVtX2hhc2hcXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdDo3NjogICAgICAgICAxNU0gICAgIDM2NTYgbW0vcmVhZGFoZWFkLmM6MjQ3IGZ1bmM6cGFnZV9jYWNoZV9yYV91bmJvdW5kZWRcXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdC03Ny0gICAgICAgICA1NU0gICAgIDQ4ODcgbW0vc2x1Yi5jOjIyNTkgZnVuYzphbGxvY19zbGFiX3BhZ2VcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTQ3OTQ9c3RhdGljIGludCByZWRpcnR5X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IHBhZ2VfaWR4LCBpbnQgbGVuKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtNDgwMi1cXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XFxuZnMvZjJmcy9maWxlLmM6NDgwMzpcXHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcXHUwMDI2cmFjdGwsIGxlbiwgMCk7XFxuZnMvZjJmcy9maWxlLmMtNDgwNC1cXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcXG4tLVxcbmZzL3Zlcml0eS9wYWdlY2FjaGUuYz00Mj12b2lkIGdlbmVyaWNfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5mcy92ZXJpdHkvcGFnZWNhY2hlLmMtNTMtXFxuZnMvdmVyaXR5L3BhZ2VjYWNoZS5jOjU0OlxcdFxcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKFxcdTAwMjZyYWN0bCwgbnJfcGFnZXMsIDApO1xcbmZzL3Zlcml0eS9wYWdlY2FjaGUuYy01NS1cXHR9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xNDA4PXN0cnVjdCByZWFkYWhlYWRfY29udHJvbCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDMwLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjE0MzE6dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDMyLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVhZCwgdW5zaWduZWQgbG9uZyBsb29rYWhlYWRfY291bnQpO1xcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvcmVhZGFoZWFkLmgtMTMtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvcmVhZGFoZWFkLmg6MTQ6VFJBQ0VfRVZFTlQocGFnZV9jYWNoZV9yYV91bmJvdW5kZWQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvcmVhZGFoZWFkLmgtMTUtXFx0VFBfUFJPVE8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwgdW5zaWduZWQgbG9uZyBucl90b19yZWFkLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNDg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIzNTctXFx0XFx0XFx0XFx0ICogaW52YWxpZGF0ZV9sb2NrIGhlbGQgYWJvdmU7IGRvbid0IHJldGFrZSBpdC5cXG5tbS9raHVnZXBhZ2VkLmM6MjM1ODpcXHRcXHRcXHRcXHQgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZFxcbm1tL2todWdlcGFnZWQuYy0yMzU5LVxcdFxcdFxcdFxcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjM2MS1cXHRcXHRcXHRcXHRpZiAoaW5kZXggXFx1MDAzYyBlb2YpXFxubW0va2h1Z2VwYWdlZC5jOjIzNjI6XFx0XFx0XFx0XFx0XFx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoXFx1MDAyNnJhY3RsLFxcbm1tL2todWdlcGFnZWQuYy0yMzYzLVxcdFxcdFxcdFxcdFxcdFxcdG1pbihlbmQsIGVvZikgLSBpbmRleCwgMCk7XFxuLS1cXG5tbS9yZWFkYWhlYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmFjdGxfYWxsb2NfZm9saW8oc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTIwNy0vKipcXG5tbS9yZWFkYWhlYWQuYzoyMDg6ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQgLSBTdGFydCB1bmNoZWNrZWQgcmVhZGFoZWFkLlxcbm1tL3JlYWRhaGVhZC5jLTIwOS0gKiBAcmFjdGw6IFJlYWRhaGVhZCBjb250cm9sLlxcbi0tXFxubW0vcmVhZGFoZWFkLmMtMjIxLSAqL1xcbm1tL3JlYWRhaGVhZC5jOjIyMjp2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXFxubW0vcmVhZGFoZWFkLmMtMjIzLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVhZCwgdW5zaWduZWQgbG9uZyBsb29rYWhlYWRfc2l6ZSlcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTI0NC1cXG5tbS9yZWFkYWhlYWQuYzoyNDU6XFx0dHJhY2VfcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQobWFwcGluZy1cXHUwMDNlaG9zdCwgaW5kZXgsIG5yX3RvX3JlYWQsXFxubW0vcmVhZGFoZWFkLmMtMjQ2LVxcdFxcdFxcdFxcdCAgICAgIGxvb2thaGVhZF9zaXplKTtcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTMxNy19XFxubW0vcmVhZGFoZWFkLmM6MzE4OkVYUE9SVF9TWU1CT0xfR1BMKHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKTtcXG5tbS9yZWFkYWhlYWQuYy0zMTktXFxuLS1cXG5tbS9yZWFkYWhlYWQuYz0zMjY9c3RhdGljIHZvaWQgZG9fcGFnZV9jYWNoZV9yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxubW0vcmVhZGFoZWFkLmMtMzQ3LVxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcXG5tbS9yZWFkYWhlYWQuYzozNDg6XFx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQocmFjdGwsIG5yX3RvX3JlYWQsIGxvb2thaGVhZF9zaXplKTtcXG5tbS9yZWFkYWhlYWQuYy0zNDktXFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XFxuLS1cXG5tbS9yZWFkYWhlYWQuYz00ODE9dm9pZCBwYWdlX2NhY2hlX3JhX29yZGVyKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXFxuLS1cXG5tbS9yZWFkYWhlYWQuYy01MTQtXFxubW0vcmVhZGFoZWFkLmM6NTE1OlxcdC8qIFNlZSBjb21tZW50IGluIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkgKi9cXG5tbS9yZWFkYWhlYWQuYy01MTYtXFx0bm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowODozNi45MDIxMjA3MzFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzkxNDA1NDc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSG90IFBhdGhzIGFuZCBUYXJnZXRlZCBDb2RlKipcblxuT2theSwgc28gYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBpcyBjbGVhcmx5IGEgZnVuY3Rpb24gdGhhdCBnZXRzIGhpdCAqYSBsb3QqIGR1cmluZyBmaWxlIHJlYWRzLiBgZG9fcGFnZV9jYWNoZV9yYWAgY2FsbHMgaXQsIHdoaWNoIG1lYW5zIGFueSBmaWxlIHJlYWRpbmcgdXNpbmcgdGhlIHBhZ2UgY2FjaGUsIGxpa2UgdGhlIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcmVhZGFoZWFkIHBhdGhzLCBhcmUgZ29pbmcgdG8gYmUgdG91Y2hpbmcgdGhpcyBmdW5jdGlvbi4gTm8gbmVlZCB0byBsaXN0IHRoZSBjb21tb24gZnVuY3Rpb25zIGFnYWluLlxuXG5NeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaCwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUuIEdpdmVuIHRoZSBjb250ZXh0LCBJIHdhbnQgdG8gY29uZmlybSB0aGUgcHJpbWFyeSB0YXJnZXRzIG9mIHRoZSBwYXRjaCBhcmUgd2l0aGluIHRoZSBraHVnZXBhZ2VkIHN1YnN5c3RlbS4gTGV0J3Mgc2VlLi4uIHRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9uIGlzIGBjb2xsYXBzZV9maWxlYCwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gVGhlIGltbWVkaWF0ZSBjYWxsZXJzIGFyZSBnb2luZyB0byBiZSBgY29sbGFwc2Vfc2Nhbl9maWxlYCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLiBBbHNvLCB0aGVyZSdzIGBtYWR2aXNlX2NvbGxhcHNlYCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGBNQURWX0NPTExBUFNFYC5cblxuTm93LCBiZWZvcmUgSSBkaWcgaW50byBzcGVjaWZpY3MsIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgY2FsbGVycyBvZiBgY29sbGFwc2VfZmlsZWAuIFRoaXMgaXMgY3J1Y2lhbC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAyNzkwLTI4MTAgaW4gYG1tL2todWdlcGFnZWQuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGlyZWN0IGNhbGxzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE4MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowODo0NC44MTYxNzc4MzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzkwOlxcdFxcdGlmIChyZXN1bHQgPT0gU0NBTl9QVEVfTUFQUEVEX0hVR0VQQUdFKVxcbjI3OTE6XFx0XFx0XFx0Y2MtXFx1MDAzZXByb2dyZXNzKys7XFxuMjc5MjpcXHRcXHRlbHNlXFxuMjc5MzpcXHRcXHRcXHRjYy1cXHUwMDNlcHJvZ3Jlc3MgKz0gSFBBR0VfUE1EX05SO1xcbjI3OTQ6XFx0XFxuMjc5NTpcXHRcXHRpZiAocmVzdWx0ID09IFNDQU5fU1VDQ0VFRCkge1xcbjI3OTY6XFx0XFx0XFx0aWYgKHByZXNlbnQgXFx1MDAzYyBIUEFHRV9QTURfTlIgLSBtYXhfcHRlc19ub25lKSB7XFxuMjc5NzpcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX0VYQ0VFRF9OT05FX1BURTtcXG4yNzk4OlxcdFxcdFxcdFxcdGNvdW50X3ZtX2V2ZW50KFRIUF9TQ0FOX0VYQ0VFRF9OT05FX1BURSk7XFxuMjc5OTpcXHRcXHRcXHR9IGVsc2Uge1xcbjI4MDA6XFx0XFx0XFx0XFx0cmVzdWx0ID0gY29sbGFwc2VfZmlsZShtbSwgYWRkciwgZmlsZSwgc3RhcnQsIGNjKTtcXG4yODAxOlxcdFxcdFxcdH1cXG4yODAyOlxcdFxcdH1cXG4yODAzOlxcdFxcbjI4MDQ6XFx0XFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9zY2FuX2ZpbGUobW0sIGZvbGlvLCBmaWxlLCBwcmVzZW50LCBzd2FwLCByZXN1bHQpO1xcbjI4MDU6XFx0XFx0cmV0dXJuIHJlc3VsdDtcXG4yODA2OlxcdH1cXG4yODA3OlxcdFxcbjI4MDg6XFx0LypcXG4yODA5OlxcdCAqIFRyeSB0byBjb2xsYXBzZSBhIHNpbmdsZSBQTUQgc3RhcnRpbmcgYXQgYSBQTUQgYWxpZ25lZCBhZGRyLCBhbmQgcmV0dXJuXFxuMjgxMDpcXHQgKiB0aGUgcmVzdWx0cy5cXG4yODExOlxcdCAqL1xcbjI4MTI6XFx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuMjgxMzpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCAqbG9ja19kcm9wcGVkLFxcbjI4MTQ6XFx0XFx0XFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbjI4MTU6XFx0e1xcbjI4MTY6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbjI4MTc6XFx0XFx0Ym9vbCB0cmlnZ2VyZWRfd2IgPSBmYWxzZTtcXG4yODE4OlxcdFxcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0O1xcbjI4MTk6XFx0XFx0c3RydWN0IGZpbGUgKmZpbGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjQ0LjgxNjMyNjk0N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MTcxOTg2MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiBGaWxlLUJhY2tlZCBUSFAgQ29sbGFwc2UqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGNvZGUgbWVudGlvbnMgYGtodWdlcGFnZWRfc2Nhbl9maWxlYCwgYnV0IGhvbGQgb24sIGxpbmUgMjgwNCBzaG93cyBhIHRyYWNlcG9pbnQsIG5vdCB0aGUgYWN0dWFsIGZ1bmN0aW9uLiBUaGUgcmVhbCBmdW5jdGlvbiBuYW1lIGlzIGBjb2xsYXBzZV9zY2FuX2ZpbGVgLiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyAqdGhhdCouXG5cbkEgcXVpY2sgY2hlY2sgc2hvd3MgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIG9uIGxpbmUgMjgzNS4gQW5kLCB0cmFjaW5nIGZ1cnRoZXIgYmFjaywgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGdldHMgY2FsbGVkIGZyb20gYm90aCBgY29sbGFwc2Vfc2Nhbl9tbV9zbG90YCBhbmQgYG1hZHZpc2VfY29sbGFwc2VgLiBJbnRlcmVzdGluZy5cblxuTm93LCBhcmUgYGtodWdlcGFnZWRfZG9fc2NhbmAgb3IgYGtodWdlcGFnZWRfc2Nhbl9tbV9zbG90YCBpbnZvbHZlZCBoZXJlPyBMb29rcyBsaWtlIGBraHVnZXBhZ2VkX3NjYW5fbW1fc2xvdGAgaXMgY2FsbGVkIGJ5IGBraHVnZXBhZ2VkX2RvX3NjYW5gIHdpdGhpbiB0aGF0IGJhY2tncm91bmQgdGhyZWFkLiBBbmQsIGNydWNpYWxseSwgYG1hZHZpc2VfY29sbGFwc2VgIGhhbmRsZXMgdGhlIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCB1c2Vyc3BhY2UgY2FsbC4gR290IGl0LlxuXG5MZXQncyBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3MgdG8gc2VlIHdoYXQncyBuZWVkZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4gSGVhZCB0byBgbW0vS2NvbmZpZ2AuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgdGhlIHRvcC1sZXZlbCBvcHRpb24sIG9mIGNvdXJzZS4gQW55IGRlcGVuZGVuY2llcz8gQWgsIGBkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcdTAwMjZcdTAwMjYgIVBSRUVNUFRfUlRgLiBPbiBvdXIgYW1kNjQgdGFyZ2V0LCBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIHdlJ3JlIGdvb2QgdGhlcmUuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgZm9yIGZpbGUtYmFja2VkIFRIUCBjb2xsYXBzZT8gTGV0IG1lIGNoZWNrIGZvciB0aGluZ3MgbGlrZSBgUkVBRF9BSEVBRGAsIGBSRUFEQUhFQURgLCBvciBgRklMRV9USFBgIGluIGBtbS9LY29uZmlnYCBvciBldmVuIGBmcy9LY29uZmlnYC4gVGltZSB0byBkbyBzb21lIGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTgwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDg6NDkuOTg4MzE2NTkzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjYxMjI0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUkVBREFIRUFEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjUwLjAzNDkzNjQ1MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODUyNDkwOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYGtodWdlcGFnZWQuY2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGludG8gYGtodWdlcGFnZWQuY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0J3MgYmVoYXZpbmcgd2l0aCByZXNwZWN0IHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25zLCBhbmQgSSBoYXZlIGEgZmVlbGluZyB3ZSdyZSBnb2luZyB0byBzZWUgc29tZSBtb3JlIENPTkZJRyBkZWZpbmVzIGluIHRoZXJlLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIHdlJ3JlIHRyb3VibGVzaG9vdGluZy4gTGV0J3Mgc3RhcnQgd2l0aCBga2h1Z2VwYWdlZC5jYCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgd2FudCB0byBtYWtlIGNlcnRhaW4gSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBjb2RlJ3MgY29uZGl0aW9uYWwgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTg2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDg6NTIuODg3NDI5Nzk1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTUwMTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MTM2PXN0YXRpYyBzdHJ1Y3Qga2h1Z2VwYWdlZF9zY2FuIGtodWdlcGFnZWRfc2NhbiA9IHtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMzktXFxubW0va2h1Z2VwYWdlZC5jOjE0MDojaWZkZWYgQ09ORklHX1NZU0ZTXFxubW0va2h1Z2VwYWdlZC5jLTE0MS1zdGF0aWMgc3NpemVfdCBzY2FuX3NsZWVwX21pbGxpc2Vjc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTM0NT1zdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGtodWdlcGFnZWRfYXR0cl9ncm91cCA9IHtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zNDgtfTtcXG5tbS9raHVnZXBhZ2VkLmM6MzQ5OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5tbS9raHVnZXBhZ2VkLmMtMzUwLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTEwMzM9c3RhdGljIGlubGluZSBnZnBfdCBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2sodm9pZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMDM3LVxcbm1tL2todWdlcGFnZWQuYzoxMDM4OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL2todWdlcGFnZWQuYy0xMDM5LXN0YXRpYyBpbnQgY29sbGFwc2VfZmluZF90YXJnZXRfbm9kZShzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjUyLjkzODkzNjM2NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3ODAyNTY5MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGtodWdlcGFnZWQuYyBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBga2h1Z2VwYWdlZC5jYCBmaWxlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkndmUgcmVhbGl6ZWQgdGhhdCB0aGUgY29kZSBvbmx5IGRlcGVuZHMgaW50ZXJuYWxseSBvbiBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCwgYnV0IHRoZXNlIGRvbid0IHNlZW0gdG8gZ3VhcmQgdGhlIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbi4gTG9va2luZyBhdCB0aGUgYG1tL01ha2VmaWxlYCwgaXQncyBjbGVhciB0aGF0IGBraHVnZXBhZ2VkLm9gIGdldHMgYnVpbHQgb25seSBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLiBUaGF0J3Mgb3VyIHByaW1hcnkgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudCB0aGVuLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgYEZvY3VzU3ltYm9sc2AuIFdlJ3JlIGxvb2tpbmcgYXQ6IGBjb2xsYXBzZV9maWxlYCwgYGNvbGxhcHNlX3NjYW5fZmlsZWAsIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGxhcHNlYC4gQXJlIHRoZXNlIHN5bWJvbHMgc3BlY2lmaWMgZW5vdWdoIHRvIHdhcnJhbnQgYXR0ZW50aW9uPyBBYnNvbHV0ZWx5LiBgY29sbGFwc2VfZmlsZWAgaXMgaGlnaGx5IHNwZWNpZmljIGFuZCB3YXMgZGlyZWN0bHkgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBgY29sbGFwc2Vfc2Nhbl9maWxlYCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGFyZSBhbHNvIHZlcnkgdGFyZ2V0ZWQsIGFzIHRoZWlyIGNhbGxlcnMgYXJlIGxpbWl0ZWQgdG8gdGhlIGBraHVnZXBhZ2VkLmNgIG1vZHVsZS4gVGhlbiwgYG1hZHZpc2VfY29sbGFwc2VgIGlzIGEgY2xlYXJseSBkZWZpbmVkIGVudHJ5IHBvaW50IGZvciB0aGUgYE1BRFZfQ09MTEFQU0VgIG9wZXJhdGlvbi5cblxuTm9uZSBvZiB0aGVzZSBhcmUgZ2VuZXJpYyBvciBhbGwtb3Zlci10aGUtcGxhY2UgbGlrZSB5b3VyIGNvbW1vbiBga21hbGxvY2AgY2FsbHMsIHBhZ2UgZmF1bHQgaGFuZGxlcnMgb3IgbG9ja3MuIFRoZXkgYWxsIGV4ZWN1dGUgb25seSBkdXJpbmcgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIGNvbGxhcHNlLCBlaXRoZXIgdGhyb3VnaCB0aGUgYE1BRFZfQ09MTEFQU0VgIHN5c2NhbGwgb3IgdGhlIGBraHVnZXBhZ2VkYCBkYWVtb24uXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlIGZ1enppbmcgcmVhc29uaW5nIGFuZCBjb25maWcuIEl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIG1vZGlmaWVzIGBjb2xsYXBzZV9maWxlYCB0byBhY3F1aXJlIGBtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9ja2AgZWFybGllciBhbmQgaG9sZCBpdCB0aHJvdWdob3V0IHRoZSBjb2xsYXBzZSBwcm9jZXNzLiBUaGlzIGNoYW5nZXMgdGhlIGxvY2tpbmcgb3JkZXIgYW5kIGZpbGUgcmVhZCBhaGVhZCBiZWhhdmlvci4gQmVjYXVzZSBvZiB0aGlzIGxvY2tpbmcgbW9kaWZpY2F0aW9uLCBwbHVzIHRoZSByZXBsYWNlbWVudCBvZiBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpYCB3aXRoIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpYCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBsb2NrIGludmVyc2lvbnMsIGRlYWRsb2NrcywgcmFjZXMgd2l0aCB0cnVuY2F0ZS9pbnZhbGlkYXRpb24sIG9yIHVuZXhwZWN0ZWQgZXJyb3JzISBUaGUgZW5hYmxpbmcgY29uZmlnIGlzIGp1c3QgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIG15IGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhciB0b28uIEFsbCBjaGVja3MgYXJlIGdyZWVuLiBUaW1lIHRvIGNhbGwgaXQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDkxLCJPdXRwdXRUb2tlbnMiOjE5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowOTowMC43NDE1MDgzNTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDI4MzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb2xsYXBzZV9maWxlXCIsXG4gICAgXCJjb2xsYXBzZV9zY2FuX2ZpbGVcIixcbiAgICBcImNvbGxhcHNlX3NpbmdsZV9wbWRcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb2xsYXBzZV9maWxlKCkgaW4gbW0va2h1Z2VwYWdlZC5jIHRvIGFjcXVpcmUgbWFwcGluZy1cXHUwMDNlaW52YWxpZGF0ZV9sb2NrIGVhcmxpZXIgKHByaW9yIHRvIGxvY2tpbmcgZm9saW9zKSBhbmQgaG9sZCBpdCBzaGFyZWQgdGhyb3VnaG91dCB0aGUgY29sbGFwc2Ugb3BlcmF0aW9uLCByZXBsYWNpbmcgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpIHdpdGggcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKS4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhbHRlciBsb2NraW5nIGhpZXJhcmNoaWVzLCBjb25jdXJyZW5jeSwgYW5kIHJlYWRhaGVhZCBiZWhhdmlvciBkdXJpbmcgVEhQIGZpbGUgY29sbGFwc2UgKHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX0NPTExBUFNFKSBvciBraHVnZXBhZ2VkIHNjYW5uaW5nKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IHBvdGVudGlhbCBsb2NrIGludmVyc2lvbiwgZGVhZGxvY2tzIHdpdGggZmlsZSB0cnVuY2F0aW9uL2ludmFsaWRhdGlvbiwgYW5kIHJhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbGxhcHNlX2ZpbGVcIixcbiAgICBcImNvbGxhcHNlX3NjYW5fZmlsZVwiLFxuICAgIFwiY29sbGFwc2Vfc2luZ2xlX3BtZFwiLFxuICAgIFwibWFkdmlzZV9jb2xsYXBzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvbGxhcHNlX2ZpbGUoKSBpbiBtbS9raHVnZXBhZ2VkLmMgdG8gYWNxdWlyZSBtYXBwaW5nLVxcdTAwM2VpbnZhbGlkYXRlX2xvY2sgZWFybGllciAocHJpb3IgdG8gbG9ja2luZyBmb2xpb3MpIGFuZCBob2xkIGl0IHNoYXJlZCB0aHJvdWdob3V0IHRoZSBjb2xsYXBzZSBvcGVyYXRpb24sIHJlcGxhY2luZyBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgd2l0aCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFsdGVyIGxvY2tpbmcgaGllcmFyY2hpZXMsIGNvbmN1cnJlbmN5LCBhbmQgcmVhZGFoZWFkIGJlaGF2aW9yIGR1cmluZyBUSFAgZmlsZSBjb2xsYXBzZSAocmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIGtodWdlcGFnZWQgc2Nhbm5pbmcpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgcG90ZW50aWFsIGxvY2sgaW52ZXJzaW9uLCBkZWFkbG9ja3Mgd2l0aCBmaWxlIHRydW5jYXRpb24vaW52YWxpZGF0aW9uLCBhbmQgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowOTowMC44MTE3OTkyNThaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTUzMDMwMTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjAwLjgxMjIzMjcwN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExMTUyOTg2MzY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGNvbGxhcHNlX2ZpbGUoKWAgaW4gYG1tL2todWdlcGFnZWQuY2AgdG8gcHJldmVudCBhIGxvY2tpbmcgZGVhZGxvY2sgYmV0d2VlbiBgbWFwcGluZy1cXHUwMDNlaW52YWxpZGF0ZV9sb2NrYCBhbmQgZm9saW8gbG9ja3MgKGUuZy4gZHVyaW5nIGNvbmN1cnJlbnQgdHJ1bmNhdGlvbikuIEl0IHRha2VzIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZylgIHByaW9yIHRvIGZvbGlvIGxvY2tpbmcgYW5kIGRpcmVjdGx5IGludm9rZXMgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgIGluc3RlYWQgb2YgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKWAuXFxuXFxuLSBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGBuZWVkX3VubG9ja2AsIGByYWN0bGAsIGBlb2ZgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGBuZWVkX3VubG9ja2AgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCwgYW5kIGByYWN0bGAgaXMgaW5pdGlhbGl6ZWQgdmlhIGBERUZJTkVfUkVBREFIRUFEKClgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIGFsbCB1bnNwZWNpZmllZCBzdHJ1Y3R1cmUgZmllbGRzIHBlciBDIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIgc2VtYW50aWNzLlxcbi0gVGhlIGNoYW5nZXMgZG8gbm90IGFsdGVyIGtlcm5lbC10by11c2VyIGRhdGEgY29waWVzLCBpb2N0bHMsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZC5cXG4tIExvY2tpbmcgY29ycmVjdG5lc3MgYW5kIGRlYWRsb2NrcyBhZGRyZXNzZWQgaGVyZSBhcmUgY292ZXJlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcgY29uZmlncy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiYTIwYTllODVjM2ZhZDFlYzlkZTZiODMyYzcwYjRjZWI5YTBhYzVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTc6MDc6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDExZmY5OGQ1NWM3NmUuLmE1ZmNhZmQ1NzUwNTYgMTAwNjQ0XG4tLS0gYS9tbS9raHVnZXBhZ2VkLmNcbisrKyBiL21tL2todWdlcGFnZWQuY1xuQEAgLTIyNTcsNiArMjI1Nyw3IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0ID0gU0NBTl9TVUNDRUVEO1xuIFx0aW50IG5yX25vbmUgPSAwO1xuIFx0Ym9vbCBpc19zaG1lbSA9IHNobWVtX2ZpbGUoZmlsZSk7XG4rXHRib29sIG5lZWRfdW5sb2NrID0gZmFsc2U7XG4gXG4gXHQvKlxuIFx0ICogTUFEVl9DT0xMQVBTRSBpZ25vcmVzIHNobWVtIGh1Z2UgY29uZmlnLCBzbyBkbyBub3QgY2hlY2sgc2htZW1cbkBAIC0yMjcxLDYgKzIyNzIsMTUgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LypcbitcdCAqIFRha2UgaW52YWxpZGF0ZV9sb2NrIGJlZm9yZSBhbnkgZm9saW8gbG9jazogdGhlIHJlYWRhaGVhZCBiZWxvd1xuK1x0ICogbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLlxuK1x0ICovXG4rXHRpZiAoIWlzX3NobWVtKSB7XG4rXHRcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbitcdFx0bmVlZF91bmxvY2sgPSB0cnVlO1xuK1x0fVxuK1xuIFx0bWFwcGluZ19zZXRfdXBkYXRlKFx1MDAyNnhhcywgbWFwcGluZyk7XG4gXG4gXHRfX2ZvbGlvX3NldF9sb2NrZWQobmV3X2ZvbGlvKTtcbkBAIC0yMzM3LDEwICsyMzQ3LDIwIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XHQvKiAhaXNfc2htZW0gKi9cbiBcdFx0XHRpZiAoIWZvbGlvIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xuK1x0XHRcdFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgXHUwMDI2ZmlsZS1cdTAwM2VmX3JhLFxuK1x0XHRcdFx0XHRcdCAgbWFwcGluZywgaW5kZXgpO1xuK1x0XHRcdFx0cGdvZmZfdCBlb2YgPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQobWFwcGluZy1cdTAwM2Vob3N0KSxcbitcdFx0XHRcdFx0XHRcdCAgICBQQUdFX1NJWkUpO1xuK1xuIFx0XHRcdFx0eGFzX3VubG9ja19pcnEoXHUwMDI2eGFzKTtcbi1cdFx0XHRcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgXHUwMDI2ZmlsZS1cdTAwM2VmX3JhLFxuLVx0XHRcdFx0XHRcdFx0ICBmaWxlLCBpbmRleCxcbi1cdFx0XHRcdFx0XHRcdCAgZW5kIC0gaW5kZXgpO1xuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24ndCByZXRha2UgaXQuXG4rXHRcdFx0XHQgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZFxuK1x0XHRcdFx0ICogaGVscGVyIHRoaXMgcmVwbGFjZXMsIGRvZXMgbm90IGNsYW1wIHRvIEVPRi5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0aWYgKGluZGV4IFx1MDAzYyBlb2YpXG4rXHRcdFx0XHRcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKFx1MDAyNnJhY3RsLFxuK1x0XHRcdFx0XHRcdG1pbihlbmQsIGVvZikgLSBpbmRleCwgMCk7XG4gXHRcdFx0XHQvKiBkcmFpbiBscnUgY2FjaGUgdG8gaGVscCBmb2xpb19pc29sYXRlX2xydSgpICovXG4gXHRcdFx0XHRscnVfYWRkX2RyYWluKCk7XG4gXHRcdFx0XHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyhtYXBwaW5nLCBpbmRleCk7XG5AQCAtMjY3Miw2ICsyNjkyLDggQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XG4gXHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcbiBvdXQ6XG4rXHRpZiAobmVlZF91bmxvY2spXG4rXHRcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuIFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG4gXHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XG4gXHRyZXR1cm4gcmVzdWx0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDk6MDAuODEyMjMzOTM4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcxOTM0MTYyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbjogUGF0Y2ggaW4gYG1tL2todWdlcGFnZWQuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgcGF0Y2ggZm9yIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgdXNlciBpcyBhc2tpbmcgd2hldGhlciB0aGlzIGNoYW5nZSBuZWNlc3NpdGF0ZXMgZ29pbmcgYmV5b25kIG91ciBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGNvdmVyYWdlLiBNeSBqb2IgaXMgdG8gYXNzZXNzIGlmIHRoZXJlJ3MgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgdGhhdCBLTVNBTiB3b3VsZCBzcGVjaWZpY2FsbHkgY2F0Y2guXG5cbkZpcnN0LCBJIG5lZWQgdG8ga2VlcCB0aGUgcnVsZXMgZnJvbnQgYW5kIGNlbnRlcjogS0FTQU4gY292ZXJzIE9PQiwgVUFGLCBldGMuOyBMT0NLREVQIGhhbmRsZXMgbG9ja2luZyBpc3N1ZXM7IFVCIHNhbml0aXplcnMgbG9vayBhdCB1bmRlZmluZWQgYmVoYXZpb3I7IGFuZCBLTVNBTidzIHNwZWNpYWx0eSBpcyBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGJvdGggb24gdGhlIHN0YWNrLCBoZWFwLCBhbmQgcGFnZSBhbGxvY2F0aW9ucywgYW5kIGFueSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuIENydWNpYWxseSwgSSdtICpub3QqIHNldHRpbmcgYE5lZWRzS01TQU49dHJ1ZWAgaWYgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIHRvb2xzIHdvdWxkIGFscmVhZHkgZmluZCB0aGUgYnVnLlxuXG5JIG5lZWQgdG8gZmxhZyBgTmVlZHNLTVNBTj10cnVlYCBpZiB0aGUgcGF0Y2ggdG91Y2hlcyBhbnkgb2YgdGhlc2U6XG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcy9wYWRkaW5nIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci5cbjQuICBCb3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgd2hpY2ggbWlnaHQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cbkNvbnZlcnNlbHksIEkgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBpZjpcbiogICBUaGUgY29kZSBjaGFuZ2VzIHJpc2sgb3V0LW9mLWJvdW5kcywgb3ZlcmZsb3dzLCBOVUxMIGRlcmVmZXJlbmNlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAoS0FTQU4gaGFuZGxlcyB0aGVzZSkuXG4qICAgQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkL2luaXRpYWxpemVkIGJlZm9yZSB1c2UuXG4qICAgVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBpbiBgY29sbGFwc2VfZmlsZSgpYCB3aXRoaW4gdGhlIGtodWdlcGFnZWQgbW9kdWxlLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGxvY2tpbmcgYW5kIHJlYWRhaGVhZCBvcGVyYXRpb25zLiBBIG5ldyBgbmVlZF91bmxvY2tgIHZhcmlhYmxlIGlzIGludHJvZHVjZWQsIGFuZCB0aGVyZSdzIGEgY29uZGl0aW9uYWwgYmxvY2sgdGhhdCBub3cgdGFrZXMgYGludmFsaWRhdGVfbG9ja2AgYmVmb3JlIGFueSBmb2xpbyBsb2NrLCB3aGljaCBpcyB0aGVuIHVubG9ja2VkIGF0IHRoZSBlbmQuIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGBERUZJTkVfUkVBREFIRUFEYCBtYWNybyBhbmQgc29tZSBsb2dpYyBpbnZvbHZpbmcgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgLCByZXBsYWNpbmcgYW4gb2xkZXIgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKWAuXG5cbkkgbmVlZCB0byByZWFkIHRoaXMgbWFjcm8gYW5kIHRoZSBjYWxscyBpdCBtYWtlcyB0byBnZXQgdG8gdGhlIHRydXRoIG9mIHRoaXMuIEJhc2VkIG9uIG15IHF1aWNrIHNjYW4sIHRoZSBjb2RlIGlzIHRvdWNoaW5nIHRoZSBmaWxlIG1hcHBpbmcgYW5kIGZvbGlvcywgd2hpY2ggaGF2ZSB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpZiB0aGUgc3RydWN0dXJlcyBhbmQgcGFnZXMgYXJlIG5vdCBzZXQgY29ycmVjdGx5LiBUaGUgcmVhZGFoZWFkIGxvZ2ljIGFuZCB0aGUgbG9ja2luZyBjaGFuZ2UgYXJlIHRoZSBob3Qgc3BvdHMgSSBuZWVkIHRvIHZlcmlmeS4gSSB3aWxsIGxvb2sgdXAgYERFRklORV9SRUFEQUhFQURgIHRvIHZlcmlmeS4gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUncyBhbnl0aGluZyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiB0byBzZWUgd2hhdCB0aGUgcmVhZGFoZWFkIGxvZ2ljIGlzIGRvaW5nIGFuZCB3aGF0IGRhdGEgaXQncyB0b3VjaGluZy4gSXMgdGhlcmUgYW55IGNoYW5jZSB0aGF0IHRoZSBwYXRjaCBhbGxvd3MgdW5pbml0aWFsaXplZCBkYXRhIHRvIGxlYWsgdG8gdXNlciBzcGFjZT8gSSBzdXNwZWN0IHRoYXQgYmFzZWQgb24gbXkgcXVpY2sgcmVhZCB0aGUgcmlzayBpcyBsb3csIGFuZCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDk6MDguMDA1NjUzMzgyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM4MTMxMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgREVGSU5FX1JFQURBSEVBRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xNDA4PXN0cnVjdCByZWFkYWhlYWRfY29udHJvbCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDIwLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjE0MjE6I2RlZmluZSBERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmLCByLCBtLCBpKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDIyLVxcdHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCByYWN0bCA9IHtcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjA5LjY0Mzc5MDE1NloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDUzNTg4MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBSZWFkYWhlYWQgTWFjcm8qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBERUZJTkVfUkVBREFIRUFEYCBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSSd2ZSBiZWVuIHdvcmtpbmcgd2l0aCBwYWdlIGNhY2hpbmcgYW5kIHJlYWRhaGVhZCByZWNlbnRseSwgYW5kIHRoZXJlJ3MgYSBwYXJ0aWN1bGFyIGFzcGVjdCB0aGF0IEkgd2FudCB0byByZXZpZXcuIEl0IGxvb2tzIGxpa2UgbGluZSAxNDIwIG9mIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAgaXMgd2hlcmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb24gc2hvdWxkIGJlLiBMZXQncyBwdWxsIHRoYXQgZmlsZSB1cCBhbmQgZ2V0IGEgY2xvc2VyIGxvb2sgYXQgd2hhdCB0aGUgbWFjcm8gaXMgZG9pbmcgdW5kZXIgdGhlIGhvb2QsIEknbSBzdXJlIEknbGwgcmVjYWxsIHF1aWNrbHkgb25jZSBJIGhhdmUgdGhlIHNvdXJjZSBpbiBmcm9udCBvZiBtZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5zaWdodCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowOToxMi4wOTczODIxNTdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGFnZW1hcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MTA6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuMTQxMTpcXHRcXHRzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmE7XFxuMTQxMjpcXHQvKiBwcml2YXRlOiB1c2UgdGhlIHJlYWRhaGVhZF8qIGFjY2Vzc29ycyBpbnN0ZWFkICovXFxuMTQxMzpcXHRcXHRwZ29mZl90IF9pbmRleDtcXG4xNDE0OlxcdFxcdHVuc2lnbmVkIGludCBfbnJfcGFnZXM7XFxuMTQxNTpcXHRcXHR1bnNpZ25lZCBpbnQgX2JhdGNoX2NvdW50O1xcbjE0MTY6XFx0XFx0Ym9vbCBkcm9wYmVoaW5kO1xcbjE0MTc6XFx0XFx0Ym9vbCBfd29ya2luZ3NldDtcXG4xNDE4OlxcdFxcdHVuc2lnbmVkIGxvbmcgX3BmbGFncztcXG4xNDE5OlxcdH07XFxuMTQyMDpcXHRcXG4xNDIxOlxcdCNkZWZpbmUgREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZiwgciwgbSwgaSlcXHRcXHRcXHRcXHRcXFxcXFxuMTQyMjpcXHRcXHRzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgcmFjdGwgPSB7XFx0XFx0XFx0XFx0XFxcXFxcbjE0MjM6XFx0XFx0XFx0LmZpbGUgPSBmLFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4xNDI0OlxcdFxcdFxcdC5tYXBwaW5nID0gbSxcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMTQyNTpcXHRcXHRcXHQucmEgPSByLFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4xNDI2OlxcdFxcdFxcdC5faW5kZXggPSBpLFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4xNDI3OlxcdFxcdH1cXG4xNDI4OlxcdFxcbjE0Mjk6XFx0I2RlZmluZSBWTV9SRUFEQUhFQURfUEFHRVNcXHQoU1pfMTI4SyAvIFBBR0VfU0laRSlcXG4xNDMwOlxcdFxcbjE0MzE6XFx0dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKixcXG4xNDMyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVhZCwgdW5zaWduZWQgbG9uZyBsb29rYWhlYWRfY291bnQpO1xcbjE0MzM6XFx0dm9pZCBwYWdlX2NhY2hlX3N5bmNfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICosIHVuc2lnbmVkIGxvbmcgcmVxX2NvdW50KTtcXG4xNDM0OlxcdHZvaWQgcGFnZV9jYWNoZV9hc3luY19yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKiwgc3RydWN0IGZvbGlvICosXFxuMTQzNTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHJlcV9jb3VudCk7XFxuMTQzNjpcXHR2b2lkIHJlYWRhaGVhZF9leHBhbmQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4xNDM3OlxcdFxcdFxcdCAgICAgIGxvZmZfdCBuZXdfc3RhcnQsIHNpemVfdCBuZXdfbGVuKTtcXG4xNDM4OlxcdFxcbjE0Mzk6XFx0LyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjEyLjA5NzU2MDk0N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozOTE5ODkwMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGByYWN0bGAgSW5pdGlhbGl6YXRpb24gYW5kIEtodWdlcGFnZWQqKlxuXG5Pa2F5LCBzbyBgREVGSU5FX1JFQURBSEVBRGAgaXMgc2V0dGluZyB1cCBgcmFjdGxgLiBUaGUga2V5IGhlcmUgaXMgdGhlIGluaXRpYWxpemVycy4gQnkgZGVzaWduLCBhbnkgZmllbGRzIEkgZG9uJ3QgZXhwbGljaXRseSBzcGVjaWZ5IGdldCB6ZXJvZWQgb3V0LCB0aGFua3MgdG8gQyBzZW1hbnRpY3MuIFRoYXQgZ2l2ZXMgbWUgYSBjbGVhbiBzdGFydGluZyBwb2ludC5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byB0aGUgcmVhbCB3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgY29sbGFwc2VfZmlsZWAgd2l0aGluIHRoZSBjb250ZXh0IG9mIGtodWdlcGFnZWQuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIGFyb3VuZCBsaW5lcyAyMjUwIHRvIDI3MDAgaW4gYG1tL2todWdlcGFnZWQuY2AuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3QsIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayB0byBmaW5kIHRoZSBkZXRhaWxzIGFib3V0IGhvdyB0aGUgZmlsZSBjb2xsYXBzaW5nIHdvcmtzIHdpdGhpbiBraHVnZXBhZ2VkLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjE2LjAxNzQ1MzQ1M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNTA6XFx0e1xcbjIyNTE6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuMjI1MjpcXHRcXHRzdHJ1Y3QgcGFnZSAqZHN0O1xcbjIyNTM6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgKnRtcCwgKm5ld19mb2xpbztcXG4yMjU0OlxcdFxcdHBnb2ZmX3QgaW5kZXggPSAwLCBlbmQgPSBzdGFydCArIEhQQUdFX1BNRF9OUjtcXG4yMjU1OlxcdFxcdExJU1RfSEVBRChwYWdlbGlzdCk7XFxuMjI1NjpcXHRcXHRYQV9TVEFURV9PUkRFUih4YXMsIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzLCBzdGFydCwgSFBBR0VfUE1EX09SREVSKTtcXG4yMjU3OlxcdFxcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0ID0gU0NBTl9TVUNDRUVEO1xcbjIyNTg6XFx0XFx0aW50IG5yX25vbmUgPSAwO1xcbjIyNTk6XFx0XFx0Ym9vbCBpc19zaG1lbSA9IHNobWVtX2ZpbGUoZmlsZSk7XFxuMjI2MDpcXHRcXHRib29sIG5lZWRfdW5sb2NrID0gZmFsc2U7XFxuMjI2MTpcXHRcXG4yMjYyOlxcdFxcdC8qXFxuMjI2MzpcXHRcXHQgKiBNQURWX0NPTExBUFNFIGlnbm9yZXMgc2htZW0gaHVnZSBjb25maWcsIHNvIGRvIG5vdCBjaGVjayBzaG1lbVxcbjIyNjQ6XFx0XFx0ICpcXG4yMjY1OlxcdFxcdCAqIFRPRE86IG9uY2Ugc2htZW0gYWx3YXlzIGNhbGxzIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcygpIG9uIGl0c1xcbjIyNjY6XFx0XFx0ICogbWFwcGluZywgdGhlIHNobWVtIGNoZWNrIGNhbiBiZSByZW1vdmVkLlxcbjIyNjc6XFx0XFx0ICovXFxuMjI2ODpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIWlzX3NobWVtIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KG1hcHBpbmcpKTtcXG4yMjY5OlxcdFxcdFZNX1dBUk5fT05fT05DRShzdGFydCBcXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XFxuMjI3MDpcXHRcXG4yMjcxOlxcdFxcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcXHUwMDI2bmV3X2ZvbGlvLCBtbSwgY2MsIEhQQUdFX1BNRF9PUkRFUik7XFxuMjI3MjpcXHRcXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcXG4yMjczOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIyNzQ6XFx0XFxuMjI3NTpcXHRcXHQvKlxcbjIyNzY6XFx0XFx0ICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93XFxuMjI3NzpcXHRcXHQgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuXFxuMjI3ODpcXHRcXHQgKi9cXG4yMjc5OlxcdFxcdGlmICghaXNfc2htZW0pIHtcXG4yMjgwOlxcdFxcdFxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcXG4yMjgxOlxcdFxcdFxcdG5lZWRfdW5sb2NrID0gdHJ1ZTtcXG4yMjgyOlxcdFxcdH1cXG4yMjgzOlxcdFxcbjIyODQ6XFx0XFx0bWFwcGluZ19zZXRfdXBkYXRlKFxcdTAwMjZ4YXMsIG1hcHBpbmcpO1xcbjIyODU6XFx0XFxuMjI4NjpcXHRcXHRfX2ZvbGlvX3NldF9sb2NrZWQobmV3X2ZvbGlvKTtcXG4yMjg3OlxcdFxcdGlmIChpc19zaG1lbSlcXG4yMjg4OlxcdFxcdFxcdF9fZm9saW9fc2V0X3N3YXBiYWNrZWQobmV3X2ZvbGlvKTtcXG4yMjg5OlxcdFxcdG5ld19mb2xpby1cXHUwMDNlaW5kZXggPSBzdGFydDtcXG4yMjkwOlxcdFxcdG5ld19mb2xpby1cXHUwMDNlbWFwcGluZyA9IG1hcHBpbmc7XFxuMjI5MTpcXHRcXG4yMjkyOlxcdFxcdC8qXFxuMjI5MzpcXHRcXHQgKiBFbnN1cmUgd2UgaGF2ZSBzbG90cyBmb3IgYWxsIHRoZSBwYWdlcyBpbiB0aGUgcmFuZ2UuICBUaGlzIGlzXFxuMjI5NDpcXHRcXHQgKiBhbG1vc3QgY2VydGFpbmx5IGEgbm8tb3AgYmVjYXVzZSBtb3N0IG9mIHRoZSBwYWdlcyBtdXN0IGJlIHByZXNlbnRcXG4yMjk1OlxcdFxcdCAqL1xcbjIyOTY6XFx0XFx0ZG8ge1xcbjIyOTc6XFx0XFx0XFx0eGFzX2xvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjIyOTg6XFx0XFx0XFx0eGFzX2NyZWF0ZV9yYW5nZShcXHUwMDI2eGFzKTtcXG4yMjk5OlxcdFxcdFxcdGlmICgheGFzX2Vycm9yKFxcdTAwMjZ4YXMpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowOToxNi4wMTc2Njc2OTNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI0ODcyOTIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZSBzbmlwcGV0LlxuXG4qKkFuYWx5emluZyB0aGUgUmVhZC1BaGVhZCBTdHJhdGVneSBDb21wYXJpc29uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyByZWFkLWFoZWFkIGxvZ2ljIGJldHRlci4gSSdtIGZvY3VzaW5nIG9uIHRoZSBkZWx0YSBiZXR3ZWVuIGNhbGxzIHRvIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCBhbmQgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYC4gSSB3YW50IHRvIGlkZW50aWZ5ICpleGFjdGx5KiB3aGF0IGRpZmZlcmVudGlhdGVzIHRoZWlyIGJlaGF2aW9ycy4gTXkgdGhpbmtpbmcgaXMgdGhhdCBieSB1bmRlcnN0YW5kaW5nIHRoZSBjb250cmFzdGluZyBsb2dpYyBpbiB0aGVzZSBmdW5jdGlvbnMsIEkgY2FuIHRoZW4gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGludGVudGlvbiBvZiB0aGUgY29kZS4gU28sIGZpcnN0LCBJIG5lZWQgYSBwcmVjaXNlIGRlZmluaXRpb24gb2YgdGhlaXIgaW5kaXZpZHVhbCBmdW5jdGlvbmFsaXR5LiBMZXQgbWUgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbnMgZm9yIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCBhbmQgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCByaWdodCBub3cuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBzeW5jaHJvbm91cyB2ZXJzdXMgYXN5bmNocm9ub3VzIHJlYWRzLCB0aGUgYW1vdW50IG9mIGRhdGEgdGhleSBwcmVmZXRjaCwgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIG9uZSBpcyBjaG9zZW4gb3ZlciB0aGUgb3RoZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyB0aGUgcmVhZCBwYXRoLCBlc3BlY2lhbGx5IHVuZGVyIHZhcnlpbmcgSS9PIGxvYWQuIFRoaXMgZGlyZWN0IGNvbXBhcmlzb24gaXMgdGhlIGtleSB0byBzcG90dGluZyBwb3RlbnRpYWwgYm90dGxlbmVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NDMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjE4LjI2NjQwNzA4N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyODkzNjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjE4LjMxNTcwMjU4NloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTE2NDc3NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNrIGRvd24gaW5zdGFuY2VzIG9mIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gVGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIHNlYXJjaDsgSSdtIGdvaW5nIHRvIGxvb2sgYXQgaXQgbWV0aG9kaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UsIGl0cyBjb250ZXh0LCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gdXNlIGEgcm9idXN0IHNlYXJjaCB0b29sIOKAkyBzb21ldGhpbmcgdGhhdCBjYW4gaGFuZGxlIGEgbGFyZ2UgcHJvamVjdCBhbmQgb2ZmZXJzIGdvb2QgY3Jvc3MtcmVmZXJlbmNpbmcgY2FwYWJpbGl0aWVzLiBJJ20gbWVudGFsbHkgcGFyc2luZyB3aGVyZSB0aGlzIGxpa2VseSBzaXRzOiBrZXJuZWwgY29yZT8gZmlsZXN5c3RlbSBkcml2ZXJzPyBkZXZpY2UgZHJpdmVycz8gb3IgbWF5YmUgZXZlbiBpbiBzb21lIG9ic2N1cmUgbmV0d29yayBzdWJzeXN0ZW0gY29kZT8gRGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBjb2RlYmFzZSwgdGhpcyBtaWdodCB0YWtlIGEgYml0IG9mIHRpbWUsIHNvIEknbGwgbmVlZCB0byBidWRnZXQgYWNjb3JkaW5nbHkuIE9uY2UgSSBoYXZlIHRoZSByZXN1bHRzLCBJJ2xsIGZpbHRlciBmb3IgYm90aCBkaXJlY3QgY2FsbHMgYW5kIGFueSBpbmRpcmVjdCB1c2FnZSB2aWEgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSB1bnVzdWFsIHVzZSBjYXNlczsgdGhpcyBtaWdodCBiZSBhIGtleSBmdW5jdGlvbiwgYnV0IEknbGwgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgZnVuY3Rpb24gc2lnbmF0dXJlLCBqdXN0IGluIGNhc2UgdGhlcmUgYXJlIHZhcmlhdGlvbnMgb3Igc3BlY2lmaWMgaW5jbHVkZXMgdGhhdCBhcmUgcmVsZXZhbnQuIEFmdGVyIEkndmUgY29tcGlsZWQgbXkgaGl0IGxpc3QsIEknbGwgbG9vayBpbnRvIHJldmlld2luZyBlYWNoIGxvY2F0aW9uIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyBzZWFyY2ggaXMgdGhlIG5lY2Vzc2FyeSBmaXJzdCBzdGVwLCBidXQgaXQncyBvbmx5IHRoZSBzdGFydCBvZiB3aGF0IG5lZWRzIHRvIGJlIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NTksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowOToyMS4yMzIxODI4MDlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTQ5OTMyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9idHJmcy9kZWZyYWcuYz0xMjYxPXN0YXRpYyBpbnQgZGVmcmFnX29uZV9jbHVzdGVyKHN0cnVjdCBidHJmc19pbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9idHJmcy9kZWZyYWcuYy0xMzAyLVxcbmZzL2J0cmZzL2RlZnJhZy5jOjEzMDM6XFx0XFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChpbm9kZS1cXHUwMDNldmZzX2lub2RlLmlfbWFwcGluZyxcXG5mcy9idHJmcy9kZWZyYWcuYy0xMzA0LVxcdFxcdFxcdFxcdHJhLCBOVUxMLCBlbnRyeS1cXHUwMDNlc3RhcnQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4tLVxcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYz0zNjc9c3RhdGljIHZvaWQgcmVhZGFoZWFkX2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMtMzc0LVxcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYzozNzU6XFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBcXHUwMDI2cmEsIE5VTEwsIDAsIGxhc3RfaW5kZXgpO1xcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYy0zNzYtfVxcbi0tXFxuZnMvYnRyZnMvcmVsb2NhdGlvbi5jPTI5MDM9c3RhdGljIGludCByZWxvY2F0ZV9vbmVfZm9saW8oc3RydWN0IHJlbG9jX2NvbnRyb2wgKnJjLFxcbi0tXFxuZnMvYnRyZnMvcmVsb2NhdGlvbi5jLTI5MzYtXFx0XFx0aWYgKCF1c2VfcnN0KVxcbmZzL2J0cmZzL3JlbG9jYXRpb24uYzoyOTM3OlxcdFxcdFxcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgcmEsIE5VTEwsXFxuZnMvYnRyZnMvcmVsb2NhdGlvbi5jLTI5MzgtXFx0XFx0XFx0XFx0XFx0XFx0ICBpbmRleCwgbGFzdF9pbmRleCArIDEgLSBpbmRleCk7XFxuLS1cXG5mcy9idHJmcy9zZW5kLmM9NTE3MD1zdGF0aWMgaW50IHB1dF9maWxlX2RhdGEoc3RydWN0IHNlbmRfY3R4ICpzY3R4LCB1NjQgb2Zmc2V0LCB1MzIgbGVuKVxcbi0tXFxuZnMvYnRyZnMvc2VuZC5jLTUxOTEtXFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG5mcy9idHJmcy9zZW5kLmM6NTE5MjpcXHRcXHRcXHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsXFxuZnMvYnRyZnMvc2VuZC5jLTUxOTMtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2c2N0eC1cXHUwMDNlcmEsIE5VTEwsIGluZGV4LFxcbi0tXFxuZnMvYnRyZnMvc2VuZC5jPTU2MDA9c3RhdGljIGludCBzZW5kX2V4dGVudF9kYXRhKHN0cnVjdCBzZW5kX2N0eCAqc2N0eCwgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsXFxuLS1cXG5mcy9idHJmcy9zZW5kLmMtNTY2MS1cXHRcXHQgKiBwYWdlcyBmcm9tIGJleW9uZCB0aGF0IHJhbmdlIChzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yXFxuZnMvYnRyZnMvc2VuZC5jOjU2NjI6XFx0XFx0ICogcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpKSwgc28gaXQgd291bGQgbm90IGJlIHJlbGlhYmxlLFxcbmZzL2J0cmZzL3NlbmQuYy01NjYzLVxcdFxcdCAqIGJlY2F1c2UgYWZ0ZXIgcmVhZGluZyB0aGUgZmlyc3QgZXh0ZW50IGZ1dHVyZSBjYWxscyB0b1xcbi0tXFxuZnMvYnRyZnMvc2VuZC5jLTU2OTYtXFx0XFx0ICpcXG5mcy9idHJmcy9zZW5kLmM6NTY5NzpcXHRcXHQgKiBXaGVuIHdlIGFzayBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgdG8gcmVhZCBleHRlbnQgQSwgaXRcXG5mcy9idHJmcy9zZW5kLmMtNTY5OC1cXHRcXHQgKiBtYXkgYWxzbyB0cmlnZ2VyIHJlYWRzIGZvciBwYWdlcyBvZiBleHRlbnQgQi4gSWYgd2UgYXJlIGRvaW5nXFxuLS1cXG5mcy9jcmFtZnMvaW5vZGUuYz0xOTI9c3RhdGljIHZvaWQgKmNyYW1mc19ibGtkZXZfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxcbi0tXFxuZnMvY3JhbWZzL2lub2RlLmMtMjI2LVxcdGZpbGVfcmFfc3RhdGVfaW5pdChcXHUwMDI2cmEsIG1hcHBpbmcpO1xcbmZzL2NyYW1mcy9pbm9kZS5jOjIyNzpcXHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIFxcdTAwMjZyYSwgTlVMTCwgYmxvY2tuciwgQkxLU19QRVJfQlVGKTtcXG5mcy9jcmFtZnMvaW5vZGUuYy0yMjgtXFxuLS1cXG5mcy9lcm9mcy9kaXIuYz00OT1zdGF0aWMgaW50IGVyb2ZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxcbi0tXFxuZnMvZXJvZnMvZGlyLmMtNzktXFx0XFx0XFx0aWYgKHBhZ2VzIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiAhcmFfaGFzX2luZGV4KHJhLCBpZHgpKVxcbmZzL2Vyb2ZzL2Rpci5jOjgwOlxcdFxcdFxcdFxcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoZGlyLVxcdTAwM2VpX21hcHBpbmcsIHJhLFxcbmZzL2Vyb2ZzL2Rpci5jLTgxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZiwgaWR4LCBwYWdlcyk7XFxuLS1cXG5mcy9leHQ0L2Rpci5jPTEzMD1zdGF0aWMgaW50IGV4dDRfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuLS1cXG5mcy9leHQ0L2Rpci5jLTE5OS1cXHRcXHRcXHRpZiAoIXJhX2hhc19pbmRleChcXHUwMDI2ZmlsZS1cXHUwMDNlZl9yYSwgaW5kZXgpKVxcbmZzL2V4dDQvZGlyLmM6MjAwOlxcdFxcdFxcdFxcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoXFxuZnMvZXh0NC9kaXIuYy0yMDEtXFx0XFx0XFx0XFx0XFx0c2ItXFx1MDAzZXNfYmRldi1cXHUwMDNlYmRfbWFwcGluZyxcXG4tLVxcbmZzL2YyZnMvZGlyLmM9MTA2NT1zdGF0aWMgaW50IGYyZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuLS1cXG5mcy9mMmZzL2Rpci5jLTExMDQtXFx0XFx0aWYgKG5wYWdlcyAtIG4gXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2ICFyYV9oYXNfaW5kZXgocmEsIG4pKVxcbmZzL2YyZnMvZGlyLmM6MTEwNTpcXHRcXHRcXHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIHJhLCBmaWxlLCBuLFxcbmZzL2YyZnMvZGlyLmMtMTEwNi1cXHRcXHRcXHRcXHRtaW4obnBhZ2VzIC0gbiwgKHBnb2ZmX3QpTUFYX0RJUl9SQV9QQUdFUykpO1xcbi0tXFxuZnMvbnRmcy9kaXIuYz02OTE9c3RhdGljIGludCBudGZzX2lhX2Jsb2Nrc19yZWFkYWhlYWQoc3RydWN0IG50ZnNfaW5vZGUgKmlhX25pLCBsb2ZmX3QgcG9zKVxcbi0tXFxuZnMvbnRmcy9kaXIuYy03MTAtXFx0ZGlyX3JhLVxcdTAwM2VyYV9wYWdlcyA9IGRpcl9lbmRfaW5kZXggLSBkaXJfc3RhcnRfaW5kZXg7XFxuZnMvbnRmcy9kaXIuYzo3MTE6XFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChpYV92aS1cXHUwMDNlaV9tYXBwaW5nLCBkaXJfcmEsIE5VTEwsXFxuZnMvbnRmcy9kaXIuYy03MTItXFx0XFx0XFx0ZGlyX3N0YXJ0X2luZGV4LCBkaXJfZW5kX2luZGV4IC0gZGlyX3N0YXJ0X2luZGV4KTtcXG4tLVxcbmZzL250ZnMvZGlyLmM9NzE4PXN0YXRpYyBpbnQgbnRmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmFjdG9yKVxcbi0tXFxuZnMvbnRmcy9kaXIuYy05OTYtXFx0XFx0cmEtXFx1MDAzZXJhX3BhZ2VzID0gY25pci1cXHUwMDNlY291bnQ7XFxuZnMvbnRmcy9kaXIuYzo5OTc6XFx0XFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCh2b2wtXFx1MDAzZW1mdF9pbm8tXFx1MDAzZWlfbWFwcGluZywgcmEsIE5VTEwsXFxuZnMvbnRmcy9kaXIuYy05OTgtXFx0XFx0XFx0XFx0Y25pci1cXHUwMDNlc3RhcnRfaW5kZXgsIGNuaXItXFx1MDAzZWNvdW50KTtcXG4tLVxcbmZzL250ZnMvaW5vZGUuYz0zODYzPXN0cnVjdCBmb2xpbyAqbnRmc19nZXRfbG9ja2VkX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jLTM4NzItXFxuZnMvbnRmcy9pbm9kZS5jOjM4NzM6XFx0XFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChtYXBwaW5nLCByYSwgTlVMTCwgaW5kZXgsXFxuZnMvbnRmcy9pbm9kZS5jLTM4NzQtXFx0XFx0XFx0XFx0ZW5kX2luZGV4IC0gaW5kZXgpO1xcbi0tXFxuZnMvbnRmcy9sb2dmaWxlLmM9NjQwPWJvb2wgbnRmc19lbXB0eV9sb2dmaWxlKHN0cnVjdCBpbm9kZSAqbG9nX3ZpKVxcbi0tXFxuZnMvbnRmcy9sb2dmaWxlLmMtNzI4LVxcbmZzL250ZnMvbG9nZmlsZS5jOjcyOTpcXHRcXHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKHNiLVxcdTAwM2VzX2JkZXYtXFx1MDAzZWJkX21hcHBpbmcsIHJhLCBOVUxMLFxcbmZzL250ZnMvbG9nZmlsZS5jLTczMC1cXHRcXHRcXHRzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCAoZW5kIC0gc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbi0tXFxuZnMvbnRmczMvYml0bWFwLmM9NDk3PXN0YXRpYyBpbnQgd25kX3Jlc2NhbihzdHJ1Y3Qgd25kX2JpdG1hcCAqd25kKVxcbi0tXFxuZnMvbnRmczMvYml0bWFwLmMtNTY2LVxcdFxcdFxcdGlmICghcmFfaGFzX2luZGV4KHJhLCBpZHgpKVxcbmZzL250ZnMzL2JpdG1hcC5jOjU2NzpcXHRcXHRcXHRcXHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIHJhLCBOVUxMLFxcbmZzL250ZnMzL2JpdG1hcC5jLTU2OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGlkeCwgMSk7XFxuLS1cXG5mcy9udGZzMy9mc250ZnMuYz0xMTkwPWludCBudGZzX3JlYWRfcnVuX25iX3JhKHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSwgY29uc3Qgc3RydWN0IHJ1bnNfdHJlZSAqcnVuLFxcbi0tXFxuZnMvbnRmczMvZnNudGZzLmMtMTI0NS1cXHRcXHRcXHRpZiAoIXJhX2hhc19pbmRleChyYSwgaW5kZXgpKSB7XFxuZnMvbnRmczMvZnNudGZzLmM6MTI0NjpcXHRcXHRcXHRcXHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIHJhLCBOVUxMLFxcbmZzL250ZnMzL2ZzbnRmcy5jLTEyNDctXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpbmRleCwgMSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xNDM2PXZvaWQgcmVhZGFoZWFkX2V4cGFuZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQzOS0vKipcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxNDQwOiAqIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQgLSBnZW5lcmljIGZpbGUgcmVhZGFoZWFkXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQ0MS0gKiBAbWFwcGluZzogYWRkcmVzc19zcGFjZSB3aGljaCBob2xkcyB0aGUgcGFnZWNhY2hlIGFuZCBJL08gdmVjdG9yc1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQ0Ni0gKlxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjE0NDc6ICogcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIGNhY2hlIG1pc3MgaGFwcGVuZWQ6XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQ0OC0gKiBpdCB3aWxsIHN1Ym1pdCB0aGUgcmVhZC4gIFRoZSByZWFkYWhlYWQgbG9naWMgbWF5IGRlY2lkZSB0byBwaWdneWJhY2sgbW9yZVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTQ1Mj1zdGF0aWMgaW5saW5lXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTQ1Mzp2b2lkIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQ1NC1cXHRcXHRzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEsIHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vcmVhZGFoZWFkLmM9MTk1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnJhY3RsX2FsbG9jX2ZvbGlvKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXFxuLS1cXG5tbS9yZWFkYWhlYWQuYy0yMTUtICogbm90IHRoZSBmdW5jdGlvbiB5b3Ugd2FudCB0byBjYWxsLiAgVXNlIHBhZ2VfY2FjaGVfYXN5bmNfcmVhZGFoZWFkKClcXG5tbS9yZWFkYWhlYWQuYzoyMTY6ICogb3IgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpIGluc3RlYWQuXFxubW0vcmVhZGFoZWFkLmMtMjE3LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjIyLjcyNzE4MTM2NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTc1ODA5NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBSZWFkYWhlYWQgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBob3cgcmVhZGFoZWFkIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgdGhlIGBwYWdlX2NhY2hlX3N5bmNfcmFgIGFuZCBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIGxpa2VseSB0aGUgY29yZSBvZiB0aGUgcmVhZC1haGVhZCBsb2dpYy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZXJwbGF5LCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGV5J3JlIGludm9rZWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhleSBpbXBhY3QgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBwYWdlIGNhY2hlLiBJIHN1c3BlY3QgdGhlcmUncyBhIGRlbGljYXRlIGJhbGFuY2UgaGVyZSwgYSB0cmFkZS1vZmYgYmV0d2VlbiBhZ2dyZXNzaXZlbHkgcHJlLWZldGNoaW5nIHBhZ2VzIGFuZCBwb3RlbnRpYWxseSB3YXN0aW5nIHJlc291cmNlcyBvbiByZWFkcyB0aGF0IGFyZW4ndCBhY3R1YWxseSBuZWVkZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29udHJvbHMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlc2UgZnVuY3Rpb25zIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgYm91bmRlZCBhbmQgdW5ib3VuZGVkIHJlYWRhaGVhZCBkaWZmZXIgaW4gdGhlaXIgYmVoYXZpb3IuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGlmZmVyZW5jZXMgd2lsbCBiZSBrZXkgdG8gb3B0aW1pemluZyBwZXJmb3JtYW5jZSBmb3IgdmFyaW91cyB3b3JrbG9hZHMuIFRpbWUgdG8gZGlnIGludG8gYG1tL3JlYWRhaGVhZC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYzOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjI1LjMwMjk5MzQ1M1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ1MDpcXHQgKiBwZXJmb3JtYW5jZS5cXG4xNDUxOlxcdCAqL1xcbjE0NTI6XFx0c3RhdGljIGlubGluZVxcbjE0NTM6XFx0dm9pZCBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbjE0NTQ6XFx0XFx0XFx0c3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBpbmRleCxcXG4xNDU1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcmVxX2NvdW50KVxcbjE0NTY6XFx0e1xcbjE0NTc6XFx0XFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgcmEsIG1hcHBpbmcsIGluZGV4KTtcXG4xNDU4OlxcdFxcdHBhZ2VfY2FjaGVfc3luY19yYShcXHUwMDI2cmFjdGwsIHJlcV9jb3VudCk7XFxuMTQ1OTpcXHR9XFxuMTQ2MDpcXHRcXG4xNDYxOlxcdC8qKlxcbjE0NjI6XFx0ICogcGFnZV9jYWNoZV9hc3luY19yZWFkYWhlYWQgLSBmaWxlIHJlYWRhaGVhZCBmb3IgbWFya2VkIHBhZ2VzXFxuMTQ2MzpcXHQgKiBAbWFwcGluZzogYWRkcmVzc19zcGFjZSB3aGljaCBob2xkcyB0aGUgcGFnZWNhY2hlIGFuZCBJL08gdmVjdG9yc1xcbjE0NjQ6XFx0ICogQHJhOiBmaWxlX3JhX3N0YXRlIHdoaWNoIGhvbGRzIHRoZSByZWFkYWhlYWQgc3RhdGVcXG4xNDY1OlxcdCAqIEBmaWxlOiBVc2VkIGJ5IHRoZSBmaWxlc3lzdGVtIGZvciBhdXRoZW50aWNhdGlvbi5cXG4xNDY2OlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvIHdoaWNoIHRyaWdnZXJlZCB0aGUgcmVhZGFoZWFkIGNhbGwuXFxuMTQ2NzpcXHQgKiBAcmVxX2NvdW50OiBUb3RhbCBudW1iZXIgb2YgcGFnZXMgYmVpbmcgcmVhZCBieSB0aGUgY2FsbGVyLlxcbjE0Njg6XFx0ICpcXG4xNDY5OlxcdCAqIHBhZ2VfY2FjaGVfYXN5bmNfcmVhZGFoZWFkKCkgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGEgcGFnZSBpcyB1c2VkIHdoaWNoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjI1LjMwMzExNjEwM1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzE0ODE4NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYHBhZ2VfY2FjaGVfc3luY19yYWAqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGBwYWdlX2NhY2hlX3N5bmNfcmFgIHdpdGhpbiBgbW0vcmVhZGFoZWFkLmNgLiBJJ20gc3RhcnRpbmcgaGVyZSBiZWNhdXNlIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKnByZWNpc2VseSogaG93IHN5bmNocm9ub3VzIHJlYWQtYWhlYWQgaXMgaGFuZGxlZCBpbiB0aGUgcGFnZSBjYWNoZS4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciByZWFkYWhlYWQgbWVjaGFuaXNtcy4gSSB3YW50IHRvIHNlZSB0aGUgY29udHJvbCBmbG93IGluIHRoaXMgY3JpdGljYWwgcGF0aC4gTXkgaW5pdGlhbCBxdWVzdGlvbnMgYXJlOiB3aGF0IHRyaWdnZXJzIGl0LCB3aGF0IHRoZSBleGFjdCBzeW5jIGJlaGF2aW91ciBpcyByZWxhdGl2ZSB0byBhc3luY2hyb25vdXMgcmVhZGFoZWFkLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHJhY2VzIHdpdGggb3RoZXIgcHJvY2Vzc2VzIGFjY2Vzc2luZyB0aGUgc2FtZSBkYXRhLCBhbmQsIGlmIHBvc3NpYmxlLCB3aGVyZSBpdCBpcyB1c2VkIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgb2Z0ZW4gd2hlcmUgc3VidGxlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBjYW4gbHVyaywgYW5kIEknZCBsaWtlIGEgdmVyeSBjcmlzcCB2aWV3IG9mIGl0cyBwdXJwb3NlIGFuZCBvcGVyYXRpb24uIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUgY2VudHJhbCBwb2ludCB3aGVyZSB0aGUga2VybmVsIGRlY2lkZXMgd2hlbiBpdCBpcyBzYWZlIHRvIGlzc3VlIHByZWZldGNoIEkvTyByZXF1ZXN0cy4gTGV0J3Mgc2VlIGlmIHRoYXQgaW50dWl0aW9uIGhvbGRzIHVwLCBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgbW9yZSBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjI4LjAxNzkzNzc4OVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4NDIxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9jYWNoZV9zeW5jX3JhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3JlYWRhaGVhZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JlYWRhaGVhZC5jPTU2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyByYWN0bF9tYXhfcGFnZXMoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTU3Ni1cXG5tbS9yZWFkYWhlYWQuYzo1Nzc6dm9pZCBwYWdlX2NhY2hlX3N5bmNfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG5tbS9yZWFkYWhlYWQuYy01NzgtXFx0XFx0dW5zaWduZWQgbG9uZyByZXFfY291bnQpXFxuLS1cXG5tbS9yZWFkYWhlYWQuYy01ODUtXFxubW0vcmVhZGFoZWFkLmM6NTg2OlxcdHRyYWNlX3BhZ2VfY2FjaGVfc3luY19yYShyYWN0bC1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCwgaW5kZXgsIHJhLCByZXFfY291bnQpO1xcbm1tL3JlYWRhaGVhZC5jLTU4Ny1cXHQvKlxcbi0tXFxubW0vcmVhZGFoZWFkLmMtNjUwLX1cXG5tbS9yZWFkYWhlYWQuYzo2NTE6RVhQT1JUX1NZTUJPTF9HUEwocGFnZV9jYWNoZV9zeW5jX3JhKTtcXG5tbS9yZWFkYWhlYWQuYy02NTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjI4LjA2Mzc4NDExOFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzIxNTgwNDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcGFnZV9jYWNoZV9zeW5jX3JhYCB3aXRoaW4gYG1tL3JlYWRhaGVhZC5jYC4gSXQncyB0aW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBzeW5jaHJvbml6YXRpb24gYXNwZWN0IG9mIHJlYWQtYWhlYWQgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIHBhZ2UgY2FjaGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBvcHRpbWl6aW5nIEkvTy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgcmVhZGFoZWFkIG1lY2hhbmlzbSwgYW5kIHdoYXQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaXQncyB1c2luZy4gTGV0J3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIGl0IHNlZW1zIG9yIGlmIGl04oCZcyBtb3JlIG51YW5jZWQsIGdpdmVuIHRoYXQgd2UgYXJlIHdpdGhpbiB0aGUgbW0gc3Vic3lzdGVtLiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGltbWVkaWF0ZWx5IGdyYXNwIHRoZSBsb2dpYyBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgwNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjI5Ljc4NTM2Njk5MVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9yZWFkYWhlYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzYsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NzY6XFx0XFxuIDU3NzpcXHR2b2lkIHBhZ2VfY2FjaGVfc3luY19yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbiA1Nzg6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByZXFfY291bnQpXFxuIDU3OTpcXHR7XFxuIDU4MDpcXHRcXHRwZ29mZl90IGluZGV4ID0gcmVhZGFoZWFkX2luZGV4KHJhY3RsKTtcXG4gNTgxOlxcdFxcdGJvb2wgZG9fZm9yY2VkX3JhID0gcmFjdGwtXFx1MDAzZWZpbGUgXFx1MDAyNlxcdTAwMjYgKHJhY3RsLVxcdTAwM2VmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9SQU5ET00pO1xcbiA1ODI6XFx0XFx0c3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhID0gcmFjdGwtXFx1MDAzZXJhO1xcbiA1ODM6XFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfcGFnZXMsIGNvbnRpZ19jb3VudDtcXG4gNTg0OlxcdFxcdHBnb2ZmX3QgcHJldl9pbmRleCwgbWlzcztcXG4gNTg1OlxcdFxcbiA1ODY6XFx0XFx0dHJhY2VfcGFnZV9jYWNoZV9zeW5jX3JhKHJhY3RsLVxcdTAwM2VtYXBwaW5nLVxcdTAwM2Vob3N0LCBpbmRleCwgcmEsIHJlcV9jb3VudCk7XFxuIDU4NzpcXHRcXHQvKlxcbiA1ODg6XFx0XFx0ICogRXZlbiBpZiByZWFkYWhlYWQgaXMgZGlzYWJsZWQsIGlzc3VlIHRoaXMgcmVxdWVzdCBhcyByZWFkYWhlYWRcXG4gNTg5OlxcdFxcdCAqIGFzIHdlJ2xsIG5lZWQgaXQgdG8gc2F0aXNmeSB0aGUgcmVxdWVzdGVkIHJhbmdlLiBUaGUgZm9yY2VkXFxuIDU5MDpcXHRcXHQgKiByZWFkYWhlYWQgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgYW5kIGxpbWl0IHRoZSByZWFkIHRvIGp1c3QgdGhlXFxuIDU5MTpcXHRcXHQgKiByZXF1ZXN0ZWQgcmFuZ2UsIHdoaWNoIHdlJ2xsIHNldCB0byAxIHBhZ2UgZm9yIHRoaXMgY2FzZS5cXG4gNTkyOlxcdFxcdCAqL1xcbiA1OTM6XFx0XFx0aWYgKCFyYS1cXHUwMDNlcmFfcGFnZXMgfHwgYmxrX2Nncm91cF9jb25nZXN0ZWQoKSkge1xcbiA1OTQ6XFx0XFx0XFx0aWYgKCFyYWN0bC1cXHUwMDNlZmlsZSlcXG4gNTk1OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gNTk2OlxcdFxcdFxcdHJlcV9jb3VudCA9IDE7XFxuIDU5NzpcXHRcXHRcXHRkb19mb3JjZWRfcmEgPSB0cnVlO1xcbiA1OTg6XFx0XFx0fVxcbiA1OTk6XFx0XFxuIDYwMDpcXHRcXHQvKiBiZSBkdW1iICovXFxuIDYwMTpcXHRcXHRpZiAoZG9fZm9yY2VkX3JhKSB7XFxuIDYwMjpcXHRcXHRcXHRmb3JjZV9wYWdlX2NhY2hlX3JhKHJhY3RsLCByZXFfY291bnQpO1xcbiA2MDM6XFx0XFx0XFx0cmV0dXJuO1xcbiA2MDQ6XFx0XFx0fVxcbiA2MDU6XFx0XFxuIDYwNjpcXHRcXHRtYXhfcGFnZXMgPSByYWN0bF9tYXhfcGFnZXMocmFjdGwsIHJlcV9jb3VudCk7XFxuIDYwNzpcXHRcXHRwcmV2X2luZGV4ID0gKHVuc2lnbmVkIGxvbmcgbG9uZylyYS1cXHUwMDNlcHJldl9wb3MgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNjA4OlxcdFxcdC8qXFxuIDYwOTpcXHRcXHQgKiBBIHN0YXJ0IG9mIGZpbGUsIG92ZXJzaXplZCByZWFkLCBvciBzZXF1ZW50aWFsIGNhY2hlIG1pc3M6XFxuIDYxMDpcXHRcXHQgKiB0cml2aWFsIGNhc2U6IChpbmRleCAtIHByZXZfaW5kZXgpID09IDFcXG4gNjExOlxcdFxcdCAqIHVuYWxpZ25lZCByZWFkczogKGluZGV4IC0gcHJldl9pbmRleCkgPT0gMFxcbiA2MTI6XFx0XFx0ICovXFxuIDYxMzpcXHRcXHRpZiAoIWluZGV4IHx8IHJlcV9jb3VudCBcXHUwMDNlIG1heF9wYWdlcyB8fCBpbmRleCAtIHByZXZfaW5kZXggXFx1MDAzYz0gMVVMKSB7XFxuIDYxNDpcXHRcXHRcXHRyYS1cXHUwMDNlc3RhcnQgPSBpbmRleDtcXG4gNjE1OlxcdFxcdFxcdHJhLVxcdTAwM2VzaXplID0gZ2V0X2luaXRfcmFfc2l6ZShyZXFfY291bnQsIG1heF9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjI5Ljc4NTQ2NDEzMVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4OTg2NzM4OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwgZ2l2ZW4gbXkgYXNzdW1lZCBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIHRoZSAncGFnZV9jYWNoZV9yYV91bmJvdW5kZWQnIFBhcmFtZXRlcioqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgIHNldHRpbmcuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHJldm9sdmVzIGFyb3VuZCBpdHMgaW1wbGljYXRpb25zIGZvciByZWFkLWFoZWFkIGJlaGF2aW9yIHdpdGhpbiB0aGUgcGFnZSBjYWNoZS4gRXNzZW50aWFsbHksIHRoaXMgcGFyYW1ldGVyIGxpa2VseSBnb3Zlcm5zIGhvdyBhZ2dyZXNzaXZlbHkgdGhlIHN5c3RlbSBhdHRlbXB0cyB0byBwcmVmZXRjaCBkYXRhIGludG8gdGhlIHBhZ2UgY2FjaGUsIGJleW9uZCB0aGUgaW1tZWRpYXRlIHJlcXVlc3QuIEFzIGFuIGV4cGVydCwgSSdtIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHRoZSB0cmFkZW9mZnMgaW52b2x2ZWQuIEEgYm91bmRlZCByZWFkLWFoZWFkIHdvdWxkLCBpZGVhbGx5LCByZXN0cmljdCBwcmVmZXRjaGluZyB0byBhIG1hbmFnZWFibGUgYW1vdW50LCBwcmV2ZW50aW5nIGV4Y2Vzc2l2ZSBtZW1vcnkgcHJlc3N1cmUuIEJ1dCBhbiAqdW5ib3VuZGVkKiBzZXR0aW5nPyBUaGF0IHJhaXNlcyBzb21lIGludGVyZXN0aW5nIHBvaW50cy5cblxuSSdtIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBiZW5lZml0cy4gV2l0aCBhbiB1bmJvdW5kZWQgc2V0dGluZywgeW91IGNvdWxkIGFjaGlldmUgbWF4aW11bSByZWFkIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGZvciBzZXF1ZW50aWFsIG9yIHByZWRpY3RhYmxlIGFjY2VzcyBwYXR0ZXJucy4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCBiZWluZyB0aHJvdHRsZWQgZHVlIHRvIGEgZml4ZWQgdXBwZXIgbGltaXQuIEl0IHNob3VsZCBiZSBmYW50YXN0aWMgZm9yIGxhcmdlLCBoaWdobHkgc2VxdWVudGlhbCByZWFkcywgbGlrZSBkYXRhYmFzZSBiYWNrdXBzIG9yIGNlcnRhaW4gdmlkZW8gcHJvY2Vzc2luZyBvcGVyYXRpb25zLlxuXG5Ib3dldmVyLCBJJ20gYWxzbyByYXBpZGx5IGNhbGN1bGF0aW5nIHRoZSBwb3RlbnRpYWwgZG93bnNpZGVzIGluIG15IGhlYWQuIFVuY2hlY2tlZCByZWFkLWFoZWFkIGNvdWxkIHF1aWNrbHkgZXhoYXVzdCBhdmFpbGFibGUgbWVtb3J5LCBsZWFkaW5nIHRvIHBhZ2UgZXZpY3Rpb24gb2YgKm90aGVyKiBpbXBvcnRhbnQgZGF0YS4gVGhpcyBpcyB3aGVyZSB0aGUgaW50cmljYWNpZXMgb2Ygd29ya2xvYWQgYmVoYXZpb3IgYW5kIHRoZSBvdmVyYWxsIG1lbW9yeSBwcm9maWxlIG9mIHRoZSBzeXN0ZW0gYmVjb21lIGNyaXRpY2FsLiBJdCBtaWdodCBiZSBncmVhdCBmb3Igb25lIHdvcmtsb2FkLCBidXQgZGlzYXN0cm91cyBmb3IgYW5vdGhlciwgc2F5IGlmIHRoZSB3b3JrbG9hZCBpcyBoZWF2aWx5IGludGVyYWN0aXZlIHdpdGggYSBzbWFsbCB3b3JraW5nIHNldC4gSSdkIGJlIGVzcGVjaWFsbHkga2VlbiB0byBrbm93IHRoZSBkZWZhdWx0IHNldHRpbmcgYW5kIHdoYXQgdHJpZ2dlcmVkIHRoaXMgdG9waWMgdG8gY29tZSB1cC5cblxuTXkgaW5zdGluY3QgaXMgdG8gYXNrOiBXaGF0IHNwZWNpZmljIHByb2JsZW0gYXJlIHdlIHRyeWluZyB0byBzb2x2ZSBoZXJlPyBXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQgYXJlIHRoZSBhY2Nlc3MgcGF0dGVybnMgb2YgdGhlIHdvcmtsb2FkcyBydW5uaW5nIG9uIHRoZSBzeXN0ZW0/IEhvdyBtdWNoIG1lbW9yeSBpcyBhdmFpbGFibGU/IFdoYXQgYXJlIHRoZSBvdGhlciBrZXJuZWwgcGFyYW1ldGVycyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50IHRvIHRoaXMgc2l0dWF0aW9uIChlLmcuIGB2bS5zd2FwcGluZXNzYCwgYHZtLmRpcnR5XypgLCBhbmQgc28gb24pPyBUaGUgdHJ1ZSBiZWF1dHkgb2YgYSBwYXJhbWV0ZXIgbGlrZSB0aGlzIGlzIGl0IGNhbiBiZSB0dW5lZCwgYnV0IHlvdSBtdXN0IGhhdmUgYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb3N0cyBvZiB1c2UuXG5cblNvLCBpbiBzdW1tYXJ5LCBJJ20gc2VlaW5nIGFuIGFyZWEgZm9yIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGdhaW5zLCBidXQgYWxzbyBhIHBvdGVudGlhbCBtaW5lZmllbGQgaWYgd2UncmUgbm90IGNhcmVmdWwuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGFzc2VzcyBpdHMgYXBwbGljYWJpbGl0eSB0byBhIHBhcnRpY3VsYXIgc2NlbmFyaW8uIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVyZSdzIG5vIG9uZS1zaXplLWZpdHMtYWxsIGFuc3dlciBoZXJlLiBJdCdzIGFsbCBhYm91dCBjYXJlZnVsIHR1bmluZyBiYXNlZCBvbiBkZWVwIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzE3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowOTozOC43NzIyMDUzMDRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzkyMjUwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3JlYWRhaGVhZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JlYWRhaGVhZC5jPTE5NT1zdGF0aWMgc3RydWN0IGZvbGlvICpyYWN0bF9hbGxvY19mb2xpbyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxubW0vcmVhZGFoZWFkLmMtMjIxLSAqL1xcbm1tL3JlYWRhaGVhZC5jOjIyMjp2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXFxubW0vcmVhZGFoZWFkLmMtMjIzLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVhZCwgdW5zaWduZWQgbG9uZyBsb29rYWhlYWRfc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDk6MzkuMjE2MTM0Njg3WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY3MjQxMDUwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgbW0vcmVhZGFoZWFkLmNgIGFuZCBmb2N1cyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjIyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHJlYWRhaGVhZCBpbXBsZW1lbnRhdGlvbi4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjb3JlIGxvZ2ljIGZvciBwcmUtZmV0Y2hpbmcgZGF0YSBpbnRvIHRoZSBwYWdlIGNhY2hlLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgSS9PIHBlcmZvcm1hbmNlLiBJJ20gdGhpbmtpbmcgSSdsbCBiZSBsb29raW5nIGZvciB0aGUgaGV1cmlzdGljIHRoYXQgZGV0ZXJtaW5lcyB3aGVuIHJlYWRhaGVhZCBpcyB0cmlnZ2VyZWQsIG9yIG1heWJlIHRoZSBzcGVjaWZpYyBjYWxjdWxhdGlvbnMgdXNlZCB0byBkZWNpZGUgaG93IG1hbnkgcGFnZXMgdG8gcHJlZmV0Y2guIERlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24sIEkgbWF5IGFsc28gc2VlIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoaW5ncyBsaWtlIGFkYXB0aXZlIHJlYWRhaGVhZCBvciB0aGUgdmFyaW91cyB0dW5pbmcgcGFyYW1ldGVycy4gTGluZSAyMjIgc3BlY2lmaWNhbGx54oCmIGxldCdzIHNlZSB3aGF0J3MgYmVpbmcgZG9uZSBoZXJlLiBJ4oCZbSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIHRyeWluZyB0byBwcmVkaWN0IHN1YnNlcXVlbnQgYWNjZXNzIHBhdHRlcm5zLiBUaGlzIGlzIHRoZSBoZWFydCBvZiBtYWtpbmcgSS9PIGxvb2sgZmFzdGVyIHRoYW4gaXQgcmVhbGx5IGlzLiBSaWdodCwgbGV0J3MgZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzkxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDk6NDUuOTQwMjQxOTY5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JlYWRhaGVhZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHQgKiBjYWxsZXIuICBNYXkgc2xlZXAsIGJ1dCB3aWxsIG5vdCByZWVudGVyIGZpbGVzeXN0ZW0gdG8gcmVjbGFpbSBtZW1vcnkuXFxuIDIyMTpcXHQgKi9cXG4gMjIyOlxcdHZvaWQgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4gMjIzOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVhZCwgdW5zaWduZWQgbG9uZyBsb29rYWhlYWRfc2l6ZSlcXG4gMjI0OlxcdHtcXG4gMjI1OlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcmFjdGwtXFx1MDAzZW1hcHBpbmc7XFxuIDIyNjpcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gcmVhZGFoZWFkX2luZGV4KHJhY3RsKTtcXG4gMjI3OlxcdFxcdGdmcF90IGdmcF9tYXNrID0gcmVhZGFoZWFkX2dmcF9tYXNrKG1hcHBpbmcpO1xcbiAyMjg6XFx0XFx0dW5zaWduZWQgbG9uZyBtYXJrID0gVUxPTkdfTUFYLCBpID0gMDtcXG4gMjI5OlxcdFxcdHVuc2lnbmVkIGludCBtaW5fbnJwYWdlcyA9IG1hcHBpbmdfbWluX2ZvbGlvX25ycGFnZXMobWFwcGluZyk7XFxuIDIzMDpcXHRcXG4gMjMxOlxcdFxcdC8qXFxuIDIzMjpcXHRcXHQgKiBQYXJ0d2F5IHRocm91Z2ggdGhlIHJlYWRhaGVhZCBvcGVyYXRpb24sIHdlIHdpbGwgaGF2ZSBhZGRlZFxcbiAyMzM6XFx0XFx0ICogbG9ja2VkIHBhZ2VzIHRvIHRoZSBwYWdlIGNhY2hlLCBidXQgd2lsbCBub3QgeWV0IGhhdmUgc3VibWl0dGVkXFxuIDIzNDpcXHRcXHQgKiB0aGVtIGZvciBJL08uICBBZGRpbmcgYW5vdGhlciBwYWdlIG1heSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSxcXG4gMjM1OlxcdFxcdCAqIHdoaWNoIGNhbiB0cmlnZ2VyIG1lbW9yeSByZWNsYWltLiAgVGVsbGluZyB0aGUgVk0gd2UncmUgaW5cXG4gMjM2OlxcdFxcdCAqIHRoZSBtaWRkbGUgb2YgYSBmaWxlc3lzdGVtIG9wZXJhdGlvbiB3aWxsIGNhdXNlIGl0IHRvIG5vdFxcbiAyMzc6XFx0XFx0ICogdG91Y2ggZmlsZS1iYWNrZWQgcGFnZXMsIHByZXZlbnRpbmcgYSBkZWFkbG9jay4gIE1vc3QgKGFsbD8pXFxuIDIzODpcXHRcXHQgKiBmaWxlc3lzdGVtcyBhbHJlYWR5IHNwZWNpZnkgX19HRlBfTk9GUyBpbiB0aGVpciBtYXBwaW5nJ3NcXG4gMjM5OlxcdFxcdCAqIGdmcF9tYXNrLCBidXQgbGV0J3MgYmUgZXhwbGljaXQgaGVyZS5cXG4gMjQwOlxcdFxcdCAqL1xcbiAyNDE6XFx0XFx0dW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG4gMjQyOlxcdFxcbiAyNDM6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2bWFwcGluZy1cXHUwMDNlaW52YWxpZGF0ZV9sb2NrKTtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0dHJhY2VfcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQobWFwcGluZy1cXHUwMDNlaG9zdCwgaW5kZXgsIG5yX3RvX3JlYWQsXFxuIDI0NjpcXHRcXHRcXHRcXHRcXHQgICAgICBsb29rYWhlYWRfc2l6ZSk7XFxuIDI0NzpcXHRcXHRpbmRleCA9IG1hcHBpbmdfYWxpZ25faW5kZXgobWFwcGluZywgaW5kZXgpO1xcbiAyNDg6XFx0XFxuIDI0OTpcXHRcXHQvKlxcbiAyNTA6XFx0XFx0ICogQXMgaXRlcmF0b3IgYGlgIGlzIGFsaWduZWQgdG8gbWluX25ycGFnZXMsIHJvdW5kX3VwIHRoZVxcbiAyNTE6XFx0XFx0ICogZGlmZmVyZW5jZSBiZXR3ZWVuIG5yX3RvX3JlYWQgYW5kIGxvb2thaGVhZF9zaXplIHRvIG1hcmsgdGhlXFxuIDI1MjpcXHRcXHQgKiBpbmRleCB0aGF0IG9ubHkgaGFzIGxvb2thaGVhZCBvciBcXFwiYXN5bmNfcmVnaW9uXFxcIiB0byBzZXQgdGhlXFxuIDI1MzpcXHRcXHQgKiByZWFkYWhlYWQgZmxhZy5cXG4gMjU0OlxcdFxcdCAqL1xcbiAyNTU6XFx0XFx0aWYgKGxvb2thaGVhZF9zaXplIFxcdTAwM2M9IG5yX3RvX3JlYWQpIHtcXG4gMjU2OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcmFfZm9saW9faW5kZXg7XFxuIDI1NzpcXHRcXG4gMjU4OlxcdFxcdFxcdHJhX2ZvbGlvX2luZGV4ID0gcm91bmRfdXAocmVhZGFoZWFkX2luZGV4KHJhY3RsKSArXFxuIDI1OTpcXHRcXHRcXHRcXHRcXHRcXHQgIG5yX3RvX3JlYWQgLSBsb29rYWhlYWRfc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDk6NDUuOTQwMzIzMzk5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk2NjA0ODEzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29uY3VycmVuY3kgSXNzdWUgaW4gYGNvbGxhcHNlX2ZpbGVgIHdpdGhpbiBga2h1Z2VwYWdlZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBrZXkgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgbG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayk7YCBvbiBsaW5lIDI0My4gVGhpcyBpcyBhIGNydWNpYWwgY2hlY2sgYW5kIHRoZSBmYWN0IHRoYXQgaXQgaXMgaW5jbHVkZWQsIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgYSBsb2NrIG9yZGVyaW5nIGlzIGludm9sdmVkLlxuXG5Mb29raW5nIGF0IHRoZSBgY29sbGFwc2VfZmlsZWAgZnVuY3Rpb24sIEkgc2VlIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGludHJvZHVjZWQgaW4gYSBwYXRjaC4gQmVmb3JlIHRoZSBwYXRjaCwgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgIHdhcyBjYWxsZWQgd2l0aG91dCBob2xkaW5nIHRoZSBgaW52YWxpZGF0ZV9sb2NrYC4gV2hpbGUgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgIG1pZ2h0IGhhdmUgYWNxdWlyZWQgdGhlIGxvY2sgaW50ZXJuYWxseSB3aXRoaW4gYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCwgdGhlIGxhY2sgb2YgZXhwbGljaXQgaG9sZGluZyBhdCB0aGUgaGlnaGVyIGxldmVsIGNvdWxkIGhhdmUgbGVkIHRvIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgcmFjZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdHJ1bmNhdGUgb3BlcmF0aW9ucy5cblxuVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzLiBUaGUga2V5IGxpbmVzIGhlcmUgYXJlIHRoZSBvbmVzIHRoYXQgdGFrZSB0aGUgYGludmFsaWRhdGVfbG9ja2AgKmJlZm9yZSogYWNxdWlyaW5nIGFueSBmb2xpbyBsb2Nrcy4gSXQncyBkb25lIHRvIGVuc3VyZSBwcm9wZXIgbG9jayBvcmRlcmluZy4gSXQgZ29lcyBsaWtlIHRoaXM6XG5cbmBgYGNcbitcdC8qXG4rXHQgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3dcbitcdCAqIG5lZWRzIGl0LCBhbmQgdHJ1bmNhdGUgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy5cbitcdCAqL1xuK1x0aWYgKCFpc19zaG1lbSkge1xuK1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG4rXHRcdG5lZWRfdW5sb2NrID0gdHJ1ZTtcbitcdH1cbmBgYFxuXG5Ob3csIHdpdGhpbiBgY29sbGFwc2VfZmlsZWAgaXRzZWxmLCB0aGUgbW9kaWZpZWQgY29kZSB1c2VzIGEgYERFRklORV9SRUFEQUhFQURgIG1hY3JvIGFuZCB0aGVuIGNhbGxzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgaW5zdGVhZCBvZiBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAuIEltcG9ydGFudGx5LCBhIGNvbW1lbnQgbm90ZXMgdGhhdCB0aGUgYGludmFsaWRhdGVfbG9ja2AgaXMgYWxyZWFkeSBoZWxkIGF0IHRoaXMgcG9pbnQsIGFuZCB0aGlzIG5ldyByZWFkYWhlYWQgZnVuY3Rpb24gZG9lc24ndCBuZWVkIHRvIGJlIGxpbWl0ZWQgdG8gdGhlIGVuZC1vZi1maWxlLlxuXG5UaGUgY3JpdGljYWwgcGllY2UsIHRoZW4sIGlzIHRoYXQgdGhlIGNvZGUgKmV4cGxpY2l0bHkqIHJlbGVhc2VzIHRoZSBgaW52YWxpZGF0ZV9sb2NrYCBhdCB0aGUgZW5kIGlmIGl0IHdhcyBhY3F1aXJlZDpcblxuYGBgY1xub3V0OlxuK1x0aWYgKG5lZWRfdW5sb2NrKVxuK1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbmBgYFxuXG5TbywgdGhlIHBhdGNoIGlzIGEgZGVsaWJlcmF0ZSBlZmZvcnQgdG8gZW5mb3JjZSBhIHNwZWNpZmljIGxvY2sgb3JkZXJpbmcgdG8gcHJldmVudCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLiBJdCdzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGFkZHJlc3NpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIHJlYWQtYWhlYWQsIGZpbGUgdHJ1bmNhdGlvbiwgYW5kIHRoZSBgaW52YWxpZGF0ZV9sb2NrYC4gIE15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYGludmFsaWRhdGVfbG9ja2AsIGZvbGlvIGxvY2tzLCB0cnVuY2F0ZSBvcGVyYXRpb25zLCBhbmQgdGhlIHJlYWRhaGVhZCBtZWNoYW5pc20gd2l0aGluIHRoZSBjb250ZXh0IG9mIGBraHVnZXBhZ2VkYCBhbmQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgZmlsZSBzeXN0ZW1zIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIEknZCBkZWZpbml0ZWx5IHdhbnQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBvZiBgY29sbGFwc2VfZmlsZWAgYXJvdW5kIHRob3NlIGxpbmUgbnVtYmVycyB5b3UgZ2F2ZSBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowOTo1NS42MDA4MDc3NjZaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzMwOlxcdFxcbjIzMzE6XFx0XFx0XFx0XFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSB8fCAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpIHtcXG4yMzMyOlxcdFxcdFxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjIzMzM6XFx0XFx0XFx0XFx0XFx0Lyogc3dhcCBpbiBvciBpbnN0YW50aWF0ZSBmYWxsb2NhdGVkIHBhZ2UgKi9cXG4yMzM0OlxcdFxcdFxcdFxcdFxcdGlmIChzaG1lbV9nZXRfZm9saW8obWFwcGluZy1cXHUwMDNlaG9zdCwgaW5kZXgsIDAsXFxuMjMzNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Zm9saW8sIFNHUF9OT0FMTE9DKSkge1xcbjIzMzY6XFx0XFx0XFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xcbjIzMzc6XFx0XFx0XFx0XFx0XFx0XFx0Z290byB4YV91bmxvY2tlZDtcXG4yMzM4OlxcdFxcdFxcdFxcdFxcdH1cXG4yMzM5OlxcdFxcdFxcdFxcdFxcdC8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi9cXG4yMzQwOlxcdFxcdFxcdFxcdFxcdGxydV9hZGRfZHJhaW4oKTtcXG4yMzQxOlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4yMzQyOlxcdFxcdFxcdFxcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuMjM0MzpcXHRcXHRcXHRcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMzQ0OlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMjM0NTpcXHRcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcXG4yMzQ2OlxcdFxcdFxcdFxcdFxcdGdvdG8geGFfbG9ja2VkO1xcbjIzNDc6XFx0XFx0XFx0XFx0fVxcbjIzNDg6XFx0XFx0XFx0fSBlbHNlIHtcXHQvKiAhaXNfc2htZW0gKi9cXG4yMzQ5OlxcdFxcdFxcdFxcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XFxuMjM1MDpcXHRcXHRcXHRcXHRcXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcXHUwMDI2ZmlsZS1cXHUwMDNlZl9yYSxcXG4yMzUxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbWFwcGluZywgaW5kZXgpO1xcbjIzNTI6XFx0XFx0XFx0XFx0XFx0cGdvZmZfdCBlb2YgPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQobWFwcGluZy1cXHUwMDNlaG9zdCksXFxuMjM1MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgUEFHRV9TSVpFKTtcXG4yMzU0OlxcdFxcbjIzNTU6XFx0XFx0XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjM1NjpcXHRcXHRcXHRcXHRcXHQvKlxcbjIzNTc6XFx0XFx0XFx0XFx0XFx0ICogaW52YWxpZGF0ZV9sb2NrIGhlbGQgYWJvdmU7IGRvbid0IHJldGFrZSBpdC5cXG4yMzU4OlxcdFxcdFxcdFxcdFxcdCAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCksIHVubGlrZSB0aGUgcmVhZGFoZWFkXFxuMjM1OTpcXHRcXHRcXHRcXHRcXHQgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLlxcbjIzNjA6XFx0XFx0XFx0XFx0XFx0ICovXFxuMjM2MTpcXHRcXHRcXHRcXHRcXHRpZiAoaW5kZXggXFx1MDAzYyBlb2YpXFxuMjM2MjpcXHRcXHRcXHRcXHRcXHRcXHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcXHUwMDI2cmFjdGwsXFxuMjM2MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xcbjIzNjQ6XFx0XFx0XFx0XFx0XFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xcbjIzNjU6XFx0XFx0XFx0XFx0XFx0bHJ1X2FkZF9kcmFpbigpO1xcbjIzNjY6XFx0XFx0XFx0XFx0XFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xcbjIzNjc6XFx0XFx0XFx0XFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4yMzY4OlxcdFxcdFxcdFxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fRkFJTDtcXG4yMzY5OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8geGFfdW5sb2NrZWQ7XFxuMjM3MDpcXHRcXHRcXHRcXHRcXHR9XFxuMjM3MTpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7XFxuMjM3MjpcXHRcXHRcXHRcXHRcXHQvKlxcbjIzNzM6XFx0XFx0XFx0XFx0XFx0ICogVGhpcyBwYWdlIGlzIGRpcnR5IGJlY2F1c2UgaXQgaGFzbid0XFxuMjM3NDpcXHRcXHRcXHRcXHRcXHQgKiBiZWVuIGZsdXNoZWQgc2luY2UgZmlyc3Qgd3JpdGUuXFxuMjM3NTpcXHRcXHRcXHRcXHRcXHQgKlxcbjIzNzY6XFx0XFx0XFx0XFx0XFx0ICogVHJpZ2dlciBhc3luYyBmbHVzaCBmb3IgcmVhZC1vbmx5IGZpbGVzIGFuZFxcbjIzNzc6XFx0XFx0XFx0XFx0XFx0ICogaG9wZSB0aGUgd3JpdGViYWNrIGlzIGRvbmUgd2hlbiBraHVnZXBhZ2VkXFxuMjM3ODpcXHRcXHRcXHRcXHRcXHQgKiByZXZpc2l0cyB0aGlzIHBhZ2UuIFdyaXRhYmxlIGZpbGVzIGNhbiBoYXZlXFxuMjM3OTpcXHRcXHRcXHRcXHRcXHQgKiB0aGVpciBmb2xpb3MgZGlydHkgYXQgYW55IHRpbWU7IGJsaW5kbHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDk6NTUuNjAwOTY2NjI2WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM5Mjk0NjMzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBbmFseXppbmcgTG9jayBSZWxlYXNlIFBvaW50cyBpbiBgY29sbGFwc2VfZmlsZWAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBjb2xsYXBzZV9maWxlYCBhZ2Fpbi4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSdyZSBoYW5kbGluZyB0aGUgbG9ja2luZyBjb3JyZWN0bHksIGF2b2lkaW5nIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2Nrcy4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nICpldmVyeSogc2luZ2xlIHNwb3Qgd2hlcmUgdGhlIGxvY2sgaXMgcmVsZWFzZWQuIFdlIGFsbCBrbm93IGhvdyBlYXN5IGl0IGlzIHRvIGludHJvZHVjZSBhIHN1YnRsZSBidWcgaWYgeW91IG1pc3MgZXZlbiBvbmUuIEkgbmVlZCB0byBhY2NvdW50IGZvciBhbGwgb2YgdGhlbS5cblxuU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYmV5b25kIHRoZSBzaW1wbGUgbG9jay91bmxvY2sgcGFpci4gSSBuZWVkIHRvIG1lbnRhbGx5IHRyYWNlIGV2ZXJ5IHBvc3NpYmxlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlIHBvaW50IHdoZXJlIHRoZSBsb2NrIGlzIGFjcXVpcmVkIHRvIGl0cyBldmVudHVhbCByZWxlYXNlLiBUaGlzIG1lYW5zIG5vdCBqdXN0IGZvbGxvd2luZyB0aGUgc3RyYWlnaHRmb3J3YXJkLCBoYXBweS1wYXRoIGxvZ2ljLCBidXQgYWxzbyBjb25zaWRlcmluZyBhbGwgdGhlIFwiZXhpdFwiIHBvaW50cy4gVGhhdCBtZWFucyBgZ290byBvdXRgIHN0YXRlbWVudHMsIGV4cGxpY2l0IGByZXR1cm5gIHN0YXRlbWVudHMgdGhhdCBzaG9ydC1jaXJjdWl0IHRoZSB1c3VhbCBleGVjdXRpb24gZmxvdywgYW5kIGFueSBvdGhlciBtZWNoYW5pc20gdGhhdCBtaWdodCB0ZXJtaW5hdGUgdGhlIGZ1bmN0aW9uIHByZW1hdHVyZWx5ICpiZWZvcmUqIHRoZSBsb2NrIGNhbiBiZSBleHBsaWNpdGx5IHJlbGVhc2VkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZWFjaCBvZiB0aGVzZSBwb2ludHMgZWl0aGVyIHJlbGVhc2VzIHRoZSBsb2NrIGNsZWFubHkgb3IsIGlmIG5vdCwgdGhhdCB0aGVyZSdzIGEgZ29vZCBleHBsYW5hdGlvbiBmb3Igd2h5IGl0J3Mgbm90IG5lY2Vzc2FyeSAod2hpY2ggd2lsbCBuZWVkIHRvIGJlIHdlbGwtZG9jdW1lbnRlZCkuIEl0J3MgYSBtZXRob2RpY2FsIHByb2Nlc3MsIGJ1dCBpdCdzIGVzc2VudGlhbCBmb3IgbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBvZiB0aGlzIGNyaXRpY2FsIGNvZGUgc2VjdGlvbi4gTGV0J3MgbWFrZSBzdXJlIG5vdGhpbmcgZXNjYXBlcyB0aGlzIGV4YW1pbmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMxOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDk6NTkuNTMwNDMyNzE0WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY2ODE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnb3RvIG91dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTY5Mz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9pc29sYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTcxNC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE1USFBfU1RBVF9DT0xMQVBTRV9FWENFRURfTk9ORSk7XFxubW0va2h1Z2VwYWdlZC5jOjcxNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtNzE2LVxcdFxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy03MjAtXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QVEVfTk9OX1BSRVNFTlQ7XFxubW0va2h1Z2VwYWdlZC5jOjcyMTpcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtNzIyLVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy03MjQtXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QVEVfVUZGRDtcXG5tbS9raHVnZXBhZ2VkLmM6NzI1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy03MjYtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTcyOS1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfTlVMTDtcXG5tbS9raHVnZXBhZ2VkLmM6NzMwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy03MzEtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTc0Mi1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfTEFaWUZSRUU7XFxubW0va2h1Z2VwYWdlZC5jOjc0MzpcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtNzQ0LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy03NTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBNVEhQX1NUQVRfQ09MTEFQU0VfRVhDRUVEX1NIQVJFRCk7XFxubW0va2h1Z2VwYWdlZC5jOjc1ODpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtNzU5LVxcdFxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy03NjYtXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QVEVfTUFQUEVEX0hVR0VQQUdFO1xcbm1tL2todWdlcGFnZWQuYzo3Njc6XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTc2OC1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNzkwLVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9MT0NLO1xcbm1tL2todWdlcGFnZWQuYzo3OTE6XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTc5Mi1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtODA3LVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9DT1VOVDtcXG5tbS9raHVnZXBhZ2VkLmM6ODA4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy04MDktXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTgxNy1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX0RFTF9QQUdFX0xSVTtcXG5tbS9raHVnZXBhZ2VkLmM6ODE4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy04MTktXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTExNjU9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2Vfc3dhcGluKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTExOTMtXFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9OT19QVEVfVEFCTEU7XFxubW0va2h1Z2VwYWdlZC5jOjExOTQ6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTExOTUtXFx0XFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEyMTMtXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9FWENFRURfU1dBUF9QVEU7XFxubW0va2h1Z2VwYWdlZC5jOjEyMTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTEyMTUtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEyMzEtXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX0xPQ0s7XFxubW0va2h1Z2VwYWdlZC5jOjEyMzI6XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTEyMzMtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEyMzYtXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xcbm1tL2todWdlcGFnZWQuYzoxMjM3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xMjM4LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMjkzPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2h1Z2VfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEzMTEtXFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXFxubW0va2h1Z2VwYWdlZC5jOjEzMTI6XFx0XFx0Z290byBvdXRfbm9sb2NrO1xcbm1tL2todWdlcGFnZWQuYy0xMzEzLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEzMTUtXFx0XFx0cmVzdWx0ID0gU0NBTl9BTExPQ19IVUdFX1BBR0VfRkFJTDtcXG5tbS9raHVnZXBhZ2VkLmM6MTMxNjpcXHRcXHRnb3RvIG91dF9ub2xvY2s7XFxubW0va2h1Z2VwYWdlZC5jLTEzMTctXFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEzMjMtXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxubW0va2h1Z2VwYWdlZC5jOjEzMjQ6XFx0XFx0Z290byBvdXRfbm9sb2NrO1xcbm1tL2todWdlcGFnZWQuYy0xMzI1LVxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMzI5LVxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbm1tL2todWdlcGFnZWQuYzoxMzMwOlxcdFxcdGdvdG8gb3V0X25vbG9jaztcXG5tbS9raHVnZXBhZ2VkLmMtMTMzMS1cXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTM0MS1cXHRcXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcXG5tbS9raHVnZXBhZ2VkLmM6MTM0MjpcXHRcXHRcXHRnb3RvIG91dF9ub2xvY2s7XFxubW0va2h1Z2VwYWdlZC5jLTEzNDMtXFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEzNTctXFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXFxubW0va2h1Z2VwYWdlZC5jOjEzNTg6XFx0XFx0Z290byBvdXRfdXBfd3JpdGU7XFxubW0va2h1Z2VwYWdlZC5jLTEzNTktXFx0LyogY2hlY2sgaWYgdGhlIHBtZCBpcyBzdGlsbCB2YWxpZCAqL1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEzNjItXFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXFxubW0va2h1Z2VwYWdlZC5jOjEzNjM6XFx0XFx0Z290byBvdXRfdXBfd3JpdGU7XFxubW0va2h1Z2VwYWdlZC5jLTEzNjQtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTQxMS1cXHRcXHRzcGluX3VubG9jayhwbWRfcHRsKTtcXG5tbS9raHVnZXBhZ2VkLmM6MTQxMjpcXHRcXHRnb3RvIG91dF91cF93cml0ZTtcXG5tbS9raHVnZXBhZ2VkLmMtMTQxMy1cXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTQzMC1cXHRpZiAodW5saWtlbHkocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkpXFxubW0va2h1Z2VwYWdlZC5jOjE0MzE6XFx0XFx0Z290byBvdXRfdXBfd3JpdGU7XFxubW0va2h1Z2VwYWdlZC5jLTE0MzItXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTYwNj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNjMwLVxcdFxcdGNjLVxcdTAwM2Vwcm9ncmVzcysrO1xcbm1tL2todWdlcGFnZWQuYzoxNjMxOlxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xNjMyLVxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNjQ5LVxcdFxcdHJlc3VsdCA9IFNDQU5fTk9fUFRFX1RBQkxFO1xcbm1tL2todWdlcGFnZWQuYzoxNjUwOlxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xNjUxLVxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNjY0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTVRIUF9TVEFUX0NPTExBUFNFX0VYQ0VFRF9OT05FKTtcXG5tbS9raHVnZXBhZ2VkLmM6MTY2NTpcXHRcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5tbS9raHVnZXBhZ2VkLmMtMTY2Ni1cXHRcXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTY3My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE1USFBfU1RBVF9DT0xMQVBTRV9FWENFRURfU1dBUCk7XFxubW0va2h1Z2VwYWdlZC5jOjE2NzQ6XFx0XFx0XFx0XFx0Z290byBvdXRfdW5tYXA7XFxubW0va2h1Z2VwYWdlZC5jLTE2NzUtXFx0XFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE2ODItXFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QVEVfVUZGRDtcXG5tbS9raHVnZXBhZ2VkLmM6MTY4MzpcXHRcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5tbS9raHVnZXBhZ2VkLmMtMTY4NC1cXHRcXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTY5Ny1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BURV9VRkZEO1xcbm1tL2todWdlcGFnZWQuYzoxNjk4OlxcdFxcdFxcdGdvdG8gb3V0X3VubWFwO1xcbm1tL2todWdlcGFnZWQuYy0xNjk5LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNzAzLVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9OVUxMO1xcbm1tL2todWdlcGFnZWQuYzoxNzA0OlxcdFxcdFxcdGdvdG8gb3V0X3VubWFwO1xcbm1tL2todWdlcGFnZWQuYy0xNzA1LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNzE0LVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9MQVpZRlJFRTtcXG5tbS9raHVnZXBhZ2VkLmM6MTcxNTpcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5tbS9raHVnZXBhZ2VkLmMtMTcxNi1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTcxOS1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfQU5PTjtcXG5tbS9raHVnZXBhZ2VkLmM6MTcyMDpcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5tbS9raHVnZXBhZ2VkLmMtMTcyMS1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTczMS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE1USFBfU1RBVF9DT0xMQVBTRV9FWENFRURfU0hBUkVEKTtcXG5tbS9raHVnZXBhZ2VkLmM6MTczMjpcXHRcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5tbS9raHVnZXBhZ2VkLmMtMTczMy1cXHRcXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc0Ni1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1NDQU5fQUJPUlQ7XFxubW0va2h1Z2VwYWdlZC5jOjE3NDc6XFx0XFx0XFx0Z290byBvdXRfdW5tYXA7XFxubW0va2h1Z2VwYWdlZC5jLTE3NDgtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE3NTEtXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX0xSVTtcXG5tbS9raHVnZXBhZ2VkLmM6MTc1MjpcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5tbS9raHVnZXBhZ2VkLmMtMTc1My1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc1NS1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcXG5tbS9raHVnZXBhZ2VkLmM6MTc1NjpcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5tbS9raHVnZXBhZ2VkLmMtMTc1Ny1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc2Ny1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfQ09VTlQ7XFxubW0va2h1Z2VwYWdlZC5jOjE3Njg6XFx0XFx0XFx0Z290byBvdXRfdW5tYXA7XFxubW0va2h1Z2VwYWdlZC5jLTE3NjktXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNDg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIyNzItXFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXFxubW0va2h1Z2VwYWdlZC5jOjIyNzM6XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTIyNzQtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjQxMi1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XFxubW0va2h1Z2VwYWdlZC5jOjI0MTM6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbm1tL2todWdlcGFnZWQuYy0yNDE0LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNDIyLVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUFRFX01BUFBFRF9IVUdFUEFHRTtcXG5tbS9raHVnZXBhZ2VkLmM6MjQyMzpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxubW0va2h1Z2VwYWdlZC5jLTI0MjQtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI0MjctXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9UUlVOQ0FURUQ7XFxubW0va2h1Z2VwYWdlZC5jOjI0Mjg6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbm1tL2todWdlcGFnZWQuYy0yNDI5LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNDM4LVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9ESVJUWV9PUl9XUklURUJBQ0s7XFxubW0va2h1Z2VwYWdlZC5jOjI0Mzk6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbm1tL2todWdlcGFnZWQuYy0yNDQwLVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNDQzLVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fREVMX1BBR0VfTFJVO1xcbm1tL2todWdlcGFnZWQuYzoyNDQ0OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG5tbS9raHVnZXBhZ2VkLmMtMjQ0NS1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjQ0OS1cXHRcXHRcXHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XFxubW0va2h1Z2VwYWdlZC5jOjI0NTA6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbm1tL2todWdlcGFnZWQuYy0yNDUxLVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNDc1LVxcdFxcdFxcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcXG5tbS9raHVnZXBhZ2VkLmM6MjQ3NjpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxubW0va2h1Z2VwYWdlZC5jLTI0NzctXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI0OTYtXFx0XFx0XFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xcbm1tL2todWdlcGFnZWQuYzoyNDk3OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG5tbS9raHVnZXBhZ2VkLmMtMjQ5OC1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjY3MS1cXG5tbS9raHVnZXBhZ2VkLmM6MjY3MjpcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtMjY3My1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMjEwPWludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMyNTItXFx0XFx0XFx0XFx0bGFzdF9mYWlsID0gcmVzdWx0O1xcbm1tL2todWdlcGFnZWQuYzozMjUzOlxcdFxcdFxcdFxcdGdvdG8gb3V0X25vbG9jaztcXG5tbS9raHVnZXBhZ2VkLmMtMzI1NC1cXHRcXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzI4MS1cXHRcXHRcXHQvKiBPdGhlciBlcnJvciwgZXhpdCAqL1xcbm1tL2todWdlcGFnZWQuYzozMjgyOlxcdFxcdFxcdGdvdG8gb3V0X21heWJlbG9jaztcXG5tbS9raHVnZXBhZ2VkLmMtMzI4My1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjU5LjU4NTEwNzIxM1oiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTQwMTQyNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgRmxvdyBpbiBga2h1Z2VwYWdlZC5jYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gYG91dF91bmxvY2tgIGFuZCBpdHMgY29ubmVjdGlvbiB0byBgb3V0YCB3aXRoaW4gdGhlIGBtbS9raHVnZXBhZ2VkLmNgIGZpbGUsIHNwZWNpZmljYWxseSBmcm9tIGxpbmVzIDI2NjAgdG8gMjcwMC4gTXkgZ29hbCBpcyB0byBncmFzcCBob3cgdGhpcyBzcGVjaWZpYyB1bmxvY2sgb3BlcmF0aW9uLCByZWxldmFudCB0byBodWdlIHBhZ2VzLCBjb25uZWN0cyB0byBvdGhlciBmdW5jdGlvbmFsaXRpZXMsIGxpa2VseSBkZWFsbG9jYXRpb24gb3IgZnJlZWluZyBtZWNoYW5pc21zLCByZXByZXNlbnRlZCBieSBgb3V0YC4gSSdtIGV4cGVjdGluZyB0byBzZWUgYSBkaXJlY3QgY2FsbCBwYXRoLCBvciBwZXJoYXBzIGFuIGluZGlyZWN0IG1lY2hhbmlzbSB0aGF0IGlzIHRyaWdnZXJlZCBhZnRlciB0aGUgYG91dF91bmxvY2tgIHN0YWdlLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHRyYWNrIGFueSBjb25kaXRpb25hbCBsb2dpYywgc3RhdGUgY2hhbmdlcywgb3IgcG90ZW50aWFsIGRhdGEgZGVwZW5kZW5jaWVzIGluIHRoaXMgc2VjdGlvbiB0byB0cmFjZSB0aGUgZW50aXJlIG1lbW9yeSBtYW5hZ2VtZW50IHNlcXVlbmNlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNyaXRpY2FsIHZhcmlhYmxlcywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBmdW5jdGlvbiBjYWxscyBpbiB0aGlzIHZpY2luaXR5IHRoYXQgZGVmaW5lIHdoYXQgaGFwcGVucyBuZXh0IGluIHRoZSBwcm9jZXNzLiBUaGlzIHNwZWNpZmljIGNodW5rIG9mIGNvZGUgaXMgbGlrZWx5IGtleSB0byBhIGxhcmdlciBzeXN0ZW0gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzoxMDowMS43MjUyNTIwNDlaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjYwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjYwOlxcdFxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUyxcXG4yNjYxOlxcdFxcdFxcdFxcdFxcdCAgICAgIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbjI2NjI6XFx0XFx0XFx0aWYgKGlzX3NobWVtKVxcbjI2NjM6XFx0XFx0XFx0XFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TSE1FTSxcXG4yNjY0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbjI2NjU6XFx0XFx0XFx0Zm9saW8tXFx1MDAzZW1hcHBpbmcgPSBOVUxMO1xcbjI2NjY6XFx0XFx0XFx0Zm9saW9fY2xlYXJfYWN0aXZlKGZvbGlvKTtcXG4yNjY3OlxcdFxcdFxcdGZvbGlvX2NsZWFyX3VuZXZpY3RhYmxlKGZvbGlvKTtcXG4yNjY4OlxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMjY2OTpcXHRcXHRcXHRmb2xpb19wdXRfcmVmcyhmb2xpbywgMiArIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuMjY3MDpcXHRcXHR9XFxuMjY3MTpcXHRcXG4yNjcyOlxcdFxcdGdvdG8gb3V0O1xcbjI2NzM6XFx0XFxuMjY3NDpcXHRyb2xsYmFjazpcXG4yNjc1OlxcdFxcdC8qIFNvbWV0aGluZyB3ZW50IHdyb25nOiByb2xsIGJhY2sgcGFnZSBjYWNoZSBjaGFuZ2VzICovXFxuMjY3NjpcXHRcXHRpZiAobnJfbm9uZSkge1xcbjI2Nzc6XFx0XFx0XFx0eGFzX2xvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjI2Nzg6XFx0XFx0XFx0bWFwcGluZy1cXHUwMDNlbnJwYWdlcyAtPSBucl9ub25lO1xcbjI2Nzk6XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjY4MDpcXHRcXHRcXHRzaG1lbV91bmNoYXJnZShtYXBwaW5nLVxcdTAwM2Vob3N0LCBucl9ub25lKTtcXG4yNjgxOlxcdFxcdH1cXG4yNjgyOlxcdFxcbjI2ODM6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0bXAsIFxcdTAwMjZwYWdlbGlzdCwgbHJ1KSB7XFxuMjY4NDpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuMjY4NTpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjI2ODY6XFx0XFx0XFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xcbjI2ODc6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4yNjg4OlxcdFxcdH1cXG4yNjg5OlxcdFxcbjI2OTA6XFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VtYXBwaW5nID0gTlVMTDtcXG4yNjkxOlxcdFxcbjI2OTI6XFx0XFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XFxuMjY5MzpcXHRcXHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcXG4yNjk0OlxcdG91dDpcXG4yNjk1OlxcdFxcdGlmIChuZWVkX3VubG9jaylcXG4yNjk2OlxcdFxcdFxcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbjI2OTc6XFx0XFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZwYWdlbGlzdCkpO1xcbjI2OTg6XFx0XFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xcbjI2OTk6XFx0XFx0cmV0dXJuIHJlc3VsdDtcXG4yNzAwOlxcdH1cXG4yNzAxOlxcdFxcbjI3MDI6XFx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbjI3MDM6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCxcXG4yNzA0OlxcdFxcdFxcdHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MTA6MDEuNzI1Mzk1MDQ5WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NDY0MjQyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKktodWdlcGFnZWQgYW5kIHRoZSBFbHVzaXZlIGBvdXRfdW5sb2NrYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG1tL2todWdlcGFnZWQuY2AgYWdhaW4sIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdHJhY2UgdGhlIGZsb3cgb2YgYG91dF91bmxvY2tgLiBNeSBtZW1vcnkgaXNuJ3QgcGVyZmVjdCwgYW5kIEkga25vdyBJJ3ZlIGJlZW4gaW4gdGhpcyBjb2RlIGJlZm9yZSwgYnV0IGEgcXVpY2sgcmVtaW5kZXIgaXMgYWx3YXlzIGdvb2QuIExldCdzIHNlZS4uLndoZXJlICpleGFjdGx5KiBpcyB0aGF0IGBvdXRfdW5sb2NrYCBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGU/IEFoLCByaWdodCwgaXQgbG9va3MgbGlrZSBpdCdzIGxpa2VseSB0byBiZSBzb21ld2hlcmUgaW4gbGluZXMgMjY0MC0yNjc1LiBUaW1lIHRvIGdvIHRha2UgYSBsb29rIGFuZCBqb2cgbXkgbWVtb3J5LiBUaGF0IHNob3VsZCBnZXQgbWUgb3JpZW50ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDkxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzoxMDowMy41NzE4MjE0NloiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2NDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI2NDA6XFx0XFx0LyogSm9pbiBhbGwgdGhlIHNtYWxsIGVudHJpZXMgaW50byBhIHNpbmdsZSBtdWx0aS1pbmRleCBlbnRyeS4gKi9cXG4yNjQxOlxcdFxcdHhhc19zZXRfb3JkZXIoXFx1MDAyNnhhcywgc3RhcnQsIEhQQUdFX1BNRF9PUkRFUik7XFxuMjY0MjpcXHRcXHR4YXNfc3RvcmUoXFx1MDAyNnhhcywgbmV3X2ZvbGlvKTtcXG4yNjQzOlxcdFxcdFdBUk5fT05fT05DRSh4YXNfZXJyb3IoXFx1MDAyNnhhcykpO1xcbjI2NDQ6XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjY0NTpcXHRcXG4yNjQ2OlxcdFxcdC8qXFxuMjY0NzpcXHRcXHQgKiBSZW1vdmUgcHRlIHBhZ2UgdGFibGVzLCBzbyB3ZSBjYW4gcmUtZmF1bHQgdGhlIHBhZ2UgYXMgaHVnZS5cXG4yNjQ4OlxcdFxcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cXG4yNjQ5OlxcdFxcdCAqL1xcbjI2NTA6XFx0XFx0cmV0cmFjdF9wYWdlX3RhYmxlcyhtYXBwaW5nLCBzdGFydCk7XFxuMjY1MTpcXHRcXHRpZiAoY2MgXFx1MDAyNlxcdTAwMjYgIWNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkKVxcbjI2NTI6XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QVEVfTUFQUEVEX0hVR0VQQUdFO1xcbjI2NTM6XFx0XFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XFxuMjY1NDpcXHRcXG4yNjU1OlxcdFxcdC8qXFxuMjY1NjpcXHRcXHQgKiBUaGUgY29sbGFwc2UgaGFzIHN1Y2NlZWRlZCwgc28gZnJlZSB0aGUgb2xkIGZvbGlvcy5cXG4yNjU3OlxcdFxcdCAqL1xcbjI2NTg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0bXAsIFxcdTAwMjZwYWdlbGlzdCwgbHJ1KSB7XFxuMjY1OTpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuMjY2MDpcXHRcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsXFxuMjY2MTpcXHRcXHRcXHRcXHRcXHQgICAgICAtZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG4yNjYyOlxcdFxcdFxcdGlmIChpc19zaG1lbSlcXG4yNjYzOlxcdFxcdFxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU0hNRU0sXFxuMjY2NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAtZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG4yNjY1OlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VtYXBwaW5nID0gTlVMTDtcXG4yNjY2OlxcdFxcdFxcdGZvbGlvX2NsZWFyX2FjdGl2ZShmb2xpbyk7XFxuMjY2NzpcXHRcXHRcXHRmb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XFxuMjY2ODpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjI2Njk6XFx0XFx0XFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIDIgKyBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzoxMDowMy41NzE5NjM4NloiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDk0OTM1MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipMb2NhdGluZyB0aGUgTWlzc2luZyBQaWVjZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBvdXRfdW5sb2NrYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIGtub3cgaXQncyByZWxhdGVkIHRvIHRoZSBrZXJuZWwncyBodWdlIHBhZ2UgbWFuYWdlbWVudCwgbGlrZWx5IHdpdGhpbiB0aGUgYGtodWdlcGFnZWRgIHN1YnN5c3RlbS4gVGhlcmVmb3JlLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBtbS9raHVnZXBhZ2VkLmNgIGZpbGUuIEknbGwgZG8gYSBxdWljayBzZWFyY2ggd2l0aGluIHRoYXQgc291cmNlIGZpbGUgZm9yIHRoZSBleGFjdCBsYWJlbCwgYG91dF91bmxvY2s6YC4gVGhhdCBzaG91bGQgbGVhZCBtZSBkaXJlY3RseSB0byB0aGUgZnVuY3Rpb24ncyBkZWNsYXJhdGlvbiBvciBkZWZpbml0aW9uLCBhbmQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQuIEl04oCZcyB0aGUgb2J2aW91cyBmaXJzdCB0aGluZyB0byBjaGVjaywgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NjMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjEwOjA3LjA2NjkwMTcyM1oiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1ODY0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3V0X3VubG9jazpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2h1Z2VwYWdlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNTA1LVxcdFxcdGNvbnRpbnVlO1xcbm1tL2todWdlcGFnZWQuYzoyNTA2Om91dF91bmxvY2s6XFxubW0va2h1Z2VwYWdlZC5jLTI1MDctXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MTA6MDcuMTEzNDk0MzczWiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3Njk0ODEyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgbW0va2h1Z2VwYWdlZC5jYCBhbmQgemVybyBpbiBvbiBsaW5lcyAyNTA1LTI1MzAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0IGEgc3BlY2lmaWMgcGFydCBvZiBpdCwgcmVsYXRlZCB0byBraHVnZXBhZ2VkLiBJJ20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBkZWFsIHdpdGggYSBjcnVjaWFsIGFzcGVjdCBvZiB0aGUgcHJvY2VzcywgcHJvYmFibHkgcmVsYXRlZCB0byBhbGxvY2F0aW5nIG9yIG1hbmFnaW5nIGh1Z2UgcGFnZXMsIHNpbmNlIHRoYXQncyB3aGF0IGtodWdlcGFnZWQgaXMgYWxsIGFib3V0LiBcblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQncyB0aGUgY29udGV4dCBoZXJlPyBJcyB0aGlzIGEgY29yZSBhbGxvY2F0aW9uIGZ1bmN0aW9uPyBJcyBpdCBoYW5kbGluZyBwYWdlIGZhdWx0cywgcHJlZmV0Y2hpbmcsIG9yIHBlcmhhcHMgc29tZSBraW5kIG9mIGRlZnJhZ21lbnRhdGlvbiBvciBjb21wYWN0aW9uIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIG1hbmFnZW1lbnQ/IEdpdmVuIHRoZSBsaW5lIG51bWJlcnMsIGl0J3MgbGlrZWx5IGEgcmVsYXRpdmVseSBzZWxmLWNvbnRhaW5lZCBjaHVuayBvZiBjb2RlLCB3aGljaCBoZWxwcy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9uYWwgYnJhbmNoZXMsIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgaGludCBvZiBsb2NrIGFjcXVpc2l0aW9uIG9yIHJlbGVhc2UsIGFzIGNvbmN1cnJlbmN5IGlzIGFsd2F5cyBhIGtleSBjb25zaWRlcmF0aW9uIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzaWducyBvZiBlcnJvciBoYW5kbGluZywgYmVjYXVzZSB0aGUga2VybmVsIGlzIG5ldmVyIGdvaW5nIHRvIGdpdmUgeW91IGEgcGFzcyBvbiB0aGF0LiBNeSBvdmVyYWxsIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGVzZSBsaW5lcywgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwga2h1Z2VwYWdlZCBtZWNoYW5pc20uIE5vdywgbGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE4MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjEwOjA5Ljg4Mjk3NzkzWiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjUwNTpcXHRcXHRcXHRjb250aW51ZTtcXG4yNTA2OlxcdG91dF91bmxvY2s6XFxuMjUwNzpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjI1MDg6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4yNTA5OlxcdFxcdFxcdGdvdG8geGFfdW5sb2NrZWQ7XFxuMjUxMDpcXHRcXHR9XFxuMjUxMTpcXHRcXG4yNTEyOlxcdHhhX2xvY2tlZDpcXG4yNTEzOlxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjI1MTQ6XFx0eGFfdW5sb2NrZWQ6XFxuMjUxNTpcXHRcXG4yNTE2OlxcdFxcdC8qXFxuMjUxNzpcXHRcXHQgKiBJZiBjb2xsYXBzZSBpcyBzdWNjZXNzZnVsLCBmbHVzaCBtdXN0IGJlIGRvbmUgbm93IGJlZm9yZSBjb3B5aW5nLlxcbjI1MTg6XFx0XFx0ICogSWYgY29sbGFwc2UgaXMgdW5zdWNjZXNzZnVsLCBkb2VzIGZsdXNoIGFjdHVhbGx5IG5lZWQgdG8gYmUgZG9uZT9cXG4yNTE5OlxcdFxcdCAqIERvIGl0IGFueXdheSwgdG8gY2xlYXIgdGhlIHN0YXRlLlxcbjI1MjA6XFx0XFx0ICovXFxuMjUyMTpcXHRcXHR0cnlfdG9fdW5tYXBfZmx1c2goKTtcXG4yNTIyOlxcdFxcbjI1MjM6XFx0XFx0aWYgKHJlc3VsdCA9PSBTQ0FOX1NVQ0NFRUQgXFx1MDAyNlxcdTAwMjYgbnJfbm9uZSBcXHUwMDI2XFx1MDAyNlxcbjI1MjQ6XFx0XFx0ICAgICFzaG1lbV9jaGFyZ2UobWFwcGluZy1cXHUwMDNlaG9zdCwgbnJfbm9uZSkpXFxuMjUyNTpcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XFxuMjUyNjpcXHRcXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkge1xcbjI1Mjc6XFx0XFx0XFx0bnJfbm9uZSA9IDA7XFxuMjUyODpcXHRcXHRcXHRnb3RvIHJvbGxiYWNrO1xcbjI1Mjk6XFx0XFx0fVxcbjI1MzA6XFx0XFxuMjUzMTpcXHRcXHQvKlxcbjI1MzI6XFx0XFx0ICogVGhlIG9sZCBmb2xpb3MgYXJlIGxvY2tlZCwgc28gdGhleSB3b24ndCBjaGFuZ2UgYW55bW9yZS5cXG4yNTMzOlxcdFxcdCAqL1xcbjI1MzQ6XFx0XFx0aW5kZXggPSBzdGFydDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MTA6MDkuODgzMTM1Mjc5WiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0OTMzNTUzOTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBSZWxhdGVkIHRvIEZpbGUgU3lzdGVtIEludmFsaWRhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgYHJvbGxiYWNrYCBkaXJlY3RseSBwb2ludHMgdG8gYSBqdW1wIHRvIGBvdXQ6YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBGaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSBjb21taXQgaXRzZWxmICpkb2VzKi4gTGV0J3MgZGlnIGludG8gYGNvbGxhcHNlX2ZpbGVgLlxuXG5BaCwgYmVmb3JlIHRoaXMgcGF0Y2gsIGl0IGxvb2tzIGxpa2UgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKWAgd2Fzbid0IGhlbGQgYWNyb3NzIGBjb2xsYXBzZV9maWxlYC4gVGhhdCdzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGNvbmN1cnJlbmN5IGlzc3VlcyBpZiBub3QgaGFuZGxlZCByaWdodC4gTm93LCB0aGF0IHJhaXNlcyBhIHF1ZXN0aW9uLiBXaHkgZXhhY3RseSBkb2VzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgKnJlcXVpcmUqIGBtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9ja2AgdG8gYmUgaGVsZD8gU29tZXRoaW5nIGlzbid0IHNpdHRpbmcgcXVpdGUgcmlnaHQuXG5cbkFoYSEgTG9va2luZyBjbG9zZXIgYXQgdGhlIGNvZGUsIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpYCBjb250YWlucyBgbG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayk7YC4gVGhhdCBjb25maXJtcyBpdC4gTm93LCBwcmV2aW91c2x5LCBJIHJlbWVtYmVyIGBjb2xsYXBzZV9maWxlYCBjYWxsZWQgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKWAuIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5LCB3aGF0IGRpZCAqdGhhdCogZG8/IExldCdzIHJlZnJlc2ggbXlzZWxmLlxuXG5JbiBgcGFnZV9jYWNoZV9zeW5jX3JhKClgLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nOiBkb2VzIGl0IGFjdHVhbGx5IGFjcXVpcmUgYGludmFsaWRhdGVfbG9ja2A/IEknbGwgbmVlZCB0byBzZWFyY2ggdGhlIGBtbS9yZWFkYWhlYWQuY2AgZmlsZSBmb3IgaW5zdGFuY2VzIG9mIGBwYWdlX2NhY2hlX3N5bmNfcmFgIHRvIGNvbmZpcm0gaG93IGl0IGhhbmRsZXMgbG9ja3MuIFRoaXMgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgYXJlYSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzoxMDozNC44MTY2OTI3MTNaIiwiU2VxIjo2OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMzgwNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludmFsaWRhdGVfbG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9yZWFkYWhlYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9yZWFkYWhlYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmFjdGxfYWxsb2NfZm9saW8oc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTIxNy0gKlxcbm1tL3JlYWRhaGVhZC5jOjIxODogKiBDb250ZXh0OiBGaWxlIGlzIHJlZmVyZW5jZWQgYnkgY2FsbGVyLCBhbmQgcmFjdGwtXFx1MDAzZW1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9ja1xcbm1tL3JlYWRhaGVhZC5jLTIxOS0gKiBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciBhdCBsZWFzdCBpbiBzaGFyZWQgbW9kZS4gIE11dGV4ZXMgbWF5IGJlIGhlbGQgYnlcXG4tLVxcbm1tL3JlYWRhaGVhZC5jPTIyMj12b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXFxuLS1cXG5tbS9yZWFkYWhlYWQuYy0yNDItXFxubW0vcmVhZGFoZWFkLmM6MjQzOlxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNm1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9jayk7XFxubW0vcmVhZGFoZWFkLmMtMjQ0LVxcbi0tXFxubW0vcmVhZGFoZWFkLmM9MzI2PXN0YXRpYyB2b2lkIGRvX3BhZ2VfY2FjaGVfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTM0Ni1cXG5tbS9yZWFkYWhlYWQuYzozNDc6XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbm1tL3JlYWRhaGVhZC5jLTM0OC1cXHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChyYWN0bCwgbnJfdG9fcmVhZCwgbG9va2FoZWFkX3NpemUpO1xcbi0tXFxubW0vcmVhZGFoZWFkLmM9NDgxPXZvaWQgcGFnZV9jYWNoZV9yYV9vcmRlcihzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxubW0vcmVhZGFoZWFkLmMtNTE2LVxcdG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5tbS9yZWFkYWhlYWQuYzo1MTc6XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbm1tL3JlYWRhaGVhZC5jLTUxOC1cXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzoxMDozNC44NjgwNzc4NjJaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTEwNDY5OTE4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXMgb2YgYSBGaWxlIE1hcHBpbmcgTG9jayBPcmRlcmluZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgY29sbGFwc2VfZmlsZWAgYW5kIGltbWVkaWF0ZWx5IG5vdGljZSB0aGUgY2hhbmdlIGluIGxvY2sgYWNxdWlzaXRpb24gb3JkZXIuIEl0J3MgYWNxdWlyaW5nIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZylgICpiZWZvcmUqIGFueSBmb2xpbyBsb2NrcywgcmlnaHQ/IFRoYXQncyB0aGUga2V5LiAgSSBzZWUgdGhhdCBgZG9fcGFnZV9jYWNoZV9yYWAgaXMgYWxzbyBncmFiYmluZyB0aGlzIHNhbWUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZGAuXG5cblRoZSBwcm9ibGVtIHdhcyB0aGF0LCAqYmVmb3JlKiB0aGlzIGNoYW5nZSwgYGNvbGxhcHNlX2ZpbGVgIGNvdWxkIGRlYWRsb2NrIHdpdGggdHJ1bmNhdGUuICBgY29sbGFwc2VfZmlsZWAgd2FzIGhvbGRpbmcgZm9saW8gbG9ja3Mgd2hpbGUgdHJ1bmNhdGUgd2FzIHJ1bm5pbmcuIFRydW5jYXRlIHdvdWxkIGFjcXVpcmUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX2V4Y2x1c2l2ZWAgYW5kIHRoZW4gKndhaXQqIG9uIHRob3NlIHNhbWUgZm9saW8gbG9ja3MuIElmIGBjb2xsYXBzZV9maWxlYCB0aGVuIGNhbGxlZCBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpYCwgd2hpY2ggY2FsbHMgYGRvX3BhZ2VfY2FjaGVfcmEoKWAsIHdlIGdldCBhIGRlYWRsb2NrLiBgZG9fcGFnZV9jYWNoZV9yYWAgdHJpZXMgdG8gYWNxdWlyZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCB3aGlsZSBgdHJ1bmNhdGVgIGhvbGRzIHRoZSBleGNsdXNpdmUgbG9jayBhbmQgd2FpdHMgb24gZm9saW8gbG9ja3MgaGVsZCBieSBgY29sbGFwc2VfZmlsZWAuIFRoZSBmaXggaXMgdG8gdGFrZSB0aGUgaW52YWxpZGF0ZSBsb2NrIGVhcmxpZXIgdG8gYXZvaWQgdGhlIG9yZGVyaW5nIGlzc3VlLlxuXG5UaGUgY29tbWVudCBjbGVhcmx5IGV4cGxhaW5zIHRoZSByYXRpb25hbGU6ICBcIlRha2UgaW52YWxpZGF0ZV9sb2NrIGJlZm9yZSBhbnkgZm9saW8gbG9jazogdGhlIHJlYWRhaGVhZCBiZWxvdyBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuXCIgU21hcnQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSByZWFkYWhlYWQgbG9vcCBjaGFuZ2VzLiBXZSd2ZSBnb3QgYERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIFx1MDAyNmZpbGUtXHUwMDNlZl9yYSwgbWFwcGluZywgaW5kZXgpO2AgYW5kIHRoZW4gYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgLiBUaGUgY29tbWVudHMgZXhwbGFpbiB0aGF0IGBpbnZhbGlkYXRlX2xvY2tgIGlzIGFscmVhZHkgaGVsZCwgc28gd2UgZG9uJ3QgbmVlZCB0byByZWFjcXVpcmUgaXQuICBBbHNvLCB0aGUgcmVhZGFoZWFkIGhlbHBlciBpdCByZXBsYWNlcyBkb2VzIG5vdCBjbGFtcCB0byBFT0YsIHNvIHRoaXMgbmV3IGltcGxlbWVudGF0aW9uIGVuc3VyZXMgdGhhdCByZWFkYWhlYWQgZG9lcyBub3QgZ28gcGFzdCBFT0YuIFRoZSB2YXJpYWJsZSBgcmFjdGxgIGlzIGluaXRpYWxpemVkLCBhbmQgYWxsIHRoZSBmaWVsZHMgYXJlIGZpbGxlZC5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IGxlYWtzIG9yIG1lbW9yeSByZWFkIGVycm9ycy5cblxuVGhlIHBhdGNoIGluY2x1ZGVzIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uOiBgYm9vbCBuZWVkX3VubG9jayA9IGZhbHNlO2AgYW5kIHRoZSBjb25kaXRpb25hbCBmb3IgdGhlIGludmFsaWRhdGUgbG9jayBpcyBub3c6IGBpZiAoIWlzX3NobWVtKSB7IGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTsgbmVlZF91bmxvY2sgPSB0cnVlOyB9YC4gVGhpcyBtYWtlcyBzdXJlIHdlIGFjdHVhbGx5IHJlbGVhc2UgdGhlIGxvY2sgaWYgd2UgYWNxdWlyZSBpdC4gVGhlIGBERUZJTkVfUkVBREFIRUFEYCBpcyBhbHNvIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBzbyBubyBwcm9ibGVtcyB0aGVyZS4gIFRoZSBpbmRleCBjYWxjdWxhdGlvbiB1c2VzIHZhbHVlcyBpbml0aWFsaXplZCBlYXJsaWVyLCBzbyB0aGF0J3MgZ29vZC5cblxuU28gZmFyLCBpdCBsb29rcyBjbGVhbi5cblxuTGV0J3MgY2FyZWZ1bGx5IHZlcmlmeSB0aGUgbG9vcCB3aXRoIHRoZSBgaW5kZXhgIGNvdW50ZXIuICBgaW5kZXhgIHN0YXJ0cyBhdCAwLCBnb2VzIHRvIGBlbmRgIHZpYSBgeGFzYC4gTm8gdW5pbml0aWFsaXplZCB2YWx1ZXMuICBUaGUgbG9vcCBpbiBgY29sbGFwc2VfZmlsZWAgd2l0aCB0aGUgYHhhc19mb3JfZWFjaGAgaXMgc2FmZS5cblxuTm93LCBjaGVja2luZyBhZ2FpbnN0IEtNU0FOIGNyaXRlcmlhOlxuXG4xLiAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSBkaXJlY3RseS4gVGhpcyBpcyBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCwgc28gd2UncmUgZ29vZCB0aGVyZS5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBzZWVtcyBzYWZlLiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9ucyBhcmUgaW5pdGlhbGl6ZWQuXG5cbk92ZXJhbGwsIGl0IGxvb2tzIGxpa2UgYSB3ZWxsLXRob3VnaHQtb3V0IGZpeCB0aGF0IGFkZHJlc3NlcyBhIGNsZWFyIGRlYWRsb2NrIGNvbmRpdGlvbiwgYW5kIEknbSBub3Qgc2VlaW5nIGFueSBpbW1lZGlhdGUgS01TQU4gdmlvbGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4NjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjEwOjQ1LjkxNTA3MjU5NloiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzMDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjMwMTpcXHRcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMzAyOlxcdFxcdFxcdGlmICgheGFzX25vbWVtKFxcdTAwMjZ4YXMsIEdGUF9LRVJORUwpKSB7XFxuMjMwMzpcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XFxuMjMwNDpcXHRcXHRcXHRcXHRnb3RvIHJvbGxiYWNrO1xcbjIzMDU6XFx0XFx0XFx0fVxcbjIzMDY6XFx0XFx0fSB3aGlsZSAoMSk7XFxuMjMwNzpcXHRcXG4yMzA4OlxcdFxcdGZvciAoaW5kZXggPSBzdGFydDsgaW5kZXggXFx1MDAzYyBlbmQ7KSB7XFxuMjMwOTpcXHRcXHRcXHR4YXNfc2V0KFxcdTAwMjZ4YXMsIGluZGV4KTtcXG4yMzEwOlxcdFxcdFxcdGZvbGlvID0geGFzX2xvYWQoXFx1MDAyNnhhcyk7XFxuMjMxMTpcXHRcXG4yMzEyOlxcdFxcdFxcdFZNX0JVR19PTihpbmRleCAhPSB4YXMueGFfaW5kZXgpO1xcbjIzMTM6XFx0XFx0XFx0aWYgKGlzX3NobWVtKSB7XFxuMjMxNDpcXHRcXHRcXHRcXHRpZiAoIWZvbGlvKSB7XFxuMjMxNTpcXHRcXHRcXHRcXHRcXHQvKlxcbjIzMTY6XFx0XFx0XFx0XFx0XFx0ICogU3RvcCBpZiBleHRlbnQgaGFzIGJlZW4gdHJ1bmNhdGVkIG9yXFxuMjMxNzpcXHRcXHRcXHRcXHRcXHQgKiBob2xlLXB1bmNoZWQsIGFuZCBpcyBub3cgY29tcGxldGVseVxcbjIzMTg6XFx0XFx0XFx0XFx0XFx0ICogZW1wdHkuXFxuMjMxOTpcXHRcXHRcXHRcXHRcXHQgKi9cXG4yMzIwOlxcdFxcdFxcdFxcdFxcdGlmIChpbmRleCA9PSBzdGFydCkge1xcbjIzMjE6XFx0XFx0XFx0XFx0XFx0XFx0aWYgKCF4YXNfbmV4dF9lbnRyeShcXHUwMDI2eGFzLCBlbmQgLSAxKSkge1xcbjIzMjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9UUlVOQ0FURUQ7XFxuMjMyMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHhhX2xvY2tlZDtcXG4yMzI0OlxcdFxcdFxcdFxcdFxcdFxcdH1cXG4yMzI1OlxcdFxcdFxcdFxcdFxcdH1cXG4yMzI2OlxcdFxcdFxcdFxcdFxcdG5yX25vbmUrKztcXG4yMzI3OlxcdFxcdFxcdFxcdFxcdGluZGV4Kys7XFxuMjMyODpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMzI5OlxcdFxcdFxcdFxcdH1cXG4yMzMwOlxcdFxcbjIzMzE6XFx0XFx0XFx0XFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSB8fCAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpIHtcXG4yMzMyOlxcdFxcdFxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjIzMzM6XFx0XFx0XFx0XFx0XFx0Lyogc3dhcCBpbiBvciBpbnN0YW50aWF0ZSBmYWxsb2NhdGVkIHBhZ2UgKi9cXG4yMzM0OlxcdFxcdFxcdFxcdFxcdGlmIChzaG1lbV9nZXRfZm9saW8obWFwcGluZy1cXHUwMDNlaG9zdCwgaW5kZXgsIDAsXFxuMjMzNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Zm9saW8sIFNHUF9OT0FMTE9DKSkge1xcbjIzMzY6XFx0XFx0XFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xcbjIzMzc6XFx0XFx0XFx0XFx0XFx0XFx0Z290byB4YV91bmxvY2tlZDtcXG4yMzM4OlxcdFxcdFxcdFxcdFxcdH1cXG4yMzM5OlxcdFxcdFxcdFxcdFxcdC8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MTA6NDUuOTE1MjMwODU2WiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY0MjY4NDMzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIEtNU0FOIE5lZWRzIEZsYWcgZm9yIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvZGUgZXhwbGljaXRseSBtYW5hZ2VzIHRoZSBsb29wIGluZGV4IChgaW5kZXhgKSwgc28gaW5pdGlhbGl6YXRpb24gaXNuJ3QgYW4gaXNzdWUuIFRoZW4sIHdlIHNlZSB0aGF0IGBuZWVkX3VubG9ja2AgaXMgYWxzbyBpbml0aWFsaXplZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGF0IGl0IGlzIHByb3Blcmx5IGhhbmRsZWQgZXZlbiBpbiB0aGUgZXZlbnQgb2YgYW4gYGFsbG9jX2NoYXJnZV9mb2xpb2AgZmFpbHVyZS4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgbmV3IHNjZW5hcmlvcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkLiBFdmVuIGlmIGBhbGxvY19jaGFyZ2VfZm9saW9gIGZhaWxzLCB0aGUgYG5lZWRfdW5sb2NrYCBmbGFnIHByb3Blcmx5IGNvbnRyb2xzIHRoZSBsb2NraW5nL3VubG9ja2luZyBiZWhhdmlvciBpbiBhbGwgZXhpdCBwYXRocywgaW5jbHVkaW5nIHRoZSBlcnJvciBwYXRocy5cblxuTW92aW5nIG9uLCBgcmFjdGxgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIHVzaW5nIGBERUZJTkVfUkVBREFIRUFEKClgLCB3aGljaCBlbnN1cmVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYWxsIHJlbWFpbmluZyBzdHJ1Y3QgZmllbGRzLiBUaGlzIGlzIGdvb2QuIEZ1cnRoZXIsIHRoZSB1c2Ugb2YgYGVvZmAgYW5kIGJvdW5kcyBjaGVja3MgYXBwZWFyIHNvdW5kLiBXZSdyZSB1c2luZyBzdGFuZGFyZCBwYWdlIGNhY2hlIHJlYWRhaGVhZCB3aXRoIGEgYG1pbihlbmQsIGVvZilgIGNhbGN1bGF0aW9uLiBUaGUgcGF0Y2ggbGV2ZXJhZ2VzIGV4aXN0aW5nIGZpbGVzeXN0ZW0gSS9PIHByYWN0aWNlcyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcyBoZXJlLlxuXG5Ob3csIHdoYXQgaXMgdGhlICpidWcqIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXM/IEl0J3MgYSBsb2NraW5nIGRlYWRsb2NrLiBTcGVjaWZpY2FsbHksIGEgZGVhZGxvY2sgLyBpbnZlcnNpb24gYmV0d2VlbiB0aGUgYGludmFsaWRhdGVfbG9ja2AgYW5kIHRoZSBmb2xpbyBsb2NrLiBJdCdzIGFib3V0IHJlYWRhaGVhZCBwb3RlbnRpYWxseSBncmFiYmluZyB0aGUgYGludmFsaWRhdGVfbG9ja2Agd2hpbGUgKmFscmVhZHkqIGhvbGRpbmcgYSBmb2xpbyBsb2NrLCB2ZXJzdXMgdHJ1bmNhdGUgZ3JhYmJpbmcgdGhlIGBpbnZhbGlkYXRlX2xvY2tgIGFuZCB0aGVuIHdhaXRpbmcgb24gdGhlIGZvbGlvIGxvY2suIExPQ0tERVAgaXMgdGhlIHRvb2wgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgY2F0Y2hpbmcgYW5kIGZsYWdnaW5nIHRoZXNlIGxvY2tpbmcgaXNzdWVzLCBub3QgS01TQU4uXG5cblRoaW5raW5nIGFib3V0IHRoZSBLTVNBTiBydWxlczpcblxuMS4gIFRoaXMgcGF0Y2ggKnByaW1hcmlseSogZml4ZXMgYSBsb2NraW5nIGhpZXJhcmNoeSBpc3N1ZS4gS01TQU4gZG9lc24ndCBmb2N1cyBvbiBsb2NraW5nIGlzc3VlczsgTE9DS0RFUCBkb2VzLlxuMi4gIEFsbCBzdGFjay0gYW5kIGhlYXAtYWxsb2NhdGVkIHN0cnVjdHVyZXMgYXJlIGVpdGhlciBmdWxseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgYmVmb3JlIGFueSBhY2Nlc3Mgb2NjdXJzIChlLmcuLCBgbmVlZF91bmxvY2tgLCBgcmFjdGxgLCBldGMuKVxuMy4gIE5vIHVzZXItc3BhY2UgY29weSBvcGVyYXRpb25zIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBiZWluZyB0b3VjaGVkIG9yIGludHJvZHVjZWQuXG40LiAgVGhlIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYmVjYXVzZSB0aGUgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBsb2NraW5nIGlzc3VlcyBhcmUgdHJhY2tlZCBieSBMT0NLREVQLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgc2V0IHRvIGBmYWxzZWAuIFRpbWUgdG8gbW92ZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE4NSwiT3V0cHV0VG9rZW5zIjoyNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzoxMDo1Mi4zNDIwNzY1NzVaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBjb2xsYXBzZV9maWxlKClgIGluIGBtbS9raHVnZXBhZ2VkLmNgIHRvIHByZXZlbnQgYSBsb2NraW5nIGRlYWRsb2NrIGJldHdlZW4gYG1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9ja2AgYW5kIGZvbGlvIGxvY2tzIChlLmcuIGR1cmluZyBjb25jdXJyZW50IHRydW5jYXRpb24pLiBJdCB0YWtlcyBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYCBwcmlvciB0byBmb2xpbyBsb2NraW5nIGFuZCBkaXJlY3RseSBpbnZva2VzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpYCBpbnN0ZWFkIG9mIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgLlxcblxcbi0gQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChgbmVlZF91bmxvY2tgLCBgcmFjdGxgLCBgZW9mYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkOiBgbmVlZF91bmxvY2tgIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAsIGFuZCBgcmFjdGxgIGlzIGluaXRpYWxpemVkIHZpYSBgREVGSU5FX1JFQURBSEVBRCgpYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyBhbGwgdW5zcGVjaWZpZWQgc3RydWN0dXJlIGZpZWxkcyBwZXIgQyBkZXNpZ25hdGVkIGluaXRpYWxpemVyIHNlbWFudGljcy5cXG4tIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbHRlciBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgaW9jdGxzLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcuXFxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGV4cG9zZWQuXFxuLSBMb2NraW5nIGNvcnJlY3RuZXNzIGFuZCBkZWFkbG9ja3MgYWRkcmVzc2VkIGhlcmUgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGNvbmZpZ3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGNvbGxhcHNlX2ZpbGUoKWAgaW4gYG1tL2todWdlcGFnZWQuY2AgdG8gcHJldmVudCBhIGxvY2tpbmcgZGVhZGxvY2sgYmV0d2VlbiBgbWFwcGluZy1cXHUwMDNlaW52YWxpZGF0ZV9sb2NrYCBhbmQgZm9saW8gbG9ja3MgKGUuZy4gZHVyaW5nIGNvbmN1cnJlbnQgdHJ1bmNhdGlvbikuIEl0IHRha2VzIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZylgIHByaW9yIHRvIGZvbGlvIGxvY2tpbmcgYW5kIGRpcmVjdGx5IGludm9rZXMgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgIGluc3RlYWQgb2YgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKWAuXFxuXFxuLSBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGBuZWVkX3VubG9ja2AsIGByYWN0bGAsIGBlb2ZgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGBuZWVkX3VubG9ja2AgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCwgYW5kIGByYWN0bGAgaXMgaW5pdGlhbGl6ZWQgdmlhIGBERUZJTkVfUkVBREFIRUFEKClgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIGFsbCB1bnNwZWNpZmllZCBzdHJ1Y3R1cmUgZmllbGRzIHBlciBDIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIgc2VtYW50aWNzLlxcbi0gVGhlIGNoYW5nZXMgZG8gbm90IGFsdGVyIGtlcm5lbC10by11c2VyIGRhdGEgY29waWVzLCBpb2N0bHMsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZC5cXG4tIExvY2tpbmcgY29ycmVjdG5lc3MgYW5kIGRlYWRsb2NrcyBhZGRyZXNzZWQgaGVyZSBhcmUgY292ZXJlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcgY29uZmlncy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowfgmmm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 16:49:38 +0000 UTC FinishedAt: 2026-09-13 17:10:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "collapse_file", "collapse_scan_file", "collapse_single_pmd", "madvise_collapse" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "cee9395acd8043be0644b25c34bfa86623f2b935", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29sbGFwc2VfZmlsZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9zY2FuX2ZpbGUmIzM0OywKICAgICYjMzQ7Y29sbGFwc2Vfc2luZ2xlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGNvbGxhcHNlX2ZpbGUoKWAgaW4gYG1tL2todWdlcGFnZWQuY2AgdG8gcHJldmVudCBhIGxvY2tpbmcgZGVhZGxvY2sgYmV0d2VlbiBgbWFwcGluZy1cdTAwM2VpbnZhbGlkYXRlX2xvY2tgIGFuZCBmb2xpbyBsb2NrcyAoZS5nLiBkdXJpbmcgY29uY3VycmVudCB0cnVuY2F0aW9uKS4gSXQgdGFrZXMgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKWAgcHJpb3IgdG8gZm9saW8gbG9ja2luZyBhbmQgZGlyZWN0bHkgaW52b2tlcyBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKWAgaW5zdGVhZCBvZiBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpYC5cblxuLSBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGBuZWVkX3VubG9ja2AsIGByYWN0bGAsIGBlb2ZgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGBuZWVkX3VubG9ja2AgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCwgYW5kIGByYWN0bGAgaXMgaW5pdGlhbGl6ZWQgdmlhIGBERUZJTkVfUkVBREFIRUFEKClgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIGFsbCB1bnNwZWNpZmllZCBzdHJ1Y3R1cmUgZmllbGRzIHBlciBDIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIgc2VtYW50aWNzLlxuLSBUaGUgY2hhbmdlcyBkbyBub3QgYWx0ZXIga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIGlvY3RscywgbmV0bGluayBtZXNzYWdlcywgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nLlxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGV4cG9zZWQuXG4tIExvY2tpbmcgY29ycmVjdG5lc3MgYW5kIGRlYWRsb2NrcyBhZGRyZXNzZWQgaGVyZSBhcmUgY292ZXJlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcgY29uZmlncy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbGxhcHNlX2ZpbGUoKSBpbiBtbS9raHVnZXBhZ2VkLmMgdG8gYWNxdWlyZSBtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayBlYXJsaWVyIChwcmlvciB0byBsb2NraW5nIGZvbGlvcykgYW5kIGhvbGQgaXQgc2hhcmVkIHRocm91Z2hvdXQgdGhlIGNvbGxhcHNlIG9wZXJhdGlvbiwgcmVwbGFjaW5nIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB3aXRoIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWx0ZXIgbG9ja2luZyBoaWVyYXJjaGllcywgY29uY3VycmVuY3ksIGFuZCByZWFkYWhlYWQgYmVoYXZpb3IgZHVyaW5nIFRIUCBmaWxlIGNvbGxhcHNlIChyZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3Iga2h1Z2VwYWdlZCBzY2FubmluZykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24sIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi9pbnZhbGlkYXRpb24sIGFuZCByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiYTIwYTllODVjM2ZhZDFlYzlkZTZiODMyYzcwYjRjZWI5YTBhYzVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTc6MDc6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCAxMWZmOThkNTVjNzZlLi5hNWZjYWZkNTc1MDU2IDEwMDY0NFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmNcbkBAIC0yMjU3LDYgJiM0MzsyMjU3LDcgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0ZW51bSBzY2FuX3Jlc3VsdCByZXN1bHQgPSBTQ0FOX1NVQ0NFRUQ7XG4gXHRpbnQgbnJfbm9uZSA9IDA7XG4gXHRib29sIGlzX3NobWVtID0gc2htZW1fZmlsZShmaWxlKTtcbiYjNDM7XHRib29sIG5lZWRfdW5sb2NrID0gZmFsc2U7XG4gXG4gXHQvKlxuIFx0ICogTUFEVl9DT0xMQVBTRSBpZ25vcmVzIHNobWVtIGh1Z2UgY29uZmlnLCBzbyBkbyBub3QgY2hlY2sgc2htZW1cbkBAIC0yMjcxLDYgJiM0MzsyMjcyLDE1IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRha2UgaW52YWxpZGF0ZV9sb2NrIGJlZm9yZSBhbnkgZm9saW8gbG9jazogdGhlIHJlYWRhaGVhZCBiZWxvd1xuJiM0MztcdCAqIG5lZWRzIGl0LCBhbmQgdHJ1bmNhdGUgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWlzX3NobWVtKSB7XG4mIzQzO1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG4mIzQzO1x0XHRuZWVkX3VubG9jayA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG1hcHBpbmdfc2V0X3VwZGF0ZShcdTAwMjZ4YXMsIG1hcHBpbmcpO1xuIFxuIFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XG5AQCAtMjMzNywxMCAmIzQzOzIzNDcsMjAgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcdC8qICFpc19zaG1lbSAqL1xuIFx0XHRcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XG4mIzQzO1x0XHRcdFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgXHUwMDI2ZmlsZS1cdTAwM2VmX3JhLFxuJiM0MztcdFx0XHRcdFx0XHQgIG1hcHBpbmcsIGluZGV4KTtcbiYjNDM7XHRcdFx0XHRwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVx1MDAzZWhvc3QpLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBQQUdFX1NJWkUpO1xuJiM0MztcbiBcdFx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4tXHRcdFx0XHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIFx1MDAyNmZpbGUtXHUwMDNlZl9yYSxcbi1cdFx0XHRcdFx0XHRcdCAgZmlsZSwgaW5kZXgsXG4tXHRcdFx0XHRcdFx0XHQgIGVuZCAtIGluZGV4KTtcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LlxuJiM0MztcdFx0XHRcdCAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCksIHVubGlrZSB0aGUgcmVhZGFoZWFkXG4mIzQzO1x0XHRcdFx0ICogaGVscGVyIHRoaXMgcmVwbGFjZXMsIGRvZXMgbm90IGNsYW1wIHRvIEVPRi5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRpZiAoaW5kZXggXHUwMDNjIGVvZilcbiYjNDM7XHRcdFx0XHRcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKFx1MDAyNnJhY3RsLFxuJiM0MztcdFx0XHRcdFx0XHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xuIFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuIFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuIFx0XHRcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xuQEAgLTI2NzIsNiAmIzQzOzI2OTIsOCBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRmb2xpb191bmxvY2sobmV3X2ZvbGlvKTtcbiBcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xuIG91dDpcbiYjNDM7XHRpZiAobmVlZF91bmxvY2spXG4mIzQzO1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcdFZNX0JVR19PTighbGlzdF9lbXB0eShcdTAwMjZwYWdlbGlzdCkpO1xuIFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xuIFx0cmV0dXJuIHJlc3VsdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbGxhcHNlX2ZpbGUmIzM0OywKICAgICYjMzQ7Y29sbGFwc2Vfc2Nhbl9maWxlJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3NpbmdsZV9wbWQmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb2xsYXBzZV9maWxlKCkgaW4gbW0va2h1Z2VwYWdlZC5jIHRvIGFjcXVpcmUgbWFwcGluZy1cdTAwM2VpbnZhbGlkYXRlX2xvY2sgZWFybGllciAocHJpb3IgdG8gbG9ja2luZyBmb2xpb3MpIGFuZCBob2xkIGl0IHNoYXJlZCB0aHJvdWdob3V0IHRoZSBjb2xsYXBzZSBvcGVyYXRpb24sIHJlcGxhY2luZyBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgd2l0aCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFsdGVyIGxvY2tpbmcgaGllcmFyY2hpZXMsIGNvbmN1cnJlbmN5LCBhbmQgcmVhZGFoZWFkIGJlaGF2aW9yIGR1cmluZyBUSFAgZmlsZSBjb2xsYXBzZSAocmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIGtodWdlcGFnZWQgc2Nhbm5pbmcpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgcG90ZW50aWFsIGxvY2sgaW52ZXJzaW9uLCBkZWFkbG9ja3Mgd2l0aCBmaWxlIHRydW5jYXRpb24vaW52YWxpZGF0aW9uLCBhbmQgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmEyMGE5ZTg1YzNmYWQxZWM5ZGU2YjgzMmM3MGI0Y2ViOWEwYWM1YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDE3OjA3OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDExZmY5OGQ1NWM3NmUuLmE1ZmNhZmQ1NzUwNTYgMTAwNjQ0Ci0tLSBhL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmMKQEAgLTIyNTcsNiAmIzQzOzIyNTcsNyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJZW51bSBzY2FuX3Jlc3VsdCByZXN1bHQgPSBTQ0FOX1NVQ0NFRUQ7CiAJaW50IG5yX25vbmUgPSAwOwogCWJvb2wgaXNfc2htZW0gPSBzaG1lbV9maWxlKGZpbGUpOwomIzQzOwlib29sIG5lZWRfdW5sb2NrID0gZmFsc2U7CiAKIAkvKgogCSAqIE1BRFZfQ09MTEFQU0UgaWdub3JlcyBzaG1lbSBodWdlIGNvbmZpZywgc28gZG8gbm90IGNoZWNrIHNobWVtCkBAIC0yMjcxLDYgJiM0MzsyMjcyLDE1IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkKIAkJZ290byBvdXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93CiYjNDM7CSAqIG5lZWRzIGl0LCBhbmQgdHJ1bmNhdGUgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy4KJiM0MzsJICovCiYjNDM7CWlmICghaXNfc2htZW0pIHsKJiM0MzsJCWZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTsKJiM0MzsJCW5lZWRfdW5sb2NrID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwogCW1hcHBpbmdfc2V0X3VwZGF0ZSgmYW1wO3hhcywgbWFwcGluZyk7CiAKIAlfX2ZvbGlvX3NldF9sb2NrZWQobmV3X2ZvbGlvKTsKQEAgLTIzMzcsMTAgJiM0MzsyMzQ3LDIwIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCX0KIAkJfSBlbHNlIHsJLyogIWlzX3NobWVtICovCiAJCQlpZiAoIWZvbGlvIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSkgewomIzQzOwkJCQlERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCAmYW1wO2ZpbGUtJmd0O2ZfcmEsCiYjNDM7CQkJCQkJICBtYXBwaW5nLCBpbmRleCk7CiYjNDM7CQkJCXBnb2ZmX3QgZW9mID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKG1hcHBpbmctJmd0O2hvc3QpLAomIzQzOwkJCQkJCQkgICAgUEFHRV9TSVpFKTsKJiM0MzsKIAkJCQl4YXNfdW5sb2NrX2lycSgmYW1wO3hhcyk7Ci0JCQkJcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChtYXBwaW5nLCAmYW1wO2ZpbGUtJmd0O2ZfcmEsCi0JCQkJCQkJICBmaWxlLCBpbmRleCwKLQkJCQkJCQkgIGVuZCAtIGluZGV4KTsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogaW52YWxpZGF0ZV9sb2NrIGhlbGQgYWJvdmU7IGRvbiYjMzk7dCByZXRha2UgaXQuCiYjNDM7CQkJCSAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCksIHVubGlrZSB0aGUgcmVhZGFoZWFkCiYjNDM7CQkJCSAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlpZiAoaW5kZXggJmx0OyBlb2YpCiYjNDM7CQkJCQlwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgmYW1wO3JhY3RsLAomIzQzOwkJCQkJCW1pbihlbmQsIGVvZikgLSBpbmRleCwgMCk7CiAJCQkJLyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqLwogCQkJCWxydV9hZGRfZHJhaW4oKTsKIAkJCQlmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyhtYXBwaW5nLCBpbmRleCk7CkBAIC0yNjcyLDYgJiM0MzsyNjkyLDggQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCWZvbGlvX3VubG9jayhuZXdfZm9saW8pOwogCWZvbGlvX3B1dChuZXdfZm9saW8pOwogb3V0OgomIzQzOwlpZiAobmVlZF91bmxvY2spCiYjNDM7CQlmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTsKIAlWTV9CVUdfT04oIWxpc3RfZW1wdHkoJmFtcDtwYWdlbGlzdCkpOwogCXRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTsKIAlyZXR1cm4gcmVzdWx0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTA3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUGF0Y2ggRXZhbHVhdGlvbiAtIEtodWdlcGFnZWQqKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBldmFsdWF0ZSB0aGlzIHBhdGNoIHRhcmdldGluZyBmdXp6aW5nLiBMZXQmIzM5O3MgZGlnIGluLiBGaXJzdCwgYSBxdWljayBnbGFuY2UgYXQgdGhlIGRpZmYgc2hvd3MgY2hhbmdlcyB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2AsIHNwZWNpZmljYWxseSB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLiBJIHNlZSBzb21lIGxvY2tpbmcgY2hhbmdlcywgbmFtZWx5IHRoZSBhZGRpdGlvbiBvZiBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCB3aGVuIGAhaXNfc2htZW1gLiBUaGUgcmVhZGFoZWFkIGxvZ2ljIGhhcyBiZWVuIG92ZXJoYXVsZWQ7IHRoZSBvbGQgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgIGhhcyBiZWVuIHN3YXBwZWQgZm9yIGEgbW9yZSBncmFudWxhciBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgIGltcGxlbWVudGF0aW9uLCBpbmNvcnBvcmF0aW5nIGEgYERFRklORV9SRUFEQUhFQURgIG1hY3JvIGFuZCBjaGVja3MgYWdhaW5zdCB0aGUgZmlsZSYjMzk7cyBlbmQuIEZpbmFsbHksIEkgbm90aWNlIHRoZSB1bmxvY2tpbmcgY2FsbCBgZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWRgIGFkZGVkIGF0IHRoZSBgb3V0OmAgbGFiZWwsIGNvbnRpbmdlbnQgb24gYSBgbmVlZF91bmxvY2tgIGNvbmRpdGlvbi4KClRoaXMgaXMgYWxsIHNxdWFyZWx5IHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYCwgd2hpY2gsIGFzIHdlIGtub3csIGRpcmVjdGx5IGltcGFjdHMgbWVtb3J5IG1hbmFnZW1lbnTigJRjcml0aWNhbCBzdHVmZi4gSXTigJlzIGZpZGRsaW5nIHdpdGggbG9ja2luZyBhbmQgcmVhZGFoZWFkLCBib3RoIG9mIHdoaWNoIGFyZSBjb21tb24gdGFyZ2V0cyBmb3IgZnV6emluZywgZXNwZWNpYWxseSBpbiBmaWxlLWJhY2tlZCBwYWdlIGhhbmRsaW5nLiBUaGF0IGBtYWR2aXNlKC4uLiwgTUFEVl9DT0xMQVBTRSlgIGFuZCBraHVnZXBhZ2VkIHNjYW5uaW5nIGRlZmluaXRlbHkgbWFrZSB0aGlzIGNvZGUgcGF0aCByZWFjaGFibGUsIHNvIGl04oCZcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpOb3csIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNvbnRleHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLCBga2h1Z2VwYWdlZC5jYCBpdHNlbGYgYW5kIHRoZSByZWxhdGVkIGBLY29uZmlnYCBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ3JhYiB0aG9zZSBmaWxlcywgc28gSSBjYW4gc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIGV4aXN0aW5nIGNvZGViYXNlIGFuZCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGludm9sdmVkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGNvbXBsZXRlIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTgxIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbi0tXG5tbS9jb21wYWN0aW9uLmM9NjA9c3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxubW0vY29tcGFjdGlvbi5jLTc1LSAqL1xubW0vY29tcGFjdGlvbi5jOjc2OiNpZiBkZWZpbmVkIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vY29tcGFjdGlvbi5jLTc3LSNkZWZpbmUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUlx0SFBBR0VfUE1EX09SREVSXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTczPXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc0LXtcbm1tL2RhbW9uL29wcy1jb21tb24uYzo3NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzYtXHRwbWRfdCBwbWR2YWwgPSBwbWRwX2dldChwbWQpO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy05Ny1cdGZvbGlvX3B1dChmb2xpbyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6OTg6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTk5LX1cbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTk0PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX3lvdW5nX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMTUtXHRcdH0gZWxzZSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjE2OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMTctXHRcdFx0cG1kX3QgcG1kID0gcG1kcF9nZXQocHZtdy5wbWQpO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjMtXHRcdFx0V0FSTl9PTl9PTkNFKDEpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIyNDojZW5kaWZcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyNS1cdFx0fVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9Mzg5PXN0YXRpYyBpbnQgZGFtb25feW91bmdfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTM5Ny1cbm1tL2RhbW9uL3ZhZGRyLmM6Mzk4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtMzk5LVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTQxNS1cdH1cbm1tL2RhbW9uL3ZhZGRyLmM6NDE2OiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTQxNy1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTYzNT1zdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY0Ni1cbm1tL2RhbW9uL3ZhZGRyLmM6NjQ3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtNjQ4LVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY2NC1cdH1cbm1tL2RhbW9uL3ZhZGRyLmM6NjY1OiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTY2Ni1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTc5NT1zdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTgwNi1cbm1tL2RhbW9uL3ZhZGRyLmM6ODA3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtODA4LVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTE3Mi1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxNzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTE3NC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQyMz1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDI0LSNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQyNTojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNi1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpIHsgfVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz00MzE9c3RhdGljIHZvaWQgX19pbml0IHB1ZF9sZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQzMjojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDMzLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz02NzE9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02ODItXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NjgzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02ODQtc3RhdGljIHZvaWQgX19pbml0IHBtZF9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02OTgtfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjY5OTojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTcwMC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX3Byb3Rub25lX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjcwMTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzAyLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03MTU9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9zd2FwX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzMxLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjczMjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzMzLXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03NDk9c3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzY3LX1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3Njg6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03Njktc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTc3MD1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3NzE6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTc3Mi1cbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTAxPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDMtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTA0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDUtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU1PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk1Ni0jZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5NTc6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTgtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU5PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk2MDojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTYxLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz05ODc9c3RhdGljIHZvaWQgX19pbml0IGRlc3Ryb3lfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05ODktXHQvKiBGcmVlIChodWdlKSBwYWdlICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTkwOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTEtXHQgICAgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTgtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTk5Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMDAwLVx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz0xMTQzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjM5LVx0ICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6MTI0MDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI0MS1cdCAgICBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkpIHtcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI1MC1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxMjUxOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjUyLVx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7XG4tLVxubW0vZmlsZW1hcC5jPTMzMjk9c3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2ZpbGVtYXAuYy0zMzQxLVx0LyogVXNlIHRoZSByZWFkYWhlYWQgY29kZSwgZXZlbiBpZiByZWFkYWhlYWQgaXMgZGlzYWJsZWQgKi9cbm1tL2ZpbGVtYXAuYzozMzQyOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSkpIHtcbm1tL2ZpbGVtYXAuYy0zMzQzLVx0XHQvKlxuLS1cbm1tL2d1cC5jPTcwMT1zdGF0aWMgc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ndXAuYy03MzQtXG5tbS9ndXAuYzo3MzU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZ3VwLmMtNzM2LVx0aWYgKHBtZF90cmFuc19odWdlKHBtZHZhbCkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgRk9MTF9UT1VDSCkpXG5tbS9ndXAuYy03MzctXHRcdHRvdWNoX3BtZCh2bWEsIGFkZHIsIHBtZCwgZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpO1xubW0vZ3VwLmM6NzM4OiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9ndXAuYy03MzktXG4tLVxubW0vaG1tLmM9MTg4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBobW1fcGZuX2ZsYWdzX29yZGVyKHVuc2lnbmVkIGxvbmcgb3JkZXIpXG4tLVxubW0vaG1tLmMtMTkyLVxubW0vaG1tLmM6MTkzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2htbS5jLTE5NC1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX3RvX2htbV9wZm5fZmxhZ3Moc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG4tLVxubW0vaG1tLmM9MjA0PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vaG1tLmMtMjI3LX1cbm1tL2htbS5jOjIyODojZWxzZSAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2htbS5jLTIyOS0vKiBzdHViIHRvIGFsbG93IHRoZSBjb2RlIGJlbG93IHRvIGNvbXBpbGUgKi9cbm1tL2htbS5jPTIzMD1pbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9obW0uYy0yMzEtXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGhtbV9wZm5zW10sIHBtZF90IHBtZCk7XG5tbS9obW0uYzoyMzI6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vaG1tLmMtMjMzLVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NjE9dW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyBfX3JlYWRfbW9zdGx5ID1cbm1tL2h1Z2VfbWVtb3J5LmM6NjI6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL2h1Z2VfbWVtb3J5LmMtNjMtXHQoMVx1MDAzY1x1MDAzY1RSQU5TUEFSRU5UX0hVR0VQQUdFX0ZMQUcpfFxubW0vaHVnZV9tZW1vcnkuYy02NC0jZW5kaWZcbm1tL2h1Z2VfbWVtb3J5LmM6NjU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9odWdlX21lbW9yeS5jLTY2LVx0KDFcdTAwM2NcdTAwM2NUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHKXxcbi0tXG5tbS9rc20uYz0yNTI3PXN0YXRpYyBpbnQga3NtX25leHRfcGFnZV9wbWRfZW50cnkocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0va3NtLmMtMjU0Ny1cbm1tL2tzbS5jOjI1NDg6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBwbWRfbGVhZihwbWQpKSB7XG5tbS9rc20uYy0yNTQ5LVx0XHRwdGwgPSBwbWRfbG9jayhtbSwgcG1kcCk7XG4tLVxubW0vbWFkdmlzZS5jPTM1ND1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy0zNzYtXG5tbS9tYWR2aXNlLmM6Mzc3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21hZHZpc2UuYy0zNzgtXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUzOS0jZW5kaWZcbm1tL21hZHZpc2UuYzoxNTQwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21hZHZpc2UuYy0xNTQxLVx0Y2FzZSBNQURWX0hVR0VQQUdFOlxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yMTY1PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2cxX3N0YXRzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTIxNjctXHROUl9BTk9OX01BUFBFRCxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMTY4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wtdjEuYy0yMTY5LVx0TlJfQU5PTl9USFBTLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yMTgzPXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1jZzFfc3RhdF9uYW1lc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMTg1LVx0XCYjMzQ7cnNzXCYjMzQ7LFxubW0vbWVtY29udHJvbC12MS5jOjIxODY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtY29udHJvbC12MS5jLTIxODctXHRcJiMzNDtyc3NfaHVnZVwmIzM0Oyxcbi0tXG5tbS9tZW1jb250cm9sLmM9NTk4PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy02MTktI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NjIwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wuYy02MjEtXHRUSFBfRkFVTFRfQUxMT0MsXG4tLVxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTYxMi0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzoxNjEzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wuYy0xNjE0LVx0eyBcJiMzNDthbm9uX3RocFwmIzM0OyxcdFx0XHROUl9BTk9OX1RIUFNcdFx0XHR9LFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Njg5PXN0YXRpYyBpbnQgY2hlY2tfaHdwb2lzb25lZF9lbnRyeShwdGVfdCBwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgc2hvcnQgc2hpZnQsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy03MTMtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjcxNDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1vcnktZmFpbHVyZS5jLTcxNS1zdGF0aWMgaW50IGNoZWNrX2h3cG9pc29uZWRfcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmM9NDE5OT1zdGF0aWMgdm1fZmF1bHRfdCB3cF9wYWdlX3NoYXJlZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1vcnkuYy00MjM4LVxubW0vbWVtb3J5LmM6NDIzOTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1vcnkuYy00MjQwLXN0YXRpYyBib29sIF9fd3BfY2FuX3JldXNlX2xhcmdlX2Fub25fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1vcnkuYy00MzA0LX1cbm1tL21lbW9yeS5jOjQzMDU6I2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vbWVtb3J5LmMtNDMwNi1zdGF0aWMgYm9vbCBfX3dwX2Nhbl9yZXVzZV9sYXJnZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtb3J5LmMtNDMxMC19XG5tbS9tZW1vcnkuYzo0MzExOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL21lbW9yeS5jLTQzMTItXG5tbS9tZW1vcnkuYz00MzEzPXN0YXRpYyBib29sIHdwX2Nhbl9yZXVzZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtb3J5LmMtNDMxOC1cbm1tL21lbW9yeS5jOjQzMTk6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcbm1tL21lbW9yeS5jLTQzMjAtXHRcdHJldHVybiBfX3dwX2Nhbl9yZXVzZV9sYXJnZV9hbm9uX2ZvbGlvKGZvbGlvLCB2bWEpO1xuLS1cbm1tL21lbW9yeS5jPTQ3MTk9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9tYXJrZXIoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDc0NS1cbm1tL21lbW9yeS5jOjQ3NDY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtb3J5LmMtNDc0Ny0vKlxuLS1cbm1tL21lbW9yeS5jPTQ3OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDg1NC19XG5tbS9tZW1vcnkuYzo0ODU1OiNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL21lbW9yeS5jLTQ4NTYtc3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDg1OS19XG5tbS9tZW1vcnkuYzo0ODYwOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL21lbW9yeS5jLTQ4NjEtXG4tLVxubW0vbWVtb3J5LmM9NTMwMT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTUzMDMtXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG5tbS9tZW1vcnkuYzo1MzA0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbW9yeS5jLTUzMDUtXHR1bnNpZ25lZCBsb25nIG9yZGVycztcbi0tXG5tbS9tZW1vcnkuYz01NTM4PXN0YXRpYyB2bV9mYXVsdF90IF9fZG9fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTU5My1cbm1tL21lbW9yeS5jOjU1OTQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtb3J5LmMtNTU5NS1zdGF0aWMgdm9pZCBkZXBvc2l0X3ByZWFsbG9jX3B0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYz02NDIxPXN0YXRpYyB2bV9mYXVsdF90IGNyZWF0ZV9odWdlX3B1ZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbm1tL21lbW9yeS5jLTY0MjIte1xubW0vbWVtb3J5LmM6NjQyMzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlx0XHRcdFxcXG5tbS9tZW1vcnkuYy02NDI0LVx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcbi0tXG5tbS9tZW1vcnkuYy02NDMwLVx0XHRyZXR1cm4gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VodWdlX2ZhdWx0KHZtZiwgUFVEX09SREVSKTtcbm1tL21lbW9yeS5jOjY0MzE6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vbWVtb3J5LmMtNjQzMi1cdHJldHVybiBWTV9GQVVMVF9GQUxMQkFDSztcbi0tXG5tbS9tZW1vcnkuYz02NDM1PXN0YXRpYyB2bV9mYXVsdF90IHdwX2h1Z2VfcHVkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBwdWRfdCBvcmlnX3B1ZClcbm1tL21lbW9yeS5jLTY0MzYte1xubW0vbWVtb3J5LmM6NjQzNzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlx0XHRcdFxcXG5tbS9tZW1vcnkuYy02NDM4LVx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcbi0tXG5tbS9tZW1vcnkuYy02NDU0LVx0X19zcGxpdF9odWdlX3B1ZCh2bWEsIHZtZi1cdTAwM2VwdWQsIHZtZi1cdTAwM2VhZGRyZXNzKTtcbm1tL21lbW9yeS5jOjY0NTU6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBcdTAwMjZcdTAwMjYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cbm1tL21lbW9yeS5jLTY0NTYtXHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XG4tLVxubW0vbWVtb3J5LmM9NzQ4ND1FWFBPUlRfU1lNQk9MKF9fbWlnaHRfZmF1bHQpO1xuLS1cbm1tL21lbW9yeS5jLTc0ODYtXG5tbS9tZW1vcnkuYzo3NDg3OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfSFVHRVRMQkZTKVxubW0vbWVtb3J5LmMtNzQ4OC0vKlxuLS1cbm1tL21lbW9yeS5jPTc2NzU9bG9uZyBjb3B5X2ZvbGlvX2Zyb21fdXNlcihzdHJ1Y3QgZm9saW8gKmRzdF9mb2xpbyxcbi0tXG5tbS9tZW1vcnkuYy03NzA0LX1cbm1tL21lbW9yeS5jOjc3MDU6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSB8fCBDT05GSUdfSFVHRVRMQkZTICovXG5tbS9tZW1vcnkuYy03NzA2LVxuLS1cbm1tL21lbXBvbGljeS5jPTI0NDE9c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19tcG9sKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL21lbXBvbGljeS5jLTI0NTEtXG5tbS9tZW1wb2xpY3kuYzoyNDUyOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL21lbXBvbGljeS5jLTI0NTMtXHQgICAgLyogZmlsdGVyIFwmIzM0O2h1Z2VwYWdlXCYjMzQ7IGFsbG9jYXRpb24sIHVubGVzcyBmcm9tIGFsbG9jX3BhZ2VzKCkgKi9cbi0tXG5tbS9taWdyYXRlLmM9MTU5MT1zdGF0aWMgaW5saW5lIGludCB0cnlfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxuLS1cbm1tL21pZ3JhdGUuYy0xNjA5LVxubW0vbWlncmF0ZS5jOjE2MTA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWlncmF0ZS5jLTE2MTEtI2RlZmluZSBOUl9NQVhfQkFUQ0hFRF9NSUdSQVRJT05cdEhQQUdFX1BNRF9OUlxuLS1cbm1tL21tYXAuYz04Mjc9X19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS9tbWFwLmMtODU4LVx0XHRhZGRyID0gZ2V0X2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpO1xubW0vbW1hcC5jOjg1OTpcdH0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiAhZmlsZVxubW0vbW1hcC5jLTg2MC1cdFx0ICAgXHUwMDI2XHUwMDI2ICFhZGRyIC8qIG5vIGhpbnQgKi9cbi0tXG5tbS9tcmVtYXAuYz00Nzk9c3RhdGljIGlubGluZSBib29sIG1vdmVfbm9ybWFsX3B1ZChzdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCAqcG1jLFxuLS1cbm1tL21yZW1hcC5jLTQ4NS1cbm1tL21yZW1hcC5jOjQ4NjojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxubW0vbXJlbWFwLmMtNDg3LXN0YXRpYyBib29sIG1vdmVfaHVnZV9wdWQoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcbi0tXG5tbS9tcmVtYXAuYz02MDU9c3RhdGljIGJvb2wgbW92ZV9wZ3RfZW50cnkoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcbi0tXG5tbS9tcmVtYXAuYy02MjItXHRjYXNlIEhQQUdFX1BNRDpcbm1tL21yZW1hcC5jOjYyMzpcdFx0bW92ZWQgPSBJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9tcmVtYXAuYy02MjQtXHRcdFx0bW92ZV9odWdlX3BtZChwbWMtXHUwMDNlb2xkLCBwbWMtXHUwMDNlb2xkX2FkZHIsIHBtYy1cdTAwM2VuZXdfYWRkciwgb2xkX2VudHJ5LFxuLS1cbm1tL21yZW1hcC5jLTYyNy1cdGNhc2UgSFBBR0VfUFVEOlxubW0vbXJlbWFwLmM6NjI4Olx0XHRtb3ZlZCA9IElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL21yZW1hcC5jLTYyOS1cdFx0XHRtb3ZlX2h1Z2VfcHVkKHBtYywgb2xkX2VudHJ5LCBuZXdfZW50cnkpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz02NTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb3JkZXJfdG9fcGluZGV4KGludCBtaWdyYXRldHlwZSwgaW50IG9yZGVyKVxubW0vcGFnZV9hbGxvYy5jLTY1Ni17XG5tbS9wYWdlX2FsbG9jLmM6NjU3Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkge1xubW0vcGFnZV9hbGxvYy5jLTY1OC1cdFx0Ym9vbCBtb3ZhYmxlID0gbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz02Njc9c3RhdGljIGlubGluZSBpbnQgcGluZGV4X3RvX29yZGVyKHVuc2lnbmVkIGludCBwaW5kZXgpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTY3MC1cbm1tL3BhZ2VfYWxsb2MuYzo2NzE6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKSB7XG5tbS9wYWdlX2FsbG9jLmMtNjcyLVx0XHRpZiAocGluZGV4IFx1MDAzZT0gTlJfTE9XT1JERVJfUENQX0xJU1RTKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz02Nzk9c3RhdGljIGlubGluZSBib29sIHBjcF9hbGxvd2VkX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNjgyLVx0XHRyZXR1cm4gdHJ1ZTtcbm1tL3BhZ2VfYWxsb2MuYzo2ODM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vcGFnZV9hbGxvYy5jLTY4NC1cdGlmIChpc19wbWRfb3JkZXIob3JkZXIpKVxuLS1cbm1tL3BhZ2VfaWRsZS5jPTUyPXN0YXRpYyBib29sIHBhZ2VfaWRsZV9jbGVhcl9wdGVfcmVmc19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9wYWdlX2lkbGUuYy03Mi1cdFx0XHRyZWZlcmVuY2VkIHw9IG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIGFkZHIgJiM0MzsgUEFHRV9TSVpFKTtcbm1tL3BhZ2VfaWRsZS5jOjczOlx0XHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkge1xubW0vcGFnZV9pZGxlLmMtNzQtXHRcdFx0cG1kX3QgcG1kdmFsID0gcG1kcF9nZXQocHZtdy5wbWQpO1xuLS1cbm1tL3BhZ2VfaW8uYz0zNzA9dm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy0zNzMtXG5tbS9wYWdlX2lvLmM6Mzc0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3BhZ2VfaW8uYy0zNzUtXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9wbWRfbWFwcGFibGUoZm9saW8pKSkge1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE4Nj1ib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTEtXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNTI6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTMtXHRcdCAgICAocG1kX3RyYW5zX2h1Z2UocG1kZSkgfHwgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRlKSB8fFxuLS1cbm1tL3BndGFibGUtZ2VuZXJpYy5jPTk3PXB0ZV90IHB0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0xMDgtXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoxMDk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMTEwLVxuLS1cbm1tL3BndGFibGUtZ2VuZXJpYy5jPTI1MD12b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yNTctI2VuZGlmIC8qIHB0ZV9mcmVlX2RlZmVyICovXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoyNTg6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vcGd0YWJsZS1nZW5lcmljLmMtMjU5LVxuLS1cbm1tL3JtYXAuYz05MTg9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtOTg3LVx0XHRcdFx0cmVmZXJlbmNlZCYjNDM7JiM0Mzs7XG5tbS9ybWFwLmM6OTg4Olx0XHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkge1xubW0vcm1hcC5jLTk4OS1cdFx0XHRpZiAocG1kcF9jbGVhcl9mbHVzaF95b3VuZ19ub3RpZnkodm1hLCBhZGRyZXNzLFxuLS1cbm1tL3JtYXAuYz0xMTA3PXN0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuLS1cbm1tL3JtYXAuYy0xMTQ3LVx0XHR9IGVsc2Uge1xubW0vcm1hcC5jOjExNDg6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vcm1hcC5jLTExNDktXHRcdFx0cG1kX3QgKnBtZCA9IHB2bXctXHUwMDNlcG1kO1xuLS1cbm1tL3JtYXAuYz0xNjIyPXZvaWQgZm9saW9fYWRkX2Fub25fcm1hcF9wbWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcm1hcC5jLTE2MjQte1xubW0vcm1hcC5jOjE2MjU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vcm1hcC5jLTE2MjYtXHRfX2ZvbGlvX2FkZF9hbm9uX3JtYXAoZm9saW8sIHBhZ2UsIEhQQUdFX1BNRF9OUiwgdm1hLCBhZGRyZXNzLCBmbGFncyxcbi0tXG5tbS9ybWFwLmM9MTc1MT12b2lkIGZvbGlvX2FkZF9maWxlX3JtYXBfcG1kKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3JtYXAuYy0xNzUzLXtcbm1tL3JtYXAuYzoxNzU0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3JtYXAuYy0xNzU1LVx0X19mb2xpb19hZGRfZmlsZV9ybWFwKGZvbGlvLCBwYWdlLCBIUEFHRV9QTURfTlIsIHZtYSwgUEdUQUJMRV9MRVZFTF9QTUQpO1xuLS1cbm1tL3JtYXAuYz0xNzcxPXZvaWQgZm9saW9fYWRkX2ZpbGVfcm1hcF9wdWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcm1hcC5jLTE3NzMte1xubW0vcm1hcC5jOjE3NzQ6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgXFxcbm1tL3JtYXAuYy0xNzc1LVx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcbi0tXG5tbS9ybWFwLmM9MTkxOT12b2lkIGZvbGlvX3JlbW92ZV9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9ybWFwLmMtMTkyMS17XG5tbS9ybWFwLmM6MTkyMjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9ybWFwLmMtMTkyMy1cdF9fZm9saW9fcmVtb3ZlX3JtYXAoZm9saW8sIHBhZ2UsIEhQQUdFX1BNRF9OUiwgdm1hLCBQR1RBQkxFX0xFVkVMX1BNRCk7XG4tLVxubW0vcm1hcC5jPTE5Mzk9dm9pZCBmb2xpb19yZW1vdmVfcm1hcF9wdWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcm1hcC5jLTE5NDEte1xubW0vcm1hcC5jOjE5NDI6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgXFxcbm1tL3JtYXAuYy0xOTQzLVx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcbi0tXG5tbS9zaG1lbS5jPTExND1zdHJ1Y3Qgc2htZW1fb3B0aW9ucyB7XG4tLVxubW0vc2htZW0uYy0xMzctXG5tbS9zaG1lbS5jOjEzODojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTEzOS1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdlX3NobWVtX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcbi0tXG5tbS9zaG1lbS5jPTUyMT1zdGF0aWMgaW50IHNobWVtX2NvbmZpcm1fc3dhcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTU2OS1cbm1tL3NobWVtLmM6NTcwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3NobWVtLmMtNTcxLS8qIGlmZGVmIGhlcmUgdG8gYXZvaWQgYmxvYXRpbmcgc2htZW0ubyB3aGVuIG5vdCBuZWNlc3NhcnkgKi9cbm1tL3NobWVtLmMtNTcyLVxubW0vc2htZW0uYzo1NzM6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVIpXG5tbS9zaG1lbS5jLTU3NC0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX05FVkVSXG5tbS9zaG1lbS5jOjU3NTojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZUylcbm1tL3NobWVtLmMtNTc2LSNkZWZpbmUgU0hNRU1fSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfQUxXQVlTXG5tbS9zaG1lbS5jOjU3NzojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFKVxubW0vc2htZW0uYy01NzgtI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vc2htZW0uYzo1Nzk6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0UpXG5tbS9zaG1lbS5jLTU4MC0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FEVklTRVxuLS1cbm1tL3NobWVtLmM9NTg1PXN0YXRpYyBpbnQgc2htZW1faHVnZSBfX3JlYWRfbW9zdGx5ID0gU0hNRU1fSFVHRV9ERUZBVUxUO1xuLS1cbm1tL3NobWVtLmMtNTg4LVxubW0vc2htZW0uYzo1ODk6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVIpXG5tbS9zaG1lbS5jLTU5MC0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX05FVkVSXG5tbS9zaG1lbS5jOjU5MTojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZUylcbm1tL3NobWVtLmMtNTkyLSNkZWZpbmUgVE1QRlNfSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfQUxXQVlTXG5tbS9zaG1lbS5jOjU5MzojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFKVxubW0vc2htZW0uYy01OTQtI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vc2htZW0uYzo1OTU6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0UpXG5tbS9zaG1lbS5jLTU5Ni0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FEVklTRVxuLS1cbm1tL3NobWVtLmM9ODQ2PXN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxubW0vc2htZW0uYy04NjEtfVxubW0vc2htZW0uYzo4NjI6I2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vc2htZW0uYy04NjMtXG4tLVxubW0vc2htZW0uYz04NzI9c3RhdGljIHVuc2lnbmVkIGludCBzaG1lbV9odWdlX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy04NzgtfVxubW0vc2htZW0uYzo4Nzk6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vc2htZW0uYy04ODAtXG4tLVxubW0vc2htZW0uYz0xNjA3PWludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9zaG1lbS5jLTE2NDktXG5tbS9zaG1lbS5jOjE2NTA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy0xNjUxLVx0XHRpZiAob3JkZXIgXHUwMDNlPSBIUEFHRV9QTURfT1JERVIpIHtcbi0tXG5tbS9zaG1lbS5jPTE4MDQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcGluX2NsdXN0ZXIoc3dwX2VudHJ5X3Qgc3dhcCwgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3NobWVtLmMtMTgxNy1cbm1tL3NobWVtLmM6MTgxODojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTE4MTktYm9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL3NobWVtLmM9MTkxNz1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc2htZW0uYy0xOTIyLX1cbm1tL3NobWVtLmM6MTkyMzojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9zaG1lbS5jLTE5MjQtXG4tLVxubW0vc2htZW0uYz0xOTM5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX2FsbG9jX2FuZF9hZGRfZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc2htZW0uYy0xOTUwLVxubW0vc2htZW0uYzoxOTUxOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG5tbS9zaG1lbS5jLTE5NTItXHRcdG9yZGVycyA9IDA7XG4tLVxubW0vc2htZW0uYz0yMDg5PXN0YXRpYyBpbnQgc2htZW1fcmVwbGFjZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGdmcF90IGdmcCxcbi0tXG5tbS9zaG1lbS5jLTIxMDMtXHRnZnAgXHUwMDI2PSB+R0ZQX0NPTlNUUkFJTlRfTUFTSztcbm1tL3NobWVtLmM6MjEwNDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTIxMDUtXHRpZiAobnJfcGFnZXMgXHUwMDNlIDEpIHtcbi0tXG5tbS9zaG1lbS5jPTI3NDA9dW5zaWduZWQgbG9uZyBzaG1lbV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5tbS9zaG1lbS5jLTI3NTUtXG5tbS9zaG1lbS5jOjI3NTY6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbm1tL3NobWVtLmMtMjc1Ny1cdFx0cmV0dXJuIGFkZHI7XG4tLVxubW0vc2htZW0uYy0yNzk5LVx0XHRcdCAqL1xubW0vc2htZW0uYzoyODAwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDYwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb2RlIHNlY3Rpb246CgoqKkRpdmluZyBpbnRvIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBgY29sbGFwc2VfZmlsZWAqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBraHVnZXBhZ2VkYCBpbnRlcm5hbHMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBsaW5lcyAyMjUwIHRvIDI3MDAgaW4gYG1tL2todWdlcGFnZWQuY2AuIFRoYXQmIzM5O3MgYSBwcmV0dHkgaGVmdHkgY2h1bmsgb2YgY29kZSwgc28gSSBhbnRpY2lwYXRlIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCB3aXRoIGEgY29yZSBvcGVyYXRpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gcGFnZSBjb2xsYXBzaW5nIG9yIG1heWJlIGRlZnJhZ2dpbmcuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGtodWdlcGFnZWQgd29ya3MsIG15IGh1bmNoIGlzIHRoYXQgdGhpcyBzZWN0aW9uIHdpbGwgaW52b2x2ZSBlaXRoZXIgdGhlIGlkZW50aWZpY2F0aW9uIG9mIGVsaWdpYmxlIHBhZ2VzIGZvciBtZXJnaW5nIG9yIHRoZSBhY3R1YWwgZXhlY3V0aW9uIG9mIHRoZSBjb2xsYXBzaW5nIGxvZ2ljLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoYXQgcmFuZ2UuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgbWFqb3IgcGFydCBvZiB0aGUgd29yayByZWxhdGVkIHRvIHRoZSBtYWluIGxvb3Agb2Yga2h1Z2VwYWdlZCB0byBkbyBpdHMgd29yay4KCkZ1cnRoZXJtb3JlLCBJIGtub3cgYGNvbGxhcHNlX2ZpbGVgIGlzIGNydWNpYWwsIHByb2JhYmx5IHJlbGF0ZWQgdG8gY29sbGFwc2luZyBmaWxlLWJhY2tlZCBtYXBwaW5ncy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgY29sbGFwc2VfZmlsZWAgd2l0aGluIHRoYXQgc3BlY2lmaWMgYXJlYSB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBwcm9jZXNzLiBJIHdhbnQgdG8gc2VlICpob3cqIGl0JiMzOTtzIGludm9rZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIHdoYXQgYXJndW1lbnRzIGl0JiMzOTtzIGdldHRpbmcuIFRoaXMgY29udGV4dCBpcyBlc3NlbnRpYWwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgbWFpbiBraHVnZXBhZ2VkIGxvb3Agd29yay4gTG9va2luZyBhdCB0aG9zZSBsaW5lcyBhbmQgdGhlIGNhbGxzIHRvIGBjb2xsYXBzZV9maWxlYCB3aWxsIGxpa2VseSBnaXZlIG1lIGluc2lnaHQgaW50byBhIHNwZWNpZmljIHNjZW5hcmlvIG9yIGFzcGVjdCBvZiB0aGUgd2hvbGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI1MDpcdHtcbjIyNTE6XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4yMjUyOlx0XHRzdHJ1Y3QgcGFnZSAqZHN0O1xuMjI1MzpcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgKnRtcCwgKm5ld19mb2xpbztcbjIyNTQ6XHRcdHBnb2ZmX3QgaW5kZXggPSAwLCBlbmQgPSBzdGFydCAmIzQzOyBIUEFHRV9QTURfTlI7XG4yMjU1Olx0XHRMSVNUX0hFQUQocGFnZWxpc3QpO1xuMjI1NjpcdFx0WEFfU1RBVEVfT1JERVIoeGFzLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWlfcGFnZXMsIHN0YXJ0LCBIUEFHRV9QTURfT1JERVIpO1xuMjI1NzpcdFx0ZW51bSBzY2FuX3Jlc3VsdCByZXN1bHQgPSBTQ0FOX1NVQ0NFRUQ7XG4yMjU4Olx0XHRpbnQgbnJfbm9uZSA9IDA7XG4yMjU5Olx0XHRib29sIGlzX3NobWVtID0gc2htZW1fZmlsZShmaWxlKTtcbjIyNjA6XHRcdGJvb2wgbmVlZF91bmxvY2sgPSBmYWxzZTtcbjIyNjE6XHRcbjIyNjI6XHRcdC8qXG4yMjYzOlx0XHQgKiBNQURWX0NPTExBUFNFIGlnbm9yZXMgc2htZW0gaHVnZSBjb25maWcsIHNvIGRvIG5vdCBjaGVjayBzaG1lbVxuMjI2NDpcdFx0ICpcbjIyNjU6XHRcdCAqIFRPRE86IG9uY2Ugc2htZW0gYWx3YXlzIGNhbGxzIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcygpIG9uIGl0c1xuMjI2NjpcdFx0ICogbWFwcGluZywgdGhlIHNobWVtIGNoZWNrIGNhbiBiZSByZW1vdmVkLlxuMjI2NzpcdFx0ICovXG4yMjY4Olx0XHRWTV9XQVJOX09OX09OQ0UoIWlzX3NobWVtIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChtYXBwaW5nKSk7XG4yMjY5Olx0XHRWTV9XQVJOX09OX09OQ0Uoc3RhcnQgXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XG4yMjcwOlx0XG4yMjcxOlx0XHRyZXN1bHQgPSBhbGxvY19jaGFyZ2VfZm9saW8oXHUwMDI2bmV3X2ZvbGlvLCBtbSwgY2MsIEhQQUdFX1BNRF9PUkRFUik7XG4yMjcyOlx0XHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcbjIyNzM6XHRcdFx0Z290byBvdXQ7XG4yMjc0Olx0XG4yMjc1Olx0XHQvKlxuMjI3NjpcdFx0ICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93XG4yMjc3Olx0XHQgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuXG4yMjc4Olx0XHQgKi9cbjIyNzk6XHRcdGlmICghaXNfc2htZW0pIHtcbjIyODA6XHRcdFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xuMjI4MTpcdFx0XHRuZWVkX3VubG9jayA9IHRydWU7XG4yMjgyOlx0XHR9XG4yMjgzOlx0XG4yMjg0Olx0XHRtYXBwaW5nX3NldF91cGRhdGUoXHUwMDI2eGFzLCBtYXBwaW5nKTtcbjIyODU6XHRcbjIyODY6XHRcdF9fZm9saW9fc2V0X2xvY2tlZChuZXdfZm9saW8pO1xuMjI4NzpcdFx0aWYgKGlzX3NobWVtKVxuMjI4ODpcdFx0XHRfX2ZvbGlvX3NldF9zd2FwYmFja2VkKG5ld19mb2xpbyk7XG4yMjg5Olx0XHRuZXdfZm9saW8tXHUwMDNlaW5kZXggPSBzdGFydDtcbjIyOTA6XHRcdG5ld19mb2xpby1cdTAwM2VtYXBwaW5nID0gbWFwcGluZztcbjIyOTE6XHRcbjIyOTI6XHRcdC8qXG4yMjkzOlx0XHQgKiBFbnN1cmUgd2UgaGF2ZSBzbG90cyBmb3IgYWxsIHRoZSBwYWdlcyBpbiB0aGUgcmFuZ2UuICBUaGlzIGlzXG4yMjk0Olx0XHQgKiBhbG1vc3QgY2VydGFpbmx5IGEgbm8tb3AgYmVjYXVzZSBtb3N0IG9mIHRoZSBwYWdlcyBtdXN0IGJlIHByZXNlbnRcbjIyOTU6XHRcdCAqL1xuMjI5NjpcdFx0ZG8ge1xuMjI5NzpcdFx0XHR4YXNfbG9ja19pcnEoXHUwMDI2eGFzKTtcbjIyOTg6XHRcdFx0eGFzX2NyZWF0ZV9yYW5nZShcdTAwMjZ4YXMpO1xuMjI5OTpcdFx0XHRpZiAoIXhhc19lcnJvcihcdTAwMjZ4YXMpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjYyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGNvbGxhcHNlX2ZpbGVgIGF0IExpbmUgMjM0MC0yNDAwKioKCk9rYXksIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIHRoYXQgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSByZWdpb24gYXJvdW5kIGxpbmVzIDIzNDAgdG8gMjQwMC4gVGhhdCByYW5nZSBpcyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBwcm9jZXNzaW5nIGhhcHBlbnMsIEkmIzM5O20gZ3Vlc3Npbmcgc29tZSBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBvciBsb2dpYy1pbnRlbnNpdmUgb3BlcmF0aW9uIG9jY3VycyB0aGVyZS4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgYWN0dWFsIGNvcmUgb2YgdGhlIGFsZ29yaXRobSwgb3IgcGVyaGFwcyBzb21lIGRhdGEgbWFuaXB1bGF0aW9uIHN0ZXAgdGhhdCYjMzk7cyBjYXVzaW5nIGlzc3Vlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyBhbnkgY3J1Y2lhbCBsb29wcywgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9yIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbnMgd2hpY2ggYXJlIGxpa2VseSB0byBoYXZlIGEgc2lnbmlmaWNhbnQgaW1wYWN0LiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjM0MDpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjM0MTpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbjIzNDI6XHRcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4yMzQzOlx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM0NDpcdFx0XHRcdH0gZWxzZSB7XG4yMzQ1Olx0XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcbjIzNDY6XHRcdFx0XHRcdGdvdG8geGFfbG9ja2VkO1xuMjM0NzpcdFx0XHRcdH1cbjIzNDg6XHRcdFx0fSBlbHNlIHtcdC8qICFpc19zaG1lbSAqL1xuMjM0OTpcdFx0XHRcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XG4yMzUwOlx0XHRcdFx0XHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEsXG4yMzUxOlx0XHRcdFx0XHRcdFx0ICBtYXBwaW5nLCBpbmRleCk7XG4yMzUyOlx0XHRcdFx0XHRwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVx1MDAzZWhvc3QpLFxuMjM1MzpcdFx0XHRcdFx0XHRcdFx0ICAgIFBBR0VfU0laRSk7XG4yMzU0Olx0XG4yMzU1Olx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM1NjpcdFx0XHRcdFx0LypcbjIzNTc6XHRcdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LlxuMjM1ODpcdFx0XHRcdFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcbjIzNTk6XHRcdFx0XHRcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXG4yMzYwOlx0XHRcdFx0XHQgKi9cbjIzNjE6XHRcdFx0XHRcdGlmIChpbmRleCBcdTAwM2MgZW9mKVxuMjM2MjpcdFx0XHRcdFx0XHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcdTAwMjZyYWN0bCxcbjIzNjM6XHRcdFx0XHRcdFx0XHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xuMjM2NDpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuMjM2NTpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjM2NjpcdFx0XHRcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xuMjM2NzpcdFx0XHRcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbjIzNjg6XHRcdFx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjM2OTpcdFx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjM3MDpcdFx0XHRcdFx0fVxuMjM3MTpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHtcbjIzNzI6XHRcdFx0XHRcdC8qXG4yMzczOlx0XHRcdFx0XHQgKiBUaGlzIHBhZ2UgaXMgZGlydHkgYmVjYXVzZSBpdCBoYXNuJiMzOTt0XG4yMzc0Olx0XHRcdFx0XHQgKiBiZWVuIGZsdXNoZWQgc2luY2UgZmlyc3Qgd3JpdGUuXG4yMzc1Olx0XHRcdFx0XHQgKlxuMjM3NjpcdFx0XHRcdFx0ICogVHJpZ2dlciBhc3luYyBmbHVzaCBmb3IgcmVhZC1vbmx5IGZpbGVzIGFuZFxuMjM3NzpcdFx0XHRcdFx0ICogaG9wZSB0aGUgd3JpdGViYWNrIGlzIGRvbmUgd2hlbiBraHVnZXBhZ2VkXG4yMzc4Olx0XHRcdFx0XHQgKiByZXZpc2l0cyB0aGlzIHBhZ2UuIFdyaXRhYmxlIGZpbGVzIGNhbiBoYXZlXG4yMzc5Olx0XHRcdFx0XHQgKiB0aGVpciBmb2xpb3MgZGlydHkgYXQgYW55IHRpbWU7IGJsaW5kbHlcbjIzODA6XHRcdFx0XHRcdCAqIGZsdXNoaW5nIHRoZW0gd291bGQgY2F1c2UgdW5kZXNpcmFibGVcbjIzODE6XHRcdFx0XHRcdCAqIHN5c3RlbS13aWRlIHdyaXRlYmFjay5cbjIzODI6XHRcdFx0XHRcdCAqXG4yMzgzOlx0XHRcdFx0XHQgKiBUaGlzIGlzIGEgb25lLW9mZiBzaXR1YXRpb24uIFdlIGFyZSBub3RcbjIzODQ6XHRcdFx0XHRcdCAqIGZvcmNpbmcgd3JpdGViYWNrIGluIGxvb3AuXG4yMzg1Olx0XHRcdFx0XHQgKi9cbjIzODY6XHRcdFx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4yMzg3Olx0XHRcdFx0XHRpZiAoIWlub2RlX2lzX29wZW5fZm9yX3dyaXRlKG1hcHBpbmctXHUwMDNlaG9zdCkpXG4yMzg4Olx0XHRcdFx0XHRcdGZpbGVtYXBfZmx1c2gobWFwcGluZyk7XG4yMzg5Olx0XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfRElSVFlfT1JfV1JJVEVCQUNLO1xuMjM5MDpcdFx0XHRcdFx0Z290byB4YV91bmxvY2tlZDtcbjIzOTE6XHRcdFx0XHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuMjM5MjpcdFx0XHRcdFx0eGFzX3VubG9ja19pcnEoXHUwMDI2eGFzKTtcbjIzOTM6XHRcdFx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9ESVJUWV9PUl9XUklURUJBQ0s7XG4yMzk0Olx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjM5NTpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbjIzOTY6XHRcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4yMzk3Olx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM5ODpcdFx0XHRcdH0gZWxzZSB7XG4yMzk5Olx0XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ0NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBsaW5lcyAyNjgwLTI3MTAgb2YgYG1tL2todWdlcGFnZWQuY2AuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGtodWdlcGFnZWQgbG9naWMgcmVzaWRlcywgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgc2VjdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBzY2FubmluZyBhbmQgcG90ZW50aWFsbHkgZnJlZWluZyBvZiBodWdlIHBhZ2VzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIGxpbmVzIGJlY2F1c2UgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBpc3N1ZSBJJiMzOTttIGRlYnVnZ2luZyByZWxhdGVkIHRvIGZyYWdtZW50YXRpb24gYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgd2hlbiBhbGxvY2F0aW5nIGh1Z2UgcGFnZXMsIGFuZCBJIHN1c3BlY3QgdGhlIGFuc3dlciBsaWVzIGhlcmUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaHVnZSBwYWdlcyBhcmUgY29uc2lkZXJlZCByZWNsYWltYWJsZSwgaWYgdGhlIGFjY291bnRpbmcgaXMgY29ycmVjdCwgYW5kIGlmIGFueSBzeW5jaHJvbml6YXRpb24gaXNzdWVzIG1pZ2h0IGJlIHByZXNlbnQgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2UgcGFnZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGtodWdlcGFnZWRgIGRhZW1vbiBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBwYWdlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBmdW5jdGlvbnMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdW5kZXJzdGFuZGluZyBob3cgZWZmaWNpZW50bHkgd2UgYXJlIG1hbmFnaW5nIGh1Z2UgcGFnZXMgYXQgdGhpcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2ODA6XHRcdFx0c2htZW1fdW5jaGFyZ2UobWFwcGluZy1cdTAwM2Vob3N0LCBucl9ub25lKTtcbjI2ODE6XHRcdH1cbjI2ODI6XHRcbjI2ODM6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgdG1wLCBcdTAwMjZwYWdlbGlzdCwgbHJ1KSB7XG4yNjg0Olx0XHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4yNjg1Olx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4yNjg2Olx0XHRcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcbjI2ODc6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjI2ODg6XHRcdH1cbjI2ODk6XHRcbjI2OTA6XHRcdG5ld19mb2xpby1cdTAwM2VtYXBwaW5nID0gTlVMTDtcbjI2OTE6XHRcbjI2OTI6XHRcdGZvbGlvX3VubG9jayhuZXdfZm9saW8pO1xuMjY5MzpcdFx0Zm9saW9fcHV0KG5ld19mb2xpbyk7XG4yNjk0Olx0b3V0OlxuMjY5NTpcdFx0aWYgKG5lZWRfdW5sb2NrKVxuMjY5NjpcdFx0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbjI2OTc6XHRcdFZNX0JVR19PTighbGlzdF9lbXB0eShcdTAwMjZwYWdlbGlzdCkpO1xuMjY5ODpcdFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xuMjY5OTpcdFx0cmV0dXJuIHJlc3VsdDtcbjI3MDA6XHR9XG4yNzAxOlx0XG4yNzAyOlx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuMjcwMzpcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LFxuMjcwNDpcdFx0XHRzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXG4yNzA1Olx0e1xuMjcwNjpcdFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX25vbmUgPSBjb2xsYXBzZV9tYXhfcHRlc19ub25lKGNjLCBOVUxMLCBIUEFHRV9QTURfT1JERVIpO1xuMjcwNzpcdFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX3N3YXAgPSBjb2xsYXBzZV9tYXhfcHRlc19zd2FwKGNjLCBIUEFHRV9QTURfT1JERVIpO1xuMjcwODpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XG4yNzA5Olx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIyMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgY29sbGFwc2VfZmlsZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbiBiZXR0ZXIsIGFuZCB0aGUgZmlyc3QgcGxhY2UgSSBhbHdheXMgc3RhcnQgd2l0aCB0aGF0IGlzIHVuZGVyc3RhbmRpbmcgKndobyogY2FsbHMgaXQuIFdoYXQgb3RoZXIgcGllY2VzIG9mIHRoZSBzeXN0ZW0gYXJlIHJlbHlpbmcgb24gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gZXhhbWluZSB0aGUgY2FsbGluZyBzdHJ1Y3R1cmUg4oCTIGhvdyBpcyBpdCBpbnZva2VkPyBJcyBpdCBhIGNvcmUgdXRpbGl0eSBmdW5jdGlvbiB1c2VkIGFjcm9zcyB0aGUgYm9hcmQsIG9yIGlzIGl0IGlzb2xhdGVkIHRvIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGNvbXBvbmVudD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyB3aWxsIGlsbHVtaW5hdGUgaXRzIHB1cnBvc2UsIGl0cyBpbXBvcnRhbmNlLCBhbmQgaG93IGNoYW5nZXMgdG8gaXQgbWlnaHQgcmlwcGxlIHRocm91Z2ggdGhlIHN5c3RlbS4gSSYjMzk7bSB0aGlua2luZyBhIHRob3JvdWdoIHRyYWNpbmcgb2YgdGhlIGNhbGwgZ3JhcGggaXMgaW4gb3JkZXI7IEkgd2FudCB0byBzZWUgdGhpcyBmdW5jdGlvbiBpbiBjb250ZXh0LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgZGlzY292ZXIgdGhlIGRlcGVuZGVudCByZWxhdGlvbnNoaXBzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgaWRlbnRpZnlpbmcgYWxsIHRoZSBjYWxsZXJzIGFuZCB0aGVuIEkgY2FuIHJlZmluZSBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xsYXBzZV9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0yMTM5PXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyMjMtLyoqXG5tbS9raHVnZXBhZ2VkLmM6MjIyNDogKiBjb2xsYXBzZV9maWxlIC0gY29sbGFwc2UgZmlsZW1hcC90bXBmcy9zaG1lbSBwYWdlcyBpbnRvIGh1Z2Ugb25lLlxubW0va2h1Z2VwYWdlZC5jLTIyMjUtICpcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjI0Ny0gKi9cbm1tL2todWdlcGFnZWQuYzoyMjQ4OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yMjQ5LVx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjk3LVx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG5tbS9raHVnZXBhZ2VkLmM6MjY5ODpcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcbm1tL2todWdlcGFnZWQuYy0yNjk5LVx0cmV0dXJuIHJlc3VsdDtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjcwMj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI3OTktXHRcdH0gZWxzZSB7XG5tbS9raHVnZXBhZ2VkLmM6MjgwMDpcdFx0XHRyZXN1bHQgPSBjb2xsYXBzZV9maWxlKG1tLCBhZGRyLCBmaWxlLCBzdGFydCwgY2MpO1xubW0va2h1Z2VwYWdlZC5jLTI4MDEtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcmVxdWVzdCwgdGhpbmtpbmcgYXMgYW4gZXhwZXJ0IGluIHNvZnR3YXJlIGFuYWx5c2lzL3JldmVyc2UgZW5naW5lZXJpbmc6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBgY29sbGFwc2Vfc2Nhbl9maWxlYCBDYWxsZXIgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBiZWluZyBhc2tlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsZXJzIG9mIGEgZnVuY3Rpb24gbmFtZWQgYGNvbGxhcHNlX3NjYW5fZmlsZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3Mgc3RhcnRzIHdpdGggdGhlIGNvbnRleHQuIElzIHRoaXMgYSBjb2RlIGFuYWx5c2lzIHRhc2s/IEFtIEkgZGVidWdnaW5nPyBBbSBJIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgcGllY2Ugb2Ygc29mdHdhcmU/IEtub3dpbmcgdGhlIGxhcmdlciBwcm9qZWN0IHdvdWxkIGRlZmluaXRlbHkgaGVscCBuYXJyb3cgZG93biB0aGUgcG9zc2liaWxpdGllcy4KCk15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIGZpZ3VyaW5nIG91dCAqd2hlcmUqIHRoaXMgYGNvbGxhcHNlX3NjYW5fZmlsZWAgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBDIGNvZGUsIFB5dGhvbiwgSmF2YVNjcmlwdCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBkaWN0YXRlcyBteSB0b29sc2V0LiBGb3IgQy9DJiM0MzsmIzQzOywgSSYjMzk7ZCByZWFjaCBmb3IgdG9vbHMgbGlrZSBgZ2RiYCwgYG9iamR1bXBgLCBzdGF0aWMgYW5hbHlzaXMgdG9vbHMgKGxpa2UgY2xhbmcmIzM5O3MgYW5hbHlzaXMgcGx1Z2lucyBvciBDb2RlUUwpLCBvciBldmVuIGEgZGlzYXNzZW1ibGVyIGlmIHNvdXJjZSBpc24mIzM5O3QgcmVhZGlseSBhdmFpbGFibGUuIFB5dGhvbiB3b3VsZCBsZW5kIGl0c2VsZiB0byBncmVwLCBhIGRlYnVnZ2VyLCBvciBwb3RlbnRpYWxseSB1c2luZyBhIGNhbGwgZ3JhcGggZ2VuZXJhdG9yLiBJJiMzOTtkIGRlZmluaXRlbHkgYmUgbG9va2luZyBmb3IgdG9vbHMgdGhhdCBjYW4gcGVyZm9ybSBjcm9zcy1yZWZlcmVuY2VzLiBKYXZhU2NyaXB0PyBEZWZpbml0ZWx5IG15IGJyb3dzZXImIzM5O3MgZGV2ZWxvcGVyIHRvb2xzIG9yIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGNvZGUgYW5hbHlzaXMgcGxhdGZvcm0gbGlrZSBzdGF0aWMgYW5hbHlzaXMgdG9vbHMuCgpCZXlvbmQgdGhlIHNwZWNpZmljIHRvb2xzLCB0aGUgZ29hbCBpcyB0byBzeXN0ZW1hdGljYWxseSBsb2NhdGUgZXZlcnkgc2luZ2xlIGNhbGwgc2l0ZSB0byBgY29sbGFwc2Vfc2Nhbl9maWxlYC4gSSYjMzk7ZCBzdGFydCB3aXRoIGEgYnJvYWQgc2VhcmNoLCBtYXliZSB1c2luZyBhIHRleHQgc2VhcmNoIGZvciB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgdGhlbiByZWZpbmluZyBmcm9tIHRoZXJlLiBJ4oCZZCBjb25zaWRlciBhbnkgcHJlZml4ZXMgb3IgbmFtZXNwYWNlcyBpdCBtaWdodCBiZSB3aXRoaW4gdG8gbmFycm93IHRoZSBzZWFyY2guIFRoZSBtb3JlIHNwZWNpZmljIHRoZSBzZWFyY2gsIHRoZSBiZXR0ZXIuCgpJJiMzOTtkIGFsc28gY29uc2lkZXIgYW55IGJ1aWxkIGNvbmZpZ3VyYXRpb25zIG9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgY29uZGl0aW9uYWxseSBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhlIGZ1bmN0aW9uIGNhbGxzLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgYWxsIHBvc3NpYmxlIGV4ZWN1dGlvbiBwYXRocy4gQXJlIHRoZXJlIHByZXByb2Nlc3NvciBtYWNyb3MgdGhhdCBtaWdodCByZWRlZmluZSBvciBjb25kaXRpb25hbGx5IGludm9rZSB0aGUgZnVuY3Rpb24/IEnigJlkIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhvc2UuCgpOZXh0LCBJJiMzOTtkIGV4YW1pbmUgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGF0IGVhY2ggY2FsbCBzaXRlLiBUaGF0JiMzOTtzIGdvaW5nIHRvIGJlIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyAqaG93KiBpdCYjMzk7cyBiZWluZyB1c2VkLiBXaGF0IGRhdGEgaXMgaXQgb3BlcmF0aW5nIG9uPyBXaGF0JiMzOTtzIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgdGhlIGNhbGxzPyBUaGlzIGluZm9ybWF0aW9uIHRlbGxzIG1lIHRoZSBmdW5jdGlvbiYjMzk7cyByZXNwb25zaWJpbGl0eSBhbmQgaXRzIHBvc2l0aW9uIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEkmIzM5O2Qgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBhcmd1bWVudHMgYXMgYSBzYW5pdHkgY2hlY2sgb2YgbXkgZmluZGluZ3MuCgpGaW5hbGx5LCBJJiMzOTtkIHdhbnQgdG8gYnVpbGQgYSBiYXNpYyBjYWxsIGdyYXBoIHRvIHZpc3VhbGl6ZSB0aGUgcmVsYXRpb25zaGlwcy4gV2hlcmUgZG9lcyB0aGUgY2FsbGluZyBjb2RlIHJlc2lkZT8gRG9lcyBpdCBoYXZlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBJcyBgY29sbGFwc2Vfc2Nhbl9maWxlYCBjYWxsZWQgZnJvbSBhIHNpbmdsZSBsb2NhdGlvbiBvciBmcm9tIG11bHRpcGxlIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgY29kZT8gVGhlIGFuc3dlcnMgaGVscCB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiYjMzk7cyBzY29wZSBvZiBpbmZsdWVuY2UgYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xsYXBzZV9zY2FuX2ZpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTIyNDg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNzAxLVxubW0va2h1Z2VwYWdlZC5jOjI3MDI6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxubW0va2h1Z2VwYWdlZC5jLTI3MDMtXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGZpbGUgKmZpbGUsIHBnb2ZmX3Qgc3RhcnQsXG4tLVxubW0va2h1Z2VwYWdlZC5jPTI4MTI9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4MzQtcmV0cnk6XG5tbS9raHVnZXBhZ2VkLmM6MjgzNTpcdHJlc3VsdCA9IGNvbGxhcHNlX3NjYW5fZmlsZShtbSwgYWRkciwgZmlsZSwgcGdvZmYsIGNjKTtcbm1tL2todWdlcGFnZWQuYy0yODM2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBDYWxsZXJzIG9mIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBjb2xsYXBzZV9zaW5nbGVfcG1kYCBpcyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIHBpZWNlcyBvZiBjb2RlIGFyZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAgaW4gYW55IGRlYnVnZ2luZywgcmVmYWN0b3JpbmcsIG9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIGdpdmVzIG1lIGNvbnRleHQg4oCTIGl0IHRlbGxzIG1lICp3aHkqIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgaW1wb3J0YW50LCB3aGF0IGl0cyBleHBlY3RlZCBpbnB1dHMgYXJlLCBhbmQgaG93IGl0cyBvdXRwdXQgaXMgYmVpbmcgdXRpbGl6ZWQuCgpNeSBpbml0aWFsIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGxldmVyYWdlIHRoZSB0b29scyBhdmFpbGFibGUgdG8gbWUuIEkmIzM5O2Qgc3RhcnQgd2l0aCBzdGF0aWMgYW5hbHlzaXMgaWYgaXQmIzM5O3MgYXZhaWxhYmxlLiBBIGNyb3NzLXJlZmVyZW5jZSBzZWFyY2gsIHdoZXRoZXIgdGhyb3VnaCBhbiBJREUsIGEgY29kZSBzZWFyY2ggdG9vbCBsaWtlIGBncmVwYCBvciBgYWdgIChkZXBlbmRpbmcgb24gdGhlIHByb2plY3QgYW5kIGxhbmd1YWdlKSwgb3IgYSBkZWRpY2F0ZWQgZGVwZW5kZW5jeSBhbmFseXplciwgd291bGQgYmUgdGhlIG1vc3QgZWZmaWNpZW50IG1ldGhvZC4gSSYjMzk7bSBsb29raW5nIGZvciBkaXJlY3QgY2FsbHMsIG9mIGNvdXJzZSwgYnV0IGFsc28gaW5kaXJlY3QgY2FsbHMg4oCTIHBlcmhhcHMgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycyBvciBkeW5hbWljIGRpc3BhdGNoIGlmIHRoZSBsYW5ndWFnZSBzdXBwb3J0cyB0aG9zZSBmZWF0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byBiZSBtaW5kZnVsIG9mIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBleGVjdXRpb24gcGF0aHMgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLgoKSWYgc3RhdGljIGFuYWx5c2lzIGlzIGluc3VmZmljaWVudCwgSSYjMzk7bGwgbmVlZCB0byB0dXJuIHRvIGR5bmFtaWMgYW5hbHlzaXMuIEkgbWlnaHQgaW5zdHJ1bWVudCB0aGUgY29kZSB3aXRoIGxvZ2dpbmcgdG8gdHJhY2UgZXhlY3V0aW9uIGZsb3csIG9yIHV0aWxpemUgYSBkZWJ1Z2dlciB0byBzdGVwIHRocm91Z2ggZXhlY3V0aW9uIGFuZCBvYnNlcnZlIHRoZSBjYWxscyBmaXJzdGhhbmQuIFRoZSBjaG9pY2Ugb2YgbWV0aG9kIHdpbGwgZGVwZW5kIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBjb2RlYmFzZSBhbmQgdGhlIGVhc2Ugd2l0aCB3aGljaCBJIGNhbiByZXByb2R1Y2UgdGhlIHJlbGV2YW50IHNjZW5hcmlvcy4gSSYjMzk7ZCBwcm9iYWJseSBhaW0gdG8gY2FwdHVyZSB0aGUgZnVuY3Rpb24gY2FsbHMgaW4gYSBsb2csIHBvdGVudGlhbGx5IGluY2x1ZGluZyB0aGUgaW5wdXQgYXJndW1lbnRzIGZvciBjb250ZXh0LgoKT25jZSBJIGhhdmUgdGhlIGxpc3Qgb2YgY2FsbGVycywgSeKAmWxsIG5lZWQgdG8gYW5hbHl6ZSB0aGVtIGluZGl2aWR1YWxseS4gSSYjMzk7bGwgaW52ZXN0aWdhdGUgZWFjaCBjYWxsZXIsIGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mICp0aGF0KiBjb2RlIGFuZCBob3cgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIHN5c3RlbSBhbmQgaXRzIGRlcGVuZGVuY2llcy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBrZXkgdG8gYW55IGRlZXBlciBpbnZlc3RpZ2F0aW9uLiBUaGlzIHdpbGwgZGljdGF0ZSB0aGUgbmV4dCBjb3Vyc2Ugb2YgYWN0aW9uLCB3aGljaCBjb3VsZCByYW5nZSBmcm9tIG9wdGltaXphdGlvbiwgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJ1ZyBzb3VyY2VzLCBvciBhc3Nlc3NpbmcgcG90ZW50aWFsIGltcGFjdHMgb2YgYSBjaGFuZ2UgdG8gdGhlIGZ1bmN0aW9uIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29sbGFwc2Vfc2luZ2xlX3BtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MjcwMj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4MTEtICovXG5tbS9raHVnZXBhZ2VkLmM6MjgxMjpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yODEzLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCAqbG9ja19kcm9wcGVkLFxuLS1cbm1tL2todWdlcGFnZWQuYz0yODY5PXN0YXRpYyB2b2lkIGNvbGxhcHNlX3NjYW5fbW1fc2xvdCh1bnNpZ25lZCBpbnQgcHJvZ3Jlc3NfbWF4LFxuLS1cbm1tL2todWdlcGFnZWQuYy0yOTM5LVxubW0va2h1Z2VwYWdlZC5jOjI5NDA6XHRcdFx0KnJlc3VsdCA9IGNvbGxhcHNlX3NpbmdsZV9wbWQoa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MsXG5tbS9raHVnZXBhZ2VkLmMtMjk0MS1cdFx0XHRcdFx0XHQgICAgICB2bWEsIFx1MDAyNmxvY2tfZHJvcHBlZCwgY2MpO1xuLS1cbm1tL2todWdlcGFnZWQuYz0zMjEwPWludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2todWdlcGFnZWQuYy0zMjU4LVxubW0va2h1Z2VwYWdlZC5jOjMyNTk6XHRcdHJlc3VsdCA9IGNvbGxhcHNlX3NpbmdsZV9wbWQoYWRkciwgdm1hLCBcdTAwMjZtbWFwX3VubG9ja2VkLCBjYyk7XG5tbS9raHVnZXBhZ2VkLmMtMzI2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NDUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgbWFkdmlzZV9jb2xsYXBzZWAgYW5kIGl0cyBUcmlnZ2VycyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgbWFkdmlzZV9jb2xsYXBzZWAgYW5kIGhvdyBpdCYjMzk7cyBhY3RpdmF0ZWQuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIHByaW1hcnkgdHJpZ2dlciBpcyB0aGUgc3lzdGVtIGNhbGwgYG1hZHZpc2VgIHVzZWQgd2l0aCB0aGUgYE1BRFZfQ09MTEFQU0VgIGZsYWcuIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZW4sIEkgc2VlIGBjb2xsYXBzZV9zY2FuX21tX3Nsb3RgIGFsc28gY2FsbHMgaXQsIGFuZCB0aGF0JiMzOTtzIHRpZWQgdG8gdGhlIGBraHVnZXBhZ2VkYCBrdGhyZWFkLiBTbywgZWZmZWN0aXZlbHksIGBtYWR2aXNlX2NvbGxhcHNlYCBjYW4gYmUgaW5pdGlhdGVkIGRpcmVjdGx5IGJ5IGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCBvbiBmaWxlIG1hcHBpbmdzLCBhcyB3ZWxsIGFzIGJlaW5nIGEgZnVuY3Rpb24gd2l0aGluIHRoZSBga2h1Z2VwYWdlZGAga3RocmVhZCBpdHNlbGYuIFRoaXMgaW1wbGllcyB0aGF0IHRoZXJlIGFyZSB0d28gZGlzdGluY3QgbWVjaGFuaXNtczogdXNlci1sZXZlbCBkaXJlY3RpdmUgdmlhIGBtYWR2aXNlYCBhbmQgYSBrZXJuZWwtbGV2ZWwgcHJvYWN0aXZlIHN0cmF0ZWd5IHRocm91Z2ggYGtodWdlcGFnZWRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBib3RoIHBhdGhzLiBJIHNob3VsZCBleGFtaW5lIHRoZSBmaWxlIG1hcHBpbmcgdXNlIGNhc2Ugd2l0aCBgTUFEVl9DT0xMQVBTRWAgZmlyc3QsIHRoZW4gYXNzZXNzIGhvdyBga2h1Z2VwYWdlZGAgaW50ZXJhY3RzLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgZm9yIGBtYWR2aXNlX2NvbGxhcHNlYCBpbiBtb3JlIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MzE3Mz1ib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKVxuLS1cbm1tL2todWdlcGFnZWQuYy0zMTc3LVxubW0va2h1Z2VwYWdlZC5jOjMxNzg6c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGVudW0gc2Nhbl9yZXN1bHQgcilcbm1tL2todWdlcGFnZWQuYy0zMTc5LXtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzIwOS1cbm1tL2todWdlcGFnZWQuYzozMjEwOmludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0va2h1Z2VwYWdlZC5jLTMyMTEtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgKmxvY2tfZHJvcHBlZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzI5Ny1cdHJldHVybiB0aHBzID09ICgoaGVuZCAtIGhzdGFydCkgXHUwMDNlXHUwMDNlIEhQQUdFX1BNRF9TSElGVCkgPyAwXG5tbS9raHVnZXBhZ2VkLmM6MzI5ODpcdFx0XHQ6IG1hZHZpc2VfY29sbGFwc2VfZXJybm8obGFzdF9mYWlsKTtcbm1tL2todWdlcGFnZWQuYy0zMjk5LX1cbi0tXG5tbS9tYWR2aXNlLmM9MTMzOT1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xMzYzLVx0Y2FzZSBNQURWX0NPTExBUFNFOlxubW0vbWFkdmlzZS5jOjEzNjQ6XHRcdHJldHVybiBtYWR2aXNlX2NvbGxhcHNlKHZtYSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbm1tL21hZHZpc2UuYy0xMzY1LVx0XHRcdFx1MDAyNm1hZHZfYmVoYXZpb3ItXHUwMDNlbG9ja19kcm9wcGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBLZXJuZWwgSHVnZSBQYWdlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBtbS9raHVnZXBhZ2VkLmNgLiBNeSBmaXJzdCBzdG9wIGlzIGdvaW5nIHRvIGJlIHRoZSBgbW0vTWFrZWZpbGVgLiBMZXQmIzM5O3Mgc2VlLi4uIGFoLCByaWdodCBoZXJlOiBgb2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9gLiBUaGF0IHRlbGxzIG1lIGBraHVnZXBhZ2VkYCBpcyBidWlsdCB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpOb3csIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gcGxheS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGBtbS9LY29uZmlnYC4gSXQmIzM5O3MgcG9zc2libGUgdGhlcmUgYXJlIG1vcmUgZ3JhbnVsYXIgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpdHNlbGYgb3IgbWF5YmUgZXZlbiBkaXJlY3RseSByZWxhdGVkIHRvIGBraHVnZXBhZ2VkYCB0aGF0IEkmIzM5O20gbWlzc2luZy4gTmVlZCB0byBiZSB0aG9yb3VnaCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODMyPWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODM0LVxubW0vS2NvbmZpZzo4MzU6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzYtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2OTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSYjMzk7cyBjb25maWd1cmF0aW9uIGlzIG1hbmFnZWQuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgODM1LiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIHRoZSBtb2R1bGUmIzM5O3MgcmVsZXZhbnQgc2V0dGluZ3MgYXJlIGxpa2VseSBpbnRlcndvdmVuIHdpdGggdGhvc2UuIExpbmUgODM1IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGVudHJ5IHBvaW50IHRvIG5hdmlnYXRlIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBmb3Igd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCwgZ2l2ZW4gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIEl0JiMzOTtzIHByb2JhYmx5IGEgZ29vZCBzcG90IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdHMgSSYjMzk7bSBsb29raW5nIGZvciwgYW5kIG1heWJlIGV2ZW4gc29tZSBoaW50cyBvbiBob3cgdGhlIG9wdGlvbnMgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IHN1YnN5c3RlbS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyBJIGNhbiB1bmVhcnRoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzNTpcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4MzY6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIDgzNzpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gODM4Olx0XHRzZWxlY3QgQ09NUEFDVElPTlxuIDgzOTpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuIDg0MDpcdFx0c2VsZWN0IE1NX0lEXG4gODQxOlx0XHRoZWxwXG4gODQyOlx0XHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbiA4NDM6XHRcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxuIDg0NDpcdFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cbiA4NDU6XHRcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcbiA4NDY6XHRcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xuIDg0NzpcdFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXG4gODQ4Olx0XG4gODQ5Olx0XHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxuIDg1MDpcdFxuIDg1MTpcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODUyOlx0XG4gODUzOlx0Y2hvaWNlXG4gODU0Olx0XHRwcm9tcHQgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1wmIzM0O1xuIDg1NTpcdFx0ZGVmYXVsdCBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbiA4NTY6XHRcdGhlbHBcbiA4NTc6XHRcdCAgU2VsZWN0cyB0aGUgc3lzZnMgZGVmYXVsdHMgZm9yIFRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQuXG4gODU4Olx0XG4gODU5Olx0XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG4gODYwOlx0XHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4gODYxOlx0XHRoZWxwXG4gODYyOlx0XHQgIEVuYWJsaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlIGFsd2F5cywgY2FuIGluY3JlYXNlIHRoZVxuIDg2MzpcdFx0ICBtZW1vcnkgZm9vdHByaW50IG9mIGFwcGxpY2F0aW9ucyB3aXRob3V0IGEgZ3VhcmFudGVlZFxuIDg2NDpcdFx0ICBiZW5lZml0IGJ1dCBpdCB3aWxsIHdvcmsgYXV0b21hdGljYWxseSBmb3IgYWxsIGFwcGxpY2F0aW9ucy5cbiA4NjU6XHRcbiA4NjY6XHRcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG4gODY3Olx0XHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuIDg2ODpcdFx0aGVscFxuIDg2OTpcdFx0ICBFbmFibGluZyBUcmFuc3BhcmVudCBIdWdlcGFnZSBtYWR2aXNlLCB3aWxsIG9ubHkgcHJvdmlkZSBhXG4gODcwOlx0XHQgIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGJlbmVmaXQgdG8gdGhlIGFwcGxpY2F0aW9ucyB1c2luZ1xuIDg3MTpcdFx0ICBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpIGJ1dCBpdCB3b24mIzM5O3QgcmlzayB0byBpbmNyZWFzZSB0aGVcbiA4NzI6XHRcdCAgbWVtb3J5IGZvb3RwcmludCBvZiBhcHBsaWNhdGlvbnMgd2l0aG91dCBhIGd1YXJhbnRlZWRcbiA4NzM6XHRcdCAgYmVuZWZpdC5cbiA4NzQ6XHRcbiA4NzU6XHRcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxuIDg3NjpcdFx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4gODc3Olx0XHRoZWxwXG4gODc4Olx0XHQgIERpc2FibGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgYnkgZGVmYXVsdC4gSXQgY2FuIHN0aWxsIGJlXG4gODc5Olx0XHQgIGVuYWJsZWQgYXQgcnVudGltZSB2aWEgc3lzZnMuXG4gODgwOlx0ZW5kY2hvaWNlXG4gODgxOlx0XG4gODgyOlx0Y2hvaWNlXG4gODgzOlx0XHRwcm9tcHQgXCYjMzQ7U2htZW0gaHVnZXBhZ2UgYWxsb2NhdGlvbiBkZWZhdWx0c1wmIzM0O1xuIDg4NDpcdFx0ZGVmYXVsdCBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjQ1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTU2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIHRoZSBtYWluIGNvbmNlcm4gaGVyZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBgY29sbGFwc2VfZmlsZWAgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggZmlsZSBtYXBwaW5nIGFuZCByZWFkYWhlYWQgYWZ0ZXIgdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2FzOiBkb2VzIHRoaXMgbmV3IGNoYW5nZSB0byB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjb2xsYXBzZV9maWxlYCwgZGVwZW5kIG9uIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgbGlrZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBpcyBjZW50cmFsIGhlcmU/IEkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgY29sbGFwc2VfZmlsZWAgaXMgdW5jb25kaXRpb25hbGx5IGRlZmluZWQgd2hlbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQsIHdoaWNoIG1hZGUgaXQgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuCgpJIHRoZW4gZHVnIGludG8gdGhlIGNvZGUsIGZvY3VzaW5nIG9uIHRoZSBsb2NrIGFjcXVpc2l0aW9uIHN0cmF0ZWd5LiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBjaGFuZ2UgaXMgYWJvdXQgdGFraW5nIHRoZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCAqYmVmb3JlKiBhY3F1aXJpbmcgZm9saW8gbG9ja3MuIFRoZSBjb21tZW50IGV4cGxpY2l0bHkgc3RhdGVzIHRoZSByZWFzb246IHJlYWRhaGVhZCBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIG1pZ2h0IGJlIGhvbGRpbmcgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy4gVGhpcyBpcyBhIGNydWNpYWwgZGV0YWlsLiBUaGUgb2xkIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCBpbXBsaWNpdGx5IGhlbGQgdGhpcyBsb2NrLCBidXQgdGhlIG5ldyBjb2RlIHVzZXMgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBpbnN0ZWFkLCBtZWFuaW5nIHRoZSBsb2NrIGlzIG5vdyBoZWxkIGV4cGxpY2l0bHkgZm9yIHRoZSBlbnRpcmUgcm91dGluZS4KCkkgdGhlbiBkaWQgYSBxdWljayBjaGVjayBvbiB3aGVyZSBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgIGlzIHVzZWQgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGFmZmVjdHMgaG90IHBhdGhzLgoKVGhlIHJlYWwgbWVhdCBvZiB0aGUgYW5hbHlzaXMsIGZyb20gbXkgcGVyc3BlY3RpdmUsIGlzIHRoYXQgdGhpcyBwYXRjaCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgbG9ja2luZyBvcmRlciwgYW5kIHdpdGggdGhlIGxvY2sgYmVpbmcgaGVsZCBmb3IgYSBwcm9sb25nZWQgb3BlcmF0aW9uLCB0aGlzIGhhcyBodWdlIGltcGxpY2F0aW9ucy4gQWNxdWlyaW5nIGBtYXBwaW5nLSZndDtpbnZhbGlkYXRlX2xvY2tgIGVhcmxpZXIgYW5kIG1haW50YWluaW5nIGl0IHRocm91Z2hvdXQgYGNvbGxhcHNlX2ZpbGVgLCBlc3BlY2lhbGx5IGFjcm9zcyBmb2xpbyBsb2NrcyBhbmQgcG90ZW50aWFsIGFsbG9jYXRpb25zLCBzZXRzIG9mZiBhbGFybSBiZWxscyBmb3IgcG90ZW50aWFsIGRlYWRsb2NrcywgbG9jayBpbnZlcnNpb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVuaGFuZGxlZCBlcnJvcnMuIEludGVyYWN0aW5nIHdpdGggb3BlcmF0aW9ucyBsaWtlIHRydW5jYXRlLCBmYWxsb2NhdGUsIHBhZ2UgZmF1bHQsIG1lbW9yeSByZWNsYWltLCBvciBsb2NrZGVwIHVuZGVyIHRoZXNlIG5ldyBjb25kaXRpb25zIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciB0aGVzZSBraW5kcyBvZiBwcm9ibGVtcy4KClRoaXMgaXMgYSBjbGVhciBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjb3ZlciB0aGVzZSBhcmVhczoKKiAgIGBjb2xsYXBzZV9maWxlYAoqICAgYGNvbGxhcHNlX3NjYW5fZmlsZWAKKiAgIGBtYWR2aXNlX2NvbGxhcHNlYAoKVGhlc2UgYXJlIGFsbCBkaXJlY3QgdG91Y2ggcG9pbnRzIHdpdGggdGhlIGNoYW5nZS4gVGhpcyBoZWxwcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBhdGhzIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0PTEwMjQ9RXhhbXBsZSBvdXRwdXQuXG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdC0xMDMwLSAgICA1NjM3MzI0OCAgICAgNDczNyBtbS9zbHViLmM6MjI1OSBmdW5jOmFsbG9jX3NsYWJfcGFnZVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdDoxMDMxOiAgICAxNDg4MDc2OCAgICAgMzYzMyBtbS9yZWFkYWhlYWQuYzoyNDcgZnVuYzpwYWdlX2NhY2hlX3JhX3VuYm91bmRlZFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdC0xMDMyLSAgICAxNDQxNzkyMCAgICAgMzUyMCBtbS9tbV9pbml0LmM6MjUzMCBmdW5jOmFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3Q9NjU9RXhhbXBsZSBvdXRwdXQ6OlxuLS1cbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0LTc1LSAgICAgICAgIDE0TSAgICAgMzUyMCBtbS9tbV9pbml0LmM6MjUzMCBmdW5jOmFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdDo3NjogICAgICAgICAxNU0gICAgIDM2NTYgbW0vcmVhZGFoZWFkLmM6MjQ3IGZ1bmM6cGFnZV9jYWNoZV9yYV91bmJvdW5kZWRcbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0LTc3LSAgICAgICAgIDU1TSAgICAgNDg4NyBtbS9zbHViLmM6MjI1OSBmdW5jOmFsbG9jX3NsYWJfcGFnZVxuLS1cbmZzL2YyZnMvZmlsZS5jPTQ3OTQ9c3RhdGljIGludCByZWRpcnR5X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IHBhZ2VfaWR4LCBpbnQgbGVuKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTQ4MDItXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG5mcy9mMmZzL2ZpbGUuYzo0ODAzOlx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoXHUwMDI2cmFjdGwsIGxlbiwgMCk7XG5mcy9mMmZzL2ZpbGUuYy00ODA0LVx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XG4tLVxuZnMvdmVyaXR5L3BhZ2VjYWNoZS5jPTQyPXZvaWQgZ2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5mcy92ZXJpdHkvcGFnZWNhY2hlLmMtNTMtXG5mcy92ZXJpdHkvcGFnZWNhY2hlLmM6NTQ6XHRcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKFx1MDAyNnJhY3RsLCBucl9wYWdlcywgMCk7XG5mcy92ZXJpdHkvcGFnZWNhY2hlLmMtNTUtXHR9XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTQwOD1zdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wge1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MzAtXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxNDMxOnZvaWQgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICosXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDMyLVx0XHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlYWQsIHVuc2lnbmVkIGxvbmcgbG9va2FoZWFkX2NvdW50KTtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9yZWFkYWhlYWQuaC0xMy1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3JlYWRhaGVhZC5oOjE0OlRSQUNFX0VWRU5UKHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvcmVhZGFoZWFkLmgtMTUtXHRUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LCB1bnNpZ25lZCBsb25nIG5yX3RvX3JlYWQsXG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNDg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMzU3LVx0XHRcdFx0ICogaW52YWxpZGF0ZV9sb2NrIGhlbGQgYWJvdmU7IGRvbiYjMzk7dCByZXRha2UgaXQuXG5tbS9raHVnZXBhZ2VkLmM6MjM1ODpcdFx0XHRcdCAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCksIHVubGlrZSB0aGUgcmVhZGFoZWFkXG5tbS9raHVnZXBhZ2VkLmMtMjM1OS1cdFx0XHRcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIzNjEtXHRcdFx0XHRpZiAoaW5kZXggXHUwMDNjIGVvZilcbm1tL2todWdlcGFnZWQuYzoyMzYyOlx0XHRcdFx0XHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcdTAwMjZyYWN0bCxcbm1tL2todWdlcGFnZWQuYy0yMzYzLVx0XHRcdFx0XHRcdG1pbihlbmQsIGVvZikgLSBpbmRleCwgMCk7XG4tLVxubW0vcmVhZGFoZWFkLmM9MTk1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnJhY3RsX2FsbG9jX2ZvbGlvKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4tLVxubW0vcmVhZGFoZWFkLmMtMjA3LS8qKlxubW0vcmVhZGFoZWFkLmM6MjA4OiAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkIC0gU3RhcnQgdW5jaGVja2VkIHJlYWRhaGVhZC5cbm1tL3JlYWRhaGVhZC5jLTIwOS0gKiBAcmFjdGw6IFJlYWRhaGVhZCBjb250cm9sLlxuLS1cbm1tL3JlYWRhaGVhZC5jLTIyMS0gKi9cbm1tL3JlYWRhaGVhZC5jOjIyMjp2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG5tbS9yZWFkYWhlYWQuYy0yMjMtXHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVhZCwgdW5zaWduZWQgbG9uZyBsb29rYWhlYWRfc2l6ZSlcbi0tXG5tbS9yZWFkYWhlYWQuYy0yNDQtXG5tbS9yZWFkYWhlYWQuYzoyNDU6XHR0cmFjZV9wYWdlX2NhY2hlX3JhX3VuYm91bmRlZChtYXBwaW5nLVx1MDAzZWhvc3QsIGluZGV4LCBucl90b19yZWFkLFxubW0vcmVhZGFoZWFkLmMtMjQ2LVx0XHRcdFx0ICAgICAgbG9va2FoZWFkX3NpemUpO1xuLS1cbm1tL3JlYWRhaGVhZC5jLTMxNy19XG5tbS9yZWFkYWhlYWQuYzozMTg6RVhQT1JUX1NZTUJPTF9HUEwocGFnZV9jYWNoZV9yYV91bmJvdW5kZWQpO1xubW0vcmVhZGFoZWFkLmMtMzE5LVxuLS1cbm1tL3JlYWRhaGVhZC5jPTMyNj1zdGF0aWMgdm9pZCBkb19wYWdlX2NhY2hlX3JhKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4tLVxubW0vcmVhZGFoZWFkLmMtMzQ3LVx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xubW0vcmVhZGFoZWFkLmM6MzQ4Olx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQocmFjdGwsIG5yX3RvX3JlYWQsIGxvb2thaGVhZF9zaXplKTtcbm1tL3JlYWRhaGVhZC5jLTM0OS1cdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuLS1cbm1tL3JlYWRhaGVhZC5jPTQ4MT12b2lkIHBhZ2VfY2FjaGVfcmFfb3JkZXIoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbi0tXG5tbS9yZWFkYWhlYWQuYy01MTQtXG5tbS9yZWFkYWhlYWQuYzo1MTU6XHQvKiBTZWUgY29tbWVudCBpbiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpICovXG5tbS9yZWFkYWhlYWQuYy01MTYtXHRub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTgzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIb3QgUGF0aHMgYW5kIFRhcmdldGVkIENvZGUqKgoKT2theSwgc28gYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBpcyBjbGVhcmx5IGEgZnVuY3Rpb24gdGhhdCBnZXRzIGhpdCAqYSBsb3QqIGR1cmluZyBmaWxlIHJlYWRzLiBgZG9fcGFnZV9jYWNoZV9yYWAgY2FsbHMgaXQsIHdoaWNoIG1lYW5zIGFueSBmaWxlIHJlYWRpbmcgdXNpbmcgdGhlIHBhZ2UgY2FjaGUsIGxpa2UgdGhlIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcmVhZGFoZWFkIHBhdGhzLCBhcmUgZ29pbmcgdG8gYmUgdG91Y2hpbmcgdGhpcyBmdW5jdGlvbi4gTm8gbmVlZCB0byBsaXN0IHRoZSBjb21tb24gZnVuY3Rpb25zIGFnYWluLgoKTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIHRoaXMgcGF0Y2gsIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBHaXZlbiB0aGUgY29udGV4dCwgSSB3YW50IHRvIGNvbmZpcm0gdGhlIHByaW1hcnkgdGFyZ2V0cyBvZiB0aGUgcGF0Y2ggYXJlIHdpdGhpbiB0aGUga2h1Z2VwYWdlZCBzdWJzeXN0ZW0uIExldCYjMzk7cyBzZWUuLi4gdGhlIG1vc3QgY3JpdGljYWwgZnVuY3Rpb24gaXMgYGNvbGxhcHNlX2ZpbGVgLCB3aGljaCBpcyBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLiBUaGUgaW1tZWRpYXRlIGNhbGxlcnMgYXJlIGdvaW5nIHRvIGJlIGBjb2xsYXBzZV9zY2FuX2ZpbGVgIGFuZCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAuIEFsc28sIHRoZXJlJiMzOTtzIGBtYWR2aXNlX2NvbGxhcHNlYCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGBNQURWX0NPTExBUFNFYC4KCk5vdywgYmVmb3JlIEkgZGlnIGludG8gc3BlY2lmaWNzLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBjYWxsZXJzIG9mIGBjb2xsYXBzZV9maWxlYC4gVGhpcyBpcyBjcnVjaWFsLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAyNzkwLTI4MTAgaW4gYG1tL2todWdlcGFnZWQuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGlyZWN0IGNhbGxzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc5MDpcdFx0aWYgKHJlc3VsdCA9PSBTQ0FOX1BURV9NQVBQRURfSFVHRVBBR0UpXG4yNzkxOlx0XHRcdGNjLVx1MDAzZXByb2dyZXNzJiM0MzsmIzQzOztcbjI3OTI6XHRcdGVsc2VcbjI3OTM6XHRcdFx0Y2MtXHUwMDNlcHJvZ3Jlc3MgJiM0Mzs9IEhQQUdFX1BNRF9OUjtcbjI3OTQ6XHRcbjI3OTU6XHRcdGlmIChyZXN1bHQgPT0gU0NBTl9TVUNDRUVEKSB7XG4yNzk2Olx0XHRcdGlmIChwcmVzZW50IFx1MDAzYyBIUEFHRV9QTURfTlIgLSBtYXhfcHRlc19ub25lKSB7XG4yNzk3Olx0XHRcdFx0cmVzdWx0ID0gU0NBTl9FWENFRURfTk9ORV9QVEU7XG4yNzk4Olx0XHRcdFx0Y291bnRfdm1fZXZlbnQoVEhQX1NDQU5fRVhDRUVEX05PTkVfUFRFKTtcbjI3OTk6XHRcdFx0fSBlbHNlIHtcbjI4MDA6XHRcdFx0XHRyZXN1bHQgPSBjb2xsYXBzZV9maWxlKG1tLCBhZGRyLCBmaWxlLCBzdGFydCwgY2MpO1xuMjgwMTpcdFx0XHR9XG4yODAyOlx0XHR9XG4yODAzOlx0XG4yODA0Olx0XHR0cmFjZV9tbV9raHVnZXBhZ2VkX3NjYW5fZmlsZShtbSwgZm9saW8sIGZpbGUsIHByZXNlbnQsIHN3YXAsIHJlc3VsdCk7XG4yODA1Olx0XHRyZXR1cm4gcmVzdWx0O1xuMjgwNjpcdH1cbjI4MDc6XHRcbjI4MDg6XHQvKlxuMjgwOTpcdCAqIFRyeSB0byBjb2xsYXBzZSBhIHNpbmdsZSBQTUQgc3RhcnRpbmcgYXQgYSBQTUQgYWxpZ25lZCBhZGRyLCBhbmQgcmV0dXJuXG4yODEwOlx0ICogdGhlIHJlc3VsdHMuXG4yODExOlx0ICovXG4yODEyOlx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4yODEzOlx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sICpsb2NrX2Ryb3BwZWQsXG4yODE0Olx0XHRcdHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcbjI4MTU6XHR7XG4yODE2Olx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cdTAwM2V2bV9tbTtcbjI4MTc6XHRcdGJvb2wgdHJpZ2dlcmVkX3diID0gZmFsc2U7XG4yODE4Olx0XHRlbnVtIHNjYW5fcmVzdWx0IHJlc3VsdDtcbjI4MTk6XHRcdHN0cnVjdCBmaWxlICpmaWxlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjE4MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gRmlsZS1CYWNrZWQgVEhQIENvbGxhcHNlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGNvZGUgbWVudGlvbnMgYGtodWdlcGFnZWRfc2Nhbl9maWxlYCwgYnV0IGhvbGQgb24sIGxpbmUgMjgwNCBzaG93cyBhIHRyYWNlcG9pbnQsIG5vdCB0aGUgYWN0dWFsIGZ1bmN0aW9uLiBUaGUgcmVhbCBmdW5jdGlvbiBuYW1lIGlzIGBjb2xsYXBzZV9zY2FuX2ZpbGVgLiBMZXQmIzM5O3Mgc2VlIHdobyYjMzk7cyBjYWxsaW5nICp0aGF0Ki4KCkEgcXVpY2sgY2hlY2sgc2hvd3MgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIG9uIGxpbmUgMjgzNS4gQW5kLCB0cmFjaW5nIGZ1cnRoZXIgYmFjaywgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGdldHMgY2FsbGVkIGZyb20gYm90aCBgY29sbGFwc2Vfc2Nhbl9tbV9zbG90YCBhbmQgYG1hZHZpc2VfY29sbGFwc2VgLiBJbnRlcmVzdGluZy4KCk5vdywgYXJlIGBraHVnZXBhZ2VkX2RvX3NjYW5gIG9yIGBraHVnZXBhZ2VkX3NjYW5fbW1fc2xvdGAgaW52b2x2ZWQgaGVyZT8gTG9va3MgbGlrZSBga2h1Z2VwYWdlZF9zY2FuX21tX3Nsb3RgIGlzIGNhbGxlZCBieSBga2h1Z2VwYWdlZF9kb19zY2FuYCB3aXRoaW4gdGhhdCBiYWNrZ3JvdW5kIHRocmVhZC4gQW5kLCBjcnVjaWFsbHksIGBtYWR2aXNlX2NvbGxhcHNlYCBoYW5kbGVzIHRoZSBgbWFkdmlzZShNQURWX0NPTExBUFNFKWAgdXNlcnNwYWNlIGNhbGwuIEdvdCBpdC4KCkxldCYjMzk7cyBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3MgdG8gc2VlIHdoYXQmIzM5O3MgbmVlZGVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuIEhlYWQgdG8gYG1tL0tjb25maWdgLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSB0b3AtbGV2ZWwgb3B0aW9uLCBvZiBjb3Vyc2UuIEFueSBkZXBlbmRlbmNpZXM/IEFoLCBgZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgJmFtcDsmYW1wOyAhUFJFRU1QVF9SVGAuIE9uIG91ciBhbWQ2NCB0YXJnZXQsIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgZm9yIGZpbGUtYmFja2VkIFRIUCBjb2xsYXBzZT8gTGV0IG1lIGNoZWNrIGZvciB0aGluZ3MgbGlrZSBgUkVBRF9BSEVBRGAsIGBSRUFEQUhFQURgLCBvciBgRklMRV9USFBgIGluIGBtbS9LY29uZmlnYCBvciBldmVuIGBmcy9LY29uZmlnYC4gVGltZSB0byBkbyBzb21lIGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UkVBREFIRUFEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTg2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgRGVlcCBpbnRvIGBraHVnZXBhZ2VkLmNgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGludG8gYGtodWdlcGFnZWQuY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCYjMzk7cyBiZWhhdmluZyB3aXRoIHJlc3BlY3QgdG8gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbnMsIGFuZCBJIGhhdmUgYSBmZWVsaW5nIHdlJiMzOTtyZSBnb2luZyB0byBzZWUgc29tZSBtb3JlIENPTkZJRyBkZWZpbmVzIGluIHRoZXJlLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIHdlJiMzOTtyZSB0cm91Ymxlc2hvb3RpbmcuIExldCYjMzk7cyBzdGFydCB3aXRoIGBraHVnZXBhZ2VkLmNgIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSB3YW50IHRvIG1ha2UgY2VydGFpbiBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBjb2RlJiMzOTtzIGNvbmRpdGlvbmFsIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0xMzY9c3RhdGljIHN0cnVjdCBraHVnZXBhZ2VkX3NjYW4ga2h1Z2VwYWdlZF9zY2FuID0ge1xuLS1cbm1tL2todWdlcGFnZWQuYy0xMzktXG5tbS9raHVnZXBhZ2VkLmM6MTQwOiNpZmRlZiBDT05GSUdfU1lTRlNcbm1tL2todWdlcGFnZWQuYy0xNDEtc3RhdGljIHNzaXplX3Qgc2Nhbl9zbGVlcF9taWxsaXNlY3Nfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MzQ1PXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAga2h1Z2VwYWdlZF9hdHRyX2dyb3VwID0ge1xuLS1cbm1tL2todWdlcGFnZWQuYy0zNDgtfTtcbm1tL2todWdlcGFnZWQuYzozNDk6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xubW0va2h1Z2VwYWdlZC5jLTM1MC1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTAzMz1zdGF0aWMgaW5saW5lIGdmcF90IGFsbG9jX2h1Z2VwYWdlX2todWdlcGFnZWRfZ2ZwbWFzayh2b2lkKVxuLS1cbm1tL2todWdlcGFnZWQuYy0xMDM3LVxubW0va2h1Z2VwYWdlZC5jOjEwMzg6I2lmZGVmIENPTkZJR19OVU1BXG5tbS9raHVnZXBhZ2VkLmMtMTAzOS1zdGF0aWMgaW50IGNvbGxhcHNlX2ZpbmRfdGFyZ2V0X25vZGUoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQ5MQoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiA1MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2Yga2h1Z2VwYWdlZC5jIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgYGtodWdlcGFnZWQuY2AgZmlsZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSYjMzk7dmUgcmVhbGl6ZWQgdGhhdCB0aGUgY29kZSBvbmx5IGRlcGVuZHMgaW50ZXJuYWxseSBvbiBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCwgYnV0IHRoZXNlIGRvbiYjMzk7dCBzZWVtIHRvIGd1YXJkIHRoZSBgY29sbGFwc2VfZmlsZWAgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGBtbS9NYWtlZmlsZWAsIGl0JiMzOTtzIGNsZWFyIHRoYXQgYGtodWdlcGFnZWQub2AgZ2V0cyBidWlsdCBvbmx5IGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3Mgb3VyIHByaW1hcnkgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudCB0aGVuLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBgRm9jdXNTeW1ib2xzYC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQ6IGBjb2xsYXBzZV9maWxlYCwgYGNvbGxhcHNlX3NjYW5fZmlsZWAsIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGxhcHNlYC4gQXJlIHRoZXNlIHN5bWJvbHMgc3BlY2lmaWMgZW5vdWdoIHRvIHdhcnJhbnQgYXR0ZW50aW9uPyBBYnNvbHV0ZWx5LiBgY29sbGFwc2VfZmlsZWAgaXMgaGlnaGx5IHNwZWNpZmljIGFuZCB3YXMgZGlyZWN0bHkgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBgY29sbGFwc2Vfc2Nhbl9maWxlYCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGFyZSBhbHNvIHZlcnkgdGFyZ2V0ZWQsIGFzIHRoZWlyIGNhbGxlcnMgYXJlIGxpbWl0ZWQgdG8gdGhlIGBraHVnZXBhZ2VkLmNgIG1vZHVsZS4gVGhlbiwgYG1hZHZpc2VfY29sbGFwc2VgIGlzIGEgY2xlYXJseSBkZWZpbmVkIGVudHJ5IHBvaW50IGZvciB0aGUgYE1BRFZfQ09MTEFQU0VgIG9wZXJhdGlvbi4KCk5vbmUgb2YgdGhlc2UgYXJlIGdlbmVyaWMgb3IgYWxsLW92ZXItdGhlLXBsYWNlIGxpa2UgeW91ciBjb21tb24gYGttYWxsb2NgIGNhbGxzLCBwYWdlIGZhdWx0IGhhbmRsZXJzIG9yIGxvY2tzLiBUaGV5IGFsbCBleGVjdXRlIG9ubHkgZHVyaW5nIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBjb2xsYXBzZSwgZWl0aGVyIHRocm91Z2ggdGhlIGBNQURWX0NPTExBUFNFYCBzeXNjYWxsIG9yIHRoZSBga2h1Z2VwYWdlZGAgZGFlbW9uLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIGZ1enppbmcgcmVhc29uaW5nIGFuZCBjb25maWcuIEl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIG1vZGlmaWVzIGBjb2xsYXBzZV9maWxlYCB0byBhY3F1aXJlIGBtYXBwaW5nLSZndDtpbnZhbGlkYXRlX2xvY2tgIGVhcmxpZXIgYW5kIGhvbGQgaXQgdGhyb3VnaG91dCB0aGUgY29sbGFwc2UgcHJvY2Vzcy4gVGhpcyBjaGFuZ2VzIHRoZSBsb2NraW5nIG9yZGVyIGFuZCBmaWxlIHJlYWQgYWhlYWQgYmVoYXZpb3IuIEJlY2F1c2Ugb2YgdGhpcyBsb2NraW5nIG1vZGlmaWNhdGlvbiwgcGx1cyB0aGUgcmVwbGFjZW1lbnQgb2YgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKWAgd2l0aCBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKWAsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbiYjMzk7dCBoYXZlIGxvY2sgaW52ZXJzaW9ucywgZGVhZGxvY2tzLCByYWNlcyB3aXRoIHRydW5jYXRlL2ludmFsaWRhdGlvbiwgb3IgdW5leHBlY3RlZCBlcnJvcnMhIFRoZSBlbmFibGluZyBjb25maWcgaXMganVzdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgbXkgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFyIHRvby4gQWxsIGNoZWNrcyBhcmUgZ3JlZW4uIFRpbWUgdG8gY2FsbCBpdCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29sbGFwc2VfZmlsZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9zY2FuX2ZpbGUmIzM0OywKICAgICYjMzQ7Y29sbGFwc2Vfc2luZ2xlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbGxhcHNlX2ZpbGUoKSBpbiBtbS9raHVnZXBhZ2VkLmMgdG8gYWNxdWlyZSBtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayBlYXJsaWVyIChwcmlvciB0byBsb2NraW5nIGZvbGlvcykgYW5kIGhvbGQgaXQgc2hhcmVkIHRocm91Z2hvdXQgdGhlIGNvbGxhcHNlIG9wZXJhdGlvbiwgcmVwbGFjaW5nIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB3aXRoIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWx0ZXIgbG9ja2luZyBoaWVyYXJjaGllcywgY29uY3VycmVuY3ksIGFuZCByZWFkYWhlYWQgYmVoYXZpb3IgZHVyaW5nIFRIUCBmaWxlIGNvbGxhcHNlIChyZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3Iga2h1Z2VwYWdlZCBzY2FubmluZykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24sIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi9pbnZhbGlkYXRpb24sIGFuZCByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29sbGFwc2VfZmlsZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9zY2FuX2ZpbGUmIzM0OywKICAgICYjMzQ7Y29sbGFwc2Vfc2luZ2xlX3BtZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbGxhcHNlX2ZpbGUoKSBpbiBtbS9raHVnZXBhZ2VkLmMgdG8gYWNxdWlyZSBtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayBlYXJsaWVyIChwcmlvciB0byBsb2NraW5nIGZvbGlvcykgYW5kIGhvbGQgaXQgc2hhcmVkIHRocm91Z2hvdXQgdGhlIGNvbGxhcHNlIG9wZXJhdGlvbiwgcmVwbGFjaW5nIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB3aXRoIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWx0ZXIgbG9ja2luZyBoaWVyYXJjaGllcywgY29uY3VycmVuY3ksIGFuZCByZWFkYWhlYWQgYmVoYXZpb3IgZHVyaW5nIFRIUCBmaWxlIGNvbGxhcHNlIChyZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3Iga2h1Z2VwYWdlZCBzY2FubmluZykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24sIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi9pbnZhbGlkYXRpb24sIGFuZCByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgY29sbGFwc2VfZmlsZSgpYCBpbiBgbW0va2h1Z2VwYWdlZC5jYCB0byBwcmV2ZW50IGEgbG9ja2luZyBkZWFkbG9jayBiZXR3ZWVuIGBtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9ja2AgYW5kIGZvbGlvIGxvY2tzIChlLmcuIGR1cmluZyBjb25jdXJyZW50IHRydW5jYXRpb24pLiBJdCB0YWtlcyBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYCBwcmlvciB0byBmb2xpbyBsb2NraW5nIGFuZCBkaXJlY3RseSBpbnZva2VzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpYCBpbnN0ZWFkIG9mIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgLlxuXG4tIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlcyAoYG5lZWRfdW5sb2NrYCwgYHJhY3RsYCwgYGVvZmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZDogYG5lZWRfdW5sb2NrYCBpcyBpbml0aWFsaXplZCB0byBgZmFsc2VgLCBhbmQgYHJhY3RsYCBpcyBpbml0aWFsaXplZCB2aWEgYERFRklORV9SRUFEQUhFQUQoKWAsIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgYWxsIHVuc3BlY2lmaWVkIHN0cnVjdHVyZSBmaWVsZHMgcGVyIEMgZGVzaWduYXRlZCBpbml0aWFsaXplciBzZW1hbnRpY3MuXG4tIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbHRlciBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgaW9jdGxzLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZC5cbi0gTG9ja2luZyBjb3JyZWN0bmVzcyBhbmQgZGVhZGxvY2tzIGFkZHJlc3NlZCBoZXJlIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBjb25maWdzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJhMjBhOWU4NWMzZmFkMWVjOWRlNmI4MzJjNzBiNGNlYjlhMGFjNWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAxNzowNzozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuYwppbmRleCAxMWZmOThkNTVjNzZlLi5hNWZjYWZkNTc1MDU2IDEwMDY0NAotLS0gYS9tbS9raHVnZXBhZ2VkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va2h1Z2VwYWdlZC5jCkBAIC0yMjU3LDYgJiM0MzsyMjU3LDcgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCWVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0ID0gU0NBTl9TVUNDRUVEOwogCWludCBucl9ub25lID0gMDsKIAlib29sIGlzX3NobWVtID0gc2htZW1fZmlsZShmaWxlKTsKJiM0MzsJYm9vbCBuZWVkX3VubG9jayA9IGZhbHNlOwogCiAJLyoKIAkgKiBNQURWX0NPTExBUFNFIGlnbm9yZXMgc2htZW0gaHVnZSBjb25maWcsIHNvIGRvIG5vdCBjaGVjayBzaG1lbQpAQCAtMjI3MSw2ICYjNDM7MjI3MiwxNSBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpCiAJCWdvdG8gb3V0OwogCiYjNDM7CS8qCiYjNDM7CSAqIFRha2UgaW52YWxpZGF0ZV9sb2NrIGJlZm9yZSBhbnkgZm9saW8gbG9jazogdGhlIHJlYWRhaGVhZCBiZWxvdwomIzQzOwkgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWlzX3NobWVtKSB7CiYjNDM7CQlmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7CiYjNDM7CQluZWVkX3VubG9jayA9IHRydWU7CiYjNDM7CX0KJiM0MzsKIAltYXBwaW5nX3NldF91cGRhdGUoJmFtcDt4YXMsIG1hcHBpbmcpOwogCiAJX19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7CkBAIC0yMzM3LDEwICYjNDM7MjM0NywyMCBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQl9CiAJCX0gZWxzZSB7CS8qICFpc19zaG1lbSAqLwogCQkJaWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpIHsKJiM0MzsJCQkJREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgJmFtcDtmaWxlLSZndDtmX3JhLAomIzQzOwkJCQkJCSAgbWFwcGluZywgaW5kZXgpOwomIzQzOwkJCQlwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLSZndDtob3N0KSwKJiM0MzsJCQkJCQkJICAgIFBBR0VfU0laRSk7CiYjNDM7CiAJCQkJeGFzX3VubG9ja19pcnEoJmFtcDt4YXMpOwotCQkJCXBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgJmFtcDtmaWxlLSZndDtmX3JhLAotCQkJCQkJCSAgZmlsZSwgaW5kZXgsCi0JCQkJCQkJICBlbmQgLSBpbmRleCk7CiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LgomIzQzOwkJCQkgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZAomIzQzOwkJCQkgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJaWYgKGluZGV4ICZsdDsgZW9mKQomIzQzOwkJCQkJcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoJmFtcDtyYWN0bCwKJiM0MzsJCQkJCQltaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApOwogCQkJCS8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi8KIAkJCQlscnVfYWRkX2RyYWluKCk7CiAJCQkJZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpOwpAQCAtMjY3Miw2ICYjNDM7MjY5Miw4IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlmb2xpb191bmxvY2sobmV3X2ZvbGlvKTsKIAlmb2xpb19wdXQobmV3X2ZvbGlvKTsKIG91dDoKJiM0MzsJaWYgKG5lZWRfdW5sb2NrKQomIzQzOwkJZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7CiAJVk1fQlVHX09OKCFsaXN0X2VtcHR5KCZhbXA7cGFnZWxpc3QpKTsKIAl0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb246IFBhdGNoIGluIGBtbS9raHVnZXBhZ2VkLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgcGF0Y2ggZm9yIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgdXNlciBpcyBhc2tpbmcgd2hldGhlciB0aGlzIGNoYW5nZSBuZWNlc3NpdGF0ZXMgZ29pbmcgYmV5b25kIG91ciBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGNvdmVyYWdlLiBNeSBqb2IgaXMgdG8gYXNzZXNzIGlmIHRoZXJlJiMzOTtzIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgS01TQU4gd291bGQgc3BlY2lmaWNhbGx5IGNhdGNoLgoKRmlyc3QsIEkgbmVlZCB0byBrZWVwIHRoZSBydWxlcyBmcm9udCBhbmQgY2VudGVyOiBLQVNBTiBjb3ZlcnMgT09CLCBVQUYsIGV0Yy47IExPQ0tERVAgaGFuZGxlcyBsb2NraW5nIGlzc3VlczsgVUIgc2FuaXRpemVycyBsb29rIGF0IHVuZGVmaW5lZCBiZWhhdmlvcjsgYW5kIEtNU0FOJiMzOTtzIHNwZWNpYWx0eSBpcyBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGJvdGggb24gdGhlIHN0YWNrLCBoZWFwLCBhbmQgcGFnZSBhbGxvY2F0aW9ucywgYW5kIGFueSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuIENydWNpYWxseSwgSSYjMzk7bSAqbm90KiBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgIGlmIEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBzdGFuZGFyZCB0b29scyB3b3VsZCBhbHJlYWR5IGZpbmQgdGhlIGJ1Zy4KCkkgbmVlZCB0byBmbGFnIGBOZWVkc0tNU0FOPXRydWVgIGlmIHRoZSBwYXRjaCB0b3VjaGVzIGFueSBvZiB0aGVzZToKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMvcGFkZGluZyBtaWdodCBiZSB1bmluaXRpYWxpemVkLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLgo0LiAgQm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHdoaWNoIG1pZ2h0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzLgoKQ29udmVyc2VseSwgSSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGlmOgoqICAgVGhlIGNvZGUgY2hhbmdlcyByaXNrIG91dC1vZi1ib3VuZHMsIG92ZXJmbG93cywgTlVMTCBkZXJlZmVyZW5jZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKEtBU0FOIGhhbmRsZXMgdGhlc2UpLgoqICAgQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkL2luaXRpYWxpemVkIGJlZm9yZSB1c2UuCiogICBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLiBJdCYjMzk7cyBpbiBgY29sbGFwc2VfZmlsZSgpYCB3aXRoaW4gdGhlIGtodWdlcGFnZWQgbW9kdWxlLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGxvY2tpbmcgYW5kIHJlYWRhaGVhZCBvcGVyYXRpb25zLiBBIG5ldyBgbmVlZF91bmxvY2tgIHZhcmlhYmxlIGlzIGludHJvZHVjZWQsIGFuZCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgbm93IHRha2VzIGBpbnZhbGlkYXRlX2xvY2tgIGJlZm9yZSBhbnkgZm9saW8gbG9jaywgd2hpY2ggaXMgdGhlbiB1bmxvY2tlZCBhdCB0aGUgZW5kLiBUaGUgY2hhbmdlIGludHJvZHVjZXMgYSBgREVGSU5FX1JFQURBSEVBRGAgbWFjcm8gYW5kIHNvbWUgbG9naWMgaW52b2x2aW5nIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpYCwgcmVwbGFjaW5nIGFuIG9sZGVyIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgLgoKSSBuZWVkIHRvIHJlYWQgdGhpcyBtYWNybyBhbmQgdGhlIGNhbGxzIGl0IG1ha2VzIHRvIGdldCB0byB0aGUgdHJ1dGggb2YgdGhpcy4gQmFzZWQgb24gbXkgcXVpY2sgc2NhbiwgdGhlIGNvZGUgaXMgdG91Y2hpbmcgdGhlIGZpbGUgbWFwcGluZyBhbmQgZm9saW9zLCB3aGljaCBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlmIHRoZSBzdHJ1Y3R1cmVzIGFuZCBwYWdlcyBhcmUgbm90IHNldCBjb3JyZWN0bHkuIFRoZSByZWFkYWhlYWQgbG9naWMgYW5kIHRoZSBsb2NraW5nIGNoYW5nZSBhcmUgdGhlIGhvdCBzcG90cyBJIG5lZWQgdG8gdmVyaWZ5LiBJIHdpbGwgbG9vayB1cCBgREVGSU5FX1JFQURBSEVBRGAgdG8gdmVyaWZ5LiBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gdG8gc2VlIHdoYXQgdGhlIHJlYWRhaGVhZCBsb2dpYyBpcyBkb2luZyBhbmQgd2hhdCBkYXRhIGl0JiMzOTtzIHRvdWNoaW5nLiBJcyB0aGVyZSBhbnkgY2hhbmNlIHRoYXQgdGhlIHBhdGNoIGFsbG93cyB1bmluaXRpYWxpemVkIGRhdGEgdG8gbGVhayB0byB1c2VyIHNwYWNlPyBJIHN1c3BlY3QgdGhhdCBiYXNlZCBvbiBteSBxdWljayByZWFkIHRoZSByaXNrIGlzIGxvdywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBERUZJTkVfUkVBREFIRUFEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZW1hcC5oPTE0MDg9c3RydWN0IHJlYWRhaGVhZF9jb250cm9sIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDIwLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTQyMTojZGVmaW5lIERFRklORV9SRUFEQUhFQUQocmFjdGwsIGYsIHIsIG0sIGkpXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQyMi1cdHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCByYWN0bCA9IHtcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgUmVhZGFoZWFkIE1hY3JvKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYERFRklORV9SRUFEQUhFQURgIGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJJiMzOTt2ZSBiZWVuIHdvcmtpbmcgd2l0aCBwYWdlIGNhY2hpbmcgYW5kIHJlYWRhaGVhZCByZWNlbnRseSwgYW5kIHRoZXJlJiMzOTtzIGEgcGFydGljdWxhciBhc3BlY3QgdGhhdCBJIHdhbnQgdG8gcmV2aWV3LiBJdCBsb29rcyBsaWtlIGxpbmUgMTQyMCBvZiBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgIGlzIHdoZXJlIHRoZSByZWxldmFudCBkZWZpbml0aW9uIHNob3VsZCBiZS4gTGV0JiMzOTtzIHB1bGwgdGhhdCBmaWxlIHVwIGFuZCBnZXQgYSBjbG9zZXIgbG9vayBhdCB3aGF0IHRoZSBtYWNybyBpcyBkb2luZyB1bmRlciB0aGUgaG9vZCwgSSYjMzk7bSBzdXJlIEkmIzM5O2xsIHJlY2FsbCBxdWlja2x5IG9uY2UgSSBoYXZlIHRoZSBzb3VyY2UgaW4gZnJvbnQgb2YgbWUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGluc2lnaHQgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZW1hcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDEwOlx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbjE0MTE6XHRcdHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYTtcbjE0MTI6XHQvKiBwcml2YXRlOiB1c2UgdGhlIHJlYWRhaGVhZF8qIGFjY2Vzc29ycyBpbnN0ZWFkICovXG4xNDEzOlx0XHRwZ29mZl90IF9pbmRleDtcbjE0MTQ6XHRcdHVuc2lnbmVkIGludCBfbnJfcGFnZXM7XG4xNDE1Olx0XHR1bnNpZ25lZCBpbnQgX2JhdGNoX2NvdW50O1xuMTQxNjpcdFx0Ym9vbCBkcm9wYmVoaW5kO1xuMTQxNzpcdFx0Ym9vbCBfd29ya2luZ3NldDtcbjE0MTg6XHRcdHVuc2lnbmVkIGxvbmcgX3BmbGFncztcbjE0MTk6XHR9O1xuMTQyMDpcdFxuMTQyMTpcdCNkZWZpbmUgREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZiwgciwgbSwgaSlcdFx0XHRcdFxcXG4xNDIyOlx0XHRzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgcmFjdGwgPSB7XHRcdFx0XHRcXFxuMTQyMzpcdFx0XHQuZmlsZSA9IGYsXHRcdFx0XHRcdFx0XFxcbjE0MjQ6XHRcdFx0Lm1hcHBpbmcgPSBtLFx0XHRcdFx0XHRcdFxcXG4xNDI1Olx0XHRcdC5yYSA9IHIsXHRcdFx0XHRcdFx0XFxcbjE0MjY6XHRcdFx0Ll9pbmRleCA9IGksXHRcdFx0XHRcdFx0XFxcbjE0Mjc6XHRcdH1cbjE0Mjg6XHRcbjE0Mjk6XHQjZGVmaW5lIFZNX1JFQURBSEVBRF9QQUdFU1x0KFNaXzEyOEsgLyBQQUdFX1NJWkUpXG4xNDMwOlx0XG4xNDMxOlx0dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKixcbjE0MzI6XHRcdFx0dW5zaWduZWQgbG9uZyBucl90b19yZWFkLCB1bnNpZ25lZCBsb25nIGxvb2thaGVhZF9jb3VudCk7XG4xNDMzOlx0dm9pZCBwYWdlX2NhY2hlX3N5bmNfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICosIHVuc2lnbmVkIGxvbmcgcmVxX2NvdW50KTtcbjE0MzQ6XHR2b2lkIHBhZ2VfY2FjaGVfYXN5bmNfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICosIHN0cnVjdCBmb2xpbyAqLFxuMTQzNTpcdFx0XHR1bnNpZ25lZCBsb25nIHJlcV9jb3VudCk7XG4xNDM2Olx0dm9pZCByZWFkYWhlYWRfZXhwYW5kKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4xNDM3Olx0XHRcdCAgICAgIGxvZmZfdCBuZXdfc3RhcnQsIHNpemVfdCBuZXdfbGVuKTtcbjE0Mzg6XHRcbjE0Mzk6XHQvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ1NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHJhY3RsYCBJbml0aWFsaXphdGlvbiBhbmQgS2h1Z2VwYWdlZCoqCgpPa2F5LCBzbyBgREVGSU5FX1JFQURBSEVBRGAgaXMgc2V0dGluZyB1cCBgcmFjdGxgLiBUaGUga2V5IGhlcmUgaXMgdGhlIGluaXRpYWxpemVycy4gQnkgZGVzaWduLCBhbnkgZmllbGRzIEkgZG9uJiMzOTt0IGV4cGxpY2l0bHkgc3BlY2lmeSBnZXQgemVyb2VkIG91dCwgdGhhbmtzIHRvIEMgc2VtYW50aWNzLiBUaGF0IGdpdmVzIG1lIGEgY2xlYW4gc3RhcnRpbmcgcG9pbnQuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgcmVhbCB3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgY29sbGFwc2VfZmlsZWAgd2l0aGluIHRoZSBjb250ZXh0IG9mIGtodWdlcGFnZWQuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIGFyb3VuZCBsaW5lcyAyMjUwIHRvIDI3MDAgaW4gYG1tL2todWdlcGFnZWQuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0LCB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBsb29rIHRvIGZpbmQgdGhlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBmaWxlIGNvbGxhcHNpbmcgd29ya3Mgd2l0aGluIGtodWdlcGFnZWQuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjUwOlx0e1xuMjI1MTpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbjIyNTI6XHRcdHN0cnVjdCBwYWdlICpkc3Q7XG4yMjUzOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqdG1wLCAqbmV3X2ZvbGlvO1xuMjI1NDpcdFx0cGdvZmZfdCBpbmRleCA9IDAsIGVuZCA9IHN0YXJ0ICYjNDM7IEhQQUdFX1BNRF9OUjtcbjIyNTU6XHRcdExJU1RfSEVBRChwYWdlbGlzdCk7XG4yMjU2Olx0XHRYQV9TVEFURV9PUkRFUih4YXMsIFx1MDAyNm1hcHBpbmctXHUwMDNlaV9wYWdlcywgc3RhcnQsIEhQQUdFX1BNRF9PUkRFUik7XG4yMjU3Olx0XHRlbnVtIHNjYW5fcmVzdWx0IHJlc3VsdCA9IFNDQU5fU1VDQ0VFRDtcbjIyNTg6XHRcdGludCBucl9ub25lID0gMDtcbjIyNTk6XHRcdGJvb2wgaXNfc2htZW0gPSBzaG1lbV9maWxlKGZpbGUpO1xuMjI2MDpcdFx0Ym9vbCBuZWVkX3VubG9jayA9IGZhbHNlO1xuMjI2MTpcdFxuMjI2MjpcdFx0LypcbjIyNjM6XHRcdCAqIE1BRFZfQ09MTEFQU0UgaWdub3JlcyBzaG1lbSBodWdlIGNvbmZpZywgc28gZG8gbm90IGNoZWNrIHNobWVtXG4yMjY0Olx0XHQgKlxuMjI2NTpcdFx0ICogVE9ETzogb25jZSBzaG1lbSBhbHdheXMgY2FsbHMgbWFwcGluZ19zZXRfbGFyZ2VfZm9saW9zKCkgb24gaXRzXG4yMjY2Olx0XHQgKiBtYXBwaW5nLCB0aGUgc2htZW0gY2hlY2sgY2FuIGJlIHJlbW92ZWQuXG4yMjY3Olx0XHQgKi9cbjIyNjg6XHRcdFZNX1dBUk5fT05fT05DRSghaXNfc2htZW0gXHUwMDI2XHUwMDI2ICFtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KG1hcHBpbmcpKTtcbjIyNjk6XHRcdFZNX1dBUk5fT05fT05DRShzdGFydCBcdTAwMjYgKEhQQUdFX1BNRF9OUiAtIDEpKTtcbjIyNzA6XHRcbjIyNzE6XHRcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcdTAwMjZuZXdfZm9saW8sIG1tLCBjYywgSFBBR0VfUE1EX09SREVSKTtcbjIyNzI6XHRcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxuMjI3MzpcdFx0XHRnb3RvIG91dDtcbjIyNzQ6XHRcbjIyNzU6XHRcdC8qXG4yMjc2Olx0XHQgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3dcbjIyNzc6XHRcdCAqIG5lZWRzIGl0LCBhbmQgdHJ1bmNhdGUgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy5cbjIyNzg6XHRcdCAqL1xuMjI3OTpcdFx0aWYgKCFpc19zaG1lbSkge1xuMjI4MDpcdFx0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG4yMjgxOlx0XHRcdG5lZWRfdW5sb2NrID0gdHJ1ZTtcbjIyODI6XHRcdH1cbjIyODM6XHRcbjIyODQ6XHRcdG1hcHBpbmdfc2V0X3VwZGF0ZShcdTAwMjZ4YXMsIG1hcHBpbmcpO1xuMjI4NTpcdFxuMjI4NjpcdFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XG4yMjg3Olx0XHRpZiAoaXNfc2htZW0pXG4yMjg4Olx0XHRcdF9fZm9saW9fc2V0X3N3YXBiYWNrZWQobmV3X2ZvbGlvKTtcbjIyODk6XHRcdG5ld19mb2xpby1cdTAwM2VpbmRleCA9IHN0YXJ0O1xuMjI5MDpcdFx0bmV3X2ZvbGlvLVx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xuMjI5MTpcdFxuMjI5MjpcdFx0LypcbjIyOTM6XHRcdCAqIEVuc3VyZSB3ZSBoYXZlIHNsb3RzIGZvciBhbGwgdGhlIHBhZ2VzIGluIHRoZSByYW5nZS4gIFRoaXMgaXNcbjIyOTQ6XHRcdCAqIGFsbW9zdCBjZXJ0YWlubHkgYSBuby1vcCBiZWNhdXNlIG1vc3Qgb2YgdGhlIHBhZ2VzIG11c3QgYmUgcHJlc2VudFxuMjI5NTpcdFx0ICovXG4yMjk2Olx0XHRkbyB7XG4yMjk3Olx0XHRcdHhhc19sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjI5ODpcdFx0XHR4YXNfY3JlYXRlX3JhbmdlKFx1MDAyNnhhcyk7XG4yMjk5Olx0XHRcdGlmICgheGFzX2Vycm9yKFx1MDAyNnhhcykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUgc25pcHBldC4KCioqQW5hbHl6aW5nIHRoZSBSZWFkLUFoZWFkIFN0cmF0ZWd5IENvbXBhcmlzb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyByZWFkLWFoZWFkIGxvZ2ljIGJldHRlci4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZGVsdGEgYmV0d2VlbiBjYWxscyB0byBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAgYW5kIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAuIEkgd2FudCB0byBpZGVudGlmeSAqZXhhY3RseSogd2hhdCBkaWZmZXJlbnRpYXRlcyB0aGVpciBiZWhhdmlvcnMuIE15IHRoaW5raW5nIGlzIHRoYXQgYnkgdW5kZXJzdGFuZGluZyB0aGUgY29udHJhc3RpbmcgbG9naWMgaW4gdGhlc2UgZnVuY3Rpb25zLCBJIGNhbiB0aGVuIGJldHRlciB1bmRlcnN0YW5kIHRoZSBpbnRlbnRpb24gb2YgdGhlIGNvZGUuIFNvLCBmaXJzdCwgSSBuZWVkIGEgcHJlY2lzZSBkZWZpbml0aW9uIG9mIHRoZWlyIGluZGl2aWR1YWwgZnVuY3Rpb25hbGl0eS4gTGV0IG1lIHB1bGwgdXAgdGhlIGRlZmluaXRpb25zIGZvciBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAgYW5kIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgcmlnaHQgbm93LiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZXkgaGFuZGxlIHN5bmNocm9ub3VzIHZlcnN1cyBhc3luY2hyb25vdXMgcmVhZHMsIHRoZSBhbW91bnQgb2YgZGF0YSB0aGV5IHByZWZldGNoLCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggb25lIGlzIGNob3NlbiBvdmVyIHRoZSBvdGhlci4gVGhpcyBpcyBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIHRoZSByZWFkIHBhdGgsIGVzcGVjaWFsbHkgdW5kZXIgdmFyeWluZyBJL08gbG9hZC4gVGhpcyBkaXJlY3QgY29tcGFyaXNvbiBpcyB0aGUga2V5IHRvIHNwb3R0aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODU5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNrIGRvd24gaW5zdGFuY2VzIG9mIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBzZWFyY2g7IEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBpdCBtZXRob2RpY2FsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyB1c2FnZSwgaXRzIGNvbnRleHQsIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIHVzZSBhIHJvYnVzdCBzZWFyY2ggdG9vbCDigJMgc29tZXRoaW5nIHRoYXQgY2FuIGhhbmRsZSBhIGxhcmdlIHByb2plY3QgYW5kIG9mZmVycyBnb29kIGNyb3NzLXJlZmVyZW5jaW5nIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHdoZXJlIHRoaXMgbGlrZWx5IHNpdHM6IGtlcm5lbCBjb3JlPyBmaWxlc3lzdGVtIGRyaXZlcnM/IGRldmljZSBkcml2ZXJzPyBvciBtYXliZSBldmVuIGluIHNvbWUgb2JzY3VyZSBuZXR3b3JrIHN1YnN5c3RlbSBjb2RlPyBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGNvZGViYXNlLCB0aGlzIG1pZ2h0IHRha2UgYSBiaXQgb2YgdGltZSwgc28gSSYjMzk7bGwgbmVlZCB0byBidWRnZXQgYWNjb3JkaW5nbHkuIE9uY2UgSSBoYXZlIHRoZSByZXN1bHRzLCBJJiMzOTtsbCBmaWx0ZXIgZm9yIGJvdGggZGlyZWN0IGNhbGxzIGFuZCBhbnkgaW5kaXJlY3QgdXNhZ2UgdmlhIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgdXNlIGNhc2VzOyB0aGlzIG1pZ2h0IGJlIGEga2V5IGZ1bmN0aW9uLCBidXQgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgZnVuY3Rpb24gc2lnbmF0dXJlLCBqdXN0IGluIGNhc2UgdGhlcmUgYXJlIHZhcmlhdGlvbnMgb3Igc3BlY2lmaWMgaW5jbHVkZXMgdGhhdCBhcmUgcmVsZXZhbnQuIEFmdGVyIEkmIzM5O3ZlIGNvbXBpbGVkIG15IGhpdCBsaXN0LCBJJiMzOTtsbCBsb29rIGludG8gcmV2aWV3aW5nIGVhY2ggbG9jYXRpb24gdG8gcHJvcGVybHkgdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyBzZWFyY2ggaXMgdGhlIG5lY2Vzc2FyeSBmaXJzdCBzdGVwLCBidXQgaXQmIzM5O3Mgb25seSB0aGUgc3RhcnQgb2Ygd2hhdCBuZWVkcyB0byBiZSBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J0cmZzL2RlZnJhZy5jPTEyNjE9c3RhdGljIGludCBkZWZyYWdfb25lX2NsdXN0ZXIoc3RydWN0IGJ0cmZzX2lub2RlICppbm9kZSxcbi0tXG5mcy9idHJmcy9kZWZyYWcuYy0xMzAyLVxuZnMvYnRyZnMvZGVmcmFnLmM6MTMwMzpcdFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChpbm9kZS1cdTAwM2V2ZnNfaW5vZGUuaV9tYXBwaW5nLFxuZnMvYnRyZnMvZGVmcmFnLmMtMTMwNC1cdFx0XHRcdHJhLCBOVUxMLCBlbnRyeS1cdTAwM2VzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbi0tXG5mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmM9MzY3PXN0YXRpYyB2b2lkIHJlYWRhaGVhZF9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYy0zNzQtXG5mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmM6Mzc1Olx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChpbm9kZS1cdTAwM2VpX21hcHBpbmcsIFx1MDAyNnJhLCBOVUxMLCAwLCBsYXN0X2luZGV4KTtcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYy0zNzYtfVxuLS1cbmZzL2J0cmZzL3JlbG9jYXRpb24uYz0yOTAzPXN0YXRpYyBpbnQgcmVsb2NhdGVfb25lX2ZvbGlvKHN0cnVjdCByZWxvY19jb250cm9sICpyYyxcbi0tXG5mcy9idHJmcy9yZWxvY2F0aW9uLmMtMjkzNi1cdFx0aWYgKCF1c2VfcnN0KVxuZnMvYnRyZnMvcmVsb2NhdGlvbi5jOjI5Mzc6XHRcdFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChpbm9kZS1cdTAwM2VpX21hcHBpbmcsIHJhLCBOVUxMLFxuZnMvYnRyZnMvcmVsb2NhdGlvbi5jLTI5MzgtXHRcdFx0XHRcdFx0ICBpbmRleCwgbGFzdF9pbmRleCAmIzQzOyAxIC0gaW5kZXgpO1xuLS1cbmZzL2J0cmZzL3NlbmQuYz01MTcwPXN0YXRpYyBpbnQgcHV0X2ZpbGVfZGF0YShzdHJ1Y3Qgc2VuZF9jdHggKnNjdHgsIHU2NCBvZmZzZXQsIHUzMiBsZW4pXG4tLVxuZnMvYnRyZnMvc2VuZC5jLTUxOTEtXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG5mcy9idHJmcy9zZW5kLmM6NTE5MjpcdFx0XHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsXG5mcy9idHJmcy9zZW5kLmMtNTE5My1cdFx0XHRcdFx0XHQgIFx1MDAyNnNjdHgtXHUwMDNlcmEsIE5VTEwsIGluZGV4LFxuLS1cbmZzL2J0cmZzL3NlbmQuYz01NjAwPXN0YXRpYyBpbnQgc2VuZF9leHRlbnRfZGF0YShzdHJ1Y3Qgc2VuZF9jdHggKnNjdHgsIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLFxuLS1cbmZzL2J0cmZzL3NlbmQuYy01NjYxLVx0XHQgKiBwYWdlcyBmcm9tIGJleW9uZCB0aGF0IHJhbmdlIChzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yXG5mcy9idHJmcy9zZW5kLmM6NTY2MjpcdFx0ICogcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpKSwgc28gaXQgd291bGQgbm90IGJlIHJlbGlhYmxlLFxuZnMvYnRyZnMvc2VuZC5jLTU2NjMtXHRcdCAqIGJlY2F1c2UgYWZ0ZXIgcmVhZGluZyB0aGUgZmlyc3QgZXh0ZW50IGZ1dHVyZSBjYWxscyB0b1xuLS1cbmZzL2J0cmZzL3NlbmQuYy01Njk2LVx0XHQgKlxuZnMvYnRyZnMvc2VuZC5jOjU2OTc6XHRcdCAqIFdoZW4gd2UgYXNrIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB0byByZWFkIGV4dGVudCBBLCBpdFxuZnMvYnRyZnMvc2VuZC5jLTU2OTgtXHRcdCAqIG1heSBhbHNvIHRyaWdnZXIgcmVhZHMgZm9yIHBhZ2VzIG9mIGV4dGVudCBCLiBJZiB3ZSBhcmUgZG9pbmdcbi0tXG5mcy9jcmFtZnMvaW5vZGUuYz0xOTI9c3RhdGljIHZvaWQgKmNyYW1mc19ibGtkZXZfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuLS1cbmZzL2NyYW1mcy9pbm9kZS5jLTIyNi1cdGZpbGVfcmFfc3RhdGVfaW5pdChcdTAwMjZyYSwgbWFwcGluZyk7XG5mcy9jcmFtZnMvaW5vZGUuYzoyMjc6XHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIFx1MDAyNnJhLCBOVUxMLCBibG9ja25yLCBCTEtTX1BFUl9CVUYpO1xuZnMvY3JhbWZzL2lub2RlLmMtMjI4LVxuLS1cbmZzL2Vyb2ZzL2Rpci5jPTQ5PXN0YXRpYyBpbnQgZXJvZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4tLVxuZnMvZXJvZnMvZGlyLmMtNzktXHRcdFx0aWYgKHBhZ2VzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiAhcmFfaGFzX2luZGV4KHJhLCBpZHgpKVxuZnMvZXJvZnMvZGlyLmM6ODA6XHRcdFx0XHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKGRpci1cdTAwM2VpX21hcHBpbmcsIHJhLFxuZnMvZXJvZnMvZGlyLmMtODEtXHRcdFx0XHRcdFx0XHQgIGYsIGlkeCwgcGFnZXMpO1xuLS1cbmZzL2V4dDQvZGlyLmM9MTMwPXN0YXRpYyBpbnQgZXh0NF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbi0tXG5mcy9leHQ0L2Rpci5jLTE5OS1cdFx0XHRpZiAoIXJhX2hhc19pbmRleChcdTAwMjZmaWxlLVx1MDAzZWZfcmEsIGluZGV4KSlcbmZzL2V4dDQvZGlyLmM6MjAwOlx0XHRcdFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChcbmZzL2V4dDQvZGlyLmMtMjAxLVx0XHRcdFx0XHRzYi1cdTAwM2VzX2JkZXYtXHUwMDNlYmRfbWFwcGluZyxcbi0tXG5mcy9mMmZzL2Rpci5jPTEwNjU9c3RhdGljIGludCBmMmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuLS1cbmZzL2YyZnMvZGlyLmMtMTEwNC1cdFx0aWYgKG5wYWdlcyAtIG4gXHUwMDNlIDEgXHUwMDI2XHUwMDI2ICFyYV9oYXNfaW5kZXgocmEsIG4pKVxuZnMvZjJmcy9kaXIuYzoxMTA1Olx0XHRcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCByYSwgZmlsZSwgbixcbmZzL2YyZnMvZGlyLmMtMTEwNi1cdFx0XHRcdG1pbihucGFnZXMgLSBuLCAocGdvZmZfdClNQVhfRElSX1JBX1BBR0VTKSk7XG4tLVxuZnMvbnRmcy9kaXIuYz02OTE9c3RhdGljIGludCBudGZzX2lhX2Jsb2Nrc19yZWFkYWhlYWQoc3RydWN0IG50ZnNfaW5vZGUgKmlhX25pLCBsb2ZmX3QgcG9zKVxuLS1cbmZzL250ZnMvZGlyLmMtNzEwLVx0ZGlyX3JhLVx1MDAzZXJhX3BhZ2VzID0gZGlyX2VuZF9pbmRleCAtIGRpcl9zdGFydF9pbmRleDtcbmZzL250ZnMvZGlyLmM6NzExOlx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChpYV92aS1cdTAwM2VpX21hcHBpbmcsIGRpcl9yYSwgTlVMTCxcbmZzL250ZnMvZGlyLmMtNzEyLVx0XHRcdGRpcl9zdGFydF9pbmRleCwgZGlyX2VuZF9pbmRleCAtIGRpcl9zdGFydF9pbmRleCk7XG4tLVxuZnMvbnRmcy9kaXIuYz03MTg9c3RhdGljIGludCBudGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqYWN0b3IpXG4tLVxuZnMvbnRmcy9kaXIuYy05OTYtXHRcdHJhLVx1MDAzZXJhX3BhZ2VzID0gY25pci1cdTAwM2Vjb3VudDtcbmZzL250ZnMvZGlyLmM6OTk3Olx0XHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKHZvbC1cdTAwM2VtZnRfaW5vLVx1MDAzZWlfbWFwcGluZywgcmEsIE5VTEwsXG5mcy9udGZzL2Rpci5jLTk5OC1cdFx0XHRcdGNuaXItXHUwMDNlc3RhcnRfaW5kZXgsIGNuaXItXHUwMDNlY291bnQpO1xuLS1cbmZzL250ZnMvaW5vZGUuYz0zODYzPXN0cnVjdCBmb2xpbyAqbnRmc19nZXRfbG9ja2VkX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL250ZnMvaW5vZGUuYy0zODcyLVxuZnMvbnRmcy9pbm9kZS5jOjM4NzM6XHRcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgcmEsIE5VTEwsIGluZGV4LFxuZnMvbnRmcy9pbm9kZS5jLTM4NzQtXHRcdFx0XHRlbmRfaW5kZXggLSBpbmRleCk7XG4tLVxuZnMvbnRmcy9sb2dmaWxlLmM9NjQwPWJvb2wgbnRmc19lbXB0eV9sb2dmaWxlKHN0cnVjdCBpbm9kZSAqbG9nX3ZpKVxuLS1cbmZzL250ZnMvbG9nZmlsZS5jLTcyOC1cbmZzL250ZnMvbG9nZmlsZS5jOjcyOTpcdFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChzYi1cdTAwM2VzX2JkZXYtXHUwMDNlYmRfbWFwcGluZywgcmEsIE5VTEwsXG5mcy9udGZzL2xvZ2ZpbGUuYy03MzAtXHRcdFx0c3RhcnQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsIChlbmQgLSBzdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuLS1cbmZzL250ZnMzL2JpdG1hcC5jPTQ5Nz1zdGF0aWMgaW50IHduZF9yZXNjYW4oc3RydWN0IHduZF9iaXRtYXAgKnduZClcbi0tXG5mcy9udGZzMy9iaXRtYXAuYy01NjYtXHRcdFx0aWYgKCFyYV9oYXNfaW5kZXgocmEsIGlkeCkpXG5mcy9udGZzMy9iaXRtYXAuYzo1Njc6XHRcdFx0XHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIHJhLCBOVUxMLFxuZnMvbnRmczMvYml0bWFwLmMtNTY4LVx0XHRcdFx0XHRcdFx0ICBpZHgsIDEpO1xuLS1cbmZzL250ZnMzL2ZzbnRmcy5jPTExOTA9aW50IG50ZnNfcmVhZF9ydW5fbmJfcmEoc3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpLCBjb25zdCBzdHJ1Y3QgcnVuc190cmVlICpydW4sXG4tLVxuZnMvbnRmczMvZnNudGZzLmMtMTI0NS1cdFx0XHRpZiAoIXJhX2hhc19pbmRleChyYSwgaW5kZXgpKSB7XG5mcy9udGZzMy9mc250ZnMuYzoxMjQ2Olx0XHRcdFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChtYXBwaW5nLCByYSwgTlVMTCxcbmZzL250ZnMzL2ZzbnRmcy5jLTEyNDctXHRcdFx0XHRcdFx0XHQgIGluZGV4LCAxKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xNDM2PXZvaWQgcmVhZGFoZWFkX2V4cGFuZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MzktLyoqXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxNDQwOiAqIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQgLSBnZW5lcmljIGZpbGUgcmVhZGFoZWFkXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDQxLSAqIEBtYXBwaW5nOiBhZGRyZXNzX3NwYWNlIHdoaWNoIGhvbGRzIHRoZSBwYWdlY2FjaGUgYW5kIEkvTyB2ZWN0b3JzXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQ0Ni0gKlxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTQ0NzogKiBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGEgY2FjaGUgbWlzcyBoYXBwZW5lZDpcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0NDgtICogaXQgd2lsbCBzdWJtaXQgdGhlIHJlYWQuICBUaGUgcmVhZGFoZWFkIGxvZ2ljIG1heSBkZWNpZGUgdG8gcGlnZ3liYWNrIG1vcmVcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xNDUyPXN0YXRpYyBpbmxpbmVcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjE0NTM6dm9pZCBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQ1NC1cdFx0c3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9yZWFkYWhlYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmFjdGxfYWxsb2NfZm9saW8oc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbi0tXG5tbS9yZWFkYWhlYWQuYy0yMTUtICogbm90IHRoZSBmdW5jdGlvbiB5b3Ugd2FudCB0byBjYWxsLiAgVXNlIHBhZ2VfY2FjaGVfYXN5bmNfcmVhZGFoZWFkKClcbm1tL3JlYWRhaGVhZC5jOjIxNjogKiBvciBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgaW5zdGVhZC5cbm1tL3JlYWRhaGVhZC5jLTIxNy0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjM4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBSZWFkYWhlYWQgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGhvdyByZWFkYWhlYWQgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQsIHNwZWNpZmljYWxseSB0aGUgYHBhZ2VfY2FjaGVfc3luY19yYWAgYW5kIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgZnVuY3Rpb25zLiBUaGVzZSBhcmUgbGlrZWx5IHRoZSBjb3JlIG9mIHRoZSByZWFkLWFoZWFkIGxvZ2ljLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGVpciBpbnRlcnBsYXksIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXkmIzM5O3JlIGludm9rZWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhleSBpbXBhY3QgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBwYWdlIGNhY2hlLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSBkZWxpY2F0ZSBiYWxhbmNlIGhlcmUsIGEgdHJhZGUtb2ZmIGJldHdlZW4gYWdncmVzc2l2ZWx5IHByZS1mZXRjaGluZyBwYWdlcyBhbmQgcG90ZW50aWFsbHkgd2FzdGluZyByZXNvdXJjZXMgb24gcmVhZHMgdGhhdCBhcmVuJiMzOTt0IGFjdHVhbGx5IG5lZWRlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb250cm9scyB0aGUgcGFyYW1ldGVycyBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBib3VuZGVkIGFuZCB1bmJvdW5kZWQgcmVhZGFoZWFkIGRpZmZlciBpbiB0aGVpciBiZWhhdmlvci4gVW5kZXJzdGFuZGluZyB0aG9zZSBkaWZmZXJlbmNlcyB3aWxsIGJlIGtleSB0byBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlIGZvciB2YXJpb3VzIHdvcmtsb2Fkcy4gVGltZSB0byBkaWcgaW50byBgbW0vcmVhZGFoZWFkLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZW1hcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDUwOlx0ICogcGVyZm9ybWFuY2UuXG4xNDUxOlx0ICovXG4xNDUyOlx0c3RhdGljIGlubGluZVxuMTQ1MzpcdHZvaWQgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbjE0NTQ6XHRcdFx0c3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBpbmRleCxcbjE0NTU6XHRcdFx0dW5zaWduZWQgbG9uZyByZXFfY291bnQpXG4xNDU2Olx0e1xuMTQ1NzpcdFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgcmEsIG1hcHBpbmcsIGluZGV4KTtcbjE0NTg6XHRcdHBhZ2VfY2FjaGVfc3luY19yYShcdTAwMjZyYWN0bCwgcmVxX2NvdW50KTtcbjE0NTk6XHR9XG4xNDYwOlx0XG4xNDYxOlx0LyoqXG4xNDYyOlx0ICogcGFnZV9jYWNoZV9hc3luY19yZWFkYWhlYWQgLSBmaWxlIHJlYWRhaGVhZCBmb3IgbWFya2VkIHBhZ2VzXG4xNDYzOlx0ICogQG1hcHBpbmc6IGFkZHJlc3Nfc3BhY2Ugd2hpY2ggaG9sZHMgdGhlIHBhZ2VjYWNoZSBhbmQgSS9PIHZlY3RvcnNcbjE0NjQ6XHQgKiBAcmE6IGZpbGVfcmFfc3RhdGUgd2hpY2ggaG9sZHMgdGhlIHJlYWRhaGVhZCBzdGF0ZVxuMTQ2NTpcdCAqIEBmaWxlOiBVc2VkIGJ5IHRoZSBmaWxlc3lzdGVtIGZvciBhdXRoZW50aWNhdGlvbi5cbjE0NjY6XHQgKiBAZm9saW86IFRoZSBmb2xpbyB3aGljaCB0cmlnZ2VyZWQgdGhlIHJlYWRhaGVhZCBjYWxsLlxuMTQ2NzpcdCAqIEByZXFfY291bnQ6IFRvdGFsIG51bWJlciBvZiBwYWdlcyBiZWluZyByZWFkIGJ5IHRoZSBjYWxsZXIuXG4xNDY4Olx0ICpcbjE0Njk6XHQgKiBwYWdlX2NhY2hlX2FzeW5jX3JlYWRhaGVhZCgpIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgdXNlZCB3aGljaFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI3NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgcGFnZV9jYWNoZV9zeW5jX3JhYCoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgcGFnZV9jYWNoZV9zeW5jX3JhYCB3aXRoaW4gYG1tL3JlYWRhaGVhZC5jYC4gSSYjMzk7bSBzdGFydGluZyBoZXJlIGJlY2F1c2UgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqcHJlY2lzZWx5KiBob3cgc3luY2hyb25vdXMgcmVhZC1haGVhZCBpcyBoYW5kbGVkIGluIHRoZSBwYWdlIGNhY2hlLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciByZWFkYWhlYWQgbWVjaGFuaXNtcy4gSSB3YW50IHRvIHNlZSB0aGUgY29udHJvbCBmbG93IGluIHRoaXMgY3JpdGljYWwgcGF0aC4gTXkgaW5pdGlhbCBxdWVzdGlvbnMgYXJlOiB3aGF0IHRyaWdnZXJzIGl0LCB3aGF0IHRoZSBleGFjdCBzeW5jIGJlaGF2aW91ciBpcyByZWxhdGl2ZSB0byBhc3luY2hyb25vdXMgcmVhZGFoZWFkLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHJhY2VzIHdpdGggb3RoZXIgcHJvY2Vzc2VzIGFjY2Vzc2luZyB0aGUgc2FtZSBkYXRhLCBhbmQsIGlmIHBvc3NpYmxlLCB3aGVyZSBpdCBpcyB1c2VkIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgb2Z0ZW4gd2hlcmUgc3VidGxlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBjYW4gbHVyaywgYW5kIEkmIzM5O2QgbGlrZSBhIHZlcnkgY3Jpc3AgdmlldyBvZiBpdHMgcHVycG9zZSBhbmQgb3BlcmF0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IHdoZXJlIHRoZSBrZXJuZWwgZGVjaWRlcyB3aGVuIGl0IGlzIHNhZmUgdG8gaXNzdWUgcHJlZmV0Y2ggSS9PIHJlcXVlc3RzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgaW50dWl0aW9uIGhvbGRzIHVwLCBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgbW9yZSBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9jYWNoZV9zeW5jX3JhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcmVhZGFoZWFkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcmVhZGFoZWFkLmM9NTYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJhY3RsX21heF9wYWdlcyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbm1tL3JlYWRhaGVhZC5jLTU3Ni1cbm1tL3JlYWRhaGVhZC5jOjU3Nzp2b2lkIHBhZ2VfY2FjaGVfc3luY19yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxubW0vcmVhZGFoZWFkLmMtNTc4LVx0XHR1bnNpZ25lZCBsb25nIHJlcV9jb3VudClcbi0tXG5tbS9yZWFkYWhlYWQuYy01ODUtXG5tbS9yZWFkYWhlYWQuYzo1ODY6XHR0cmFjZV9wYWdlX2NhY2hlX3N5bmNfcmEocmFjdGwtXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0LCBpbmRleCwgcmEsIHJlcV9jb3VudCk7XG5tbS9yZWFkYWhlYWQuYy01ODctXHQvKlxuLS1cbm1tL3JlYWRhaGVhZC5jLTY1MC19XG5tbS9yZWFkYWhlYWQuYzo2NTE6RVhQT1JUX1NZTUJPTF9HUEwocGFnZV9jYWNoZV9zeW5jX3JhKTtcbm1tL3JlYWRhaGVhZC5jLTY1Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcGFnZV9jYWNoZV9zeW5jX3JhYCB3aXRoaW4gYG1tL3JlYWRhaGVhZC5jYC4gSXQmIzM5O3MgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdW5kZXJzdGFuZCBwcmVjaXNlbHkgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgc3luY2hyb25pemF0aW9uIGFzcGVjdCBvZiByZWFkLWFoZWFkIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBwYWdlIGNhY2hlLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiBlbnN1cmluZyBkYXRhIGludGVncml0eSBhbmQgb3B0aW1pemluZyBJL08uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciByZWFkYWhlYWQgbWVjaGFuaXNtLCBhbmQgd2hhdCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpdCYjMzk7cyB1c2luZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFzIHN0cmFpZ2h0Zm9yd2FyZCBhcyBpdCBzZWVtcyBvciBpZiBpdOKAmXMgbW9yZSBudWFuY2VkLCBnaXZlbiB0aGF0IHdlIGFyZSB3aXRoaW4gdGhlIG1tIHN1YnN5c3RlbS4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpbW1lZGlhdGVseSBncmFzcCB0aGUgbG9naWMgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9yZWFkYWhlYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTc2Olx0XG4gNTc3Olx0dm9pZCBwYWdlX2NhY2hlX3N5bmNfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbiA1Nzg6XHRcdFx0dW5zaWduZWQgbG9uZyByZXFfY291bnQpXG4gNTc5Olx0e1xuIDU4MDpcdFx0cGdvZmZfdCBpbmRleCA9IHJlYWRhaGVhZF9pbmRleChyYWN0bCk7XG4gNTgxOlx0XHRib29sIGRvX2ZvcmNlZF9yYSA9IHJhY3RsLVx1MDAzZWZpbGUgXHUwMDI2XHUwMDI2IChyYWN0bC1cdTAwM2VmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfUkFORE9NKTtcbiA1ODI6XHRcdHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSA9IHJhY3RsLVx1MDAzZXJhO1xuIDU4MzpcdFx0dW5zaWduZWQgbG9uZyBtYXhfcGFnZXMsIGNvbnRpZ19jb3VudDtcbiA1ODQ6XHRcdHBnb2ZmX3QgcHJldl9pbmRleCwgbWlzcztcbiA1ODU6XHRcbiA1ODY6XHRcdHRyYWNlX3BhZ2VfY2FjaGVfc3luY19yYShyYWN0bC1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QsIGluZGV4LCByYSwgcmVxX2NvdW50KTtcbiA1ODc6XHRcdC8qXG4gNTg4Olx0XHQgKiBFdmVuIGlmIHJlYWRhaGVhZCBpcyBkaXNhYmxlZCwgaXNzdWUgdGhpcyByZXF1ZXN0IGFzIHJlYWRhaGVhZFxuIDU4OTpcdFx0ICogYXMgd2UmIzM5O2xsIG5lZWQgaXQgdG8gc2F0aXNmeSB0aGUgcmVxdWVzdGVkIHJhbmdlLiBUaGUgZm9yY2VkXG4gNTkwOlx0XHQgKiByZWFkYWhlYWQgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgYW5kIGxpbWl0IHRoZSByZWFkIHRvIGp1c3QgdGhlXG4gNTkxOlx0XHQgKiByZXF1ZXN0ZWQgcmFuZ2UsIHdoaWNoIHdlJiMzOTtsbCBzZXQgdG8gMSBwYWdlIGZvciB0aGlzIGNhc2UuXG4gNTkyOlx0XHQgKi9cbiA1OTM6XHRcdGlmICghcmEtXHUwMDNlcmFfcGFnZXMgfHwgYmxrX2Nncm91cF9jb25nZXN0ZWQoKSkge1xuIDU5NDpcdFx0XHRpZiAoIXJhY3RsLVx1MDAzZWZpbGUpXG4gNTk1Olx0XHRcdFx0cmV0dXJuO1xuIDU5NjpcdFx0XHRyZXFfY291bnQgPSAxO1xuIDU5NzpcdFx0XHRkb19mb3JjZWRfcmEgPSB0cnVlO1xuIDU5ODpcdFx0fVxuIDU5OTpcdFxuIDYwMDpcdFx0LyogYmUgZHVtYiAqL1xuIDYwMTpcdFx0aWYgKGRvX2ZvcmNlZF9yYSkge1xuIDYwMjpcdFx0XHRmb3JjZV9wYWdlX2NhY2hlX3JhKHJhY3RsLCByZXFfY291bnQpO1xuIDYwMzpcdFx0XHRyZXR1cm47XG4gNjA0Olx0XHR9XG4gNjA1Olx0XG4gNjA2Olx0XHRtYXhfcGFnZXMgPSByYWN0bF9tYXhfcGFnZXMocmFjdGwsIHJlcV9jb3VudCk7XG4gNjA3Olx0XHRwcmV2X2luZGV4ID0gKHVuc2lnbmVkIGxvbmcgbG9uZylyYS1cdTAwM2VwcmV2X3BvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiA2MDg6XHRcdC8qXG4gNjA5Olx0XHQgKiBBIHN0YXJ0IG9mIGZpbGUsIG92ZXJzaXplZCByZWFkLCBvciBzZXF1ZW50aWFsIGNhY2hlIG1pc3M6XG4gNjEwOlx0XHQgKiB0cml2aWFsIGNhc2U6IChpbmRleCAtIHByZXZfaW5kZXgpID09IDFcbiA2MTE6XHRcdCAqIHVuYWxpZ25lZCByZWFkczogKGluZGV4IC0gcHJldl9pbmRleCkgPT0gMFxuIDYxMjpcdFx0ICovXG4gNjEzOlx0XHRpZiAoIWluZGV4IHx8IHJlcV9jb3VudCBcdTAwM2UgbWF4X3BhZ2VzIHx8IGluZGV4IC0gcHJldl9pbmRleCBcdTAwM2M9IDFVTCkge1xuIDYxNDpcdFx0XHRyYS1cdTAwM2VzdGFydCA9IGluZGV4O1xuIDYxNTpcdFx0XHRyYS1cdTAwM2VzaXplID0gZ2V0X2luaXRfcmFfc2l6ZShyZXFfY291bnQsIG1heF9wYWdlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzE3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0LCBnaXZlbiBteSBhc3N1bWVkIGV4cGVydGlzZToKCioqRXhhbWluaW5nIHRoZSAmIzM5O3BhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkJiMzOTsgUGFyYW1ldGVyKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBzZXR0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyByZXZvbHZlcyBhcm91bmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgcmVhZC1haGVhZCBiZWhhdmlvciB3aXRoaW4gdGhlIHBhZ2UgY2FjaGUuIEVzc2VudGlhbGx5LCB0aGlzIHBhcmFtZXRlciBsaWtlbHkgZ292ZXJucyBob3cgYWdncmVzc2l2ZWx5IHRoZSBzeXN0ZW0gYXR0ZW1wdHMgdG8gcHJlZmV0Y2ggZGF0YSBpbnRvIHRoZSBwYWdlIGNhY2hlLCBiZXlvbmQgdGhlIGltbWVkaWF0ZSByZXF1ZXN0LiBBcyBhbiBleHBlcnQsIEkmIzM5O20gaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgdGhlIHRyYWRlb2ZmcyBpbnZvbHZlZC4gQSBib3VuZGVkIHJlYWQtYWhlYWQgd291bGQsIGlkZWFsbHksIHJlc3RyaWN0IHByZWZldGNoaW5nIHRvIGEgbWFuYWdlYWJsZSBhbW91bnQsIHByZXZlbnRpbmcgZXhjZXNzaXZlIG1lbW9yeSBwcmVzc3VyZS4gQnV0IGFuICp1bmJvdW5kZWQqIHNldHRpbmc/IFRoYXQgcmFpc2VzIHNvbWUgaW50ZXJlc3RpbmcgcG9pbnRzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYmVuZWZpdHMuIFdpdGggYW4gdW5ib3VuZGVkIHNldHRpbmcsIHlvdSBjb3VsZCBhY2hpZXZlIG1heGltdW0gcmVhZCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBmb3Igc2VxdWVudGlhbCBvciBwcmVkaWN0YWJsZSBhY2Nlc3MgcGF0dGVybnMuIE5vIG5lZWQgdG8gd29ycnkgYWJvdXQgYmVpbmcgdGhyb3R0bGVkIGR1ZSB0byBhIGZpeGVkIHVwcGVyIGxpbWl0LiBJdCBzaG91bGQgYmUgZmFudGFzdGljIGZvciBsYXJnZSwgaGlnaGx5IHNlcXVlbnRpYWwgcmVhZHMsIGxpa2UgZGF0YWJhc2UgYmFja3VwcyBvciBjZXJ0YWluIHZpZGVvIHByb2Nlc3Npbmcgb3BlcmF0aW9ucy4KCkhvd2V2ZXIsIEkmIzM5O20gYWxzbyByYXBpZGx5IGNhbGN1bGF0aW5nIHRoZSBwb3RlbnRpYWwgZG93bnNpZGVzIGluIG15IGhlYWQuIFVuY2hlY2tlZCByZWFkLWFoZWFkIGNvdWxkIHF1aWNrbHkgZXhoYXVzdCBhdmFpbGFibGUgbWVtb3J5LCBsZWFkaW5nIHRvIHBhZ2UgZXZpY3Rpb24gb2YgKm90aGVyKiBpbXBvcnRhbnQgZGF0YS4gVGhpcyBpcyB3aGVyZSB0aGUgaW50cmljYWNpZXMgb2Ygd29ya2xvYWQgYmVoYXZpb3IgYW5kIHRoZSBvdmVyYWxsIG1lbW9yeSBwcm9maWxlIG9mIHRoZSBzeXN0ZW0gYmVjb21lIGNyaXRpY2FsLiBJdCBtaWdodCBiZSBncmVhdCBmb3Igb25lIHdvcmtsb2FkLCBidXQgZGlzYXN0cm91cyBmb3IgYW5vdGhlciwgc2F5IGlmIHRoZSB3b3JrbG9hZCBpcyBoZWF2aWx5IGludGVyYWN0aXZlIHdpdGggYSBzbWFsbCB3b3JraW5nIHNldC4gSSYjMzk7ZCBiZSBlc3BlY2lhbGx5IGtlZW4gdG8ga25vdyB0aGUgZGVmYXVsdCBzZXR0aW5nIGFuZCB3aGF0IHRyaWdnZXJlZCB0aGlzIHRvcGljIHRvIGNvbWUgdXAuCgpNeSBpbnN0aW5jdCBpcyB0byBhc2s6IFdoYXQgc3BlY2lmaWMgcHJvYmxlbSBhcmUgd2UgdHJ5aW5nIHRvIHNvbHZlIGhlcmU/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgYXJlIHRoZSBhY2Nlc3MgcGF0dGVybnMgb2YgdGhlIHdvcmtsb2FkcyBydW5uaW5nIG9uIHRoZSBzeXN0ZW0/IEhvdyBtdWNoIG1lbW9yeSBpcyBhdmFpbGFibGU/IFdoYXQgYXJlIHRoZSBvdGhlciBrZXJuZWwgcGFyYW1ldGVycyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50IHRvIHRoaXMgc2l0dWF0aW9uIChlLmcuIGB2bS5zd2FwcGluZXNzYCwgYHZtLmRpcnR5XypgLCBhbmQgc28gb24pPyBUaGUgdHJ1ZSBiZWF1dHkgb2YgYSBwYXJhbWV0ZXIgbGlrZSB0aGlzIGlzIGl0IGNhbiBiZSB0dW5lZCwgYnV0IHlvdSBtdXN0IGhhdmUgYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb3N0cyBvZiB1c2UuCgpTbywgaW4gc3VtbWFyeSwgSSYjMzk7bSBzZWVpbmcgYW4gYXJlYSBmb3IgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgZ2FpbnMsIGJ1dCBhbHNvIGEgcG90ZW50aWFsIG1pbmVmaWVsZCBpZiB3ZSYjMzk7cmUgbm90IGNhcmVmdWwuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGFzc2VzcyBpdHMgYXBwbGljYWJpbGl0eSB0byBhIHBhcnRpY3VsYXIgc2NlbmFyaW8uIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVyZSYjMzk7cyBubyBvbmUtc2l6ZS1maXRzLWFsbCBhbnN3ZXIgaGVyZS4gSXQmIzM5O3MgYWxsIGFib3V0IGNhcmVmdWwgdHVuaW5nIGJhc2VkIG9uIGRlZXAgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3JlYWRhaGVhZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JlYWRhaGVhZC5jPTE5NT1zdGF0aWMgc3RydWN0IGZvbGlvICpyYWN0bF9hbGxvY19mb2xpbyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbm1tL3JlYWRhaGVhZC5jLTIyMS0gKi9cbm1tL3JlYWRhaGVhZC5jOjIyMjp2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG5tbS9yZWFkYWhlYWQuYy0yMjMtXHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVhZCwgdW5zaWduZWQgbG9uZyBsb29rYWhlYWRfc2l6ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYG1tL3JlYWRhaGVhZC5jYCBhbmQgZm9jdXMgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIyMi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSByZWFkYWhlYWQgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgbG9naWMgZm9yIHByZS1mZXRjaGluZyBkYXRhIGludG8gdGhlIHBhZ2UgY2FjaGUsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBJL08gcGVyZm9ybWFuY2UuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGhldXJpc3RpYyB0aGF0IGRldGVybWluZXMgd2hlbiByZWFkYWhlYWQgaXMgdHJpZ2dlcmVkLCBvciBtYXliZSB0aGUgc3BlY2lmaWMgY2FsY3VsYXRpb25zIHVzZWQgdG8gZGVjaWRlIGhvdyBtYW55IHBhZ2VzIHRvIHByZWZldGNoLiBEZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uLCBJIG1heSBhbHNvIHNlZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGluZ3MgbGlrZSBhZGFwdGl2ZSByZWFkYWhlYWQgb3IgdGhlIHZhcmlvdXMgdHVuaW5nIHBhcmFtZXRlcnMuIExpbmUgMjIyIHNwZWNpZmljYWxseeKApiBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYmVpbmcgZG9uZSBoZXJlLiBJ4oCZbSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIHRyeWluZyB0byBwcmVkaWN0IHN1YnNlcXVlbnQgYWNjZXNzIHBhdHRlcm5zLiBUaGlzIGlzIHRoZSBoZWFydCBvZiBtYWtpbmcgSS9PIGxvb2sgZmFzdGVyIHRoYW4gaXQgcmVhbGx5IGlzLiBSaWdodCwgbGV0JiMzOTtzIGdldCBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JlYWRhaGVhZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMjA6XHQgKiBjYWxsZXIuICBNYXkgc2xlZXAsIGJ1dCB3aWxsIG5vdCByZWVudGVyIGZpbGVzeXN0ZW0gdG8gcmVjbGFpbSBtZW1vcnkuXG4gMjIxOlx0ICovXG4gMjIyOlx0dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuIDIyMzpcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlYWQsIHVuc2lnbmVkIGxvbmcgbG9va2FoZWFkX3NpemUpXG4gMjI0Olx0e1xuIDIyNTpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSByYWN0bC1cdTAwM2VtYXBwaW5nO1xuIDIyNjpcdFx0dW5zaWduZWQgbG9uZyBpbmRleCA9IHJlYWRhaGVhZF9pbmRleChyYWN0bCk7XG4gMjI3Olx0XHRnZnBfdCBnZnBfbWFzayA9IHJlYWRhaGVhZF9nZnBfbWFzayhtYXBwaW5nKTtcbiAyMjg6XHRcdHVuc2lnbmVkIGxvbmcgbWFyayA9IFVMT05HX01BWCwgaSA9IDA7XG4gMjI5Olx0XHR1bnNpZ25lZCBpbnQgbWluX25ycGFnZXMgPSBtYXBwaW5nX21pbl9mb2xpb19ucnBhZ2VzKG1hcHBpbmcpO1xuIDIzMDpcdFxuIDIzMTpcdFx0LypcbiAyMzI6XHRcdCAqIFBhcnR3YXkgdGhyb3VnaCB0aGUgcmVhZGFoZWFkIG9wZXJhdGlvbiwgd2Ugd2lsbCBoYXZlIGFkZGVkXG4gMjMzOlx0XHQgKiBsb2NrZWQgcGFnZXMgdG8gdGhlIHBhZ2UgY2FjaGUsIGJ1dCB3aWxsIG5vdCB5ZXQgaGF2ZSBzdWJtaXR0ZWRcbiAyMzQ6XHRcdCAqIHRoZW0gZm9yIEkvTy4gIEFkZGluZyBhbm90aGVyIHBhZ2UgbWF5IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5LFxuIDIzNTpcdFx0ICogd2hpY2ggY2FuIHRyaWdnZXIgbWVtb3J5IHJlY2xhaW0uICBUZWxsaW5nIHRoZSBWTSB3ZSYjMzk7cmUgaW5cbiAyMzY6XHRcdCAqIHRoZSBtaWRkbGUgb2YgYSBmaWxlc3lzdGVtIG9wZXJhdGlvbiB3aWxsIGNhdXNlIGl0IHRvIG5vdFxuIDIzNzpcdFx0ICogdG91Y2ggZmlsZS1iYWNrZWQgcGFnZXMsIHByZXZlbnRpbmcgYSBkZWFkbG9jay4gIE1vc3QgKGFsbD8pXG4gMjM4Olx0XHQgKiBmaWxlc3lzdGVtcyBhbHJlYWR5IHNwZWNpZnkgX19HRlBfTk9GUyBpbiB0aGVpciBtYXBwaW5nJiMzOTtzXG4gMjM5Olx0XHQgKiBnZnBfbWFzaywgYnV0IGxldCYjMzk7cyBiZSBleHBsaWNpdCBoZXJlLlxuIDI0MDpcdFx0ICovXG4gMjQxOlx0XHR1bnNpZ25lZCBpbnQgbm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuIDI0MjpcdFxuIDI0MzpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayk7XG4gMjQ0Olx0XG4gMjQ1Olx0XHR0cmFjZV9wYWdlX2NhY2hlX3JhX3VuYm91bmRlZChtYXBwaW5nLVx1MDAzZWhvc3QsIGluZGV4LCBucl90b19yZWFkLFxuIDI0NjpcdFx0XHRcdFx0ICAgICAgbG9va2FoZWFkX3NpemUpO1xuIDI0NzpcdFx0aW5kZXggPSBtYXBwaW5nX2FsaWduX2luZGV4KG1hcHBpbmcsIGluZGV4KTtcbiAyNDg6XHRcbiAyNDk6XHRcdC8qXG4gMjUwOlx0XHQgKiBBcyBpdGVyYXRvciBgaWAgaXMgYWxpZ25lZCB0byBtaW5fbnJwYWdlcywgcm91bmRfdXAgdGhlXG4gMjUxOlx0XHQgKiBkaWZmZXJlbmNlIGJldHdlZW4gbnJfdG9fcmVhZCBhbmQgbG9va2FoZWFkX3NpemUgdG8gbWFyayB0aGVcbiAyNTI6XHRcdCAqIGluZGV4IHRoYXQgb25seSBoYXMgbG9va2FoZWFkIG9yIFwmIzM0O2FzeW5jX3JlZ2lvblwmIzM0OyB0byBzZXQgdGhlXG4gMjUzOlx0XHQgKiByZWFkYWhlYWQgZmxhZy5cbiAyNTQ6XHRcdCAqL1xuIDI1NTpcdFx0aWYgKGxvb2thaGVhZF9zaXplIFx1MDAzYz0gbnJfdG9fcmVhZCkge1xuIDI1NjpcdFx0XHR1bnNpZ25lZCBsb25nIHJhX2ZvbGlvX2luZGV4O1xuIDI1NzpcdFxuIDI1ODpcdFx0XHRyYV9mb2xpb19pbmRleCA9IHJvdW5kX3VwKHJlYWRhaGVhZF9pbmRleChyYWN0bCkgJiM0MztcbiAyNTk6XHRcdFx0XHRcdFx0ICBucl90b19yZWFkIC0gbG9va2FoZWFkX3NpemUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzY1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvbmN1cnJlbmN5IElzc3VlIGluIGBjb2xsYXBzZV9maWxlYCB3aXRoaW4gYGtodWdlcGFnZWRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBrZXkgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO21hcHBpbmctJmd0O2ludmFsaWRhdGVfbG9jayk7YCBvbiBsaW5lIDI0My4gVGhpcyBpcyBhIGNydWNpYWwgY2hlY2sgYW5kIHRoZSBmYWN0IHRoYXQgaXQgaXMgaW5jbHVkZWQsIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgYSBsb2NrIG9yZGVyaW5nIGlzIGludm9sdmVkLgoKTG9va2luZyBhdCB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLCBJIHNlZSBhIHNpZ25pZmljYW50IGNoYW5nZSBpbnRyb2R1Y2VkIGluIGEgcGF0Y2guIEJlZm9yZSB0aGUgcGF0Y2gsIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCB3YXMgY2FsbGVkIHdpdGhvdXQgaG9sZGluZyB0aGUgYGludmFsaWRhdGVfbG9ja2AuIFdoaWxlIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCBtaWdodCBoYXZlIGFjcXVpcmVkIHRoZSBsb2NrIGludGVybmFsbHkgd2l0aGluIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAsIHRoZSBsYWNrIG9mIGV4cGxpY2l0IGhvbGRpbmcgYXQgdGhlIGhpZ2hlciBsZXZlbCBjb3VsZCBoYXZlIGxlZCB0byBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIHJhY2VzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRydW5jYXRlIG9wZXJhdGlvbnMuCgpUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMuIFRoZSBrZXkgbGluZXMgaGVyZSBhcmUgdGhlIG9uZXMgdGhhdCB0YWtlIHRoZSBgaW52YWxpZGF0ZV9sb2NrYCAqYmVmb3JlKiBhY3F1aXJpbmcgYW55IGZvbGlvIGxvY2tzLiBJdCYjMzk7cyBkb25lIHRvIGVuc3VyZSBwcm9wZXIgbG9jayBvcmRlcmluZy4gSXQgZ29lcyBsaWtlIHRoaXM6CgpgYGBjCiYjNDM7CS8qCiYjNDM7CSAqIFRha2UgaW52YWxpZGF0ZV9sb2NrIGJlZm9yZSBhbnkgZm9saW8gbG9jazogdGhlIHJlYWRhaGVhZCBiZWxvdwomIzQzOwkgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWlzX3NobWVtKSB7CiYjNDM7CQlmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7CiYjNDM7CQluZWVkX3VubG9jayA9IHRydWU7CiYjNDM7CX0KYGBgCgpOb3csIHdpdGhpbiBgY29sbGFwc2VfZmlsZWAgaXRzZWxmLCB0aGUgbW9kaWZpZWQgY29kZSB1c2VzIGEgYERFRklORV9SRUFEQUhFQURgIG1hY3JvIGFuZCB0aGVuIGNhbGxzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgaW5zdGVhZCBvZiBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAuIEltcG9ydGFudGx5LCBhIGNvbW1lbnQgbm90ZXMgdGhhdCB0aGUgYGludmFsaWRhdGVfbG9ja2AgaXMgYWxyZWFkeSBoZWxkIGF0IHRoaXMgcG9pbnQsIGFuZCB0aGlzIG5ldyByZWFkYWhlYWQgZnVuY3Rpb24gZG9lc24mIzM5O3QgbmVlZCB0byBiZSBsaW1pdGVkIHRvIHRoZSBlbmQtb2YtZmlsZS4KClRoZSBjcml0aWNhbCBwaWVjZSwgdGhlbiwgaXMgdGhhdCB0aGUgY29kZSAqZXhwbGljaXRseSogcmVsZWFzZXMgdGhlIGBpbnZhbGlkYXRlX2xvY2tgIGF0IHRoZSBlbmQgaWYgaXQgd2FzIGFjcXVpcmVkOgoKYGBgYwpvdXQ6CiYjNDM7CWlmIChuZWVkX3VubG9jaykKJiM0MzsJCWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpOwpgYGAKClNvLCB0aGUgcGF0Y2ggaXMgYSBkZWxpYmVyYXRlIGVmZm9ydCB0byBlbmZvcmNlIGEgc3BlY2lmaWMgbG9jayBvcmRlcmluZyB0byBwcmV2ZW50IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0JiMzOTtzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGFkZHJlc3NpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIHJlYWQtYWhlYWQsIGZpbGUgdHJ1bmNhdGlvbiwgYW5kIHRoZSBgaW52YWxpZGF0ZV9sb2NrYC4gIE15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYGludmFsaWRhdGVfbG9ja2AsIGZvbGlvIGxvY2tzLCB0cnVuY2F0ZSBvcGVyYXRpb25zLCBhbmQgdGhlIHJlYWRhaGVhZCBtZWNoYW5pc20gd2l0aGluIHRoZSBjb250ZXh0IG9mIGBraHVnZXBhZ2VkYCBhbmQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgZmlsZSBzeXN0ZW1zIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIEkmIzM5O2QgZGVmaW5pdGVseSB3YW50IHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgb2YgYGNvbGxhcHNlX2ZpbGVgIGFyb3VuZCB0aG9zZSBsaW5lIG51bWJlcnMgeW91IGdhdmUgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzMwOlx0XG4yMzMxOlx0XHRcdFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSB8fCAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpIHtcbjIzMzI6XHRcdFx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4yMzMzOlx0XHRcdFx0XHQvKiBzd2FwIGluIG9yIGluc3RhbnRpYXRlIGZhbGxvY2F0ZWQgcGFnZSAqL1xuMjMzNDpcdFx0XHRcdFx0aWYgKHNobWVtX2dldF9mb2xpbyhtYXBwaW5nLVx1MDAzZWhvc3QsIGluZGV4LCAwLFxuMjMzNTpcdFx0XHRcdFx0XHRcdFx1MDAyNmZvbGlvLCBTR1BfTk9BTExPQykpIHtcbjIzMzY6XHRcdFx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjMzNzpcdFx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjMzODpcdFx0XHRcdFx0fVxuMjMzOTpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuMjM0MDpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjM0MTpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbjIzNDI6XHRcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4yMzQzOlx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM0NDpcdFx0XHRcdH0gZWxzZSB7XG4yMzQ1Olx0XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcbjIzNDY6XHRcdFx0XHRcdGdvdG8geGFfbG9ja2VkO1xuMjM0NzpcdFx0XHRcdH1cbjIzNDg6XHRcdFx0fSBlbHNlIHtcdC8qICFpc19zaG1lbSAqL1xuMjM0OTpcdFx0XHRcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XG4yMzUwOlx0XHRcdFx0XHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEsXG4yMzUxOlx0XHRcdFx0XHRcdFx0ICBtYXBwaW5nLCBpbmRleCk7XG4yMzUyOlx0XHRcdFx0XHRwZ29mZl90IGVvZiA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChtYXBwaW5nLVx1MDAzZWhvc3QpLFxuMjM1MzpcdFx0XHRcdFx0XHRcdFx0ICAgIFBBR0VfU0laRSk7XG4yMzU0Olx0XG4yMzU1Olx0XHRcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjM1NjpcdFx0XHRcdFx0LypcbjIzNTc6XHRcdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24mIzM5O3QgcmV0YWtlIGl0LlxuMjM1ODpcdFx0XHRcdFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcbjIzNTk6XHRcdFx0XHRcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXG4yMzYwOlx0XHRcdFx0XHQgKi9cbjIzNjE6XHRcdFx0XHRcdGlmIChpbmRleCBcdTAwM2MgZW9mKVxuMjM2MjpcdFx0XHRcdFx0XHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcdTAwMjZyYWN0bCxcbjIzNjM6XHRcdFx0XHRcdFx0XHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xuMjM2NDpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuMjM2NTpcdFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjM2NjpcdFx0XHRcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xuMjM2NzpcdFx0XHRcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbjIzNjg6XHRcdFx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjM2OTpcdFx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjM3MDpcdFx0XHRcdFx0fVxuMjM3MTpcdFx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHtcbjIzNzI6XHRcdFx0XHRcdC8qXG4yMzczOlx0XHRcdFx0XHQgKiBUaGlzIHBhZ2UgaXMgZGlydHkgYmVjYXVzZSBpdCBoYXNuJiMzOTt0XG4yMzc0Olx0XHRcdFx0XHQgKiBiZWVuIGZsdXNoZWQgc2luY2UgZmlyc3Qgd3JpdGUuXG4yMzc1Olx0XHRcdFx0XHQgKlxuMjM3NjpcdFx0XHRcdFx0ICogVHJpZ2dlciBhc3luYyBmbHVzaCBmb3IgcmVhZC1vbmx5IGZpbGVzIGFuZFxuMjM3NzpcdFx0XHRcdFx0ICogaG9wZSB0aGUgd3JpdGViYWNrIGlzIGRvbmUgd2hlbiBraHVnZXBhZ2VkXG4yMzc4Olx0XHRcdFx0XHQgKiByZXZpc2l0cyB0aGlzIHBhZ2UuIFdyaXRhYmxlIGZpbGVzIGNhbiBoYXZlXG4yMzc5Olx0XHRcdFx0XHQgKiB0aGVpciBmb2xpb3MgZGlydHkgYXQgYW55IHRpbWU7IGJsaW5kbHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQW5hbHl6aW5nIExvY2sgUmVsZWFzZSBQb2ludHMgaW4gYGNvbGxhcHNlX2ZpbGVgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBjb2xsYXBzZV9maWxlYCBhZ2Fpbi4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIGxvY2tpbmcgY29ycmVjdGx5LCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBwaW5wb2ludGluZyAqZXZlcnkqIHNpbmdsZSBzcG90IHdoZXJlIHRoZSBsb2NrIGlzIHJlbGVhc2VkLiBXZSBhbGwga25vdyBob3cgZWFzeSBpdCBpcyB0byBpbnRyb2R1Y2UgYSBzdWJ0bGUgYnVnIGlmIHlvdSBtaXNzIGV2ZW4gb25lLiBJIG5lZWQgdG8gYWNjb3VudCBmb3IgYWxsIG9mIHRoZW0uCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYmV5b25kIHRoZSBzaW1wbGUgbG9jay91bmxvY2sgcGFpci4gSSBuZWVkIHRvIG1lbnRhbGx5IHRyYWNlIGV2ZXJ5IHBvc3NpYmxlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlIHBvaW50IHdoZXJlIHRoZSBsb2NrIGlzIGFjcXVpcmVkIHRvIGl0cyBldmVudHVhbCByZWxlYXNlLiBUaGlzIG1lYW5zIG5vdCBqdXN0IGZvbGxvd2luZyB0aGUgc3RyYWlnaHRmb3J3YXJkLCBoYXBweS1wYXRoIGxvZ2ljLCBidXQgYWxzbyBjb25zaWRlcmluZyBhbGwgdGhlICYjMzQ7ZXhpdCYjMzQ7IHBvaW50cy4gVGhhdCBtZWFucyBgZ290byBvdXRgIHN0YXRlbWVudHMsIGV4cGxpY2l0IGByZXR1cm5gIHN0YXRlbWVudHMgdGhhdCBzaG9ydC1jaXJjdWl0IHRoZSB1c3VhbCBleGVjdXRpb24gZmxvdywgYW5kIGFueSBvdGhlciBtZWNoYW5pc20gdGhhdCBtaWdodCB0ZXJtaW5hdGUgdGhlIGZ1bmN0aW9uIHByZW1hdHVyZWx5ICpiZWZvcmUqIHRoZSBsb2NrIGNhbiBiZSBleHBsaWNpdGx5IHJlbGVhc2VkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZWFjaCBvZiB0aGVzZSBwb2ludHMgZWl0aGVyIHJlbGVhc2VzIHRoZSBsb2NrIGNsZWFubHkgb3IsIGlmIG5vdCwgdGhhdCB0aGVyZSYjMzk7cyBhIGdvb2QgZXhwbGFuYXRpb24gZm9yIHdoeSBpdCYjMzk7cyBub3QgbmVjZXNzYXJ5ICh3aGljaCB3aWxsIG5lZWQgdG8gYmUgd2VsbC1kb2N1bWVudGVkKS4gSXQmIzM5O3MgYSBtZXRob2RpY2FsIHByb2Nlc3MsIGJ1dCBpdCYjMzk7cyBlc3NlbnRpYWwgZm9yIG1haW50YWluaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhpcyBjcml0aWNhbCBjb2RlIHNlY3Rpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgbm90aGluZyBlc2NhcGVzIHRoaXMgZXhhbWluYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dvdG8gb3V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz02OTM9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2VfaXNvbGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNzE0LVx0XHRcdFx0XHRcdCAgICAgTVRIUF9TVEFUX0NPTExBUFNFX0VYQ0VFRF9OT05FKTtcbm1tL2todWdlcGFnZWQuYzo3MTU6XHRcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy03MTYtXHRcdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy03MjAtXHRcdFx0cmVzdWx0ID0gU0NBTl9QVEVfTk9OX1BSRVNFTlQ7XG5tbS9raHVnZXBhZ2VkLmM6NzIxOlx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTcyMi1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy03MjQtXHRcdFx0cmVzdWx0ID0gU0NBTl9QVEVfVUZGRDtcbm1tL2todWdlcGFnZWQuYzo3MjU6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtNzI2LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTcyOS1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTlVMTDtcbm1tL2todWdlcGFnZWQuYzo3MzA6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtNzMxLVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTc0Mi1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTEFaWUZSRUU7XG5tbS9raHVnZXBhZ2VkLmM6NzQzOlx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTc0NC1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy03NTctXHRcdFx0XHRcdFx0ICAgICBNVEhQX1NUQVRfQ09MTEFQU0VfRVhDRUVEX1NIQVJFRCk7XG5tbS9raHVnZXBhZ2VkLmM6NzU4Olx0XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtNzU5LVx0XHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtNzY2LVx0XHRcdHJlc3VsdCA9IFNDQU5fUFRFX01BUFBFRF9IVUdFUEFHRTtcbm1tL2todWdlcGFnZWQuYzo3Njc6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtNzY4LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTc5MC1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcbm1tL2todWdlcGFnZWQuYzo3OTE6XHRcdFx0Z290byBvdXQ7XG5tbS9raHVnZXBhZ2VkLmMtNzkyLVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTgwNy1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfQ09VTlQ7XG5tbS9raHVnZXBhZ2VkLmM6ODA4Olx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTgwOS1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy04MTctXHRcdFx0cmVzdWx0ID0gU0NBTl9ERUxfUEFHRV9MUlU7XG5tbS9raHVnZXBhZ2VkLmM6ODE4Olx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTgxOS1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYz0xMTY1PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IF9fY29sbGFwc2VfaHVnZV9wYWdlX3N3YXBpbihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTE5My1cdFx0XHRcdHJlc3VsdCA9IFNDQU5fTk9fUFRFX1RBQkxFO1xubW0va2h1Z2VwYWdlZC5jOjExOTQ6XHRcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy0xMTk1LVx0XHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTIxMy1cdFx0XHRyZXN1bHQgPSBTQ0FOX0VYQ0VFRF9TV0FQX1BURTtcbm1tL2todWdlcGFnZWQuYzoxMjE0Olx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTEyMTUtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTIzMS1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcbm1tL2todWdlcGFnZWQuYzoxMjMyOlx0XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTEyMzMtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTIzNi1cdFx0XHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XG5tbS9raHVnZXBhZ2VkLmM6MTIzNzpcdFx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy0xMjM4LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jPTEyOTM9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfaHVnZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEzMTEtXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcbm1tL2todWdlcGFnZWQuYzoxMzEyOlx0XHRnb3RvIG91dF9ub2xvY2s7XG5tbS9raHVnZXBhZ2VkLmMtMTMxMy1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTMxNS1cdFx0cmVzdWx0ID0gU0NBTl9BTExPQ19IVUdFX1BBR0VfRkFJTDtcbm1tL2todWdlcGFnZWQuYzoxMzE2Olx0XHRnb3RvIG91dF9ub2xvY2s7XG5tbS9raHVnZXBhZ2VkLmMtMTMxNy1cdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTMyMy1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG5tbS9raHVnZXBhZ2VkLmM6MTMyNDpcdFx0Z290byBvdXRfbm9sb2NrO1xubW0va2h1Z2VwYWdlZC5jLTEzMjUtXHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTEzMjktXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xubW0va2h1Z2VwYWdlZC5jOjEzMzA6XHRcdGdvdG8gb3V0X25vbG9jaztcbm1tL2todWdlcGFnZWQuYy0xMzMxLVx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xMzQxLVx0XHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcbm1tL2todWdlcGFnZWQuYzoxMzQyOlx0XHRcdGdvdG8gb3V0X25vbG9jaztcbm1tL2todWdlcGFnZWQuYy0xMzQzLVx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xMzU3LVx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXG5tbS9raHVnZXBhZ2VkLmM6MTM1ODpcdFx0Z290byBvdXRfdXBfd3JpdGU7XG5tbS9raHVnZXBhZ2VkLmMtMTM1OS1cdC8qIGNoZWNrIGlmIHRoZSBwbWQgaXMgc3RpbGwgdmFsaWQgKi9cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTM2Mi1cdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxubW0va2h1Z2VwYWdlZC5jOjEzNjM6XHRcdGdvdG8gb3V0X3VwX3dyaXRlO1xubW0va2h1Z2VwYWdlZC5jLTEzNjQtXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE0MTEtXHRcdHNwaW5fdW5sb2NrKHBtZF9wdGwpO1xubW0va2h1Z2VwYWdlZC5jOjE0MTI6XHRcdGdvdG8gb3V0X3VwX3dyaXRlO1xubW0va2h1Z2VwYWdlZC5jLTE0MTMtXHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE0MzAtXHRpZiAodW5saWtlbHkocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkpXG5tbS9raHVnZXBhZ2VkLmM6MTQzMTpcdFx0Z290byBvdXRfdXBfd3JpdGU7XG5tbS9raHVnZXBhZ2VkLmMtMTQzMi1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTYwNj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTYzMC1cdFx0Y2MtXHUwMDNlcHJvZ3Jlc3MmIzQzOyYjNDM7O1xubW0va2h1Z2VwYWdlZC5jOjE2MzE6XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTE2MzItXHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE2NDktXHRcdHJlc3VsdCA9IFNDQU5fTk9fUFRFX1RBQkxFO1xubW0va2h1Z2VwYWdlZC5jOjE2NTA6XHRcdGdvdG8gb3V0O1xubW0va2h1Z2VwYWdlZC5jLTE2NTEtXHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE2NjQtXHRcdFx0XHRcdFx0ICAgICBNVEhQX1NUQVRfQ09MTEFQU0VfRVhDRUVEX05PTkUpO1xubW0va2h1Z2VwYWdlZC5jOjE2NjU6XHRcdFx0XHRnb3RvIG91dF91bm1hcDtcbm1tL2todWdlcGFnZWQuYy0xNjY2LVx0XHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTY3My1cdFx0XHRcdFx0XHQgICAgIE1USFBfU1RBVF9DT0xMQVBTRV9FWENFRURfU1dBUCk7XG5tbS9raHVnZXBhZ2VkLmM6MTY3NDpcdFx0XHRcdGdvdG8gb3V0X3VubWFwO1xubW0va2h1Z2VwYWdlZC5jLTE2NzUtXHRcdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xNjgyLVx0XHRcdFx0cmVzdWx0ID0gU0NBTl9QVEVfVUZGRDtcbm1tL2todWdlcGFnZWQuYzoxNjgzOlx0XHRcdFx0Z290byBvdXRfdW5tYXA7XG5tbS9raHVnZXBhZ2VkLmMtMTY4NC1cdFx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE2OTctXHRcdFx0cmVzdWx0ID0gU0NBTl9QVEVfVUZGRDtcbm1tL2todWdlcGFnZWQuYzoxNjk4Olx0XHRcdGdvdG8gb3V0X3VubWFwO1xubW0va2h1Z2VwYWdlZC5jLTE2OTktXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTcwMy1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTlVMTDtcbm1tL2todWdlcGFnZWQuYzoxNzA0Olx0XHRcdGdvdG8gb3V0X3VubWFwO1xubW0va2h1Z2VwYWdlZC5jLTE3MDUtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTcxNC1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTEFaWUZSRUU7XG5tbS9raHVnZXBhZ2VkLmM6MTcxNTpcdFx0XHRnb3RvIG91dF91bm1hcDtcbm1tL2todWdlcGFnZWQuYy0xNzE2LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE3MTktXHRcdFx0cmVzdWx0ID0gU0NBTl9QQUdFX0FOT047XG5tbS9raHVnZXBhZ2VkLmM6MTcyMDpcdFx0XHRnb3RvIG91dF91bm1hcDtcbm1tL2todWdlcGFnZWQuYy0xNzIxLVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE3MzEtXHRcdFx0XHRcdFx0ICAgICBNVEhQX1NUQVRfQ09MTEFQU0VfRVhDRUVEX1NIQVJFRCk7XG5tbS9raHVnZXBhZ2VkLmM6MTczMjpcdFx0XHRcdGdvdG8gb3V0X3VubWFwO1xubW0va2h1Z2VwYWdlZC5jLTE3MzMtXHRcdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xNzQ2LVx0XHRcdHJlc3VsdCA9IFNDQU5fU0NBTl9BQk9SVDtcbm1tL2todWdlcGFnZWQuYzoxNzQ3Olx0XHRcdGdvdG8gb3V0X3VubWFwO1xubW0va2h1Z2VwYWdlZC5jLTE3NDgtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTc1MS1cdFx0XHRyZXN1bHQgPSBTQ0FOX1BBR0VfTFJVO1xubW0va2h1Z2VwYWdlZC5jOjE3NTI6XHRcdFx0Z290byBvdXRfdW5tYXA7XG5tbS9raHVnZXBhZ2VkLmMtMTc1My1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xNzU1LVx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9MT0NLO1xubW0va2h1Z2VwYWdlZC5jOjE3NTY6XHRcdFx0Z290byBvdXRfdW5tYXA7XG5tbS9raHVnZXBhZ2VkLmMtMTc1Ny1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0xNzY3LVx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9DT1VOVDtcbm1tL2todWdlcGFnZWQuYzoxNzY4Olx0XHRcdGdvdG8gb3V0X3VubWFwO1xubW0va2h1Z2VwYWdlZC5jLTE3NjktXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjI0OD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyNzItXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcbm1tL2todWdlcGFnZWQuYzoyMjczOlx0XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy0yMjc0LVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNDEyLVx0XHRcdHJlc3VsdCA9IFNDQU5fRkFJTDtcbm1tL2todWdlcGFnZWQuYzoyNDEzOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbm1tL2todWdlcGFnZWQuYy0yNDE0LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0MjItXHRcdFx0cmVzdWx0ID0gU0NBTl9QVEVfTUFQUEVEX0hVR0VQQUdFO1xubW0va2h1Z2VwYWdlZC5jOjI0MjM6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xubW0va2h1Z2VwYWdlZC5jLTI0MjQtXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjQyNy1cdFx0XHRyZXN1bHQgPSBTQ0FOX1RSVU5DQVRFRDtcbm1tL2todWdlcGFnZWQuYzoyNDI4Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbm1tL2todWdlcGFnZWQuYy0yNDI5LVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0MzgtXHRcdFx0cmVzdWx0ID0gU0NBTl9QQUdFX0RJUlRZX09SX1dSSVRFQkFDSztcbm1tL2todWdlcGFnZWQuYzoyNDM5Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbm1tL2todWdlcGFnZWQuYy0yNDQwLVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0NDMtXHRcdFx0cmVzdWx0ID0gU0NBTl9ERUxfUEFHRV9MUlU7XG5tbS9raHVnZXBhZ2VkLmM6MjQ0NDpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG5tbS9raHVnZXBhZ2VkLmMtMjQ0NS1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNDQ5LVx0XHRcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcbm1tL2todWdlcGFnZWQuYzoyNDUwOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbm1tL2todWdlcGFnZWQuYy0yNDUxLVx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0NzUtXHRcdFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xubW0va2h1Z2VwYWdlZC5jOjI0NzY6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xubW0va2h1Z2VwYWdlZC5jLTI0NzctXHRcdH1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjQ5Ni1cdFx0XHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XG5tbS9raHVnZXBhZ2VkLmM6MjQ5NzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG5tbS9raHVnZXBhZ2VkLmMtMjQ5OC1cdFx0fVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjcxLVxubW0va2h1Z2VwYWdlZC5jOjI2NzI6XHRnb3RvIG91dDtcbm1tL2todWdlcGFnZWQuYy0yNjczLVxuLS1cbm1tL2todWdlcGFnZWQuYz0zMjEwPWludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2todWdlcGFnZWQuYy0zMjUyLVx0XHRcdFx0bGFzdF9mYWlsID0gcmVzdWx0O1xubW0va2h1Z2VwYWdlZC5jOjMyNTM6XHRcdFx0XHRnb3RvIG91dF9ub2xvY2s7XG5tbS9raHVnZXBhZ2VkLmMtMzI1NC1cdFx0XHR9XG4tLVxubW0va2h1Z2VwYWdlZC5jLTMyODEtXHRcdFx0LyogT3RoZXIgZXJyb3IsIGV4aXQgKi9cbm1tL2todWdlcGFnZWQuYzozMjgyOlx0XHRcdGdvdG8gb3V0X21heWJlbG9jaztcbm1tL2todWdlcGFnZWQuYy0zMjgzLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTA2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBGbG93IGluIGBraHVnZXBhZ2VkLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIGBvdXRfdW5sb2NrYCBhbmQgaXRzIGNvbm5lY3Rpb24gdG8gYG91dGAgd2l0aGluIHRoZSBgbW0va2h1Z2VwYWdlZC5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgZnJvbSBsaW5lcyAyNjYwIHRvIDI3MDAuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgaG93IHRoaXMgc3BlY2lmaWMgdW5sb2NrIG9wZXJhdGlvbiwgcmVsZXZhbnQgdG8gaHVnZSBwYWdlcywgY29ubmVjdHMgdG8gb3RoZXIgZnVuY3Rpb25hbGl0aWVzLCBsaWtlbHkgZGVhbGxvY2F0aW9uIG9yIGZyZWVpbmcgbWVjaGFuaXNtcywgcmVwcmVzZW50ZWQgYnkgYG91dGAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIGRpcmVjdCBjYWxsIHBhdGgsIG9yIHBlcmhhcHMgYW4gaW5kaXJlY3QgbWVjaGFuaXNtIHRoYXQgaXMgdHJpZ2dlcmVkIGFmdGVyIHRoZSBgb3V0X3VubG9ja2Agc3RhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHRyYWNrIGFueSBjb25kaXRpb25hbCBsb2dpYywgc3RhdGUgY2hhbmdlcywgb3IgcG90ZW50aWFsIGRhdGEgZGVwZW5kZW5jaWVzIGluIHRoaXMgc2VjdGlvbiB0byB0cmFjZSB0aGUgZW50aXJlIG1lbW9yeSBtYW5hZ2VtZW50IHNlcXVlbmNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjcml0aWNhbCB2YXJpYWJsZXMsIGRhdGEgc3RydWN0dXJlcywgb3IgZnVuY3Rpb24gY2FsbHMgaW4gdGhpcyB2aWNpbml0eSB0aGF0IGRlZmluZSB3aGF0IGhhcHBlbnMgbmV4dCBpbiB0aGUgcHJvY2Vzcy4gVGhpcyBzcGVjaWZpYyBjaHVuayBvZiBjb2RlIGlzIGxpa2VseSBrZXkgdG8gYSBsYXJnZXIgc3lzdGVtIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjYwOlx0XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUyxcbjI2NjE6XHRcdFx0XHRcdCAgICAgIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuMjY2MjpcdFx0XHRpZiAoaXNfc2htZW0pXG4yNjYzOlx0XHRcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TSE1FTSxcbjI2NjQ6XHRcdFx0XHRcdFx0ICAgICAgLWZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4yNjY1Olx0XHRcdGZvbGlvLVx1MDAzZW1hcHBpbmcgPSBOVUxMO1xuMjY2NjpcdFx0XHRmb2xpb19jbGVhcl9hY3RpdmUoZm9saW8pO1xuMjY2NzpcdFx0XHRmb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XG4yNjY4Olx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4yNjY5Olx0XHRcdGZvbGlvX3B1dF9yZWZzKGZvbGlvLCAyICYjNDM7IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4yNjcwOlx0XHR9XG4yNjcxOlx0XG4yNjcyOlx0XHRnb3RvIG91dDtcbjI2NzM6XHRcbjI2NzQ6XHRyb2xsYmFjazpcbjI2NzU6XHRcdC8qIFNvbWV0aGluZyB3ZW50IHdyb25nOiByb2xsIGJhY2sgcGFnZSBjYWNoZSBjaGFuZ2VzICovXG4yNjc2Olx0XHRpZiAobnJfbm9uZSkge1xuMjY3NzpcdFx0XHR4YXNfbG9ja19pcnEoXHUwMDI2eGFzKTtcbjI2Nzg6XHRcdFx0bWFwcGluZy1cdTAwM2VucnBhZ2VzIC09IG5yX25vbmU7XG4yNjc5Olx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4yNjgwOlx0XHRcdHNobWVtX3VuY2hhcmdlKG1hcHBpbmctXHUwMDNlaG9zdCwgbnJfbm9uZSk7XG4yNjgxOlx0XHR9XG4yNjgyOlx0XG4yNjgzOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRtcCwgXHUwMDI2cGFnZWxpc3QsIGxydSkge1xuMjY4NDpcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuMjY4NTpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMjY4NjpcdFx0XHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XG4yNjg3Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4yNjg4Olx0XHR9XG4yNjg5Olx0XG4yNjkwOlx0XHRuZXdfZm9saW8tXHUwMDNlbWFwcGluZyA9IE5VTEw7XG4yNjkxOlx0XG4yNjkyOlx0XHRmb2xpb191bmxvY2sobmV3X2ZvbGlvKTtcbjI2OTM6XHRcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xuMjY5NDpcdG91dDpcbjI2OTU6XHRcdGlmIChuZWVkX3VubG9jaylcbjI2OTY6XHRcdFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XG4yNjk3Olx0XHRWTV9CVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2cGFnZWxpc3QpKTtcbjI2OTg6XHRcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcbjI2OTk6XHRcdHJldHVybiByZXN1bHQ7XG4yNzAwOlx0fVxuMjcwMTpcdFxuMjcwMjpcdHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbjI3MDM6XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCxcbjI3MDQ6XHRcdFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA5MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKktodWdlcGFnZWQgYW5kIHRoZSBFbHVzaXZlIGBvdXRfdW5sb2NrYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgbW0va2h1Z2VwYWdlZC5jYCBhZ2Fpbiwgc3BlY2lmaWNhbGx5IHRyeWluZyB0byB0cmFjZSB0aGUgZmxvdyBvZiBgb3V0X3VubG9ja2AuIE15IG1lbW9yeSBpc24mIzM5O3QgcGVyZmVjdCwgYW5kIEkga25vdyBJJiMzOTt2ZSBiZWVuIGluIHRoaXMgY29kZSBiZWZvcmUsIGJ1dCBhIHF1aWNrIHJlbWluZGVyIGlzIGFsd2F5cyBnb29kLiBMZXQmIzM5O3Mgc2VlLi4ud2hlcmUgKmV4YWN0bHkqIGlzIHRoYXQgYG91dF91bmxvY2tgIGZ1bmN0aW9uIGRlZmluZWQgd2l0aGluIHRoaXMgZmlsZT8gQWgsIHJpZ2h0LCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGxpa2VseSB0byBiZSBzb21ld2hlcmUgaW4gbGluZXMgMjY0MC0yNjc1LiBUaW1lIHRvIGdvIHRha2UgYSBsb29rIGFuZCBqb2cgbXkgbWVtb3J5LiBUaGF0IHNob3VsZCBnZXQgbWUgb3JpZW50ZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjQwOlx0XHQvKiBKb2luIGFsbCB0aGUgc21hbGwgZW50cmllcyBpbnRvIGEgc2luZ2xlIG11bHRpLWluZGV4IGVudHJ5LiAqL1xuMjY0MTpcdFx0eGFzX3NldF9vcmRlcihcdTAwMjZ4YXMsIHN0YXJ0LCBIUEFHRV9QTURfT1JERVIpO1xuMjY0MjpcdFx0eGFzX3N0b3JlKFx1MDAyNnhhcywgbmV3X2ZvbGlvKTtcbjI2NDM6XHRcdFdBUk5fT05fT05DRSh4YXNfZXJyb3IoXHUwMDI2eGFzKSk7XG4yNjQ0Olx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjY0NTpcdFxuMjY0NjpcdFx0LypcbjI2NDc6XHRcdCAqIFJlbW92ZSBwdGUgcGFnZSB0YWJsZXMsIHNvIHdlIGNhbiByZS1mYXVsdCB0aGUgcGFnZSBhcyBodWdlLlxuMjY0ODpcdFx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxuMjY0OTpcdFx0ICovXG4yNjUwOlx0XHRyZXRyYWN0X3BhZ2VfdGFibGVzKG1hcHBpbmcsIHN0YXJ0KTtcbjI2NTE6XHRcdGlmIChjYyBcdTAwMjZcdTAwMjYgIWNjLVx1MDAzZWlzX2todWdlcGFnZWQpXG4yNjUyOlx0XHRcdHJlc3VsdCA9IFNDQU5fUFRFX01BUFBFRF9IVUdFUEFHRTtcbjI2NTM6XHRcdGZvbGlvX3VubG9jayhuZXdfZm9saW8pO1xuMjY1NDpcdFxuMjY1NTpcdFx0LypcbjI2NTY6XHRcdCAqIFRoZSBjb2xsYXBzZSBoYXMgc3VjY2VlZGVkLCBzbyBmcmVlIHRoZSBvbGQgZm9saW9zLlxuMjY1NzpcdFx0ICovXG4yNjU4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRtcCwgXHUwMDI2cGFnZWxpc3QsIGxydSkge1xuMjY1OTpcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuMjY2MDpcdFx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsXG4yNjYxOlx0XHRcdFx0XHQgICAgICAtZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbjI2NjI6XHRcdFx0aWYgKGlzX3NobWVtKVxuMjY2MzpcdFx0XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU0hNRU0sXG4yNjY0Olx0XHRcdFx0XHRcdCAgICAgIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuMjY2NTpcdFx0XHRmb2xpby1cdTAwM2VtYXBwaW5nID0gTlVMTDtcbjI2NjY6XHRcdFx0Zm9saW9fY2xlYXJfYWN0aXZlKGZvbGlvKTtcbjI2Njc6XHRcdFx0Zm9saW9fY2xlYXJfdW5ldmljdGFibGUoZm9saW8pO1xuMjY2ODpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMjY2OTpcdFx0XHRmb2xpb19wdXRfcmVmcyhmb2xpbywgMiAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg2MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkxvY2F0aW5nIHRoZSBNaXNzaW5nIFBpZWNlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgb3V0X3VubG9ja2AgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZGVmaW5lZC4gSSBrbm93IGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCYjMzk7cyBodWdlIHBhZ2UgbWFuYWdlbWVudCwgbGlrZWx5IHdpdGhpbiB0aGUgYGtodWdlcGFnZWRgIHN1YnN5c3RlbS4gVGhlcmVmb3JlLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBtbS9raHVnZXBhZ2VkLmNgIGZpbGUuIEkmIzM5O2xsIGRvIGEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aGF0IHNvdXJjZSBmaWxlIGZvciB0aGUgZXhhY3QgbGFiZWwsIGBvdXRfdW5sb2NrOmAuIFRoYXQgc2hvdWxkIGxlYWQgbWUgZGlyZWN0bHkgdG8gdGhlIGZ1bmN0aW9uJiMzOTtzIGRlY2xhcmF0aW9uIG9yIGRlZmluaXRpb24sIGFuZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gSXTigJlzIHRoZSBvYnZpb3VzIGZpcnN0IHRoaW5nIHRvIGNoZWNrLCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdXRfdW5sb2NrOiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MjI0OD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI1MDUtXHRcdGNvbnRpbnVlO1xubW0va2h1Z2VwYWdlZC5jOjI1MDY6b3V0X3VubG9jazpcbm1tL2todWdlcGFnZWQuYy0yNTA3LVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE4MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgbW0va2h1Z2VwYWdlZC5jYCBhbmQgemVybyBpbiBvbiBsaW5lcyAyNTA1LTI1MzAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0IGEgc3BlY2lmaWMgcGFydCBvZiBpdCwgcmVsYXRlZCB0byBraHVnZXBhZ2VkLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gZGVhbCB3aXRoIGEgY3J1Y2lhbCBhc3BlY3Qgb2YgdGhlIHByb2Nlc3MsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYWxsb2NhdGluZyBvciBtYW5hZ2luZyBodWdlIHBhZ2VzLCBzaW5jZSB0aGF0JiMzOTtzIHdoYXQga2h1Z2VwYWdlZCBpcyBhbGwgYWJvdXQuIAoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gSXMgdGhpcyBhIGNvcmUgYWxsb2NhdGlvbiBmdW5jdGlvbj8gSXMgaXQgaGFuZGxpbmcgcGFnZSBmYXVsdHMsIHByZWZldGNoaW5nLCBvciBwZXJoYXBzIHNvbWUga2luZCBvZiBkZWZyYWdtZW50YXRpb24gb3IgY29tcGFjdGlvbiByZWxhdGVkIHRvIGh1Z2UgcGFnZSBtYW5hZ2VtZW50PyBHaXZlbiB0aGUgbGluZSBudW1iZXJzLCBpdCYjMzk7cyBsaWtlbHkgYSByZWxhdGl2ZWx5IHNlbGYtY29udGFpbmVkIGNodW5rIG9mIGNvZGUsIHdoaWNoIGhlbHBzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9uYWwgYnJhbmNoZXMsIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IGhpbnQgb2YgbG9jayBhY3F1aXNpdGlvbiBvciByZWxlYXNlLCBhcyBjb25jdXJyZW5jeSBpcyBhbHdheXMgYSBrZXkgY29uc2lkZXJhdGlvbiBpbiBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIGVycm9yIGhhbmRsaW5nLCBiZWNhdXNlIHRoZSBrZXJuZWwgaXMgbmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgYSBwYXNzIG9uIHRoYXQuIE15IG92ZXJhbGwgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGVzZSBsaW5lcywgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwga2h1Z2VwYWdlZCBtZWNoYW5pc20uIE5vdywgbGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1MDU6XHRcdFx0Y29udGludWU7XG4yNTA2Olx0b3V0X3VubG9jazpcbjI1MDc6XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjI1MDg6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjI1MDk6XHRcdFx0Z290byB4YV91bmxvY2tlZDtcbjI1MTA6XHRcdH1cbjI1MTE6XHRcbjI1MTI6XHR4YV9sb2NrZWQ6XG4yNTEzOlx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjUxNDpcdHhhX3VubG9ja2VkOlxuMjUxNTpcdFxuMjUxNjpcdFx0LypcbjI1MTc6XHRcdCAqIElmIGNvbGxhcHNlIGlzIHN1Y2Nlc3NmdWwsIGZsdXNoIG11c3QgYmUgZG9uZSBub3cgYmVmb3JlIGNvcHlpbmcuXG4yNTE4Olx0XHQgKiBJZiBjb2xsYXBzZSBpcyB1bnN1Y2Nlc3NmdWwsIGRvZXMgZmx1c2ggYWN0dWFsbHkgbmVlZCB0byBiZSBkb25lP1xuMjUxOTpcdFx0ICogRG8gaXQgYW55d2F5LCB0byBjbGVhciB0aGUgc3RhdGUuXG4yNTIwOlx0XHQgKi9cbjI1MjE6XHRcdHRyeV90b191bm1hcF9mbHVzaCgpO1xuMjUyMjpcdFxuMjUyMzpcdFx0aWYgKHJlc3VsdCA9PSBTQ0FOX1NVQ0NFRUQgXHUwMDI2XHUwMDI2IG5yX25vbmUgXHUwMDI2XHUwMDI2XG4yNTI0Olx0XHQgICAgIXNobWVtX2NoYXJnZShtYXBwaW5nLVx1MDAzZWhvc3QsIG5yX25vbmUpKVxuMjUyNTpcdFx0XHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XG4yNTI2Olx0XHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkge1xuMjUyNzpcdFx0XHRucl9ub25lID0gMDtcbjI1Mjg6XHRcdFx0Z290byByb2xsYmFjaztcbjI1Mjk6XHRcdH1cbjI1MzA6XHRcbjI1MzE6XHRcdC8qXG4yNTMyOlx0XHQgKiBUaGUgb2xkIGZvbGlvcyBhcmUgbG9ja2VkLCBzbyB0aGV5IHdvbiYjMzk7dCBjaGFuZ2UgYW55bW9yZS5cbjI1MzM6XHRcdCAqL1xuMjUzNDpcdFx0aW5kZXggPSBzdGFydDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5MTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIFJlbGF0ZWQgdG8gRmlsZSBTeXN0ZW0gSW52YWxpZGF0aW9uKioKCk9rYXksIHNvIHRoaXMgYHJvbGxiYWNrYCBkaXJlY3RseSBwb2ludHMgdG8gYSBqdW1wIHRvIGBvdXQ6YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBGaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSBjb21taXQgaXRzZWxmICpkb2VzKi4gTGV0JiMzOTtzIGRpZyBpbnRvIGBjb2xsYXBzZV9maWxlYC4KCkFoLCBiZWZvcmUgdGhpcyBwYXRjaCwgaXQgbG9va3MgbGlrZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYCB3YXNuJiMzOTt0IGhlbGQgYWNyb3NzIGBjb2xsYXBzZV9maWxlYC4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBhcmVhIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgcmlnaHQuIE5vdywgdGhhdCByYWlzZXMgYSBxdWVzdGlvbi4gV2h5IGV4YWN0bHkgZG9lcyBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgICpyZXF1aXJlKiBgbWFwcGluZy0mZ3Q7aW52YWxpZGF0ZV9sb2NrYCB0byBiZSBoZWxkPyBTb21ldGhpbmcgaXNuJiMzOTt0IHNpdHRpbmcgcXVpdGUgcmlnaHQuCgpBaGEhIExvb2tpbmcgY2xvc2VyIGF0IHRoZSBjb2RlLCBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKWAgY29udGFpbnMgYGxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDttYXBwaW5nLSZndDtpbnZhbGlkYXRlX2xvY2spO2AuIFRoYXQgY29uZmlybXMgaXQuIE5vdywgcHJldmlvdXNseSwgSSByZW1lbWJlciBgY29sbGFwc2VfZmlsZWAgY2FsbGVkIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgLiBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSwgd2hhdCBkaWQgKnRoYXQqIGRvPyBMZXQmIzM5O3MgcmVmcmVzaCBteXNlbGYuCgpJbiBgcGFnZV9jYWNoZV9zeW5jX3JhKClgLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nOiBkb2VzIGl0IGFjdHVhbGx5IGFjcXVpcmUgYGludmFsaWRhdGVfbG9ja2A/IEkmIzM5O2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBgbW0vcmVhZGFoZWFkLmNgIGZpbGUgZm9yIGluc3RhbmNlcyBvZiBgcGFnZV9jYWNoZV9zeW5jX3JhYCB0byBjb25maXJtIGhvdyBpdCBoYW5kbGVzIGxvY2tzLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGNyaXRpY2FsIGFyZWEgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludmFsaWRhdGVfbG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3JlYWRhaGVhZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JlYWRhaGVhZC5jPTE5NT1zdGF0aWMgc3RydWN0IGZvbGlvICpyYWN0bF9hbGxvY19mb2xpbyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbm1tL3JlYWRhaGVhZC5jLTIxNy0gKlxubW0vcmVhZGFoZWFkLmM6MjE4OiAqIENvbnRleHQ6IEZpbGUgaXMgcmVmZXJlbmNlZCBieSBjYWxsZXIsIGFuZCByYWN0bC1cdTAwM2VtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9ja1xubW0vcmVhZGFoZWFkLmMtMjE5LSAqIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGF0IGxlYXN0IGluIHNoYXJlZCBtb2RlLiAgTXV0ZXhlcyBtYXkgYmUgaGVsZCBieVxuLS1cbm1tL3JlYWRhaGVhZC5jPTIyMj12b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4tLVxubW0vcmVhZGFoZWFkLmMtMjQyLVxubW0vcmVhZGFoZWFkLmM6MjQzOlx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayk7XG5tbS9yZWFkYWhlYWQuYy0yNDQtXG4tLVxubW0vcmVhZGFoZWFkLmM9MzI2PXN0YXRpYyB2b2lkIGRvX3BhZ2VfY2FjaGVfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbi0tXG5tbS9yZWFkYWhlYWQuYy0zNDYtXG5tbS9yZWFkYWhlYWQuYzozNDc6XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG5tbS9yZWFkYWhlYWQuYy0zNDgtXHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChyYWN0bCwgbnJfdG9fcmVhZCwgbG9va2FoZWFkX3NpemUpO1xuLS1cbm1tL3JlYWRhaGVhZC5jPTQ4MT12b2lkIHBhZ2VfY2FjaGVfcmFfb3JkZXIoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbi0tXG5tbS9yZWFkYWhlYWQuYy01MTYtXHRub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5tbS9yZWFkYWhlYWQuYzo1MTc6XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG5tbS9yZWFkYWhlYWQuYy01MTgtXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQW5hbHlzaXMgb2YgYSBGaWxlIE1hcHBpbmcgTG9jayBPcmRlcmluZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBjb2xsYXBzZV9maWxlYCBhbmQgaW1tZWRpYXRlbHkgbm90aWNlIHRoZSBjaGFuZ2UgaW4gbG9jayBhY3F1aXNpdGlvbiBvcmRlci4gSXQmIzM5O3MgYWNxdWlyaW5nIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZylgICpiZWZvcmUqIGFueSBmb2xpbyBsb2NrcywgcmlnaHQ/IFRoYXQmIzM5O3MgdGhlIGtleS4gIEkgc2VlIHRoYXQgYGRvX3BhZ2VfY2FjaGVfcmFgIGlzIGFsc28gZ3JhYmJpbmcgdGhpcyBzYW1lIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWRgLgoKVGhlIHByb2JsZW0gd2FzIHRoYXQsICpiZWZvcmUqIHRoaXMgY2hhbmdlLCBgY29sbGFwc2VfZmlsZWAgY291bGQgZGVhZGxvY2sgd2l0aCB0cnVuY2F0ZS4gIGBjb2xsYXBzZV9maWxlYCB3YXMgaG9sZGluZyBmb2xpbyBsb2NrcyB3aGlsZSB0cnVuY2F0ZSB3YXMgcnVubmluZy4gVHJ1bmNhdGUgd291bGQgYWNxdWlyZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfZXhjbHVzaXZlYCBhbmQgdGhlbiAqd2FpdCogb24gdGhvc2Ugc2FtZSBmb2xpbyBsb2Nrcy4gSWYgYGNvbGxhcHNlX2ZpbGVgIHRoZW4gY2FsbGVkIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgLCB3aGljaCBjYWxscyBgZG9fcGFnZV9jYWNoZV9yYSgpYCwgd2UgZ2V0IGEgZGVhZGxvY2suIGBkb19wYWdlX2NhY2hlX3JhYCB0cmllcyB0byBhY3F1aXJlIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWRgIHdoaWxlIGB0cnVuY2F0ZWAgaG9sZHMgdGhlIGV4Y2x1c2l2ZSBsb2NrIGFuZCB3YWl0cyBvbiBmb2xpbyBsb2NrcyBoZWxkIGJ5IGBjb2xsYXBzZV9maWxlYC4gVGhlIGZpeCBpcyB0byB0YWtlIHRoZSBpbnZhbGlkYXRlIGxvY2sgZWFybGllciB0byBhdm9pZCB0aGUgb3JkZXJpbmcgaXNzdWUuCgpUaGUgY29tbWVudCBjbGVhcmx5IGV4cGxhaW5zIHRoZSByYXRpb25hbGU6ICAmIzM0O1Rha2UgaW52YWxpZGF0ZV9sb2NrIGJlZm9yZSBhbnkgZm9saW8gbG9jazogdGhlIHJlYWRhaGVhZCBiZWxvdyBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuJiMzNDsgU21hcnQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHJlYWRhaGVhZCBsb29wIGNoYW5nZXMuIFdlJiMzOTt2ZSBnb3QgYERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsICZhbXA7ZmlsZS0mZ3Q7Zl9yYSwgbWFwcGluZywgaW5kZXgpO2AgYW5kIHRoZW4gYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgLiBUaGUgY29tbWVudHMgZXhwbGFpbiB0aGF0IGBpbnZhbGlkYXRlX2xvY2tgIGlzIGFscmVhZHkgaGVsZCwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gcmVhY3F1aXJlIGl0LiAgQWxzbywgdGhlIHJlYWRhaGVhZCBoZWxwZXIgaXQgcmVwbGFjZXMgZG9lcyBub3QgY2xhbXAgdG8gRU9GLCBzbyB0aGlzIG5ldyBpbXBsZW1lbnRhdGlvbiBlbnN1cmVzIHRoYXQgcmVhZGFoZWFkIGRvZXMgbm90IGdvIHBhc3QgRU9GLiBUaGUgdmFyaWFibGUgYHJhY3RsYCBpcyBpbml0aWFsaXplZCwgYW5kIGFsbCB0aGUgZmllbGRzIGFyZSBmaWxsZWQuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBtZW1vcnkgbGVha3Mgb3IgbWVtb3J5IHJlYWQgZXJyb3JzLgoKVGhlIHBhdGNoIGluY2x1ZGVzIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uOiBgYm9vbCBuZWVkX3VubG9jayA9IGZhbHNlO2AgYW5kIHRoZSBjb25kaXRpb25hbCBmb3IgdGhlIGludmFsaWRhdGUgbG9jayBpcyBub3c6IGBpZiAoIWlzX3NobWVtKSB7IGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTsgbmVlZF91bmxvY2sgPSB0cnVlOyB9YC4gVGhpcyBtYWtlcyBzdXJlIHdlIGFjdHVhbGx5IHJlbGVhc2UgdGhlIGxvY2sgaWYgd2UgYWNxdWlyZSBpdC4gVGhlIGBERUZJTkVfUkVBREFIRUFEYCBpcyBhbHNvIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBzbyBubyBwcm9ibGVtcyB0aGVyZS4gIFRoZSBpbmRleCBjYWxjdWxhdGlvbiB1c2VzIHZhbHVlcyBpbml0aWFsaXplZCBlYXJsaWVyLCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpTbyBmYXIsIGl0IGxvb2tzIGNsZWFuLgoKTGV0JiMzOTtzIGNhcmVmdWxseSB2ZXJpZnkgdGhlIGxvb3Agd2l0aCB0aGUgYGluZGV4YCBjb3VudGVyLiAgYGluZGV4YCBzdGFydHMgYXQgMCwgZ29lcyB0byBgZW5kYCB2aWEgYHhhc2AuIE5vIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiAgVGhlIGxvb3AgaW4gYGNvbGxhcHNlX2ZpbGVgIHdpdGggdGhlIGB4YXNfZm9yX2VhY2hgIGlzIHNhZmUuCgpOb3csIGNoZWNraW5nIGFnYWluc3QgS01TQU4gY3JpdGVyaWE6CgoxLiAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSBkaXJlY3RseS4gVGhpcyBpcyBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCwgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuCjIuICBDb25kaXRpb25hbCBsb2dpYyBzZWVtcyBzYWZlLiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9ucyBhcmUgaW5pdGlhbGl6ZWQuCgpPdmVyYWxsLCBpdCBsb29rcyBsaWtlIGEgd2VsbC10aG91Z2h0LW91dCBmaXggdGhhdCBhZGRyZXNzZXMgYSBjbGVhciBkZWFkbG9jayBjb25kaXRpb24sIGFuZCBJJiMzOTttIG5vdCBzZWVpbmcgYW55IGltbWVkaWF0ZSBLTVNBTiB2aW9sYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMwMDpcdFx0XHRcdGJyZWFrO1xuMjMwMTpcdFx0XHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuMjMwMjpcdFx0XHRpZiAoIXhhc19ub21lbShcdTAwMjZ4YXMsIEdGUF9LRVJORUwpKSB7XG4yMzAzOlx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjMwNDpcdFx0XHRcdGdvdG8gcm9sbGJhY2s7XG4yMzA1Olx0XHRcdH1cbjIzMDY6XHRcdH0gd2hpbGUgKDEpO1xuMjMwNzpcdFxuMjMwODpcdFx0Zm9yIChpbmRleCA9IHN0YXJ0OyBpbmRleCBcdTAwM2MgZW5kOykge1xuMjMwOTpcdFx0XHR4YXNfc2V0KFx1MDAyNnhhcywgaW5kZXgpO1xuMjMxMDpcdFx0XHRmb2xpbyA9IHhhc19sb2FkKFx1MDAyNnhhcyk7XG4yMzExOlx0XG4yMzEyOlx0XHRcdFZNX0JVR19PTihpbmRleCAhPSB4YXMueGFfaW5kZXgpO1xuMjMxMzpcdFx0XHRpZiAoaXNfc2htZW0pIHtcbjIzMTQ6XHRcdFx0XHRpZiAoIWZvbGlvKSB7XG4yMzE1Olx0XHRcdFx0XHQvKlxuMjMxNjpcdFx0XHRcdFx0ICogU3RvcCBpZiBleHRlbnQgaGFzIGJlZW4gdHJ1bmNhdGVkIG9yXG4yMzE3Olx0XHRcdFx0XHQgKiBob2xlLXB1bmNoZWQsIGFuZCBpcyBub3cgY29tcGxldGVseVxuMjMxODpcdFx0XHRcdFx0ICogZW1wdHkuXG4yMzE5Olx0XHRcdFx0XHQgKi9cbjIzMjA6XHRcdFx0XHRcdGlmIChpbmRleCA9PSBzdGFydCkge1xuMjMyMTpcdFx0XHRcdFx0XHRpZiAoIXhhc19uZXh0X2VudHJ5KFx1MDAyNnhhcywgZW5kIC0gMSkpIHtcbjIzMjI6XHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBTQ0FOX1RSVU5DQVRFRDtcbjIzMjM6XHRcdFx0XHRcdFx0XHRnb3RvIHhhX2xvY2tlZDtcbjIzMjQ6XHRcdFx0XHRcdFx0fVxuMjMyNTpcdFx0XHRcdFx0fVxuMjMyNjpcdFx0XHRcdFx0bnJfbm9uZSYjNDM7JiM0Mzs7XG4yMzI3Olx0XHRcdFx0XHRpbmRleCYjNDM7JiM0Mzs7XG4yMzI4Olx0XHRcdFx0XHRjb250aW51ZTtcbjIzMjk6XHRcdFx0XHR9XG4yMzMwOlx0XG4yMzMxOlx0XHRcdFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSB8fCAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpIHtcbjIzMzI6XHRcdFx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4yMzMzOlx0XHRcdFx0XHQvKiBzd2FwIGluIG9yIGluc3RhbnRpYXRlIGZhbGxvY2F0ZWQgcGFnZSAqL1xuMjMzNDpcdFx0XHRcdFx0aWYgKHNobWVtX2dldF9mb2xpbyhtYXBwaW5nLVx1MDAzZWhvc3QsIGluZGV4LCAwLFxuMjMzNTpcdFx0XHRcdFx0XHRcdFx1MDAyNmZvbGlvLCBTR1BfTk9BTExPQykpIHtcbjIzMzY6XHRcdFx0XHRcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMjMzNzpcdFx0XHRcdFx0XHRnb3RvIHhhX3VubG9ja2VkO1xuMjMzODpcdFx0XHRcdFx0fVxuMjMzOTpcdFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE4NQoJCQkJCQkJb3V0cHV0OiAyNTMKCQkJCQkJCXRob3VnaHRzOiA4MjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEtNU0FOIE5lZWRzIEZsYWcgZm9yIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29kZSBleHBsaWNpdGx5IG1hbmFnZXMgdGhlIGxvb3AgaW5kZXggKGBpbmRleGApLCBzbyBpbml0aWFsaXphdGlvbiBpc24mIzM5O3QgYW4gaXNzdWUuIFRoZW4sIHdlIHNlZSB0aGF0IGBuZWVkX3VubG9ja2AgaXMgYWxzbyBpbml0aWFsaXplZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGF0IGl0IGlzIHByb3Blcmx5IGhhbmRsZWQgZXZlbiBpbiB0aGUgZXZlbnQgb2YgYW4gYGFsbG9jX2NoYXJnZV9mb2xpb2AgZmFpbHVyZS4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgYW55IG5ldyBzY2VuYXJpb3Mgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZC4gRXZlbiBpZiBgYWxsb2NfY2hhcmdlX2ZvbGlvYCBmYWlscywgdGhlIGBuZWVkX3VubG9ja2AgZmxhZyBwcm9wZXJseSBjb250cm9scyB0aGUgbG9ja2luZy91bmxvY2tpbmcgYmVoYXZpb3IgaW4gYWxsIGV4aXQgcGF0aHMsIGluY2x1ZGluZyB0aGUgZXJyb3IgcGF0aHMuCgpNb3Zpbmcgb24sIGByYWN0bGAgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZWQgdXNpbmcgYERFRklORV9SRUFEQUhFQUQoKWAsIHdoaWNoIGVuc3VyZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgcmVtYWluaW5nIHN0cnVjdCBmaWVsZHMuIFRoaXMgaXMgZ29vZC4gRnVydGhlciwgdGhlIHVzZSBvZiBgZW9mYCBhbmQgYm91bmRzIGNoZWNrcyBhcHBlYXIgc291bmQuIFdlJiMzOTtyZSB1c2luZyBzdGFuZGFyZCBwYWdlIGNhY2hlIHJlYWRhaGVhZCB3aXRoIGEgYG1pbihlbmQsIGVvZilgIGNhbGN1bGF0aW9uLiBUaGUgcGF0Y2ggbGV2ZXJhZ2VzIGV4aXN0aW5nIGZpbGVzeXN0ZW0gSS9PIHByYWN0aWNlcyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMgaGVyZS4KCk5vdywgd2hhdCBpcyB0aGUgKmJ1ZyogdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3Nlcz8gSXQmIzM5O3MgYSBsb2NraW5nIGRlYWRsb2NrLiBTcGVjaWZpY2FsbHksIGEgZGVhZGxvY2sgLyBpbnZlcnNpb24gYmV0d2VlbiB0aGUgYGludmFsaWRhdGVfbG9ja2AgYW5kIHRoZSBmb2xpbyBsb2NrLiBJdCYjMzk7cyBhYm91dCByZWFkYWhlYWQgcG90ZW50aWFsbHkgZ3JhYmJpbmcgdGhlIGBpbnZhbGlkYXRlX2xvY2tgIHdoaWxlICphbHJlYWR5KiBob2xkaW5nIGEgZm9saW8gbG9jaywgdmVyc3VzIHRydW5jYXRlIGdyYWJiaW5nIHRoZSBgaW52YWxpZGF0ZV9sb2NrYCBhbmQgdGhlbiB3YWl0aW5nIG9uIHRoZSBmb2xpbyBsb2NrLiBMT0NLREVQIGlzIHRoZSB0b29sIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIGNhdGNoaW5nIGFuZCBmbGFnZ2luZyB0aGVzZSBsb2NraW5nIGlzc3Vlcywgbm90IEtNU0FOLgoKVGhpbmtpbmcgYWJvdXQgdGhlIEtNU0FOIHJ1bGVzOgoKMS4gIFRoaXMgcGF0Y2ggKnByaW1hcmlseSogZml4ZXMgYSBsb2NraW5nIGhpZXJhcmNoeSBpc3N1ZS4gS01TQU4gZG9lc24mIzM5O3QgZm9jdXMgb24gbG9ja2luZyBpc3N1ZXM7IExPQ0tERVAgZG9lcy4KMi4gIEFsbCBzdGFjay0gYW5kIGhlYXAtYWxsb2NhdGVkIHN0cnVjdHVyZXMgYXJlIGVpdGhlciBmdWxseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgYmVmb3JlIGFueSBhY2Nlc3Mgb2NjdXJzIChlLmcuLCBgbmVlZF91bmxvY2tgLCBgcmFjdGxgLCBldGMuKQozLiAgTm8gdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGJlaW5nIHRvdWNoZWQgb3IgaW50cm9kdWNlZC4KNC4gIFRoZSBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBiZWNhdXNlIHRoZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGxvY2tpbmcgaXNzdWVzIGFyZSB0cmFja2VkIGJ5IExPQ0tERVAuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgc2V0IHRvIGBmYWxzZWAuIFRpbWUgdG8gbW92ZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgY29sbGFwc2VfZmlsZSgpYCBpbiBgbW0va2h1Z2VwYWdlZC5jYCB0byBwcmV2ZW50IGEgbG9ja2luZyBkZWFkbG9jayBiZXR3ZWVuIGBtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9ja2AgYW5kIGZvbGlvIGxvY2tzIChlLmcuIGR1cmluZyBjb25jdXJyZW50IHRydW5jYXRpb24pLiBJdCB0YWtlcyBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYCBwcmlvciB0byBmb2xpbyBsb2NraW5nIGFuZCBkaXJlY3RseSBpbnZva2VzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpYCBpbnN0ZWFkIG9mIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgLlxuXG4tIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlcyAoYG5lZWRfdW5sb2NrYCwgYHJhY3RsYCwgYGVvZmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZDogYG5lZWRfdW5sb2NrYCBpcyBpbml0aWFsaXplZCB0byBgZmFsc2VgLCBhbmQgYHJhY3RsYCBpcyBpbml0aWFsaXplZCB2aWEgYERFRklORV9SRUFEQUhFQUQoKWAsIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgYWxsIHVuc3BlY2lmaWVkIHN0cnVjdHVyZSBmaWVsZHMgcGVyIEMgZGVzaWduYXRlZCBpbml0aWFsaXplciBzZW1hbnRpY3MuXG4tIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbHRlciBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgaW9jdGxzLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZC5cbi0gTG9ja2luZyBjb3JyZWN0bmVzcyBhbmQgZGVhZGxvY2tzIGFkZHJlc3NlZCBoZXJlIGFyZSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBjb25maWdzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBjb2xsYXBzZV9maWxlKClgIGluIGBtbS9raHVnZXBhZ2VkLmNgIHRvIHByZXZlbnQgYSBsb2NraW5nIGRlYWRsb2NrIGJldHdlZW4gYG1hcHBpbmctXHUwMDNlaW52YWxpZGF0ZV9sb2NrYCBhbmQgZm9saW8gbG9ja3MgKGUuZy4gZHVyaW5nIGNvbmN1cnJlbnQgdHJ1bmNhdGlvbikuIEl0IHRha2VzIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZylgIHByaW9yIHRvIGZvbGlvIGxvY2tpbmcgYW5kIGRpcmVjdGx5IGludm9rZXMgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgIGluc3RlYWQgb2YgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKWAuXG5cbi0gQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChgbmVlZF91bmxvY2tgLCBgcmFjdGxgLCBgZW9mYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkOiBgbmVlZF91bmxvY2tgIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAsIGFuZCBgcmFjdGxgIGlzIGluaXRpYWxpemVkIHZpYSBgREVGSU5FX1JFQURBSEVBRCgpYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyBhbGwgdW5zcGVjaWZpZWQgc3RydWN0dXJlIGZpZWxkcyBwZXIgQyBkZXNpZ25hdGVkIGluaXRpYWxpemVyIHNlbWFudGljcy5cbi0gVGhlIGNoYW5nZXMgZG8gbm90IGFsdGVyIGtlcm5lbC10by11c2VyIGRhdGEgY29waWVzLCBpb2N0bHMsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy5cbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBleHBvc2VkLlxuLSBMb2NraW5nIGNvcnJlY3RuZXNzIGFuZCBkZWFkbG9ja3MgYWRkcmVzc2VkIGhlcmUgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGNvbmZpZ3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowNzozMS41NTE3MDE5MjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA3OTA0MDk2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb2xsYXBzZV9maWxlXCIsXG4gICAgXCJjb2xsYXBzZV9zY2FuX2ZpbGVcIixcbiAgICBcImNvbGxhcHNlX3NpbmdsZV9wbWRcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBjb2xsYXBzZV9maWxlKClgIGluIGBtbS9raHVnZXBhZ2VkLmNgIHRvIHByZXZlbnQgYSBsb2NraW5nIGRlYWRsb2NrIGJldHdlZW4gYG1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9ja2AgYW5kIGZvbGlvIGxvY2tzIChlLmcuIGR1cmluZyBjb25jdXJyZW50IHRydW5jYXRpb24pLiBJdCB0YWtlcyBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYCBwcmlvciB0byBmb2xpbyBsb2NraW5nIGFuZCBkaXJlY3RseSBpbnZva2VzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpYCBpbnN0ZWFkIG9mIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgLlxcblxcbi0gQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChgbmVlZF91bmxvY2tgLCBgcmFjdGxgLCBgZW9mYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkOiBgbmVlZF91bmxvY2tgIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAsIGFuZCBgcmFjdGxgIGlzIGluaXRpYWxpemVkIHZpYSBgREVGSU5FX1JFQURBSEVBRCgpYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyBhbGwgdW5zcGVjaWZpZWQgc3RydWN0dXJlIGZpZWxkcyBwZXIgQyBkZXNpZ25hdGVkIGluaXRpYWxpemVyIHNlbWFudGljcy5cXG4tIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbHRlciBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgaW9jdGxzLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcuXFxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGV4cG9zZWQuXFxuLSBMb2NraW5nIGNvcnJlY3RuZXNzIGFuZCBkZWFkbG9ja3MgYWRkcmVzc2VkIGhlcmUgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGNvbmZpZ3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29sbGFwc2VfZmlsZSgpIGluIG1tL2todWdlcGFnZWQuYyB0byBhY3F1aXJlIG1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9jayBlYXJsaWVyIChwcmlvciB0byBsb2NraW5nIGZvbGlvcykgYW5kIGhvbGQgaXQgc2hhcmVkIHRocm91Z2hvdXQgdGhlIGNvbGxhcHNlIG9wZXJhdGlvbiwgcmVwbGFjaW5nIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB3aXRoIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWx0ZXIgbG9ja2luZyBoaWVyYXJjaGllcywgY29uY3VycmVuY3ksIGFuZCByZWFkYWhlYWQgYmVoYXZpb3IgZHVyaW5nIFRIUCBmaWxlIGNvbGxhcHNlIChyZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3Iga2h1Z2VwYWdlZCBzY2FubmluZykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24sIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi9pbnZhbGlkYXRpb24sIGFuZCByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA3OjMxLjU1MTcwOTc2M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMTcwOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmEyMGE5ZTg1YzNmYWQxZWM5ZGU2YjgzMmM3MGI0Y2ViOWEwYWM1YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAxNzowNzozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcXG5pbmRleCAxMWZmOThkNTVjNzZlLi5hNWZjYWZkNTc1MDU2IDEwMDY0NFxcbi0tLSBhL21tL2todWdlcGFnZWQuY1xcbisrKyBiL21tL2todWdlcGFnZWQuY1xcbkBAIC0yMjU3LDYgKzIyNTcsNyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0ID0gU0NBTl9TVUNDRUVEO1xcbiBcXHRpbnQgbnJfbm9uZSA9IDA7XFxuIFxcdGJvb2wgaXNfc2htZW0gPSBzaG1lbV9maWxlKGZpbGUpO1xcbitcXHRib29sIG5lZWRfdW5sb2NrID0gZmFsc2U7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBNQURWX0NPTExBUFNFIGlnbm9yZXMgc2htZW0gaHVnZSBjb25maWcsIHNvIGRvIG5vdCBjaGVjayBzaG1lbVxcbkBAIC0yMjcxLDYgKzIyNzIsMTUgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3dcXG4rXFx0ICogbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFpc19zaG1lbSkge1xcbitcXHRcXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XFxuK1xcdFxcdG5lZWRfdW5sb2NrID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gXFx0bWFwcGluZ19zZXRfdXBkYXRlKFxcdTAwMjZ4YXMsIG1hcHBpbmcpO1xcbiBcXG4gXFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XFxuQEAgLTIzMzcsMTAgKzIzNDcsMjAgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH0gZWxzZSB7XFx0LyogIWlzX3NobWVtICovXFxuIFxcdFxcdFxcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XFxuK1xcdFxcdFxcdFxcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIFxcdTAwMjZmaWxlLVxcdTAwM2VmX3JhLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIG1hcHBpbmcsIGluZGV4KTtcXG4rXFx0XFx0XFx0XFx0cGdvZmZfdCBlb2YgPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQobWFwcGluZy1cXHUwMDNlaG9zdCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBQQUdFX1NJWkUpO1xcbitcXG4gXFx0XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuLVxcdFxcdFxcdFxcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgXFx1MDAyNmZpbGUtXFx1MDAzZWZfcmEsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZmlsZSwgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZW5kIC0gaW5kZXgpO1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiBpbnZhbGlkYXRlX2xvY2sgaGVsZCBhYm92ZTsgZG9uJ3QgcmV0YWtlIGl0LlxcbitcXHRcXHRcXHRcXHQgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZFxcbitcXHRcXHRcXHRcXHQgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0aWYgKGluZGV4IFxcdTAwM2MgZW9mKVxcbitcXHRcXHRcXHRcXHRcXHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcXHUwMDI2cmFjdGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG1pbihlbmQsIGVvZikgLSBpbmRleCwgMCk7XFxuIFxcdFxcdFxcdFxcdC8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi9cXG4gXFx0XFx0XFx0XFx0bHJ1X2FkZF9kcmFpbigpO1xcbiBcXHRcXHRcXHRcXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyhtYXBwaW5nLCBpbmRleCk7XFxuQEAgLTI2NzIsNiArMjY5Miw4IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XFxuIFxcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xcbiBvdXQ6XFxuK1xcdGlmIChuZWVkX3VubG9jaylcXG4rXFx0XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XFxuIFxcdFZNX0JVR19PTighbGlzdF9lbXB0eShcXHUwMDI2cGFnZWxpc3QpKTtcXG4gXFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xcbiBcXHRyZXR1cm4gcmVzdWx0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowNzozMi4wMTI3MjExNTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjg4Nzk5MDc0NTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29sbGFwc2VfZmlsZVwiLFxuICAgIFwiY29sbGFwc2Vfc2Nhbl9maWxlXCIsXG4gICAgXCJjb2xsYXBzZV9zaW5nbGVfcG1kXCIsXG4gICAgXCJtYWR2aXNlX2NvbGxhcHNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29sbGFwc2VfZmlsZSgpIGluIG1tL2todWdlcGFnZWQuYyB0byBhY3F1aXJlIG1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9jayBlYXJsaWVyIChwcmlvciB0byBsb2NraW5nIGZvbGlvcykgYW5kIGhvbGQgaXQgc2hhcmVkIHRocm91Z2hvdXQgdGhlIGNvbGxhcHNlIG9wZXJhdGlvbiwgcmVwbGFjaW5nIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKSB3aXRoIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWx0ZXIgbG9ja2luZyBoaWVyYXJjaGllcywgY29uY3VycmVuY3ksIGFuZCByZWFkYWhlYWQgYmVoYXZpb3IgZHVyaW5nIFRIUCBmaWxlIGNvbGxhcHNlIChyZWFjaGFibGUgdmlhIG1hZHZpc2UoTUFEVl9DT0xMQVBTRSkgb3Iga2h1Z2VwYWdlZCBzY2FubmluZykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24sIGRlYWRsb2NrcyB3aXRoIGZpbGUgdHJ1bmNhdGlvbi9pbnZhbGlkYXRpb24sIGFuZCByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmEyMGE5ZTg1YzNmYWQxZWM5ZGU2YjgzMmM3MGI0Y2ViOWEwYWM1YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDE3OjA3OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCAxMWZmOThkNTVjNzZlLi5hNWZjYWZkNTc1MDU2IDEwMDY0NFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXG4rKysgYi9tbS9raHVnZXBhZ2VkLmNcbkBAIC0yMjU3LDYgKzIyNTcsNyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRlbnVtIHNjYW5fcmVzdWx0IHJlc3VsdCA9IFNDQU5fU1VDQ0VFRDtcbiBcdGludCBucl9ub25lID0gMDtcbiBcdGJvb2wgaXNfc2htZW0gPSBzaG1lbV9maWxlKGZpbGUpO1xuK1x0Ym9vbCBuZWVkX3VubG9jayA9IGZhbHNlO1xuIFxuIFx0LypcbiBcdCAqIE1BRFZfQ09MTEFQU0UgaWdub3JlcyBzaG1lbSBodWdlIGNvbmZpZywgc28gZG8gbm90IGNoZWNrIHNobWVtXG5AQCAtMjI3MSw2ICsyMjcyLDE1IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmIChyZXN1bHQgIT0gU0NBTl9TVUNDRUVEKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdC8qXG4rXHQgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3dcbitcdCAqIG5lZWRzIGl0LCBhbmQgdHJ1bmNhdGUgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy5cbitcdCAqL1xuK1x0aWYgKCFpc19zaG1lbSkge1xuK1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG4rXHRcdG5lZWRfdW5sb2NrID0gdHJ1ZTtcbitcdH1cbitcbiBcdG1hcHBpbmdfc2V0X3VwZGF0ZShcdTAwMjZ4YXMsIG1hcHBpbmcpO1xuIFxuIFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XG5AQCAtMjMzNywxMCArMjM0NywyMCBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1x0LyogIWlzX3NobWVtICovXG4gXHRcdFx0aWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpIHtcbitcdFx0XHRcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIFx1MDAyNmZpbGUtXHUwMDNlZl9yYSxcbitcdFx0XHRcdFx0XHQgIG1hcHBpbmcsIGluZGV4KTtcbitcdFx0XHRcdHBnb2ZmX3QgZW9mID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKG1hcHBpbmctXHUwMDNlaG9zdCksXG4rXHRcdFx0XHRcdFx0XHQgICAgUEFHRV9TSVpFKTtcbitcbiBcdFx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4tXHRcdFx0XHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIFx1MDAyNmZpbGUtXHUwMDNlZl9yYSxcbi1cdFx0XHRcdFx0XHRcdCAgZmlsZSwgaW5kZXgsXG4tXHRcdFx0XHRcdFx0XHQgIGVuZCAtIGluZGV4KTtcbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBpbnZhbGlkYXRlX2xvY2sgaGVsZCBhYm92ZTsgZG9uJ3QgcmV0YWtlIGl0LlxuK1x0XHRcdFx0ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSwgdW5saWtlIHRoZSByZWFkYWhlYWRcbitcdFx0XHRcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdGlmIChpbmRleCBcdTAwM2MgZW9mKVxuK1x0XHRcdFx0XHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcdTAwMjZyYWN0bCxcbitcdFx0XHRcdFx0XHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xuIFx0XHRcdFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xuIFx0XHRcdFx0bHJ1X2FkZF9kcmFpbigpO1xuIFx0XHRcdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xuQEAgLTI2NzIsNiArMjY5Miw4IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGZvbGlvX3VubG9jayhuZXdfZm9saW8pO1xuIFx0Zm9saW9fcHV0KG5ld19mb2xpbyk7XG4gb3V0OlxuK1x0aWYgKG5lZWRfdW5sb2NrKVxuK1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcdFZNX0JVR19PTighbGlzdF9lbXB0eShcdTAwMjZwYWdlbGlzdCkpO1xuIFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xuIFx0cmV0dXJuIHJlc3VsdDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA3OjMyLjAxMjcyMzM3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5ODI3MDU2MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUGF0Y2ggRXZhbHVhdGlvbiAtIEtodWdlcGFnZWQqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIGZ1enppbmcuIExldCdzIGRpZyBpbi4gRmlyc3QsIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBkaWZmIHNob3dzIGNoYW5nZXMgd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbi4gSSBzZWUgc29tZSBsb2NraW5nIGNoYW5nZXMsIG5hbWVseSB0aGUgYWRkaXRpb24gb2YgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZGAgd2hlbiBgIWlzX3NobWVtYC4gVGhlIHJlYWRhaGVhZCBsb2dpYyBoYXMgYmVlbiBvdmVyaGF1bGVkOyB0aGUgb2xkIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCBoYXMgYmVlbiBzd2FwcGVkIGZvciBhIG1vcmUgZ3JhbnVsYXIgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBpbXBsZW1lbnRhdGlvbiwgaW5jb3Jwb3JhdGluZyBhIGBERUZJTkVfUkVBREFIRUFEYCBtYWNybyBhbmQgY2hlY2tzIGFnYWluc3QgdGhlIGZpbGUncyBlbmQuIEZpbmFsbHksIEkgbm90aWNlIHRoZSB1bmxvY2tpbmcgY2FsbCBgZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWRgIGFkZGVkIGF0IHRoZSBgb3V0OmAgbGFiZWwsIGNvbnRpbmdlbnQgb24gYSBgbmVlZF91bmxvY2tgIGNvbmRpdGlvbi5cblxuVGhpcyBpcyBhbGwgc3F1YXJlbHkgd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgLCB3aGljaCwgYXMgd2Uga25vdywgZGlyZWN0bHkgaW1wYWN0cyBtZW1vcnkgbWFuYWdlbWVudOKAlGNyaXRpY2FsIHN0dWZmLiBJdOKAmXMgZmlkZGxpbmcgd2l0aCBsb2NraW5nIGFuZCByZWFkYWhlYWQsIGJvdGggb2Ygd2hpY2ggYXJlIGNvbW1vbiB0YXJnZXRzIGZvciBmdXp6aW5nLCBlc3BlY2lhbGx5IGluIGZpbGUtYmFja2VkIHBhZ2UgaGFuZGxpbmcuIFRoYXQgYG1hZHZpc2UoLi4uLCBNQURWX0NPTExBUFNFKWAgYW5kIGtodWdlcGFnZWQgc2Nhbm5pbmcgZGVmaW5pdGVseSBtYWtlIHRoaXMgY29kZSBwYXRoIHJlYWNoYWJsZSwgc28gaXTigJlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbiwgYGtodWdlcGFnZWQuY2AgaXRzZWxmIGFuZCB0aGUgcmVsYXRlZCBgS2NvbmZpZ2Agb3B0aW9ucy4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ3JhYiB0aG9zZSBmaWxlcywgc28gSSBjYW4gc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIGV4aXN0aW5nIGNvZGViYXNlIGFuZCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGludm9sdmVkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGNvbXBsZXRlIGF0dGFjayBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDc6NTEuODM5NzgxOTQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTkwMDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1ODEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9NjA9c3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtNzUtICovXFxubW0vY29tcGFjdGlvbi5jOjc2OiNpZiBkZWZpbmVkIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2NvbXBhY3Rpb24uYy03Ny0jZGVmaW5lIENPTVBBQ1RJT05fSFBBR0VfT1JERVJcXHRIUEFHRV9QTURfT1JERVJcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz03Mz12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzQte1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzo3NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc2LVxcdHBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHBtZCk7XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtOTctXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6OTg6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy05OS19XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTk0PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX3lvdW5nX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIxNS1cXHRcXHR9IGVsc2Uge1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMTY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMTctXFx0XFx0XFx0cG1kX3QgcG1kID0gcG1kcF9nZXQocHZtdy5wbWQpO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyMy1cXHRcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIyNDojZW5kaWZcXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjI1LVxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9Mzg5PXN0YXRpYyBpbnQgZGFtb25feW91bmdfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMzk3LVxcbm1tL2RhbW9uL3ZhZGRyLmM6Mzk4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kYW1vbi92YWRkci5jLTM5OS1cXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cXHUwMDNldm1hKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNDE1LVxcdH1cXG5tbS9kYW1vbi92YWRkci5jOjQxNjojZW5kaWZcXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kYW1vbi92YWRkci5jLTQxNy1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NjM1PXN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy02NDYtXFxubW0vZGFtb24vdmFkZHIuYzo2NDc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL3ZhZGRyLmMtNjQ4LVxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVxcdTAwM2V2bWEpO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy02NjQtXFx0fVxcbm1tL2RhbW9uL3ZhZGRyLmM6NjY1OiNlbmRpZlxcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RhbW9uL3ZhZGRyLmMtNjY2LVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz03OTU9c3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTgwNi1cXG5tbS9kYW1vbi92YWRkci5jOjgwNzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZGFtb24vdmFkZHIuYy04MDgtXFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBwdGVfYWR2YW5jZWRfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xNzItXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjE3MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTE3NC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9NDIzPXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfbGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDI0LSNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo0MjU6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDI2LXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfYmFzaWNfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncywgaW50IGlkeCkgeyB9XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9NDMxPXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfbGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NDMyOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDMzLVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTY3MT1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX3Byb3Rub25lX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNjgyLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo2ODM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02ODQtc3RhdGljIHZvaWQgX19pbml0IHBtZF9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTY5OC19XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjY5OTojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03MDAtc3RhdGljIHZvaWQgX19pbml0IHBtZF9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NzAxOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzAyLVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTcxNT1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX3N3YXBfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTczMS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NzMyOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzMzLXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTc0OT1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTc2Ny19XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjc2ODojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03Njktc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03NzA9c3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjc3MTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTc3Mi1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz05MDE9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfYmFzaWNfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTAzLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5MDQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDUtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz05NTU9c3RhdGljIHZvaWQgX19pbml0IHB1ZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk1Ni0jZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTU3OiNlbHNlICAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk1OC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX3RocF90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU5PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5NjA6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NjEtXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTg3PXN0YXRpYyB2b2lkIF9faW5pdCBkZXN0cm95X2FyZ3Moc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05ODktXFx0LyogRnJlZSAoaHVnZSkgcGFnZSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5OTA6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTEtXFx0ICAgIGhhc190cmFuc3BhcmVudF9wdWRfaHVnZXBhZ2UoKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk5OC1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTk5OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTAwMC1cXHQgICAgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz0xMTQzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTEyMzktXFx0ICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjEyNDA6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjQxLVxcdCAgICBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkpIHtcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjUwLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxMjUxOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI1Mi1cXHQgICAgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpIHtcXG4tLVxcbm1tL2ZpbGVtYXAuYz0zMzI5PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2ZpbGVtYXAuYy0zMzQxLVxcdC8qIFVzZSB0aGUgcmVhZGFoZWFkIGNvZGUsIGV2ZW4gaWYgcmVhZGFoZWFkIGlzIGRpc2FibGVkICovXFxubW0vZmlsZW1hcC5jOjMzNDI6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiAodm1fZmxhZ3MgXFx1MDAyNiBWTV9IVUdFUEFHRSkpIHtcXG5tbS9maWxlbWFwLmMtMzM0My1cXHRcXHQvKlxcbi0tXFxubW0vZ3VwLmM9NzAxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vZ3VwLmMtNzM0LVxcbm1tL2d1cC5jOjczNTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZ3VwLmMtNzM2LVxcdGlmIChwbWRfdHJhbnNfaHVnZShwbWR2YWwpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IEZPTExfVE9VQ0gpKVxcbm1tL2d1cC5jLTczNy1cXHRcXHR0b3VjaF9wbWQodm1hLCBhZGRyLCBwbWQsIGZsYWdzIFxcdTAwMjYgRk9MTF9XUklURSk7XFxubW0vZ3VwLmM6NzM4OiNlbmRpZlxcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2d1cC5jLTczOS1cXG4tLVxcbm1tL2htbS5jPTE4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaG1tX3Bmbl9mbGFnc19vcmRlcih1bnNpZ25lZCBsb25nIG9yZGVyKVxcbi0tXFxubW0vaG1tLmMtMTkyLVxcbm1tL2htbS5jOjE5MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vaG1tLmMtMTk0LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwbWRfdG9faG1tX3Bmbl9mbGFncyhzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG4tLVxcbm1tL2htbS5jPTIwND1zdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vaG1tLmMtMjI3LX1cXG5tbS9obW0uYzoyMjg6I2Vsc2UgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vaG1tLmMtMjI5LS8qIHN0dWIgdG8gYWxsb3cgdGhlIGNvZGUgYmVsb3cgdG8gY29tcGlsZSAqL1xcbm1tL2htbS5jPTIzMD1pbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vaG1tLmMtMjMxLVxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGhtbV9wZm5zW10sIHBtZF90IHBtZCk7XFxubW0vaG1tLmM6MjMyOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9obW0uYy0yMzMtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTYxPXVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgX19yZWFkX21vc3RseSA9XFxubW0vaHVnZV9tZW1vcnkuYzo2MjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL2h1Z2VfbWVtb3J5LmMtNjMtXFx0KDFcXHUwMDNjXFx1MDAzY1RSQU5TUEFSRU5UX0hVR0VQQUdFX0ZMQUcpfFxcbm1tL2h1Z2VfbWVtb3J5LmMtNjQtI2VuZGlmXFxubW0vaHVnZV9tZW1vcnkuYzo2NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9odWdlX21lbW9yeS5jLTY2LVxcdCgxXFx1MDAzY1xcdTAwM2NUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHKXxcXG4tLVxcbm1tL2tzbS5jPTI1Mjc9c3RhdGljIGludCBrc21fbmV4dF9wYWdlX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL2tzbS5jLTI1NDctXFxubW0va3NtLmM6MjU0ODpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IHBtZF9sZWFmKHBtZCkpIHtcXG5tbS9rc20uYy0yNTQ5LVxcdFxcdHB0bCA9IHBtZF9sb2NrKG1tLCBwbWRwKTtcXG4tLVxcbm1tL21hZHZpc2UuYz0zNTQ9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zNzYtXFxubW0vbWFkdmlzZS5jOjM3NzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWFkdmlzZS5jLTM3OC1cXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcXG4tLVxcbm1tL21hZHZpc2UuYz0xNTE5PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1MzktI2VuZGlmXFxubW0vbWFkdmlzZS5jOjE1NDA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21hZHZpc2UuYy0xNTQxLVxcdGNhc2UgTUFEVl9IVUdFUEFHRTpcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yMTY1PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2cxX3N0YXRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjE2Ny1cXHROUl9BTk9OX01BUFBFRCxcXG5tbS9tZW1jb250cm9sLXYxLmM6MjE2ODojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtY29udHJvbC12MS5jLTIxNjktXFx0TlJfQU5PTl9USFBTLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIxODM9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1lbWNnMV9zdGF0X25hbWVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjE4NS1cXHRcXFwicnNzXFxcIixcXG5tbS9tZW1jb250cm9sLXYxLmM6MjE4NjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtY29udHJvbC12MS5jLTIxODctXFx0XFxcInJzc19odWdlXFxcIixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01OTg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjE5LSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo2MjA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbWNvbnRyb2wuYy02MjEtXFx0VEhQX0ZBVUxUX0FMTE9DLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjEyLSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzoxNjEzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tZW1jb250cm9sLmMtMTYxNC1cXHR7IFxcXCJhbm9uX3RocFxcXCIsXFx0XFx0XFx0TlJfQU5PTl9USFBTXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Njg5PXN0YXRpYyBpbnQgY2hlY2tfaHdwb2lzb25lZF9lbnRyeShwdGVfdCBwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgc2hvcnQgc2hpZnQsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTcxMy1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjcxNDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtb3J5LWZhaWx1cmUuYy03MTUtc3RhdGljIGludCBjaGVja19od3BvaXNvbmVkX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmM9NDE5OT1zdGF0aWMgdm1fZmF1bHRfdCB3cF9wYWdlX3NoYXJlZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbW9yeS5jLTQyMzgtXFxubW0vbWVtb3J5LmM6NDIzOTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtb3J5LmMtNDI0MC1zdGF0aWMgYm9vbCBfX3dwX2Nhbl9yZXVzZV9sYXJnZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1vcnkuYy00MzA0LX1cXG5tbS9tZW1vcnkuYzo0MzA1OiNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9tZW1vcnkuYy00MzA2LXN0YXRpYyBib29sIF9fd3BfY2FuX3JldXNlX2xhcmdlX2Fub25fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbW9yeS5jLTQzMTAtfVxcbm1tL21lbW9yeS5jOjQzMTE6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL21lbW9yeS5jLTQzMTItXFxubW0vbWVtb3J5LmM9NDMxMz1zdGF0aWMgYm9vbCB3cF9jYW5fcmV1c2VfYW5vbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWVtb3J5LmMtNDMxOC1cXG5tbS9tZW1vcnkuYzo0MzE5OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXFxubW0vbWVtb3J5LmMtNDMyMC1cXHRcXHRyZXR1cm4gX193cF9jYW5fcmV1c2VfbGFyZ2VfYW5vbl9mb2xpbyhmb2xpbywgdm1hKTtcXG4tLVxcbm1tL21lbW9yeS5jPTQ3MTk9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9tYXJrZXIoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00NzQ1LVxcbm1tL21lbW9yeS5jOjQ3NDY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbW9yeS5jLTQ3NDctLypcXG4tLVxcbm1tL21lbW9yeS5jPTQ3OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00ODU0LX1cXG5tbS9tZW1vcnkuYzo0ODU1OiNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9tZW1vcnkuYy00ODU2LXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDg1OS19XFxubW0vbWVtb3J5LmM6NDg2MDojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vbWVtb3J5LmMtNDg2MS1cXG4tLVxcbm1tL21lbW9yeS5jPTUzMDE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTUzMDMtXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXFx1MDAzZXZtYTtcXG5tbS9tZW1vcnkuYzo1MzA0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tZW1vcnkuYy01MzA1LVxcdHVuc2lnbmVkIGxvbmcgb3JkZXJzO1xcbi0tXFxubW0vbWVtb3J5LmM9NTUzOD1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTU5My1cXG5tbS9tZW1vcnkuYzo1NTk0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tZW1vcnkuYy01NTk1LXN0YXRpYyB2b2lkIGRlcG9zaXRfcHJlYWxsb2NfcHRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmM9NjQyMT1zdGF0aWMgdm1fZmF1bHRfdCBjcmVhdGVfaHVnZV9wdWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vbWVtb3J5LmMtNjQyMi17XFxubW0vbWVtb3J5LmM6NjQyMzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0XFxcXFxcbm1tL21lbW9yeS5jLTY0MjQtXFx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG4tLVxcbm1tL21lbW9yeS5jLTY0MzAtXFx0XFx0cmV0dXJuIHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VodWdlX2ZhdWx0KHZtZiwgUFVEX09SREVSKTtcXG5tbS9tZW1vcnkuYzo2NDMxOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9tZW1vcnkuYy02NDMyLVxcdHJldHVybiBWTV9GQVVMVF9GQUxMQkFDSztcXG4tLVxcbm1tL21lbW9yeS5jPTY0MzU9c3RhdGljIHZtX2ZhdWx0X3Qgd3BfaHVnZV9wdWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHB1ZF90IG9yaWdfcHVkKVxcbm1tL21lbW9yeS5jLTY0MzYte1xcbm1tL21lbW9yeS5jOjY0Mzc6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcdFxcXFxcXG5tbS9tZW1vcnkuYy02NDM4LVxcdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXFxuLS1cXG5tbS9tZW1vcnkuYy02NDU0LVxcdF9fc3BsaXRfaHVnZV9wdWQodm1hLCB2bWYtXFx1MDAzZXB1ZCwgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG5tbS9tZW1vcnkuYzo2NDU1OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cXG5tbS9tZW1vcnkuYy02NDU2LVxcdHJldHVybiBWTV9GQVVMVF9GQUxMQkFDSztcXG4tLVxcbm1tL21lbW9yeS5jPTc0ODQ9RVhQT1JUX1NZTUJPTChfX21pZ2h0X2ZhdWx0KTtcXG4tLVxcbm1tL21lbW9yeS5jLTc0ODYtXFxubW0vbWVtb3J5LmM6NzQ4NzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IGRlZmluZWQoQ09ORklHX0hVR0VUTEJGUylcXG5tbS9tZW1vcnkuYy03NDg4LS8qXFxuLS1cXG5tbS9tZW1vcnkuYz03Njc1PWxvbmcgY29weV9mb2xpb19mcm9tX3VzZXIoc3RydWN0IGZvbGlvICpkc3RfZm9saW8sXFxuLS1cXG5tbS9tZW1vcnkuYy03NzA0LX1cXG5tbS9tZW1vcnkuYzo3NzA1OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgfHwgQ09ORklHX0hVR0VUTEJGUyAqL1xcbm1tL21lbW9yeS5jLTc3MDYtXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNDQxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI0NTEtXFxubW0vbWVtcG9saWN5LmM6MjQ1MjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtcG9saWN5LmMtMjQ1My1cXHQgICAgLyogZmlsdGVyIFxcXCJodWdlcGFnZVxcXCIgYWxsb2NhdGlvbiwgdW5sZXNzIGZyb20gYWxsb2NfcGFnZXMoKSAqL1xcbi0tXFxubW0vbWlncmF0ZS5jPTE1OTE9c3RhdGljIGlubGluZSBpbnQgdHJ5X3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNjA5LVxcbm1tL21pZ3JhdGUuYzoxNjEwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9taWdyYXRlLmMtMTYxMS0jZGVmaW5lIE5SX01BWF9CQVRDSEVEX01JR1JBVElPTlxcdEhQQUdFX1BNRF9OUlxcbi0tXFxubW0vbW1hcC5jPTgyNz1fX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbi0tXFxubW0vbW1hcC5jLTg1OC1cXHRcXHRhZGRyID0gZ2V0X2FyZWEoZmlsZSwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpO1xcbm1tL21tYXAuYzo4NTk6XFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgIWZpbGVcXG5tbS9tbWFwLmMtODYwLVxcdFxcdCAgIFxcdTAwMjZcXHUwMDI2ICFhZGRyIC8qIG5vIGhpbnQgKi9cXG4tLVxcbm1tL21yZW1hcC5jPTQ3OT1zdGF0aWMgaW5saW5lIGJvb2wgbW92ZV9ub3JtYWxfcHVkKHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsXFxuLS1cXG5tbS9tcmVtYXAuYy00ODUtXFxubW0vbXJlbWFwLmM6NDg2OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG5tbS9tcmVtYXAuYy00ODctc3RhdGljIGJvb2wgbW92ZV9odWdlX3B1ZChzdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCAqcG1jLFxcbi0tXFxubW0vbXJlbWFwLmM9NjA1PXN0YXRpYyBib29sIG1vdmVfcGd0X2VudHJ5KHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsXFxuLS1cXG5tbS9tcmVtYXAuYy02MjItXFx0Y2FzZSBIUEFHRV9QTUQ6XFxubW0vbXJlbWFwLmM6NjIzOlxcdFxcdG1vdmVkID0gSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxubW0vbXJlbWFwLmMtNjI0LVxcdFxcdFxcdG1vdmVfaHVnZV9wbWQocG1jLVxcdTAwM2VvbGQsIHBtYy1cXHUwMDNlb2xkX2FkZHIsIHBtYy1cXHUwMDNlbmV3X2FkZHIsIG9sZF9lbnRyeSxcXG4tLVxcbm1tL21yZW1hcC5jLTYyNy1cXHRjYXNlIEhQQUdFX1BVRDpcXG5tbS9tcmVtYXAuYzo2Mjg6XFx0XFx0bW92ZWQgPSBJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tcmVtYXAuYy02MjktXFx0XFx0XFx0bW92ZV9odWdlX3B1ZChwbWMsIG9sZF9lbnRyeSwgbmV3X2VudHJ5KTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz02NTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb3JkZXJfdG9fcGluZGV4KGludCBtaWdyYXRldHlwZSwgaW50IG9yZGVyKVxcbm1tL3BhZ2VfYWxsb2MuYy02NTYte1xcbm1tL3BhZ2VfYWxsb2MuYzo2NTc6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkge1xcbm1tL3BhZ2VfYWxsb2MuYy02NTgtXFx0XFx0Ym9vbCBtb3ZhYmxlID0gbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTY2Nz1zdGF0aWMgaW5saW5lIGludCBwaW5kZXhfdG9fb3JkZXIodW5zaWduZWQgaW50IHBpbmRleClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy02NzAtXFxubW0vcGFnZV9hbGxvYy5jOjY3MTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKSB7XFxubW0vcGFnZV9hbGxvYy5jLTY3Mi1cXHRcXHRpZiAocGluZGV4IFxcdTAwM2U9IE5SX0xPV09SREVSX1BDUF9MSVNUUylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz02Nzk9c3RhdGljIGlubGluZSBib29sIHBjcF9hbGxvd2VkX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy02ODItXFx0XFx0cmV0dXJuIHRydWU7XFxubW0vcGFnZV9hbGxvYy5jOjY4MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vcGFnZV9hbGxvYy5jLTY4NC1cXHRpZiAoaXNfcG1kX29yZGVyKG9yZGVyKSlcXG4tLVxcbm1tL3BhZ2VfaWRsZS5jPTUyPXN0YXRpYyBib29sIHBhZ2VfaWRsZV9jbGVhcl9wdGVfcmVmc19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3BhZ2VfaWRsZS5jLTcyLVxcdFxcdFxcdHJlZmVyZW5jZWQgfD0gbW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIGFkZHIgKyBQQUdFX1NJWkUpO1xcbm1tL3BhZ2VfaWRsZS5jOjczOlxcdFxcdH0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKSB7XFxubW0vcGFnZV9pZGxlLmMtNzQtXFx0XFx0XFx0cG1kX3QgcG1kdmFsID0gcG1kcF9nZXQocHZtdy5wbWQpO1xcbi0tXFxubW0vcGFnZV9pby5jPTM3MD12b2lkIF9fc3dhcF93cml0ZXBhZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9wYWdlX2lvLmMtMzczLVxcbm1tL3BhZ2VfaW8uYzozNzQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3BhZ2VfaW8uYy0zNzUtXFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKSkpIHtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE4Nj1ib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI1MS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNTI6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI1My1cXHRcXHQgICAgKHBtZF90cmFuc19odWdlKHBtZGUpIHx8IHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kZSkgfHxcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jPTk3PXB0ZV90IHB0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTEwOC1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoxMDk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTExMC1cXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jPTI1MD12b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1Ny0jZW5kaWYgLyogcHRlX2ZyZWVfZGVmZXIgKi9cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoyNTg6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1OS1cXG4tLVxcbm1tL3JtYXAuYz05MTg9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy05ODctXFx0XFx0XFx0XFx0cmVmZXJlbmNlZCsrO1xcbm1tL3JtYXAuYzo5ODg6XFx0XFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpIHtcXG5tbS9ybWFwLmMtOTg5LVxcdFxcdFxcdGlmIChwbWRwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsXFxuLS1cXG5tbS9ybWFwLmM9MTEwNz1zdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG4tLVxcbm1tL3JtYXAuYy0xMTQ3LVxcdFxcdH0gZWxzZSB7XFxubW0vcm1hcC5jOjExNDg6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3JtYXAuYy0xMTQ5LVxcdFxcdFxcdHBtZF90ICpwbWQgPSBwdm13LVxcdTAwM2VwbWQ7XFxuLS1cXG5tbS9ybWFwLmM9MTYyMj12b2lkIGZvbGlvX2FkZF9hbm9uX3JtYXBfcG1kKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcm1hcC5jLTE2MjQte1xcbm1tL3JtYXAuYzoxNjI1OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9ybWFwLmMtMTYyNi1cXHRfX2ZvbGlvX2FkZF9hbm9uX3JtYXAoZm9saW8sIHBhZ2UsIEhQQUdFX1BNRF9OUiwgdm1hLCBhZGRyZXNzLCBmbGFncyxcXG4tLVxcbm1tL3JtYXAuYz0xNzUxPXZvaWQgZm9saW9fYWRkX2ZpbGVfcm1hcF9wbWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9ybWFwLmMtMTc1My17XFxubW0vcm1hcC5jOjE3NTQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3JtYXAuYy0xNzU1LVxcdF9fZm9saW9fYWRkX2ZpbGVfcm1hcChmb2xpbywgcGFnZSwgSFBBR0VfUE1EX05SLCB2bWEsIFBHVEFCTEVfTEVWRUxfUE1EKTtcXG4tLVxcbm1tL3JtYXAuYz0xNzcxPXZvaWQgZm9saW9fYWRkX2ZpbGVfcm1hcF9wdWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9ybWFwLmMtMTc3My17XFxubW0vcm1hcC5jOjE3NzQ6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubW0vcm1hcC5jLTE3NzUtXFx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG4tLVxcbm1tL3JtYXAuYz0xOTE5PXZvaWQgZm9saW9fcmVtb3ZlX3JtYXBfcG1kKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcm1hcC5jLTE5MjEte1xcbm1tL3JtYXAuYzoxOTIyOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9ybWFwLmMtMTkyMy1cXHRfX2ZvbGlvX3JlbW92ZV9ybWFwKGZvbGlvLCBwYWdlLCBIUEFHRV9QTURfTlIsIHZtYSwgUEdUQUJMRV9MRVZFTF9QTUQpO1xcbi0tXFxubW0vcm1hcC5jPTE5Mzk9dm9pZCBmb2xpb19yZW1vdmVfcm1hcF9wdWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9ybWFwLmMtMTk0MS17XFxubW0vcm1hcC5jOjE5NDI6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubW0vcm1hcC5jLTE5NDMtXFx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG4tLVxcbm1tL3NobWVtLmM9MTE0PXN0cnVjdCBzaG1lbV9vcHRpb25zIHtcXG4tLVxcbm1tL3NobWVtLmMtMTM3LVxcbm1tL3NobWVtLmM6MTM4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTEzOS1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdlX3NobWVtX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcXG4tLVxcbm1tL3NobWVtLmM9NTIxPXN0YXRpYyBpbnQgc2htZW1fY29uZmlybV9zd2FwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy01NjktXFxubW0vc2htZW0uYzo1NzA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtNTcxLS8qIGlmZGVmIGhlcmUgdG8gYXZvaWQgYmxvYXRpbmcgc2htZW0ubyB3aGVuIG5vdCBuZWNlc3NhcnkgKi9cXG5tbS9zaG1lbS5jLTU3Mi1cXG5tbS9zaG1lbS5jOjU3MzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUilcXG5tbS9zaG1lbS5jLTU3NC0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX05FVkVSXFxubW0vc2htZW0uYzo1NzU6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVMpXFxubW0vc2htZW0uYy01NzYtI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9zaG1lbS5jOjU3NzojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFKVxcbm1tL3NobWVtLmMtNTc4LSNkZWZpbmUgU0hNRU1fSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9zaG1lbS5jOjU3OTojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRSlcXG5tbS9zaG1lbS5jLTU4MC0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FEVklTRVxcbi0tXFxubW0vc2htZW0uYz01ODU9c3RhdGljIGludCBzaG1lbV9odWdlIF9fcmVhZF9tb3N0bHkgPSBTSE1FTV9IVUdFX0RFRkFVTFQ7XFxuLS1cXG5tbS9zaG1lbS5jLTU4OC1cXG5tbS9zaG1lbS5jOjU4OTojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUilcXG5tbS9zaG1lbS5jLTU5MC0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX05FVkVSXFxubW0vc2htZW0uYzo1OTE6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVMpXFxubW0vc2htZW0uYy01OTItI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9zaG1lbS5jOjU5MzojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFKVxcbm1tL3NobWVtLmMtNTk0LSNkZWZpbmUgVE1QRlNfSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9zaG1lbS5jOjU5NTojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRSlcXG5tbS9zaG1lbS5jLTU5Ni0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FEVklTRVxcbi0tXFxubW0vc2htZW0uYz04NDY9c3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2VfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbm1tL3NobWVtLmMtODYxLX1cXG5tbS9zaG1lbS5jOjg2MjojZWxzZSAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vc2htZW0uYy04NjMtXFxuLS1cXG5tbS9zaG1lbS5jPTg3Mj1zdGF0aWMgdW5zaWduZWQgaW50IHNobWVtX2h1Z2VfZ2xvYmFsX2VuYWJsZWQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtODc4LX1cXG5tbS9zaG1lbS5jOjg3OTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vc2htZW0uYy04ODAtXFxuLS1cXG5tbS9zaG1lbS5jPTE2MDc9aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vc2htZW0uYy0xNjQ5LVxcbm1tL3NobWVtLmM6MTY1MDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vc2htZW0uYy0xNjUxLVxcdFxcdGlmIChvcmRlciBcXHUwMDNlPSBIUEFHRV9QTURfT1JERVIpIHtcXG4tLVxcbm1tL3NobWVtLmM9MTgwND1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwaW5fY2x1c3Rlcihzd3BfZW50cnlfdCBzd2FwLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zaG1lbS5jLTE4MTctXFxubW0vc2htZW0uYzoxODE4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTE4MTktYm9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxcbi0tXFxubW0vc2htZW0uYz0xOTE3PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL3NobWVtLmMtMTkyMi19XFxubW0vc2htZW0uYzoxOTIzOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9zaG1lbS5jLTE5MjQtXFxuLS1cXG5tbS9zaG1lbS5jPTE5Mzk9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fYWxsb2NfYW5kX2FkZF9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL3NobWVtLmMtMTk1MC1cXG5tbS9zaG1lbS5jOjE5NTE6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxubW0vc2htZW0uYy0xOTUyLVxcdFxcdG9yZGVycyA9IDA7XFxuLS1cXG5tbS9zaG1lbS5jPTIwODk9c3RhdGljIGludCBzaG1lbV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vc2htZW0uYy0yMTAzLVxcdGdmcCBcXHUwMDI2PSB+R0ZQX0NPTlNUUkFJTlRfTUFTSztcXG5tbS9zaG1lbS5jOjIxMDQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtMjEwNS1cXHRpZiAobnJfcGFnZXMgXFx1MDAzZSAxKSB7XFxuLS1cXG5tbS9zaG1lbS5jPTI3NDA9dW5zaWduZWQgbG9uZyBzaG1lbV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbm1tL3NobWVtLmMtMjc1NS1cXG5tbS9zaG1lbS5jOjI3NTY6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxubW0vc2htZW0uYy0yNzU3LVxcdFxcdHJldHVybiBhZGRyO1xcbi0tXFxubW0vc2htZW0uYy0yNzk5LVxcdFxcdFxcdCAqL1xcbm1tL3NobWVtLmM6MjgwMDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA3OjUxLjg5Nzc3NTc1MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0OTU5MTIwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb2RlIHNlY3Rpb246XG5cbioqRGl2aW5nIGludG8gYG1tL2todWdlcGFnZWQuY2AgYW5kIGBjb2xsYXBzZV9maWxlYCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBraHVnZXBhZ2VkYCBpbnRlcm5hbHMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBsaW5lcyAyMjUwIHRvIDI3MDAgaW4gYG1tL2todWdlcGFnZWQuY2AuIFRoYXQncyBhIHByZXR0eSBoZWZ0eSBjaHVuayBvZiBjb2RlLCBzbyBJIGFudGljaXBhdGUgaXQncyBsaWtlbHkgaW52b2x2ZWQgd2l0aCBhIGNvcmUgb3BlcmF0aW9uLCBwcm9iYWJseSByZWxhdGVkIHRvIHBhZ2UgY29sbGFwc2luZyBvciBtYXliZSBkZWZyYWdnaW5nLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBraHVnZXBhZ2VkIHdvcmtzLCBteSBodW5jaCBpcyB0aGF0IHRoaXMgc2VjdGlvbiB3aWxsIGludm9sdmUgZWl0aGVyIHRoZSBpZGVudGlmaWNhdGlvbiBvZiBlbGlnaWJsZSBwYWdlcyBmb3IgbWVyZ2luZyBvciB0aGUgYWN0dWFsIGV4ZWN1dGlvbiBvZiB0aGUgY29sbGFwc2luZyBsb2dpYy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGF0IHJhbmdlLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgbWFqb3IgcGFydCBvZiB0aGUgd29yayByZWxhdGVkIHRvIHRoZSBtYWluIGxvb3Agb2Yga2h1Z2VwYWdlZCB0byBkbyBpdHMgd29yay5cblxuRnVydGhlcm1vcmUsIEkga25vdyBgY29sbGFwc2VfZmlsZWAgaXMgY3J1Y2lhbCwgcHJvYmFibHkgcmVsYXRlZCB0byBjb2xsYXBzaW5nIGZpbGUtYmFja2VkIG1hcHBpbmdzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBjb2xsYXBzZV9maWxlYCB3aXRoaW4gdGhhdCBzcGVjaWZpYyBhcmVhIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgcHJvY2Vzcy4gSSB3YW50IHRvIHNlZSAqaG93KiBpdCdzIGludm9rZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIHdoYXQgYXJndW1lbnRzIGl0J3MgZ2V0dGluZy4gVGhpcyBjb250ZXh0IGlzIGVzc2VudGlhbCB0byBkZXRlcm1pbmUgd2hldGhlciBpdCdzIHJlbGF0ZWQgdG8gdGhlIG1haW4ga2h1Z2VwYWdlZCBsb29wIHdvcmsuIExvb2tpbmcgYXQgdGhvc2UgbGluZXMgYW5kIHRoZSBjYWxscyB0byBgY29sbGFwc2VfZmlsZWAgd2lsbCBsaWtlbHkgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gYSBzcGVjaWZpYyBzY2VuYXJpbyBvciBhc3BlY3Qgb2YgdGhlIHdob2xlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDYwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDc6NTQuMzkzNjg5NjA0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjUwOlxcdHtcXG4yMjUxOlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nO1xcbjIyNTI6XFx0XFx0c3RydWN0IHBhZ2UgKmRzdDtcXG4yMjUzOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sICp0bXAsICpuZXdfZm9saW87XFxuMjI1NDpcXHRcXHRwZ29mZl90IGluZGV4ID0gMCwgZW5kID0gc3RhcnQgKyBIUEFHRV9QTURfTlI7XFxuMjI1NTpcXHRcXHRMSVNUX0hFQUQocGFnZWxpc3QpO1xcbjIyNTY6XFx0XFx0WEFfU1RBVEVfT1JERVIoeGFzLCBcXHUwMDI2bWFwcGluZy1cXHUwMDNlaV9wYWdlcywgc3RhcnQsIEhQQUdFX1BNRF9PUkRFUik7XFxuMjI1NzpcXHRcXHRlbnVtIHNjYW5fcmVzdWx0IHJlc3VsdCA9IFNDQU5fU1VDQ0VFRDtcXG4yMjU4OlxcdFxcdGludCBucl9ub25lID0gMDtcXG4yMjU5OlxcdFxcdGJvb2wgaXNfc2htZW0gPSBzaG1lbV9maWxlKGZpbGUpO1xcbjIyNjA6XFx0XFx0Ym9vbCBuZWVkX3VubG9jayA9IGZhbHNlO1xcbjIyNjE6XFx0XFxuMjI2MjpcXHRcXHQvKlxcbjIyNjM6XFx0XFx0ICogTUFEVl9DT0xMQVBTRSBpZ25vcmVzIHNobWVtIGh1Z2UgY29uZmlnLCBzbyBkbyBub3QgY2hlY2sgc2htZW1cXG4yMjY0OlxcdFxcdCAqXFxuMjI2NTpcXHRcXHQgKiBUT0RPOiBvbmNlIHNobWVtIGFsd2F5cyBjYWxscyBtYXBwaW5nX3NldF9sYXJnZV9mb2xpb3MoKSBvbiBpdHNcXG4yMjY2OlxcdFxcdCAqIG1hcHBpbmcsIHRoZSBzaG1lbSBjaGVjayBjYW4gYmUgcmVtb3ZlZC5cXG4yMjY3OlxcdFxcdCAqL1xcbjIyNjg6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFpc19zaG1lbSBcXHUwMDI2XFx1MDAyNiAhbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChtYXBwaW5nKSk7XFxuMjI2OTpcXHRcXHRWTV9XQVJOX09OX09OQ0Uoc3RhcnQgXFx1MDAyNiAoSFBBR0VfUE1EX05SIC0gMSkpO1xcbjIyNzA6XFx0XFxuMjI3MTpcXHRcXHRyZXN1bHQgPSBhbGxvY19jaGFyZ2VfZm9saW8oXFx1MDAyNm5ld19mb2xpbywgbW0sIGNjLCBIUEFHRV9QTURfT1JERVIpO1xcbjIyNzI6XFx0XFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXFxuMjI3MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjc0OlxcdFxcbjIyNzU6XFx0XFx0LypcXG4yMjc2OlxcdFxcdCAqIFRha2UgaW52YWxpZGF0ZV9sb2NrIGJlZm9yZSBhbnkgZm9saW8gbG9jazogdGhlIHJlYWRhaGVhZCBiZWxvd1xcbjIyNzc6XFx0XFx0ICogbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLlxcbjIyNzg6XFx0XFx0ICovXFxuMjI3OTpcXHRcXHRpZiAoIWlzX3NobWVtKSB7XFxuMjI4MDpcXHRcXHRcXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XFxuMjI4MTpcXHRcXHRcXHRuZWVkX3VubG9jayA9IHRydWU7XFxuMjI4MjpcXHRcXHR9XFxuMjI4MzpcXHRcXG4yMjg0OlxcdFxcdG1hcHBpbmdfc2V0X3VwZGF0ZShcXHUwMDI2eGFzLCBtYXBwaW5nKTtcXG4yMjg1OlxcdFxcbjIyODY6XFx0XFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XFxuMjI4NzpcXHRcXHRpZiAoaXNfc2htZW0pXFxuMjI4ODpcXHRcXHRcXHRfX2ZvbGlvX3NldF9zd2FwYmFja2VkKG5ld19mb2xpbyk7XFxuMjI4OTpcXHRcXHRuZXdfZm9saW8tXFx1MDAzZWluZGV4ID0gc3RhcnQ7XFxuMjI5MDpcXHRcXHRuZXdfZm9saW8tXFx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xcbjIyOTE6XFx0XFxuMjI5MjpcXHRcXHQvKlxcbjIyOTM6XFx0XFx0ICogRW5zdXJlIHdlIGhhdmUgc2xvdHMgZm9yIGFsbCB0aGUgcGFnZXMgaW4gdGhlIHJhbmdlLiAgVGhpcyBpc1xcbjIyOTQ6XFx0XFx0ICogYWxtb3N0IGNlcnRhaW5seSBhIG5vLW9wIGJlY2F1c2UgbW9zdCBvZiB0aGUgcGFnZXMgbXVzdCBiZSBwcmVzZW50XFxuMjI5NTpcXHRcXHQgKi9cXG4yMjk2OlxcdFxcdGRvIHtcXG4yMjk3OlxcdFxcdFxcdHhhc19sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMjk4OlxcdFxcdFxcdHhhc19jcmVhdGVfcmFuZ2UoXFx1MDAyNnhhcyk7XFxuMjI5OTpcXHRcXHRcXHRpZiAoIXhhc19lcnJvcihcXHUwMDI2eGFzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDc6NTQuMzkzODQzMjI0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg1Njc3MzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGNvbGxhcHNlX2ZpbGVgIGF0IExpbmUgMjM0MC0yNDAwKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgcmVnaW9uIGFyb3VuZCBsaW5lcyAyMzQwIHRvIDI0MDAuIFRoYXQgcmFuZ2UgaXMgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgcHJvY2Vzc2luZyBoYXBwZW5zLCBJJ20gZ3Vlc3Npbmcgc29tZSBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBvciBsb2dpYy1pbnRlbnNpdmUgb3BlcmF0aW9uIG9jY3VycyB0aGVyZS4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoZSBhY3R1YWwgY29yZSBvZiB0aGUgYWxnb3JpdGhtLCBvciBwZXJoYXBzIHNvbWUgZGF0YSBtYW5pcHVsYXRpb24gc3RlcCB0aGF0J3MgY2F1c2luZyBpc3N1ZXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gTGV0J3Mgc2VlIGlmIHRoaXMgc2VjdGlvbiBpbmNsdWRlcyBhbnkgY3J1Y2lhbCBsb29wcywgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9yIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbnMgd2hpY2ggYXJlIGxpa2VseSB0byBoYXZlIGEgc2lnbmlmaWNhbnQgaW1wYWN0LiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA3OjU3LjI1MDYxODI5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM0MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM0MDpcXHRcXHRcXHRcXHRcXHRscnVfYWRkX2RyYWluKCk7XFxuMjM0MTpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxuMjM0MjpcXHRcXHRcXHRcXHRcXHRmb2xpb19nZXQoZm9saW8pO1xcbjIzNDM6XFx0XFx0XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjM0NDpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjIzNDU6XFx0XFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX0xPQ0s7XFxuMjM0NjpcXHRcXHRcXHRcXHRcXHRnb3RvIHhhX2xvY2tlZDtcXG4yMzQ3OlxcdFxcdFxcdFxcdH1cXG4yMzQ4OlxcdFxcdFxcdH0gZWxzZSB7XFx0LyogIWlzX3NobWVtICovXFxuMjM0OTpcXHRcXHRcXHRcXHRpZiAoIWZvbGlvIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xcbjIzNTA6XFx0XFx0XFx0XFx0XFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgXFx1MDAyNmZpbGUtXFx1MDAzZWZfcmEsXFxuMjM1MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG1hcHBpbmcsIGluZGV4KTtcXG4yMzUyOlxcdFxcdFxcdFxcdFxcdHBnb2ZmX3QgZW9mID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKG1hcHBpbmctXFx1MDAzZWhvc3QpLFxcbjIzNTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFBBR0VfU0laRSk7XFxuMjM1NDpcXHRcXG4yMzU1OlxcdFxcdFxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjIzNTY6XFx0XFx0XFx0XFx0XFx0LypcXG4yMzU3OlxcdFxcdFxcdFxcdFxcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24ndCByZXRha2UgaXQuXFxuMjM1ODpcXHRcXHRcXHRcXHRcXHQgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZFxcbjIzNTk6XFx0XFx0XFx0XFx0XFx0ICogaGVscGVyIHRoaXMgcmVwbGFjZXMsIGRvZXMgbm90IGNsYW1wIHRvIEVPRi5cXG4yMzYwOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjIzNjE6XFx0XFx0XFx0XFx0XFx0aWYgKGluZGV4IFxcdTAwM2MgZW9mKVxcbjIzNjI6XFx0XFx0XFx0XFx0XFx0XFx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoXFx1MDAyNnJhY3RsLFxcbjIzNjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0bWluKGVuZCwgZW9mKSAtIGluZGV4LCAwKTtcXG4yMzY0OlxcdFxcdFxcdFxcdFxcdC8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi9cXG4yMzY1OlxcdFxcdFxcdFxcdFxcdGxydV9hZGRfZHJhaW4oKTtcXG4yMzY2OlxcdFxcdFxcdFxcdFxcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKG1hcHBpbmcsIGluZGV4KTtcXG4yMzY3OlxcdFxcdFxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuMjM2ODpcXHRcXHRcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XFxuMjM2OTpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHhhX3VubG9ja2VkO1xcbjIzNzA6XFx0XFx0XFx0XFx0XFx0fVxcbjIzNzE6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkge1xcbjIzNzI6XFx0XFx0XFx0XFx0XFx0LypcXG4yMzczOlxcdFxcdFxcdFxcdFxcdCAqIFRoaXMgcGFnZSBpcyBkaXJ0eSBiZWNhdXNlIGl0IGhhc24ndFxcbjIzNzQ6XFx0XFx0XFx0XFx0XFx0ICogYmVlbiBmbHVzaGVkIHNpbmNlIGZpcnN0IHdyaXRlLlxcbjIzNzU6XFx0XFx0XFx0XFx0XFx0ICpcXG4yMzc2OlxcdFxcdFxcdFxcdFxcdCAqIFRyaWdnZXIgYXN5bmMgZmx1c2ggZm9yIHJlYWQtb25seSBmaWxlcyBhbmRcXG4yMzc3OlxcdFxcdFxcdFxcdFxcdCAqIGhvcGUgdGhlIHdyaXRlYmFjayBpcyBkb25lIHdoZW4ga2h1Z2VwYWdlZFxcbjIzNzg6XFx0XFx0XFx0XFx0XFx0ICogcmV2aXNpdHMgdGhpcyBwYWdlLiBXcml0YWJsZSBmaWxlcyBjYW4gaGF2ZVxcbjIzNzk6XFx0XFx0XFx0XFx0XFx0ICogdGhlaXIgZm9saW9zIGRpcnR5IGF0IGFueSB0aW1lOyBibGluZGx5XFxuMjM4MDpcXHRcXHRcXHRcXHRcXHQgKiBmbHVzaGluZyB0aGVtIHdvdWxkIGNhdXNlIHVuZGVzaXJhYmxlXFxuMjM4MTpcXHRcXHRcXHRcXHRcXHQgKiBzeXN0ZW0td2lkZSB3cml0ZWJhY2suXFxuMjM4MjpcXHRcXHRcXHRcXHRcXHQgKlxcbjIzODM6XFx0XFx0XFx0XFx0XFx0ICogVGhpcyBpcyBhIG9uZS1vZmYgc2l0dWF0aW9uLiBXZSBhcmUgbm90XFxuMjM4NDpcXHRcXHRcXHRcXHRcXHQgKiBmb3JjaW5nIHdyaXRlYmFjayBpbiBsb29wLlxcbjIzODU6XFx0XFx0XFx0XFx0XFx0ICovXFxuMjM4NjpcXHRcXHRcXHRcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMzg3OlxcdFxcdFxcdFxcdFxcdGlmICghaW5vZGVfaXNfb3Blbl9mb3Jfd3JpdGUobWFwcGluZy1cXHUwMDNlaG9zdCkpXFxuMjM4ODpcXHRcXHRcXHRcXHRcXHRcXHRmaWxlbWFwX2ZsdXNoKG1hcHBpbmcpO1xcbjIzODk6XFx0XFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX0RJUlRZX09SX1dSSVRFQkFDSztcXG4yMzkwOlxcdFxcdFxcdFxcdFxcdGdvdG8geGFfdW5sb2NrZWQ7XFxuMjM5MTpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xcbjIzOTI6XFx0XFx0XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjM5MzpcXHRcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfRElSVFlfT1JfV1JJVEVCQUNLO1xcbjIzOTQ6XFx0XFx0XFx0XFx0XFx0Z290byB4YV91bmxvY2tlZDtcXG4yMzk1OlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4yMzk2OlxcdFxcdFxcdFxcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuMjM5NzpcXHRcXHRcXHRcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMzk4OlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMjM5OTpcXHRcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDc6NTcuMjUwNzY5OTEyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMwNTM2OTc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBwdWxsIHVwIGxpbmVzIDI2ODAtMjcxMCBvZiBgbW0va2h1Z2VwYWdlZC5jYC4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUga2h1Z2VwYWdlZCBsb2dpYyByZXNpZGVzLCBhbmQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBzZWN0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIHNjYW5uaW5nIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIG9mIGh1Z2UgcGFnZXMuIEknbSBmb2N1c2luZyBvbiB0aGVzZSBsaW5lcyBiZWNhdXNlIHRoZXJlJ3MgYSBzcGVjaWZpYyBpc3N1ZSBJJ20gZGVidWdnaW5nIHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyB3aGVuIGFsbG9jYXRpbmcgaHVnZSBwYWdlcywgYW5kIEkgc3VzcGVjdCB0aGUgYW5zd2VyIGxpZXMgaGVyZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGh1Z2UgcGFnZXMgYXJlIGNvbnNpZGVyZWQgcmVjbGFpbWFibGUsIGlmIHRoZSBhY2NvdW50aW5nIGlzIGNvcnJlY3QsIGFuZCBpZiBhbnkgc3luY2hyb25pemF0aW9uIGlzc3VlcyBtaWdodCBiZSBwcmVzZW50IHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIHBhZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBraHVnZXBhZ2VkYCBkYWVtb24gaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgcGFnZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZnVuY3Rpb25zLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHVuZGVyc3RhbmRpbmcgaG93IGVmZmljaWVudGx5IHdlIGFyZSBtYW5hZ2luZyBodWdlIHBhZ2VzIGF0IHRoaXMgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDQ2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowNzo1OS41NTYxNDE1ODdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjgwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjgwOlxcdFxcdFxcdHNobWVtX3VuY2hhcmdlKG1hcHBpbmctXFx1MDAzZWhvc3QsIG5yX25vbmUpO1xcbjI2ODE6XFx0XFx0fVxcbjI2ODI6XFx0XFxuMjY4MzpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRtcCwgXFx1MDAyNnBhZ2VsaXN0LCBscnUpIHtcXG4yNjg0OlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1KTtcXG4yNjg1OlxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMjY4NjpcXHRcXHRcXHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XFxuMjY4NzpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjI2ODg6XFx0XFx0fVxcbjI2ODk6XFx0XFxuMjY5MDpcXHRcXHRuZXdfZm9saW8tXFx1MDAzZW1hcHBpbmcgPSBOVUxMO1xcbjI2OTE6XFx0XFxuMjY5MjpcXHRcXHRmb2xpb191bmxvY2sobmV3X2ZvbGlvKTtcXG4yNjkzOlxcdFxcdGZvbGlvX3B1dChuZXdfZm9saW8pO1xcbjI2OTQ6XFx0b3V0OlxcbjI2OTU6XFx0XFx0aWYgKG5lZWRfdW5sb2NrKVxcbjI2OTY6XFx0XFx0XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XFxuMjY5NzpcXHRcXHRWTV9CVUdfT04oIWxpc3RfZW1wdHkoXFx1MDAyNnBhZ2VsaXN0KSk7XFxuMjY5ODpcXHRcXHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XFxuMjY5OTpcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbjI3MDA6XFx0fVxcbjI3MDE6XFx0XFxuMjcwMjpcXHRzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuMjcwMzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LFxcbjI3MDQ6XFx0XFx0XFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbjI3MDU6XFx0e1xcbjI3MDY6XFx0XFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX25vbmUgPSBjb2xsYXBzZV9tYXhfcHRlc19ub25lKGNjLCBOVUxMLCBIUEFHRV9QTURfT1JERVIpO1xcbjI3MDc6XFx0XFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX3N3YXAgPSBjb2xsYXBzZV9tYXhfcHRlc19zd2FwKGNjLCBIUEFHRV9QTURfT1JERVIpO1xcbjI3MDg6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XFxuMjcwOTpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDc6NTkuNTU2MzAwNDk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNTQ2NjgwNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBjb2xsYXBzZV9maWxlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbiBiZXR0ZXIsIGFuZCB0aGUgZmlyc3QgcGxhY2UgSSBhbHdheXMgc3RhcnQgd2l0aCB0aGF0IGlzIHVuZGVyc3RhbmRpbmcgKndobyogY2FsbHMgaXQuIFdoYXQgb3RoZXIgcGllY2VzIG9mIHRoZSBzeXN0ZW0gYXJlIHJlbHlpbmcgb24gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBJJ20gZ29pbmcgdG8gd2FudCB0byBleGFtaW5lIHRoZSBjYWxsaW5nIHN0cnVjdHVyZSDigJMgaG93IGlzIGl0IGludm9rZWQ/IElzIGl0IGEgY29yZSB1dGlsaXR5IGZ1bmN0aW9uIHVzZWQgYWNyb3NzIHRoZSBib2FyZCwgb3IgaXMgaXQgaXNvbGF0ZWQgdG8gYSBzcGVjaWZpYyBtb2R1bGUgb3IgY29tcG9uZW50PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgaWxsdW1pbmF0ZSBpdHMgcHVycG9zZSwgaXRzIGltcG9ydGFuY2UsIGFuZCBob3cgY2hhbmdlcyB0byBpdCBtaWdodCByaXBwbGUgdGhyb3VnaCB0aGUgc3lzdGVtLiBJJ20gdGhpbmtpbmcgYSB0aG9yb3VnaCB0cmFjaW5nIG9mIHRoZSBjYWxsIGdyYXBoIGlzIGluIG9yZGVyOyBJIHdhbnQgdG8gc2VlIHRoaXMgZnVuY3Rpb24gaW4gY29udGV4dC4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgZGlzY292ZXIgdGhlIGRlcGVuZGVudCByZWxhdGlvbnNoaXBzLiBMZXQncyBzdGFydCBieSBpZGVudGlmeWluZyBhbGwgdGhlIGNhbGxlcnMgYW5kIHRoZW4gSSBjYW4gcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjIzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowODowMS43MTA5NzIzOTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTY0NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2h1Z2VwYWdlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0yMTM5PXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjIyMy0vKipcXG5tbS9raHVnZXBhZ2VkLmM6MjIyNDogKiBjb2xsYXBzZV9maWxlIC0gY29sbGFwc2UgZmlsZW1hcC90bXBmcy9zaG1lbSBwYWdlcyBpbnRvIGh1Z2Ugb25lLlxcbm1tL2todWdlcGFnZWQuYy0yMjI1LSAqXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjI0Ny0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6MjI0ODpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTIyNDktXFx0XFx0c3RydWN0IGZpbGUgKmZpbGUsIHBnb2ZmX3Qgc3RhcnQsIHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNjk3LVxcdFZNX0JVR19PTighbGlzdF9lbXB0eShcXHUwMDI2cGFnZWxpc3QpKTtcXG5tbS9raHVnZXBhZ2VkLmM6MjY5ODpcXHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XFxubW0va2h1Z2VwYWdlZC5jLTI2OTktXFx0cmV0dXJuIHJlc3VsdDtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yNzAyPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNzk5LVxcdFxcdH0gZWxzZSB7XFxubW0va2h1Z2VwYWdlZC5jOjI4MDA6XFx0XFx0XFx0cmVzdWx0ID0gY29sbGFwc2VfZmlsZShtbSwgYWRkciwgZmlsZSwgc3RhcnQsIGNjKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjgwMS1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjAxLjc2MjE0NjExNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNjM2MjUyNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHRoaW5raW5nIGFzIGFuIGV4cGVydCBpbiBzb2Z0d2FyZSBhbmFseXNpcy9yZXZlcnNlIGVuZ2luZWVyaW5nOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBgY29sbGFwc2Vfc2Nhbl9maWxlYCBDYWxsZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gYmVpbmcgYXNrZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbGVycyBvZiBhIGZ1bmN0aW9uIG5hbWVkIGBjb2xsYXBzZV9zY2FuX2ZpbGVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzIHN0YXJ0cyB3aXRoIHRoZSBjb250ZXh0LiBJcyB0aGlzIGEgY29kZSBhbmFseXNpcyB0YXNrPyBBbSBJIGRlYnVnZ2luZz8gQW0gSSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIHBpZWNlIG9mIHNvZnR3YXJlPyBLbm93aW5nIHRoZSBsYXJnZXIgcHJvamVjdCB3b3VsZCBkZWZpbml0ZWx5IGhlbHAgbmFycm93IGRvd24gdGhlIHBvc3NpYmlsaXRpZXMuXG5cbk15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIGZpZ3VyaW5nIG91dCAqd2hlcmUqIHRoaXMgYGNvbGxhcHNlX3NjYW5fZmlsZWAgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBDIGNvZGUsIFB5dGhvbiwgSmF2YVNjcmlwdCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBkaWN0YXRlcyBteSB0b29sc2V0LiBGb3IgQy9DKyssIEknZCByZWFjaCBmb3IgdG9vbHMgbGlrZSBgZ2RiYCwgYG9iamR1bXBgLCBzdGF0aWMgYW5hbHlzaXMgdG9vbHMgKGxpa2UgY2xhbmcncyBhbmFseXNpcyBwbHVnaW5zIG9yIENvZGVRTCksIG9yIGV2ZW4gYSBkaXNhc3NlbWJsZXIgaWYgc291cmNlIGlzbid0IHJlYWRpbHkgYXZhaWxhYmxlLiBQeXRob24gd291bGQgbGVuZCBpdHNlbGYgdG8gZ3JlcCwgYSBkZWJ1Z2dlciwgb3IgcG90ZW50aWFsbHkgdXNpbmcgYSBjYWxsIGdyYXBoIGdlbmVyYXRvci4gSSdkIGRlZmluaXRlbHkgYmUgbG9va2luZyBmb3IgdG9vbHMgdGhhdCBjYW4gcGVyZm9ybSBjcm9zcy1yZWZlcmVuY2VzLiBKYXZhU2NyaXB0PyBEZWZpbml0ZWx5IG15IGJyb3dzZXIncyBkZXZlbG9wZXIgdG9vbHMgb3IgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgY29kZSBhbmFseXNpcyBwbGF0Zm9ybSBsaWtlIHN0YXRpYyBhbmFseXNpcyB0b29scy5cblxuQmV5b25kIHRoZSBzcGVjaWZpYyB0b29scywgdGhlIGdvYWwgaXMgdG8gc3lzdGVtYXRpY2FsbHkgbG9jYXRlIGV2ZXJ5IHNpbmdsZSBjYWxsIHNpdGUgdG8gYGNvbGxhcHNlX3NjYW5fZmlsZWAuIEknZCBzdGFydCB3aXRoIGEgYnJvYWQgc2VhcmNoLCBtYXliZSB1c2luZyBhIHRleHQgc2VhcmNoIGZvciB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgdGhlbiByZWZpbmluZyBmcm9tIHRoZXJlLiBJ4oCZZCBjb25zaWRlciBhbnkgcHJlZml4ZXMgb3IgbmFtZXNwYWNlcyBpdCBtaWdodCBiZSB3aXRoaW4gdG8gbmFycm93IHRoZSBzZWFyY2guIFRoZSBtb3JlIHNwZWNpZmljIHRoZSBzZWFyY2gsIHRoZSBiZXR0ZXIuXG5cbkknZCBhbHNvIGNvbnNpZGVyIGFueSBidWlsZCBjb25maWd1cmF0aW9ucyBvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbmRpdGlvbmFsbHkgaW5jbHVkZSBvciBleGNsdWRlIHRoZSBmdW5jdGlvbiBjYWxscy4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGFsbCBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHMuIEFyZSB0aGVyZSBwcmVwcm9jZXNzb3IgbWFjcm9zIHRoYXQgbWlnaHQgcmVkZWZpbmUgb3IgY29uZGl0aW9uYWxseSBpbnZva2UgdGhlIGZ1bmN0aW9uPyBJ4oCZZCBuZWVkIHRvIGFjY291bnQgZm9yIHRob3NlLlxuXG5OZXh0LCBJJ2QgZXhhbWluZSB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gYXQgZWFjaCBjYWxsIHNpdGUuIFRoYXQncyBnb2luZyB0byBiZSBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgKmhvdyogaXQncyBiZWluZyB1c2VkLiBXaGF0IGRhdGEgaXMgaXQgb3BlcmF0aW5nIG9uPyBXaGF0J3MgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyB0aGUgY2FsbHM/IFRoaXMgaW5mb3JtYXRpb24gdGVsbHMgbWUgdGhlIGZ1bmN0aW9uJ3MgcmVzcG9uc2liaWxpdHkgYW5kIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBJJ2Qgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBhcmd1bWVudHMgYXMgYSBzYW5pdHkgY2hlY2sgb2YgbXkgZmluZGluZ3MuXG5cbkZpbmFsbHksIEknZCB3YW50IHRvIGJ1aWxkIGEgYmFzaWMgY2FsbCBncmFwaCB0byB2aXN1YWxpemUgdGhlIHJlbGF0aW9uc2hpcHMuIFdoZXJlIGRvZXMgdGhlIGNhbGxpbmcgY29kZSByZXNpZGU/IERvZXMgaXQgaGF2ZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudD8gSXMgYGNvbGxhcHNlX3NjYW5fZmlsZWAgY2FsbGVkIGZyb20gYSBzaW5nbGUgbG9jYXRpb24gb3IgZnJvbSBtdWx0aXBsZSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGNvZGU/IFRoZSBhbnN3ZXJzIGhlbHAgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyBzY29wZSBvZiBpbmZsdWVuY2UgYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg3NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjA1LjM5ODQwMTA4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MDMyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2Vfc2Nhbl9maWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MjI0OD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjcwMS1cXG5tbS9raHVnZXBhZ2VkLmM6MjcwMjpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubW0va2h1Z2VwYWdlZC5jLTI3MDMtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yODEyPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI4MzQtcmV0cnk6XFxubW0va2h1Z2VwYWdlZC5jOjI4MzU6XFx0cmVzdWx0ID0gY29sbGFwc2Vfc2Nhbl9maWxlKG1tLCBhZGRyLCBmaWxlLCBwZ29mZiwgY2MpO1xcbm1tL2todWdlcGFnZWQuYy0yODM2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowODowNS40NDM4MDczM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzI4NDk0ODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQ2FsbGVycyBvZiBgY29sbGFwc2Vfc2luZ2xlX3BtZGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBjb2xsYXBzZV9zaW5nbGVfcG1kYCBpcyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIHBpZWNlcyBvZiBjb2RlIGFyZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAgaW4gYW55IGRlYnVnZ2luZywgcmVmYWN0b3JpbmcsIG9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIGdpdmVzIG1lIGNvbnRleHQg4oCTIGl0IHRlbGxzIG1lICp3aHkqIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgaW1wb3J0YW50LCB3aGF0IGl0cyBleHBlY3RlZCBpbnB1dHMgYXJlLCBhbmQgaG93IGl0cyBvdXRwdXQgaXMgYmVpbmcgdXRpbGl6ZWQuXG5cbk15IGluaXRpYWwgYXBwcm9hY2ggd291bGQgYmUgdG8gbGV2ZXJhZ2UgdGhlIHRvb2xzIGF2YWlsYWJsZSB0byBtZS4gSSdkIHN0YXJ0IHdpdGggc3RhdGljIGFuYWx5c2lzIGlmIGl0J3MgYXZhaWxhYmxlLiBBIGNyb3NzLXJlZmVyZW5jZSBzZWFyY2gsIHdoZXRoZXIgdGhyb3VnaCBhbiBJREUsIGEgY29kZSBzZWFyY2ggdG9vbCBsaWtlIGBncmVwYCBvciBgYWdgIChkZXBlbmRpbmcgb24gdGhlIHByb2plY3QgYW5kIGxhbmd1YWdlKSwgb3IgYSBkZWRpY2F0ZWQgZGVwZW5kZW5jeSBhbmFseXplciwgd291bGQgYmUgdGhlIG1vc3QgZWZmaWNpZW50IG1ldGhvZC4gSSdtIGxvb2tpbmcgZm9yIGRpcmVjdCBjYWxscywgb2YgY291cnNlLCBidXQgYWxzbyBpbmRpcmVjdCBjYWxscyDigJMgcGVyaGFwcyB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIGR5bmFtaWMgZGlzcGF0Y2ggaWYgdGhlIGxhbmd1YWdlIHN1cHBvcnRzIHRob3NlIGZlYXR1cmVzLiBJJ2xsIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgZXhlY3V0aW9uIHBhdGhzIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy5cblxuSWYgc3RhdGljIGFuYWx5c2lzIGlzIGluc3VmZmljaWVudCwgSSdsbCBuZWVkIHRvIHR1cm4gdG8gZHluYW1pYyBhbmFseXNpcy4gSSBtaWdodCBpbnN0cnVtZW50IHRoZSBjb2RlIHdpdGggbG9nZ2luZyB0byB0cmFjZSBleGVjdXRpb24gZmxvdywgb3IgdXRpbGl6ZSBhIGRlYnVnZ2VyIHRvIHN0ZXAgdGhyb3VnaCBleGVjdXRpb24gYW5kIG9ic2VydmUgdGhlIGNhbGxzIGZpcnN0aGFuZC4gVGhlIGNob2ljZSBvZiBtZXRob2Qgd2lsbCBkZXBlbmQgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGNvZGViYXNlIGFuZCB0aGUgZWFzZSB3aXRoIHdoaWNoIEkgY2FuIHJlcHJvZHVjZSB0aGUgcmVsZXZhbnQgc2NlbmFyaW9zLiBJJ2QgcHJvYmFibHkgYWltIHRvIGNhcHR1cmUgdGhlIGZ1bmN0aW9uIGNhbGxzIGluIGEgbG9nLCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgdGhlIGlucHV0IGFyZ3VtZW50cyBmb3IgY29udGV4dC5cblxuT25jZSBJIGhhdmUgdGhlIGxpc3Qgb2YgY2FsbGVycywgSeKAmWxsIG5lZWQgdG8gYW5hbHl6ZSB0aGVtIGluZGl2aWR1YWxseS4gSSdsbCBpbnZlc3RpZ2F0ZSBlYWNoIGNhbGxlciwgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgKnRoYXQqIGNvZGUgYW5kIGhvdyBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZS4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgc3lzdGVtIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGluZm9ybWF0aW9uIGlzIGtleSB0byBhbnkgZGVlcGVyIGludmVzdGlnYXRpb24uIFRoaXMgd2lsbCBkaWN0YXRlIHRoZSBuZXh0IGNvdXJzZSBvZiBhY3Rpb24sIHdoaWNoIGNvdWxkIHJhbmdlIGZyb20gb3B0aW1pemF0aW9uLCBpZGVudGlmeWluZyBwb3RlbnRpYWwgYnVnIHNvdXJjZXMsIG9yIGFzc2Vzc2luZyBwb3RlbnRpYWwgaW1wYWN0cyBvZiBhIGNoYW5nZSB0byB0aGUgZnVuY3Rpb24gaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcwNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjA5LjE3MjMwNDQ1OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyODU5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2Vfc2luZ2xlX3BtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTI3MDI9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI4MTEtICovXFxubW0va2h1Z2VwYWdlZC5jOjI4MTI6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTI4MTMtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgKmxvY2tfZHJvcHBlZCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yODY5PXN0YXRpYyB2b2lkIGNvbGxhcHNlX3NjYW5fbW1fc2xvdCh1bnNpZ25lZCBpbnQgcHJvZ3Jlc3NfbWF4LFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI5MzktXFxubW0va2h1Z2VwYWdlZC5jOjI5NDA6XFx0XFx0XFx0KnJlc3VsdCA9IGNvbGxhcHNlX3NpbmdsZV9wbWQoa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MsXFxubW0va2h1Z2VwYWdlZC5jLTI5NDEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdm1hLCBcXHUwMDI2bG9ja19kcm9wcGVkLCBjYyk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzIxMD1pbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zMjU4LVxcbm1tL2todWdlcGFnZWQuYzozMjU5OlxcdFxcdHJlc3VsdCA9IGNvbGxhcHNlX3NpbmdsZV9wbWQoYWRkciwgdm1hLCBcXHUwMDI2bW1hcF91bmxvY2tlZCwgY2MpO1xcbm1tL2todWdlcGFnZWQuYy0zMjYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowODowOS4yMTg1OTMyMDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTU4NjM0ODA0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgbWFkdmlzZV9jb2xsYXBzZWAgYW5kIGl0cyBUcmlnZ2VycyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG1hZHZpc2VfY29sbGFwc2VgIGFuZCBob3cgaXQncyBhY3RpdmF0ZWQuIEl0J3MgY2xlYXIgdGhhdCB0aGUgcHJpbWFyeSB0cmlnZ2VyIGlzIHRoZSBzeXN0ZW0gY2FsbCBgbWFkdmlzZWAgdXNlZCB3aXRoIHRoZSBgTUFEVl9DT0xMQVBTRWAgZmxhZy4gVGhhdCBtYWtlcyBzZW5zZSwgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlbiwgSSBzZWUgYGNvbGxhcHNlX3NjYW5fbW1fc2xvdGAgYWxzbyBjYWxscyBpdCwgYW5kIHRoYXQncyB0aWVkIHRvIHRoZSBga2h1Z2VwYWdlZGAga3RocmVhZC4gU28sIGVmZmVjdGl2ZWx5LCBgbWFkdmlzZV9jb2xsYXBzZWAgY2FuIGJlIGluaXRpYXRlZCBkaXJlY3RseSBieSBgbWFkdmlzZShNQURWX0NPTExBUFNFKWAgb24gZmlsZSBtYXBwaW5ncywgYXMgd2VsbCBhcyBiZWluZyBhIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYGtodWdlcGFnZWRgIGt0aHJlYWQgaXRzZWxmLiBUaGlzIGltcGxpZXMgdGhhdCB0aGVyZSBhcmUgdHdvIGRpc3RpbmN0IG1lY2hhbmlzbXM6IHVzZXItbGV2ZWwgZGlyZWN0aXZlIHZpYSBgbWFkdmlzZWAgYW5kIGEga2VybmVsLWxldmVsIHByb2FjdGl2ZSBzdHJhdGVneSB0aHJvdWdoIGBraHVnZXBhZ2VkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgYm90aCBwYXRocy4gSSBzaG91bGQgZXhhbWluZSB0aGUgZmlsZSBtYXBwaW5nIHVzZSBjYXNlIHdpdGggYE1BRFZfQ09MTEFQU0VgIGZpcnN0LCB0aGVuIGFzc2VzcyBob3cgYGtodWdlcGFnZWRgIGludGVyYWN0cy4gTGV0IG1lIGNoZWNrIHRoZSBjb2RlIGZvciBgbWFkdmlzZV9jb2xsYXBzZWAgaW4gbW9yZSBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTQ1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDg6MTguODA0OTQzMTg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzEzMzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2NvbGxhcHNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MzE3Mz1ib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMxNzctXFxubW0va2h1Z2VwYWdlZC5jOjMxNzg6c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGVudW0gc2Nhbl9yZXN1bHQgcilcXG5tbS9raHVnZXBhZ2VkLmMtMzE3OS17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzIwOS1cXG5tbS9raHVnZXBhZ2VkLmM6MzIxMDppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9raHVnZXBhZ2VkLmMtMzIxMS1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzI5Ny1cXHRyZXR1cm4gdGhwcyA9PSAoKGhlbmQgLSBoc3RhcnQpIFxcdTAwM2VcXHUwMDNlIEhQQUdFX1BNRF9TSElGVCkgPyAwXFxubW0va2h1Z2VwYWdlZC5jOjMyOTg6XFx0XFx0XFx0OiBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGxhc3RfZmFpbCk7XFxubW0va2h1Z2VwYWdlZC5jLTMyOTktfVxcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzYzLVxcdGNhc2UgTUFEVl9DT0xMQVBTRTpcXG5tbS9tYWR2aXNlLmM6MTM2NDpcXHRcXHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCxcXG5tbS9tYWR2aXNlLmMtMTM2NS1cXHRcXHRcXHRcXHUwMDI2bWFkdl9iZWhhdmlvci1cXHUwMDNlbG9ja19kcm9wcGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDg6MTguODU4MDgwNDU0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5Nzc2MDIxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgS2VybmVsIEh1Z2UgUGFnZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBtbS9raHVnZXBhZ2VkLmNgLiBNeSBmaXJzdCBzdG9wIGlzIGdvaW5nIHRvIGJlIHRoZSBgbW0vTWFrZWZpbGVgLiBMZXQncyBzZWUuLi4gYWgsIHJpZ2h0IGhlcmU6IGBvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vYC4gVGhhdCB0ZWxscyBtZSBga2h1Z2VwYWdlZGAgaXMgYnVpbHQgd2hlbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBwbGF5LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYG1tL0tjb25maWdgLiBJdCdzIHBvc3NpYmxlIHRoZXJlIGFyZSBtb3JlIGdyYW51bGFyIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXRzZWxmIG9yIG1heWJlIGV2ZW4gZGlyZWN0bHkgcmVsYXRlZCB0byBga2h1Z2VwYWdlZGAgdGhhdCBJJ20gbWlzc2luZy4gTmVlZCB0byBiZSB0aG9yb3VnaCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMwMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjIwLjgzNTY4NTA4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5Njg0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzNC1cXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzYtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDg6MjAuODg0NjU4MjY0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU1MjI0NzU2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBtb2R1bGUncyBjb25maWd1cmF0aW9uIGlzIG1hbmFnZWQuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBhdCBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4MzUuIEknbSBndWVzc2luZyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB0aGUgbW9kdWxlJ3MgcmVsZXZhbnQgc2V0dGluZ3MgYXJlIGxpa2VseSBpbnRlcndvdmVuIHdpdGggdGhvc2UuIExpbmUgODM1IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGVudHJ5IHBvaW50IHRvIG5hdmlnYXRlIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBmb3Igd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCwgZ2l2ZW4gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIEl0J3MgcHJvYmFibHkgYSBnb29kIHNwb3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cyBJJ20gbG9va2luZyBmb3IsIGFuZCBtYXliZSBldmVuIHNvbWUgaGludHMgb24gaG93IHRoZSBvcHRpb25zIGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0cmVhc3VyZXMgSSBjYW4gdW5lYXJ0aCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjA2OTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowODoyNi40MDcxMzc3NjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODM1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODM1OlxcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gODM2OlxcdFxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuIDgzNzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiAhUFJFRU1QVF9SVFxcbiA4Mzg6XFx0XFx0c2VsZWN0IENPTVBBQ1RJT05cXG4gODM5OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4gODQwOlxcdFxcdHNlbGVjdCBNTV9JRFxcbiA4NDE6XFx0XFx0aGVscFxcbiA4NDI6XFx0XFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXFxuIDg0MzpcXHRcXHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cXG4gODQ0OlxcdFxcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXFxuIDg0NTpcXHRcXHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XFxuIDg0NjpcXHRcXHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcXG4gODQ3OlxcdFxcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxcbiA4NDg6XFx0XFxuIDg0OTpcXHRcXHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxcbiA4NTA6XFx0XFxuIDg1MTpcXHRpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4NTI6XFx0XFxuIDg1MzpcXHRjaG9pY2VcXG4gODU0OlxcdFxcdHByb21wdCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1xcXCJcXG4gODU1OlxcdFxcdGRlZmF1bHQgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxuIDg1NjpcXHRcXHRoZWxwXFxuIDg1NzpcXHRcXHQgIFNlbGVjdHMgdGhlIHN5c2ZzIGRlZmF1bHRzIGZvciBUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0LlxcbiA4NTg6XFx0XFxuIDg1OTpcXHRcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxuIDg2MDpcXHRcXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuIDg2MTpcXHRcXHRoZWxwXFxuIDg2MjpcXHRcXHQgIEVuYWJsaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlIGFsd2F5cywgY2FuIGluY3JlYXNlIHRoZVxcbiA4NjM6XFx0XFx0ICBtZW1vcnkgZm9vdHByaW50IG9mIGFwcGxpY2F0aW9ucyB3aXRob3V0IGEgZ3VhcmFudGVlZFxcbiA4NjQ6XFx0XFx0ICBiZW5lZml0IGJ1dCBpdCB3aWxsIHdvcmsgYXV0b21hdGljYWxseSBmb3IgYWxsIGFwcGxpY2F0aW9ucy5cXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG4gODY3OlxcdFxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuIDg2ODpcXHRcXHRoZWxwXFxuIDg2OTpcXHRcXHQgIEVuYWJsaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlIG1hZHZpc2UsIHdpbGwgb25seSBwcm92aWRlIGFcXG4gODcwOlxcdFxcdCAgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgYmVuZWZpdCB0byB0aGUgYXBwbGljYXRpb25zIHVzaW5nXFxuIDg3MTpcXHRcXHQgIG1hZHZpc2UoTUFEVl9IVUdFUEFHRSkgYnV0IGl0IHdvbid0IHJpc2sgdG8gaW5jcmVhc2UgdGhlXFxuIDg3MjpcXHRcXHQgIG1lbW9yeSBmb290cHJpbnQgb2YgYXBwbGljYXRpb25zIHdpdGhvdXQgYSBndWFyYW50ZWVkXFxuIDg3MzpcXHRcXHQgIGJlbmVmaXQuXFxuIDg3NDpcXHRcXG4gODc1OlxcdFxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbiA4NzY6XFx0XFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuIDg3NzpcXHRcXHRoZWxwXFxuIDg3ODpcXHRcXHQgIERpc2FibGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgYnkgZGVmYXVsdC4gSXQgY2FuIHN0aWxsIGJlXFxuIDg3OTpcXHRcXHQgIGVuYWJsZWQgYXQgcnVudGltZSB2aWEgc3lzZnMuXFxuIDg4MDpcXHRlbmRjaG9pY2VcXG4gODgxOlxcdFxcbiA4ODI6XFx0Y2hvaWNlXFxuIDg4MzpcXHRcXHRwcm9tcHQgXFxcIlNobWVtIGh1Z2VwYWdlIGFsbG9jYXRpb24gZGVmYXVsdHNcXFwiXFxuIDg4NDpcXHRcXHRkZWZhdWx0IFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDg6MjYuNDA3MjU3MjM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg1NTgyNjA1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBtYWluIGNvbmNlcm4gaGVyZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBgY29sbGFwc2VfZmlsZWAgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggZmlsZSBtYXBwaW5nIGFuZCByZWFkYWhlYWQgYWZ0ZXIgdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2FzOiBkb2VzIHRoaXMgbmV3IGNoYW5nZSB0byB0aGUgYGNvbGxhcHNlX2ZpbGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjb2xsYXBzZV9maWxlYCwgZGVwZW5kIG9uIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgbGlrZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBpcyBjZW50cmFsIGhlcmU/IEkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgY29sbGFwc2VfZmlsZWAgaXMgdW5jb25kaXRpb25hbGx5IGRlZmluZWQgd2hlbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQsIHdoaWNoIG1hZGUgaXQgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuXG5cbkkgdGhlbiBkdWcgaW50byB0aGUgY29kZSwgZm9jdXNpbmcgb24gdGhlIGxvY2sgYWNxdWlzaXRpb24gc3RyYXRlZ3kuIFRoZSBwYXRjaCdzIGNvcmUgY2hhbmdlIGlzIGFib3V0IHRha2luZyB0aGUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZGAgKmJlZm9yZSogYWNxdWlyaW5nIGZvbGlvIGxvY2tzLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IHN0YXRlcyB0aGUgcmVhc29uOiByZWFkYWhlYWQgbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBtaWdodCBiZSBob2xkaW5nIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbC4gVGhlIG9sZCBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAgaW1wbGljaXRseSBoZWxkIHRoaXMgbG9jaywgYnV0IHRoZSBuZXcgY29kZSB1c2VzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgaW5zdGVhZCwgbWVhbmluZyB0aGUgbG9jayBpcyBub3cgaGVsZCBleHBsaWNpdGx5IGZvciB0aGUgZW50aXJlIHJvdXRpbmUuXG5cbkkgdGhlbiBkaWQgYSBxdWljayBjaGVjayBvbiB3aGVyZSBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgIGlzIHVzZWQgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGFmZmVjdHMgaG90IHBhdGhzLlxuXG5UaGUgcmVhbCBtZWF0IG9mIHRoZSBhbmFseXNpcywgZnJvbSBteSBwZXJzcGVjdGl2ZSwgaXMgdGhhdCB0aGlzIHBhdGNoIHNpZ25pZmljYW50bHkgYWx0ZXJzIHRoZSBsb2NraW5nIG9yZGVyLCBhbmQgd2l0aCB0aGUgbG9jayBiZWluZyBoZWxkIGZvciBhIHByb2xvbmdlZCBvcGVyYXRpb24sIHRoaXMgaGFzIGh1Z2UgaW1wbGljYXRpb25zLiBBY3F1aXJpbmcgYG1hcHBpbmctXHUwMDNlaW52YWxpZGF0ZV9sb2NrYCBlYXJsaWVyIGFuZCBtYWludGFpbmluZyBpdCB0aHJvdWdob3V0IGBjb2xsYXBzZV9maWxlYCwgZXNwZWNpYWxseSBhY3Jvc3MgZm9saW8gbG9ja3MgYW5kIHBvdGVudGlhbCBhbGxvY2F0aW9ucywgc2V0cyBvZmYgYWxhcm0gYmVsbHMgZm9yIHBvdGVudGlhbCBkZWFkbG9ja3MsIGxvY2sgaW52ZXJzaW9ucywgcmFjZSBjb25kaXRpb25zLCBvciB1bmhhbmRsZWQgZXJyb3JzLiBJbnRlcmFjdGluZyB3aXRoIG9wZXJhdGlvbnMgbGlrZSB0cnVuY2F0ZSwgZmFsbG9jYXRlLCBwYWdlIGZhdWx0LCBtZW1vcnkgcmVjbGFpbSwgb3IgbG9ja2RlcCB1bmRlciB0aGVzZSBuZXcgY29uZGl0aW9ucyBpcyBhIHByaW1lIHRhcmdldCBmb3IgdGhlc2Uga2luZHMgb2YgcHJvYmxlbXMuXG5cblRoaXMgaXMgYSBjbGVhciBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjb3ZlciB0aGVzZSBhcmVhczpcbiogICBgY29sbGFwc2VfZmlsZWBcbiogICBgY29sbGFwc2Vfc2Nhbl9maWxlYFxuKiAgIGBtYWR2aXNlX2NvbGxhcHNlYFxuXG5UaGVzZSBhcmUgYWxsIGRpcmVjdCB0b3VjaCBwb2ludHMgd2l0aCB0aGUgY2hhbmdlLiBUaGlzIGhlbHBzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcGF0aHMgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjM0Ljk2NTUyMDYyOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNjU5NDk3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX2NhY2hlX3JhX3VuYm91bmRlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0PTEwMjQ9RXhhbXBsZSBvdXRwdXQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0LTEwMzAtICAgIDU2MzczMjQ4ICAgICA0NzM3IG1tL3NsdWIuYzoyMjU5IGZ1bmM6YWxsb2Nfc2xhYl9wYWdlXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdDoxMDMxOiAgICAxNDg4MDc2OCAgICAgMzYzMyBtbS9yZWFkYWhlYWQuYzoyNDcgZnVuYzpwYWdlX2NhY2hlX3JhX3VuYm91bmRlZFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QtMTAzMi0gICAgMTQ0MTc5MjAgICAgIDM1MjAgbW0vbW1faW5pdC5jOjI1MzAgZnVuYzphbGxvY19sYXJnZV9zeXN0ZW1faGFzaFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3Q9NjU9RXhhbXBsZSBvdXRwdXQ6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QtNzUtICAgICAgICAgMTRNICAgICAzNTIwIG1tL21tX2luaXQuYzoyNTMwIGZ1bmM6YWxsb2NfbGFyZ2Vfc3lzdGVtX2hhc2hcXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdDo3NjogICAgICAgICAxNU0gICAgIDM2NTYgbW0vcmVhZGFoZWFkLmM6MjQ3IGZ1bmM6cGFnZV9jYWNoZV9yYV91bmJvdW5kZWRcXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdC03Ny0gICAgICAgICA1NU0gICAgIDQ4ODcgbW0vc2x1Yi5jOjIyNTkgZnVuYzphbGxvY19zbGFiX3BhZ2VcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTQ3OTQ9c3RhdGljIGludCByZWRpcnR5X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IHBhZ2VfaWR4LCBpbnQgbGVuKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtNDgwMi1cXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XFxuZnMvZjJmcy9maWxlLmM6NDgwMzpcXHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcXHUwMDI2cmFjdGwsIGxlbiwgMCk7XFxuZnMvZjJmcy9maWxlLmMtNDgwNC1cXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcXG4tLVxcbmZzL3Zlcml0eS9wYWdlY2FjaGUuYz00Mj12b2lkIGdlbmVyaWNfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5mcy92ZXJpdHkvcGFnZWNhY2hlLmMtNTMtXFxuZnMvdmVyaXR5L3BhZ2VjYWNoZS5jOjU0OlxcdFxcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKFxcdTAwMjZyYWN0bCwgbnJfcGFnZXMsIDApO1xcbmZzL3Zlcml0eS9wYWdlY2FjaGUuYy01NS1cXHR9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xNDA4PXN0cnVjdCByZWFkYWhlYWRfY29udHJvbCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDMwLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjE0MzE6dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDMyLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVhZCwgdW5zaWduZWQgbG9uZyBsb29rYWhlYWRfY291bnQpO1xcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvcmVhZGFoZWFkLmgtMTMtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvcmVhZGFoZWFkLmg6MTQ6VFJBQ0VfRVZFTlQocGFnZV9jYWNoZV9yYV91bmJvdW5kZWQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvcmVhZGFoZWFkLmgtMTUtXFx0VFBfUFJPVE8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwgdW5zaWduZWQgbG9uZyBucl90b19yZWFkLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNDg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIzNTctXFx0XFx0XFx0XFx0ICogaW52YWxpZGF0ZV9sb2NrIGhlbGQgYWJvdmU7IGRvbid0IHJldGFrZSBpdC5cXG5tbS9raHVnZXBhZ2VkLmM6MjM1ODpcXHRcXHRcXHRcXHQgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZFxcbm1tL2todWdlcGFnZWQuYy0yMzU5LVxcdFxcdFxcdFxcdCAqIGhlbHBlciB0aGlzIHJlcGxhY2VzLCBkb2VzIG5vdCBjbGFtcCB0byBFT0YuXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjM2MS1cXHRcXHRcXHRcXHRpZiAoaW5kZXggXFx1MDAzYyBlb2YpXFxubW0va2h1Z2VwYWdlZC5jOjIzNjI6XFx0XFx0XFx0XFx0XFx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoXFx1MDAyNnJhY3RsLFxcbm1tL2todWdlcGFnZWQuYy0yMzYzLVxcdFxcdFxcdFxcdFxcdFxcdG1pbihlbmQsIGVvZikgLSBpbmRleCwgMCk7XFxuLS1cXG5tbS9yZWFkYWhlYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmFjdGxfYWxsb2NfZm9saW8oc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTIwNy0vKipcXG5tbS9yZWFkYWhlYWQuYzoyMDg6ICogcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQgLSBTdGFydCB1bmNoZWNrZWQgcmVhZGFoZWFkLlxcbm1tL3JlYWRhaGVhZC5jLTIwOS0gKiBAcmFjdGw6IFJlYWRhaGVhZCBjb250cm9sLlxcbi0tXFxubW0vcmVhZGFoZWFkLmMtMjIxLSAqL1xcbm1tL3JlYWRhaGVhZC5jOjIyMjp2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXFxubW0vcmVhZGFoZWFkLmMtMjIzLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVhZCwgdW5zaWduZWQgbG9uZyBsb29rYWhlYWRfc2l6ZSlcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTI0NC1cXG5tbS9yZWFkYWhlYWQuYzoyNDU6XFx0dHJhY2VfcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQobWFwcGluZy1cXHUwMDNlaG9zdCwgaW5kZXgsIG5yX3RvX3JlYWQsXFxubW0vcmVhZGFoZWFkLmMtMjQ2LVxcdFxcdFxcdFxcdCAgICAgIGxvb2thaGVhZF9zaXplKTtcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTMxNy19XFxubW0vcmVhZGFoZWFkLmM6MzE4OkVYUE9SVF9TWU1CT0xfR1BMKHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKTtcXG5tbS9yZWFkYWhlYWQuYy0zMTktXFxuLS1cXG5tbS9yZWFkYWhlYWQuYz0zMjY9c3RhdGljIHZvaWQgZG9fcGFnZV9jYWNoZV9yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxubW0vcmVhZGFoZWFkLmMtMzQ3LVxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcXG5tbS9yZWFkYWhlYWQuYzozNDg6XFx0cGFnZV9jYWNoZV9yYV91bmJvdW5kZWQocmFjdGwsIG5yX3RvX3JlYWQsIGxvb2thaGVhZF9zaXplKTtcXG5tbS9yZWFkYWhlYWQuYy0zNDktXFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XFxuLS1cXG5tbS9yZWFkYWhlYWQuYz00ODE9dm9pZCBwYWdlX2NhY2hlX3JhX29yZGVyKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXFxuLS1cXG5tbS9yZWFkYWhlYWQuYy01MTQtXFxubW0vcmVhZGFoZWFkLmM6NTE1OlxcdC8qIFNlZSBjb21tZW50IGluIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkgKi9cXG5tbS9yZWFkYWhlYWQuYy01MTYtXFx0bm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowODozNi45MDIxMjA3MzFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzkxNDA1NDc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSG90IFBhdGhzIGFuZCBUYXJnZXRlZCBDb2RlKipcblxuT2theSwgc28gYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCBpcyBjbGVhcmx5IGEgZnVuY3Rpb24gdGhhdCBnZXRzIGhpdCAqYSBsb3QqIGR1cmluZyBmaWxlIHJlYWRzLiBgZG9fcGFnZV9jYWNoZV9yYWAgY2FsbHMgaXQsIHdoaWNoIG1lYW5zIGFueSBmaWxlIHJlYWRpbmcgdXNpbmcgdGhlIHBhZ2UgY2FjaGUsIGxpa2UgdGhlIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcmVhZGFoZWFkIHBhdGhzLCBhcmUgZ29pbmcgdG8gYmUgdG91Y2hpbmcgdGhpcyBmdW5jdGlvbi4gTm8gbmVlZCB0byBsaXN0IHRoZSBjb21tb24gZnVuY3Rpb25zIGFnYWluLlxuXG5NeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaCwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUuIEdpdmVuIHRoZSBjb250ZXh0LCBJIHdhbnQgdG8gY29uZmlybSB0aGUgcHJpbWFyeSB0YXJnZXRzIG9mIHRoZSBwYXRjaCBhcmUgd2l0aGluIHRoZSBraHVnZXBhZ2VkIHN1YnN5c3RlbS4gTGV0J3Mgc2VlLi4uIHRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9uIGlzIGBjb2xsYXBzZV9maWxlYCwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gVGhlIGltbWVkaWF0ZSBjYWxsZXJzIGFyZSBnb2luZyB0byBiZSBgY29sbGFwc2Vfc2Nhbl9maWxlYCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLiBBbHNvLCB0aGVyZSdzIGBtYWR2aXNlX2NvbGxhcHNlYCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGBNQURWX0NPTExBUFNFYC5cblxuTm93LCBiZWZvcmUgSSBkaWcgaW50byBzcGVjaWZpY3MsIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgY2FsbGVycyBvZiBgY29sbGFwc2VfZmlsZWAuIFRoaXMgaXMgY3J1Y2lhbC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAyNzkwLTI4MTAgaW4gYG1tL2todWdlcGFnZWQuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGlyZWN0IGNhbGxzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE4MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowODo0NC44MTYxNzc4MzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzkwOlxcdFxcdGlmIChyZXN1bHQgPT0gU0NBTl9QVEVfTUFQUEVEX0hVR0VQQUdFKVxcbjI3OTE6XFx0XFx0XFx0Y2MtXFx1MDAzZXByb2dyZXNzKys7XFxuMjc5MjpcXHRcXHRlbHNlXFxuMjc5MzpcXHRcXHRcXHRjYy1cXHUwMDNlcHJvZ3Jlc3MgKz0gSFBBR0VfUE1EX05SO1xcbjI3OTQ6XFx0XFxuMjc5NTpcXHRcXHRpZiAocmVzdWx0ID09IFNDQU5fU1VDQ0VFRCkge1xcbjI3OTY6XFx0XFx0XFx0aWYgKHByZXNlbnQgXFx1MDAzYyBIUEFHRV9QTURfTlIgLSBtYXhfcHRlc19ub25lKSB7XFxuMjc5NzpcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX0VYQ0VFRF9OT05FX1BURTtcXG4yNzk4OlxcdFxcdFxcdFxcdGNvdW50X3ZtX2V2ZW50KFRIUF9TQ0FOX0VYQ0VFRF9OT05FX1BURSk7XFxuMjc5OTpcXHRcXHRcXHR9IGVsc2Uge1xcbjI4MDA6XFx0XFx0XFx0XFx0cmVzdWx0ID0gY29sbGFwc2VfZmlsZShtbSwgYWRkciwgZmlsZSwgc3RhcnQsIGNjKTtcXG4yODAxOlxcdFxcdFxcdH1cXG4yODAyOlxcdFxcdH1cXG4yODAzOlxcdFxcbjI4MDQ6XFx0XFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9zY2FuX2ZpbGUobW0sIGZvbGlvLCBmaWxlLCBwcmVzZW50LCBzd2FwLCByZXN1bHQpO1xcbjI4MDU6XFx0XFx0cmV0dXJuIHJlc3VsdDtcXG4yODA2OlxcdH1cXG4yODA3OlxcdFxcbjI4MDg6XFx0LypcXG4yODA5OlxcdCAqIFRyeSB0byBjb2xsYXBzZSBhIHNpbmdsZSBQTUQgc3RhcnRpbmcgYXQgYSBQTUQgYWxpZ25lZCBhZGRyLCBhbmQgcmV0dXJuXFxuMjgxMDpcXHQgKiB0aGUgcmVzdWx0cy5cXG4yODExOlxcdCAqL1xcbjI4MTI6XFx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuMjgxMzpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCAqbG9ja19kcm9wcGVkLFxcbjI4MTQ6XFx0XFx0XFx0c3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbjI4MTU6XFx0e1xcbjI4MTY6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbjI4MTc6XFx0XFx0Ym9vbCB0cmlnZ2VyZWRfd2IgPSBmYWxzZTtcXG4yODE4OlxcdFxcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0O1xcbjI4MTk6XFx0XFx0c3RydWN0IGZpbGUgKmZpbGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjQ0LjgxNjMyNjk0N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MTcxOTg2MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiBGaWxlLUJhY2tlZCBUSFAgQ29sbGFwc2UqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGNvZGUgbWVudGlvbnMgYGtodWdlcGFnZWRfc2Nhbl9maWxlYCwgYnV0IGhvbGQgb24sIGxpbmUgMjgwNCBzaG93cyBhIHRyYWNlcG9pbnQsIG5vdCB0aGUgYWN0dWFsIGZ1bmN0aW9uLiBUaGUgcmVhbCBmdW5jdGlvbiBuYW1lIGlzIGBjb2xsYXBzZV9zY2FuX2ZpbGVgLiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyAqdGhhdCouXG5cbkEgcXVpY2sgY2hlY2sgc2hvd3MgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIG9uIGxpbmUgMjgzNS4gQW5kLCB0cmFjaW5nIGZ1cnRoZXIgYmFjaywgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGdldHMgY2FsbGVkIGZyb20gYm90aCBgY29sbGFwc2Vfc2Nhbl9tbV9zbG90YCBhbmQgYG1hZHZpc2VfY29sbGFwc2VgLiBJbnRlcmVzdGluZy5cblxuTm93LCBhcmUgYGtodWdlcGFnZWRfZG9fc2NhbmAgb3IgYGtodWdlcGFnZWRfc2Nhbl9tbV9zbG90YCBpbnZvbHZlZCBoZXJlPyBMb29rcyBsaWtlIGBraHVnZXBhZ2VkX3NjYW5fbW1fc2xvdGAgaXMgY2FsbGVkIGJ5IGBraHVnZXBhZ2VkX2RvX3NjYW5gIHdpdGhpbiB0aGF0IGJhY2tncm91bmQgdGhyZWFkLiBBbmQsIGNydWNpYWxseSwgYG1hZHZpc2VfY29sbGFwc2VgIGhhbmRsZXMgdGhlIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCB1c2Vyc3BhY2UgY2FsbC4gR290IGl0LlxuXG5MZXQncyBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3MgdG8gc2VlIHdoYXQncyBuZWVkZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4gSGVhZCB0byBgbW0vS2NvbmZpZ2AuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgdGhlIHRvcC1sZXZlbCBvcHRpb24sIG9mIGNvdXJzZS4gQW55IGRlcGVuZGVuY2llcz8gQWgsIGBkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcdTAwMjZcdTAwMjYgIVBSRUVNUFRfUlRgLiBPbiBvdXIgYW1kNjQgdGFyZ2V0LCBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIHdlJ3JlIGdvb2QgdGhlcmUuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgZm9yIGZpbGUtYmFja2VkIFRIUCBjb2xsYXBzZT8gTGV0IG1lIGNoZWNrIGZvciB0aGluZ3MgbGlrZSBgUkVBRF9BSEVBRGAsIGBSRUFEQUhFQURgLCBvciBgRklMRV9USFBgIGluIGBtbS9LY29uZmlnYCBvciBldmVuIGBmcy9LY29uZmlnYC4gVGltZSB0byBkbyBzb21lIGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTgwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDg6NDkuOTg4MzE2NTkzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjYxMjI0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUkVBREFIRUFEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjUwLjAzNDkzNjQ1MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODUyNDkwOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYGtodWdlcGFnZWQuY2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGludG8gYGtodWdlcGFnZWQuY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0J3MgYmVoYXZpbmcgd2l0aCByZXNwZWN0IHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25zLCBhbmQgSSBoYXZlIGEgZmVlbGluZyB3ZSdyZSBnb2luZyB0byBzZWUgc29tZSBtb3JlIENPTkZJRyBkZWZpbmVzIGluIHRoZXJlLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIHdlJ3JlIHRyb3VibGVzaG9vdGluZy4gTGV0J3Mgc3RhcnQgd2l0aCBga2h1Z2VwYWdlZC5jYCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgd2FudCB0byBtYWtlIGNlcnRhaW4gSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBjb2RlJ3MgY29uZGl0aW9uYWwgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTg2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDg6NTIuODg3NDI5Nzk1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTUwMTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MTM2PXN0YXRpYyBzdHJ1Y3Qga2h1Z2VwYWdlZF9zY2FuIGtodWdlcGFnZWRfc2NhbiA9IHtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMzktXFxubW0va2h1Z2VwYWdlZC5jOjE0MDojaWZkZWYgQ09ORklHX1NZU0ZTXFxubW0va2h1Z2VwYWdlZC5jLTE0MS1zdGF0aWMgc3NpemVfdCBzY2FuX3NsZWVwX21pbGxpc2Vjc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTM0NT1zdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGtodWdlcGFnZWRfYXR0cl9ncm91cCA9IHtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zNDgtfTtcXG5tbS9raHVnZXBhZ2VkLmM6MzQ5OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5tbS9raHVnZXBhZ2VkLmMtMzUwLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTEwMzM9c3RhdGljIGlubGluZSBnZnBfdCBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2sodm9pZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMDM3LVxcbm1tL2todWdlcGFnZWQuYzoxMDM4OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL2todWdlcGFnZWQuYy0xMDM5LXN0YXRpYyBpbnQgY29sbGFwc2VfZmluZF90YXJnZXRfbm9kZShzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA4OjUyLjkzODkzNjM2NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3ODAyNTY5MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGtodWdlcGFnZWQuYyBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBga2h1Z2VwYWdlZC5jYCBmaWxlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkndmUgcmVhbGl6ZWQgdGhhdCB0aGUgY29kZSBvbmx5IGRlcGVuZHMgaW50ZXJuYWxseSBvbiBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCwgYnV0IHRoZXNlIGRvbid0IHNlZW0gdG8gZ3VhcmQgdGhlIGBjb2xsYXBzZV9maWxlYCBmdW5jdGlvbi4gTG9va2luZyBhdCB0aGUgYG1tL01ha2VmaWxlYCwgaXQncyBjbGVhciB0aGF0IGBraHVnZXBhZ2VkLm9gIGdldHMgYnVpbHQgb25seSBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLiBUaGF0J3Mgb3VyIHByaW1hcnkgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudCB0aGVuLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgYEZvY3VzU3ltYm9sc2AuIFdlJ3JlIGxvb2tpbmcgYXQ6IGBjb2xsYXBzZV9maWxlYCwgYGNvbGxhcHNlX3NjYW5fZmlsZWAsIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCwgYW5kIGBtYWR2aXNlX2NvbGxhcHNlYC4gQXJlIHRoZXNlIHN5bWJvbHMgc3BlY2lmaWMgZW5vdWdoIHRvIHdhcnJhbnQgYXR0ZW50aW9uPyBBYnNvbHV0ZWx5LiBgY29sbGFwc2VfZmlsZWAgaXMgaGlnaGx5IHNwZWNpZmljIGFuZCB3YXMgZGlyZWN0bHkgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBgY29sbGFwc2Vfc2Nhbl9maWxlYCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGFyZSBhbHNvIHZlcnkgdGFyZ2V0ZWQsIGFzIHRoZWlyIGNhbGxlcnMgYXJlIGxpbWl0ZWQgdG8gdGhlIGBraHVnZXBhZ2VkLmNgIG1vZHVsZS4gVGhlbiwgYG1hZHZpc2VfY29sbGFwc2VgIGlzIGEgY2xlYXJseSBkZWZpbmVkIGVudHJ5IHBvaW50IGZvciB0aGUgYE1BRFZfQ09MTEFQU0VgIG9wZXJhdGlvbi5cblxuTm9uZSBvZiB0aGVzZSBhcmUgZ2VuZXJpYyBvciBhbGwtb3Zlci10aGUtcGxhY2UgbGlrZSB5b3VyIGNvbW1vbiBga21hbGxvY2AgY2FsbHMsIHBhZ2UgZmF1bHQgaGFuZGxlcnMgb3IgbG9ja3MuIFRoZXkgYWxsIGV4ZWN1dGUgb25seSBkdXJpbmcgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIGNvbGxhcHNlLCBlaXRoZXIgdGhyb3VnaCB0aGUgYE1BRFZfQ09MTEFQU0VgIHN5c2NhbGwgb3IgdGhlIGBraHVnZXBhZ2VkYCBkYWVtb24uXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlIGZ1enppbmcgcmVhc29uaW5nIGFuZCBjb25maWcuIEl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIG1vZGlmaWVzIGBjb2xsYXBzZV9maWxlYCB0byBhY3F1aXJlIGBtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9ja2AgZWFybGllciBhbmQgaG9sZCBpdCB0aHJvdWdob3V0IHRoZSBjb2xsYXBzZSBwcm9jZXNzLiBUaGlzIGNoYW5nZXMgdGhlIGxvY2tpbmcgb3JkZXIgYW5kIGZpbGUgcmVhZCBhaGVhZCBiZWhhdmlvci4gQmVjYXVzZSBvZiB0aGlzIGxvY2tpbmcgbW9kaWZpY2F0aW9uLCBwbHVzIHRoZSByZXBsYWNlbWVudCBvZiBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpYCB3aXRoIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpYCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBsb2NrIGludmVyc2lvbnMsIGRlYWRsb2NrcywgcmFjZXMgd2l0aCB0cnVuY2F0ZS9pbnZhbGlkYXRpb24sIG9yIHVuZXhwZWN0ZWQgZXJyb3JzISBUaGUgZW5hYmxpbmcgY29uZmlnIGlzIGp1c3QgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIG15IGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhciB0b28uIEFsbCBjaGVja3MgYXJlIGdyZWVuLiBUaW1lIHRvIGNhbGwgaXQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDkxLCJPdXRwdXRUb2tlbnMiOjE5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowOTowMC43NDE1MDgzNTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDI4MzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb2xsYXBzZV9maWxlXCIsXG4gICAgXCJjb2xsYXBzZV9zY2FuX2ZpbGVcIixcbiAgICBcImNvbGxhcHNlX3NpbmdsZV9wbWRcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb2xsYXBzZV9maWxlKCkgaW4gbW0va2h1Z2VwYWdlZC5jIHRvIGFjcXVpcmUgbWFwcGluZy1cXHUwMDNlaW52YWxpZGF0ZV9sb2NrIGVhcmxpZXIgKHByaW9yIHRvIGxvY2tpbmcgZm9saW9zKSBhbmQgaG9sZCBpdCBzaGFyZWQgdGhyb3VnaG91dCB0aGUgY29sbGFwc2Ugb3BlcmF0aW9uLCByZXBsYWNpbmcgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpIHdpdGggcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKS4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhbHRlciBsb2NraW5nIGhpZXJhcmNoaWVzLCBjb25jdXJyZW5jeSwgYW5kIHJlYWRhaGVhZCBiZWhhdmlvciBkdXJpbmcgVEhQIGZpbGUgY29sbGFwc2UgKHJlYWNoYWJsZSB2aWEgbWFkdmlzZShNQURWX0NPTExBUFNFKSBvciBraHVnZXBhZ2VkIHNjYW5uaW5nKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IHBvdGVudGlhbCBsb2NrIGludmVyc2lvbiwgZGVhZGxvY2tzIHdpdGggZmlsZSB0cnVuY2F0aW9uL2ludmFsaWRhdGlvbiwgYW5kIHJhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbGxhcHNlX2ZpbGVcIixcbiAgICBcImNvbGxhcHNlX3NjYW5fZmlsZVwiLFxuICAgIFwiY29sbGFwc2Vfc2luZ2xlX3BtZFwiLFxuICAgIFwibWFkdmlzZV9jb2xsYXBzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvbGxhcHNlX2ZpbGUoKSBpbiBtbS9raHVnZXBhZ2VkLmMgdG8gYWNxdWlyZSBtYXBwaW5nLVxcdTAwM2VpbnZhbGlkYXRlX2xvY2sgZWFybGllciAocHJpb3IgdG8gbG9ja2luZyBmb2xpb3MpIGFuZCBob2xkIGl0IHNoYXJlZCB0aHJvdWdob3V0IHRoZSBjb2xsYXBzZSBvcGVyYXRpb24sIHJlcGxhY2luZyBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgd2l0aCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFsdGVyIGxvY2tpbmcgaGllcmFyY2hpZXMsIGNvbmN1cnJlbmN5LCBhbmQgcmVhZGFoZWFkIGJlaGF2aW9yIGR1cmluZyBUSFAgZmlsZSBjb2xsYXBzZSAocmVhY2hhYmxlIHZpYSBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpIG9yIGtodWdlcGFnZWQgc2Nhbm5pbmcpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgcG90ZW50aWFsIGxvY2sgaW52ZXJzaW9uLCBkZWFkbG9ja3Mgd2l0aCBmaWxlIHRydW5jYXRpb24vaW52YWxpZGF0aW9uLCBhbmQgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowOTowMC44MTE3OTkyNThaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTUzMDMwMTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjAwLjgxMjIzMjcwN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExMTUyOTg2MzY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGNvbGxhcHNlX2ZpbGUoKWAgaW4gYG1tL2todWdlcGFnZWQuY2AgdG8gcHJldmVudCBhIGxvY2tpbmcgZGVhZGxvY2sgYmV0d2VlbiBgbWFwcGluZy1cXHUwMDNlaW52YWxpZGF0ZV9sb2NrYCBhbmQgZm9saW8gbG9ja3MgKGUuZy4gZHVyaW5nIGNvbmN1cnJlbnQgdHJ1bmNhdGlvbikuIEl0IHRha2VzIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZylgIHByaW9yIHRvIGZvbGlvIGxvY2tpbmcgYW5kIGRpcmVjdGx5IGludm9rZXMgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgIGluc3RlYWQgb2YgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKWAuXFxuXFxuLSBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGBuZWVkX3VubG9ja2AsIGByYWN0bGAsIGBlb2ZgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGBuZWVkX3VubG9ja2AgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCwgYW5kIGByYWN0bGAgaXMgaW5pdGlhbGl6ZWQgdmlhIGBERUZJTkVfUkVBREFIRUFEKClgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIGFsbCB1bnNwZWNpZmllZCBzdHJ1Y3R1cmUgZmllbGRzIHBlciBDIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIgc2VtYW50aWNzLlxcbi0gVGhlIGNoYW5nZXMgZG8gbm90IGFsdGVyIGtlcm5lbC10by11c2VyIGRhdGEgY29waWVzLCBpb2N0bHMsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZC5cXG4tIExvY2tpbmcgY29ycmVjdG5lc3MgYW5kIGRlYWRsb2NrcyBhZGRyZXNzZWQgaGVyZSBhcmUgY292ZXJlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcgY29uZmlncy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiYTIwYTllODVjM2ZhZDFlYzlkZTZiODMyYzcwYjRjZWI5YTBhYzVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTc6MDc6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDExZmY5OGQ1NWM3NmUuLmE1ZmNhZmQ1NzUwNTYgMTAwNjQ0XG4tLS0gYS9tbS9raHVnZXBhZ2VkLmNcbisrKyBiL21tL2todWdlcGFnZWQuY1xuQEAgLTIyNTcsNiArMjI1Nyw3IEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0ID0gU0NBTl9TVUNDRUVEO1xuIFx0aW50IG5yX25vbmUgPSAwO1xuIFx0Ym9vbCBpc19zaG1lbSA9IHNobWVtX2ZpbGUoZmlsZSk7XG4rXHRib29sIG5lZWRfdW5sb2NrID0gZmFsc2U7XG4gXG4gXHQvKlxuIFx0ICogTUFEVl9DT0xMQVBTRSBpZ25vcmVzIHNobWVtIGh1Z2UgY29uZmlnLCBzbyBkbyBub3QgY2hlY2sgc2htZW1cbkBAIC0yMjcxLDYgKzIyNzIsMTUgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LypcbitcdCAqIFRha2UgaW52YWxpZGF0ZV9sb2NrIGJlZm9yZSBhbnkgZm9saW8gbG9jazogdGhlIHJlYWRhaGVhZCBiZWxvd1xuK1x0ICogbmVlZHMgaXQsIGFuZCB0cnVuY2F0ZSBob2xkcyBpdCB3aGlsZSB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzLlxuK1x0ICovXG4rXHRpZiAoIWlzX3NobWVtKSB7XG4rXHRcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbitcdFx0bmVlZF91bmxvY2sgPSB0cnVlO1xuK1x0fVxuK1xuIFx0bWFwcGluZ19zZXRfdXBkYXRlKFx1MDAyNnhhcywgbWFwcGluZyk7XG4gXG4gXHRfX2ZvbGlvX3NldF9sb2NrZWQobmV3X2ZvbGlvKTtcbkBAIC0yMzM3LDEwICsyMzQ3LDIwIEBAIHN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XHQvKiAhaXNfc2htZW0gKi9cbiBcdFx0XHRpZiAoIWZvbGlvIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xuK1x0XHRcdFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgXHUwMDI2ZmlsZS1cdTAwM2VmX3JhLFxuK1x0XHRcdFx0XHRcdCAgbWFwcGluZywgaW5kZXgpO1xuK1x0XHRcdFx0cGdvZmZfdCBlb2YgPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQobWFwcGluZy1cdTAwM2Vob3N0KSxcbitcdFx0XHRcdFx0XHRcdCAgICBQQUdFX1NJWkUpO1xuK1xuIFx0XHRcdFx0eGFzX3VubG9ja19pcnEoXHUwMDI2eGFzKTtcbi1cdFx0XHRcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgXHUwMDI2ZmlsZS1cdTAwM2VmX3JhLFxuLVx0XHRcdFx0XHRcdFx0ICBmaWxlLCBpbmRleCxcbi1cdFx0XHRcdFx0XHRcdCAgZW5kIC0gaW5kZXgpO1xuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIGludmFsaWRhdGVfbG9jayBoZWxkIGFib3ZlOyBkb24ndCByZXRha2UgaXQuXG4rXHRcdFx0XHQgKiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpLCB1bmxpa2UgdGhlIHJlYWRhaGVhZFxuK1x0XHRcdFx0ICogaGVscGVyIHRoaXMgcmVwbGFjZXMsIGRvZXMgbm90IGNsYW1wIHRvIEVPRi5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0aWYgKGluZGV4IFx1MDAzYyBlb2YpXG4rXHRcdFx0XHRcdHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKFx1MDAyNnJhY3RsLFxuK1x0XHRcdFx0XHRcdG1pbihlbmQsIGVvZikgLSBpbmRleCwgMCk7XG4gXHRcdFx0XHQvKiBkcmFpbiBscnUgY2FjaGUgdG8gaGVscCBmb2xpb19pc29sYXRlX2xydSgpICovXG4gXHRcdFx0XHRscnVfYWRkX2RyYWluKCk7XG4gXHRcdFx0XHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyhtYXBwaW5nLCBpbmRleCk7XG5AQCAtMjY3Miw2ICsyNjkyLDggQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XG4gXHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcbiBvdXQ6XG4rXHRpZiAobmVlZF91bmxvY2spXG4rXHRcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuIFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG4gXHR0cmFjZV9tbV9raHVnZXBhZ2VkX2NvbGxhcHNlX2ZpbGUobW0sIG5ld19mb2xpbywgaW5kZXgsIGFkZHIsIGlzX3NobWVtLCBmaWxlLCBIUEFHRV9QTURfTlIsIHJlc3VsdCk7XG4gXHRyZXR1cm4gcmVzdWx0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDk6MDAuODEyMjMzOTM4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcxOTM0MTYyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbjogUGF0Y2ggaW4gYG1tL2todWdlcGFnZWQuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgcGF0Y2ggZm9yIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgdXNlciBpcyBhc2tpbmcgd2hldGhlciB0aGlzIGNoYW5nZSBuZWNlc3NpdGF0ZXMgZ29pbmcgYmV5b25kIG91ciBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGNvdmVyYWdlLiBNeSBqb2IgaXMgdG8gYXNzZXNzIGlmIHRoZXJlJ3MgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgdGhhdCBLTVNBTiB3b3VsZCBzcGVjaWZpY2FsbHkgY2F0Y2guXG5cbkZpcnN0LCBJIG5lZWQgdG8ga2VlcCB0aGUgcnVsZXMgZnJvbnQgYW5kIGNlbnRlcjogS0FTQU4gY292ZXJzIE9PQiwgVUFGLCBldGMuOyBMT0NLREVQIGhhbmRsZXMgbG9ja2luZyBpc3N1ZXM7IFVCIHNhbml0aXplcnMgbG9vayBhdCB1bmRlZmluZWQgYmVoYXZpb3I7IGFuZCBLTVNBTidzIHNwZWNpYWx0eSBpcyBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGJvdGggb24gdGhlIHN0YWNrLCBoZWFwLCBhbmQgcGFnZSBhbGxvY2F0aW9ucywgYW5kIGFueSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuIENydWNpYWxseSwgSSdtICpub3QqIHNldHRpbmcgYE5lZWRzS01TQU49dHJ1ZWAgaWYgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIHRvb2xzIHdvdWxkIGFscmVhZHkgZmluZCB0aGUgYnVnLlxuXG5JIG5lZWQgdG8gZmxhZyBgTmVlZHNLTVNBTj10cnVlYCBpZiB0aGUgcGF0Y2ggdG91Y2hlcyBhbnkgb2YgdGhlc2U6XG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcy9wYWRkaW5nIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci5cbjQuICBCb3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgd2hpY2ggbWlnaHQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cbkNvbnZlcnNlbHksIEkgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBpZjpcbiogICBUaGUgY29kZSBjaGFuZ2VzIHJpc2sgb3V0LW9mLWJvdW5kcywgb3ZlcmZsb3dzLCBOVUxMIGRlcmVmZXJlbmNlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAoS0FTQU4gaGFuZGxlcyB0aGVzZSkuXG4qICAgQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkL2luaXRpYWxpemVkIGJlZm9yZSB1c2UuXG4qICAgVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBpbiBgY29sbGFwc2VfZmlsZSgpYCB3aXRoaW4gdGhlIGtodWdlcGFnZWQgbW9kdWxlLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGxvY2tpbmcgYW5kIHJlYWRhaGVhZCBvcGVyYXRpb25zLiBBIG5ldyBgbmVlZF91bmxvY2tgIHZhcmlhYmxlIGlzIGludHJvZHVjZWQsIGFuZCB0aGVyZSdzIGEgY29uZGl0aW9uYWwgYmxvY2sgdGhhdCBub3cgdGFrZXMgYGludmFsaWRhdGVfbG9ja2AgYmVmb3JlIGFueSBmb2xpbyBsb2NrLCB3aGljaCBpcyB0aGVuIHVubG9ja2VkIGF0IHRoZSBlbmQuIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGBERUZJTkVfUkVBREFIRUFEYCBtYWNybyBhbmQgc29tZSBsb2dpYyBpbnZvbHZpbmcgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgLCByZXBsYWNpbmcgYW4gb2xkZXIgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKWAuXG5cbkkgbmVlZCB0byByZWFkIHRoaXMgbWFjcm8gYW5kIHRoZSBjYWxscyBpdCBtYWtlcyB0byBnZXQgdG8gdGhlIHRydXRoIG9mIHRoaXMuIEJhc2VkIG9uIG15IHF1aWNrIHNjYW4sIHRoZSBjb2RlIGlzIHRvdWNoaW5nIHRoZSBmaWxlIG1hcHBpbmcgYW5kIGZvbGlvcywgd2hpY2ggaGF2ZSB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpZiB0aGUgc3RydWN0dXJlcyBhbmQgcGFnZXMgYXJlIG5vdCBzZXQgY29ycmVjdGx5LiBUaGUgcmVhZGFoZWFkIGxvZ2ljIGFuZCB0aGUgbG9ja2luZyBjaGFuZ2UgYXJlIHRoZSBob3Qgc3BvdHMgSSBuZWVkIHRvIHZlcmlmeS4gSSB3aWxsIGxvb2sgdXAgYERFRklORV9SRUFEQUhFQURgIHRvIHZlcmlmeS4gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUncyBhbnl0aGluZyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiB0byBzZWUgd2hhdCB0aGUgcmVhZGFoZWFkIGxvZ2ljIGlzIGRvaW5nIGFuZCB3aGF0IGRhdGEgaXQncyB0b3VjaGluZy4gSXMgdGhlcmUgYW55IGNoYW5jZSB0aGF0IHRoZSBwYXRjaCBhbGxvd3MgdW5pbml0aWFsaXplZCBkYXRhIHRvIGxlYWsgdG8gdXNlciBzcGFjZT8gSSBzdXNwZWN0IHRoYXQgYmFzZWQgb24gbXkgcXVpY2sgcmVhZCB0aGUgcmlzayBpcyBsb3csIGFuZCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDk6MDguMDA1NjUzMzgyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM4MTMxMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgREVGSU5FX1JFQURBSEVBRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xNDA4PXN0cnVjdCByZWFkYWhlYWRfY29udHJvbCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDIwLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjE0MjE6I2RlZmluZSBERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmLCByLCBtLCBpKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xNDIyLVxcdHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCByYWN0bCA9IHtcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjA5LjY0Mzc5MDE1NloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDUzNTg4MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBSZWFkYWhlYWQgTWFjcm8qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBERUZJTkVfUkVBREFIRUFEYCBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSSd2ZSBiZWVuIHdvcmtpbmcgd2l0aCBwYWdlIGNhY2hpbmcgYW5kIHJlYWRhaGVhZCByZWNlbnRseSwgYW5kIHRoZXJlJ3MgYSBwYXJ0aWN1bGFyIGFzcGVjdCB0aGF0IEkgd2FudCB0byByZXZpZXcuIEl0IGxvb2tzIGxpa2UgbGluZSAxNDIwIG9mIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAgaXMgd2hlcmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb24gc2hvdWxkIGJlLiBMZXQncyBwdWxsIHRoYXQgZmlsZSB1cCBhbmQgZ2V0IGEgY2xvc2VyIGxvb2sgYXQgd2hhdCB0aGUgbWFjcm8gaXMgZG9pbmcgdW5kZXIgdGhlIGhvb2QsIEknbSBzdXJlIEknbGwgcmVjYWxsIHF1aWNrbHkgb25jZSBJIGhhdmUgdGhlIHNvdXJjZSBpbiBmcm9udCBvZiBtZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5zaWdodCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowOToxMi4wOTczODIxNTdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGFnZW1hcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MTA6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuMTQxMTpcXHRcXHRzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmE7XFxuMTQxMjpcXHQvKiBwcml2YXRlOiB1c2UgdGhlIHJlYWRhaGVhZF8qIGFjY2Vzc29ycyBpbnN0ZWFkICovXFxuMTQxMzpcXHRcXHRwZ29mZl90IF9pbmRleDtcXG4xNDE0OlxcdFxcdHVuc2lnbmVkIGludCBfbnJfcGFnZXM7XFxuMTQxNTpcXHRcXHR1bnNpZ25lZCBpbnQgX2JhdGNoX2NvdW50O1xcbjE0MTY6XFx0XFx0Ym9vbCBkcm9wYmVoaW5kO1xcbjE0MTc6XFx0XFx0Ym9vbCBfd29ya2luZ3NldDtcXG4xNDE4OlxcdFxcdHVuc2lnbmVkIGxvbmcgX3BmbGFncztcXG4xNDE5OlxcdH07XFxuMTQyMDpcXHRcXG4xNDIxOlxcdCNkZWZpbmUgREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZiwgciwgbSwgaSlcXHRcXHRcXHRcXHRcXFxcXFxuMTQyMjpcXHRcXHRzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgcmFjdGwgPSB7XFx0XFx0XFx0XFx0XFxcXFxcbjE0MjM6XFx0XFx0XFx0LmZpbGUgPSBmLFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4xNDI0OlxcdFxcdFxcdC5tYXBwaW5nID0gbSxcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMTQyNTpcXHRcXHRcXHQucmEgPSByLFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4xNDI2OlxcdFxcdFxcdC5faW5kZXggPSBpLFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4xNDI3OlxcdFxcdH1cXG4xNDI4OlxcdFxcbjE0Mjk6XFx0I2RlZmluZSBWTV9SRUFEQUhFQURfUEFHRVNcXHQoU1pfMTI4SyAvIFBBR0VfU0laRSlcXG4xNDMwOlxcdFxcbjE0MzE6XFx0dm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKixcXG4xNDMyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVhZCwgdW5zaWduZWQgbG9uZyBsb29rYWhlYWRfY291bnQpO1xcbjE0MzM6XFx0dm9pZCBwYWdlX2NhY2hlX3N5bmNfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICosIHVuc2lnbmVkIGxvbmcgcmVxX2NvdW50KTtcXG4xNDM0OlxcdHZvaWQgcGFnZV9jYWNoZV9hc3luY19yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKiwgc3RydWN0IGZvbGlvICosXFxuMTQzNTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHJlcV9jb3VudCk7XFxuMTQzNjpcXHR2b2lkIHJlYWRhaGVhZF9leHBhbmQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4xNDM3OlxcdFxcdFxcdCAgICAgIGxvZmZfdCBuZXdfc3RhcnQsIHNpemVfdCBuZXdfbGVuKTtcXG4xNDM4OlxcdFxcbjE0Mzk6XFx0LyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjEyLjA5NzU2MDk0N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozOTE5ODkwMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGByYWN0bGAgSW5pdGlhbGl6YXRpb24gYW5kIEtodWdlcGFnZWQqKlxuXG5Pa2F5LCBzbyBgREVGSU5FX1JFQURBSEVBRGAgaXMgc2V0dGluZyB1cCBgcmFjdGxgLiBUaGUga2V5IGhlcmUgaXMgdGhlIGluaXRpYWxpemVycy4gQnkgZGVzaWduLCBhbnkgZmllbGRzIEkgZG9uJ3QgZXhwbGljaXRseSBzcGVjaWZ5IGdldCB6ZXJvZWQgb3V0LCB0aGFua3MgdG8gQyBzZW1hbnRpY3MuIFRoYXQgZ2l2ZXMgbWUgYSBjbGVhbiBzdGFydGluZyBwb2ludC5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byB0aGUgcmVhbCB3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgY29sbGFwc2VfZmlsZWAgd2l0aGluIHRoZSBjb250ZXh0IG9mIGtodWdlcGFnZWQuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIGFyb3VuZCBsaW5lcyAyMjUwIHRvIDI3MDAgaW4gYG1tL2todWdlcGFnZWQuY2AuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3QsIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayB0byBmaW5kIHRoZSBkZXRhaWxzIGFib3V0IGhvdyB0aGUgZmlsZSBjb2xsYXBzaW5nIHdvcmtzIHdpdGhpbiBraHVnZXBhZ2VkLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjE2LjAxNzQ1MzQ1M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNTA6XFx0e1xcbjIyNTE6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuMjI1MjpcXHRcXHRzdHJ1Y3QgcGFnZSAqZHN0O1xcbjIyNTM6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgKnRtcCwgKm5ld19mb2xpbztcXG4yMjU0OlxcdFxcdHBnb2ZmX3QgaW5kZXggPSAwLCBlbmQgPSBzdGFydCArIEhQQUdFX1BNRF9OUjtcXG4yMjU1OlxcdFxcdExJU1RfSEVBRChwYWdlbGlzdCk7XFxuMjI1NjpcXHRcXHRYQV9TVEFURV9PUkRFUih4YXMsIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzLCBzdGFydCwgSFBBR0VfUE1EX09SREVSKTtcXG4yMjU3OlxcdFxcdGVudW0gc2Nhbl9yZXN1bHQgcmVzdWx0ID0gU0NBTl9TVUNDRUVEO1xcbjIyNTg6XFx0XFx0aW50IG5yX25vbmUgPSAwO1xcbjIyNTk6XFx0XFx0Ym9vbCBpc19zaG1lbSA9IHNobWVtX2ZpbGUoZmlsZSk7XFxuMjI2MDpcXHRcXHRib29sIG5lZWRfdW5sb2NrID0gZmFsc2U7XFxuMjI2MTpcXHRcXG4yMjYyOlxcdFxcdC8qXFxuMjI2MzpcXHRcXHQgKiBNQURWX0NPTExBUFNFIGlnbm9yZXMgc2htZW0gaHVnZSBjb25maWcsIHNvIGRvIG5vdCBjaGVjayBzaG1lbVxcbjIyNjQ6XFx0XFx0ICpcXG4yMjY1OlxcdFxcdCAqIFRPRE86IG9uY2Ugc2htZW0gYWx3YXlzIGNhbGxzIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcygpIG9uIGl0c1xcbjIyNjY6XFx0XFx0ICogbWFwcGluZywgdGhlIHNobWVtIGNoZWNrIGNhbiBiZSByZW1vdmVkLlxcbjIyNjc6XFx0XFx0ICovXFxuMjI2ODpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIWlzX3NobWVtIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KG1hcHBpbmcpKTtcXG4yMjY5OlxcdFxcdFZNX1dBUk5fT05fT05DRShzdGFydCBcXHUwMDI2IChIUEFHRV9QTURfTlIgLSAxKSk7XFxuMjI3MDpcXHRcXG4yMjcxOlxcdFxcdHJlc3VsdCA9IGFsbG9jX2NoYXJnZV9mb2xpbyhcXHUwMDI2bmV3X2ZvbGlvLCBtbSwgY2MsIEhQQUdFX1BNRF9PUkRFUik7XFxuMjI3MjpcXHRcXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcXG4yMjczOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIyNzQ6XFx0XFxuMjI3NTpcXHRcXHQvKlxcbjIyNzY6XFx0XFx0ICogVGFrZSBpbnZhbGlkYXRlX2xvY2sgYmVmb3JlIGFueSBmb2xpbyBsb2NrOiB0aGUgcmVhZGFoZWFkIGJlbG93XFxuMjI3NzpcXHRcXHQgKiBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuXFxuMjI3ODpcXHRcXHQgKi9cXG4yMjc5OlxcdFxcdGlmICghaXNfc2htZW0pIHtcXG4yMjgwOlxcdFxcdFxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcXG4yMjgxOlxcdFxcdFxcdG5lZWRfdW5sb2NrID0gdHJ1ZTtcXG4yMjgyOlxcdFxcdH1cXG4yMjgzOlxcdFxcbjIyODQ6XFx0XFx0bWFwcGluZ19zZXRfdXBkYXRlKFxcdTAwMjZ4YXMsIG1hcHBpbmcpO1xcbjIyODU6XFx0XFxuMjI4NjpcXHRcXHRfX2ZvbGlvX3NldF9sb2NrZWQobmV3X2ZvbGlvKTtcXG4yMjg3OlxcdFxcdGlmIChpc19zaG1lbSlcXG4yMjg4OlxcdFxcdFxcdF9fZm9saW9fc2V0X3N3YXBiYWNrZWQobmV3X2ZvbGlvKTtcXG4yMjg5OlxcdFxcdG5ld19mb2xpby1cXHUwMDNlaW5kZXggPSBzdGFydDtcXG4yMjkwOlxcdFxcdG5ld19mb2xpby1cXHUwMDNlbWFwcGluZyA9IG1hcHBpbmc7XFxuMjI5MTpcXHRcXG4yMjkyOlxcdFxcdC8qXFxuMjI5MzpcXHRcXHQgKiBFbnN1cmUgd2UgaGF2ZSBzbG90cyBmb3IgYWxsIHRoZSBwYWdlcyBpbiB0aGUgcmFuZ2UuICBUaGlzIGlzXFxuMjI5NDpcXHRcXHQgKiBhbG1vc3QgY2VydGFpbmx5IGEgbm8tb3AgYmVjYXVzZSBtb3N0IG9mIHRoZSBwYWdlcyBtdXN0IGJlIHByZXNlbnRcXG4yMjk1OlxcdFxcdCAqL1xcbjIyOTY6XFx0XFx0ZG8ge1xcbjIyOTc6XFx0XFx0XFx0eGFzX2xvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjIyOTg6XFx0XFx0XFx0eGFzX2NyZWF0ZV9yYW5nZShcXHUwMDI2eGFzKTtcXG4yMjk5OlxcdFxcdFxcdGlmICgheGFzX2Vycm9yKFxcdTAwMjZ4YXMpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowOToxNi4wMTc2Njc2OTNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI0ODcyOTIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZSBzbmlwcGV0LlxuXG4qKkFuYWx5emluZyB0aGUgUmVhZC1BaGVhZCBTdHJhdGVneSBDb21wYXJpc29uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyByZWFkLWFoZWFkIGxvZ2ljIGJldHRlci4gSSdtIGZvY3VzaW5nIG9uIHRoZSBkZWx0YSBiZXR3ZWVuIGNhbGxzIHRvIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCBhbmQgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYC4gSSB3YW50IHRvIGlkZW50aWZ5ICpleGFjdGx5KiB3aGF0IGRpZmZlcmVudGlhdGVzIHRoZWlyIGJlaGF2aW9ycy4gTXkgdGhpbmtpbmcgaXMgdGhhdCBieSB1bmRlcnN0YW5kaW5nIHRoZSBjb250cmFzdGluZyBsb2dpYyBpbiB0aGVzZSBmdW5jdGlvbnMsIEkgY2FuIHRoZW4gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGludGVudGlvbiBvZiB0aGUgY29kZS4gU28sIGZpcnN0LCBJIG5lZWQgYSBwcmVjaXNlIGRlZmluaXRpb24gb2YgdGhlaXIgaW5kaXZpZHVhbCBmdW5jdGlvbmFsaXR5LiBMZXQgbWUgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbnMgZm9yIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCBhbmQgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCByaWdodCBub3cuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBzeW5jaHJvbm91cyB2ZXJzdXMgYXN5bmNocm9ub3VzIHJlYWRzLCB0aGUgYW1vdW50IG9mIGRhdGEgdGhleSBwcmVmZXRjaCwgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIG9uZSBpcyBjaG9zZW4gb3ZlciB0aGUgb3RoZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyB0aGUgcmVhZCBwYXRoLCBlc3BlY2lhbGx5IHVuZGVyIHZhcnlpbmcgSS9PIGxvYWQuIFRoaXMgZGlyZWN0IGNvbXBhcmlzb24gaXMgdGhlIGtleSB0byBzcG90dGluZyBwb3RlbnRpYWwgYm90dGxlbmVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NDMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjE4LjI2NjQwNzA4N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyODkzNjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjE4LjMxNTcwMjU4NloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTE2NDc3NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNrIGRvd24gaW5zdGFuY2VzIG9mIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkYCB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gVGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIHNlYXJjaDsgSSdtIGdvaW5nIHRvIGxvb2sgYXQgaXQgbWV0aG9kaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UsIGl0cyBjb250ZXh0LCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gdXNlIGEgcm9idXN0IHNlYXJjaCB0b29sIOKAkyBzb21ldGhpbmcgdGhhdCBjYW4gaGFuZGxlIGEgbGFyZ2UgcHJvamVjdCBhbmQgb2ZmZXJzIGdvb2QgY3Jvc3MtcmVmZXJlbmNpbmcgY2FwYWJpbGl0aWVzLiBJJ20gbWVudGFsbHkgcGFyc2luZyB3aGVyZSB0aGlzIGxpa2VseSBzaXRzOiBrZXJuZWwgY29yZT8gZmlsZXN5c3RlbSBkcml2ZXJzPyBkZXZpY2UgZHJpdmVycz8gb3IgbWF5YmUgZXZlbiBpbiBzb21lIG9ic2N1cmUgbmV0d29yayBzdWJzeXN0ZW0gY29kZT8gRGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBjb2RlYmFzZSwgdGhpcyBtaWdodCB0YWtlIGEgYml0IG9mIHRpbWUsIHNvIEknbGwgbmVlZCB0byBidWRnZXQgYWNjb3JkaW5nbHkuIE9uY2UgSSBoYXZlIHRoZSByZXN1bHRzLCBJJ2xsIGZpbHRlciBmb3IgYm90aCBkaXJlY3QgY2FsbHMgYW5kIGFueSBpbmRpcmVjdCB1c2FnZSB2aWEgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSB1bnVzdWFsIHVzZSBjYXNlczsgdGhpcyBtaWdodCBiZSBhIGtleSBmdW5jdGlvbiwgYnV0IEknbGwgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgZnVuY3Rpb24gc2lnbmF0dXJlLCBqdXN0IGluIGNhc2UgdGhlcmUgYXJlIHZhcmlhdGlvbnMgb3Igc3BlY2lmaWMgaW5jbHVkZXMgdGhhdCBhcmUgcmVsZXZhbnQuIEFmdGVyIEkndmUgY29tcGlsZWQgbXkgaGl0IGxpc3QsIEknbGwgbG9vayBpbnRvIHJldmlld2luZyBlYWNoIGxvY2F0aW9uIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyBzZWFyY2ggaXMgdGhlIG5lY2Vzc2FyeSBmaXJzdCBzdGVwLCBidXQgaXQncyBvbmx5IHRoZSBzdGFydCBvZiB3aGF0IG5lZWRzIHRvIGJlIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NTksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowOToyMS4yMzIxODI4MDlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTQ5OTMyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9idHJmcy9kZWZyYWcuYz0xMjYxPXN0YXRpYyBpbnQgZGVmcmFnX29uZV9jbHVzdGVyKHN0cnVjdCBidHJmc19pbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9idHJmcy9kZWZyYWcuYy0xMzAyLVxcbmZzL2J0cmZzL2RlZnJhZy5jOjEzMDM6XFx0XFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChpbm9kZS1cXHUwMDNldmZzX2lub2RlLmlfbWFwcGluZyxcXG5mcy9idHJmcy9kZWZyYWcuYy0xMzA0LVxcdFxcdFxcdFxcdHJhLCBOVUxMLCBlbnRyeS1cXHUwMDNlc3RhcnQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4tLVxcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYz0zNjc9c3RhdGljIHZvaWQgcmVhZGFoZWFkX2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMtMzc0LVxcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYzozNzU6XFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBcXHUwMDI2cmEsIE5VTEwsIDAsIGxhc3RfaW5kZXgpO1xcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYy0zNzYtfVxcbi0tXFxuZnMvYnRyZnMvcmVsb2NhdGlvbi5jPTI5MDM9c3RhdGljIGludCByZWxvY2F0ZV9vbmVfZm9saW8oc3RydWN0IHJlbG9jX2NvbnRyb2wgKnJjLFxcbi0tXFxuZnMvYnRyZnMvcmVsb2NhdGlvbi5jLTI5MzYtXFx0XFx0aWYgKCF1c2VfcnN0KVxcbmZzL2J0cmZzL3JlbG9jYXRpb24uYzoyOTM3OlxcdFxcdFxcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgcmEsIE5VTEwsXFxuZnMvYnRyZnMvcmVsb2NhdGlvbi5jLTI5MzgtXFx0XFx0XFx0XFx0XFx0XFx0ICBpbmRleCwgbGFzdF9pbmRleCArIDEgLSBpbmRleCk7XFxuLS1cXG5mcy9idHJmcy9zZW5kLmM9NTE3MD1zdGF0aWMgaW50IHB1dF9maWxlX2RhdGEoc3RydWN0IHNlbmRfY3R4ICpzY3R4LCB1NjQgb2Zmc2V0LCB1MzIgbGVuKVxcbi0tXFxuZnMvYnRyZnMvc2VuZC5jLTUxOTEtXFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG5mcy9idHJmcy9zZW5kLmM6NTE5MjpcXHRcXHRcXHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsXFxuZnMvYnRyZnMvc2VuZC5jLTUxOTMtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2c2N0eC1cXHUwMDNlcmEsIE5VTEwsIGluZGV4LFxcbi0tXFxuZnMvYnRyZnMvc2VuZC5jPTU2MDA9c3RhdGljIGludCBzZW5kX2V4dGVudF9kYXRhKHN0cnVjdCBzZW5kX2N0eCAqc2N0eCwgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsXFxuLS1cXG5mcy9idHJmcy9zZW5kLmMtNTY2MS1cXHRcXHQgKiBwYWdlcyBmcm9tIGJleW9uZCB0aGF0IHJhbmdlIChzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yXFxuZnMvYnRyZnMvc2VuZC5jOjU2NjI6XFx0XFx0ICogcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpKSwgc28gaXQgd291bGQgbm90IGJlIHJlbGlhYmxlLFxcbmZzL2J0cmZzL3NlbmQuYy01NjYzLVxcdFxcdCAqIGJlY2F1c2UgYWZ0ZXIgcmVhZGluZyB0aGUgZmlyc3QgZXh0ZW50IGZ1dHVyZSBjYWxscyB0b1xcbi0tXFxuZnMvYnRyZnMvc2VuZC5jLTU2OTYtXFx0XFx0ICpcXG5mcy9idHJmcy9zZW5kLmM6NTY5NzpcXHRcXHQgKiBXaGVuIHdlIGFzayBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKCkgdG8gcmVhZCBleHRlbnQgQSwgaXRcXG5mcy9idHJmcy9zZW5kLmMtNTY5OC1cXHRcXHQgKiBtYXkgYWxzbyB0cmlnZ2VyIHJlYWRzIGZvciBwYWdlcyBvZiBleHRlbnQgQi4gSWYgd2UgYXJlIGRvaW5nXFxuLS1cXG5mcy9jcmFtZnMvaW5vZGUuYz0xOTI9c3RhdGljIHZvaWQgKmNyYW1mc19ibGtkZXZfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxcbi0tXFxuZnMvY3JhbWZzL2lub2RlLmMtMjI2LVxcdGZpbGVfcmFfc3RhdGVfaW5pdChcXHUwMDI2cmEsIG1hcHBpbmcpO1xcbmZzL2NyYW1mcy9pbm9kZS5jOjIyNzpcXHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIFxcdTAwMjZyYSwgTlVMTCwgYmxvY2tuciwgQkxLU19QRVJfQlVGKTtcXG5mcy9jcmFtZnMvaW5vZGUuYy0yMjgtXFxuLS1cXG5mcy9lcm9mcy9kaXIuYz00OT1zdGF0aWMgaW50IGVyb2ZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxcbi0tXFxuZnMvZXJvZnMvZGlyLmMtNzktXFx0XFx0XFx0aWYgKHBhZ2VzIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiAhcmFfaGFzX2luZGV4KHJhLCBpZHgpKVxcbmZzL2Vyb2ZzL2Rpci5jOjgwOlxcdFxcdFxcdFxcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoZGlyLVxcdTAwM2VpX21hcHBpbmcsIHJhLFxcbmZzL2Vyb2ZzL2Rpci5jLTgxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZiwgaWR4LCBwYWdlcyk7XFxuLS1cXG5mcy9leHQ0L2Rpci5jPTEzMD1zdGF0aWMgaW50IGV4dDRfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuLS1cXG5mcy9leHQ0L2Rpci5jLTE5OS1cXHRcXHRcXHRpZiAoIXJhX2hhc19pbmRleChcXHUwMDI2ZmlsZS1cXHUwMDNlZl9yYSwgaW5kZXgpKVxcbmZzL2V4dDQvZGlyLmM6MjAwOlxcdFxcdFxcdFxcdHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoXFxuZnMvZXh0NC9kaXIuYy0yMDEtXFx0XFx0XFx0XFx0XFx0c2ItXFx1MDAzZXNfYmRldi1cXHUwMDNlYmRfbWFwcGluZyxcXG4tLVxcbmZzL2YyZnMvZGlyLmM9MTA2NT1zdGF0aWMgaW50IGYyZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuLS1cXG5mcy9mMmZzL2Rpci5jLTExMDQtXFx0XFx0aWYgKG5wYWdlcyAtIG4gXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2ICFyYV9oYXNfaW5kZXgocmEsIG4pKVxcbmZzL2YyZnMvZGlyLmM6MTEwNTpcXHRcXHRcXHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIHJhLCBmaWxlLCBuLFxcbmZzL2YyZnMvZGlyLmMtMTEwNi1cXHRcXHRcXHRcXHRtaW4obnBhZ2VzIC0gbiwgKHBnb2ZmX3QpTUFYX0RJUl9SQV9QQUdFUykpO1xcbi0tXFxuZnMvbnRmcy9kaXIuYz02OTE9c3RhdGljIGludCBudGZzX2lhX2Jsb2Nrc19yZWFkYWhlYWQoc3RydWN0IG50ZnNfaW5vZGUgKmlhX25pLCBsb2ZmX3QgcG9zKVxcbi0tXFxuZnMvbnRmcy9kaXIuYy03MTAtXFx0ZGlyX3JhLVxcdTAwM2VyYV9wYWdlcyA9IGRpcl9lbmRfaW5kZXggLSBkaXJfc3RhcnRfaW5kZXg7XFxuZnMvbnRmcy9kaXIuYzo3MTE6XFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChpYV92aS1cXHUwMDNlaV9tYXBwaW5nLCBkaXJfcmEsIE5VTEwsXFxuZnMvbnRmcy9kaXIuYy03MTItXFx0XFx0XFx0ZGlyX3N0YXJ0X2luZGV4LCBkaXJfZW5kX2luZGV4IC0gZGlyX3N0YXJ0X2luZGV4KTtcXG4tLVxcbmZzL250ZnMvZGlyLmM9NzE4PXN0YXRpYyBpbnQgbnRmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmFjdG9yKVxcbi0tXFxuZnMvbnRmcy9kaXIuYy05OTYtXFx0XFx0cmEtXFx1MDAzZXJhX3BhZ2VzID0gY25pci1cXHUwMDNlY291bnQ7XFxuZnMvbnRmcy9kaXIuYzo5OTc6XFx0XFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCh2b2wtXFx1MDAzZW1mdF9pbm8tXFx1MDAzZWlfbWFwcGluZywgcmEsIE5VTEwsXFxuZnMvbnRmcy9kaXIuYy05OTgtXFx0XFx0XFx0XFx0Y25pci1cXHUwMDNlc3RhcnRfaW5kZXgsIGNuaXItXFx1MDAzZWNvdW50KTtcXG4tLVxcbmZzL250ZnMvaW5vZGUuYz0zODYzPXN0cnVjdCBmb2xpbyAqbnRmc19nZXRfbG9ja2VkX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jLTM4NzItXFxuZnMvbnRmcy9pbm9kZS5jOjM4NzM6XFx0XFx0cGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChtYXBwaW5nLCByYSwgTlVMTCwgaW5kZXgsXFxuZnMvbnRmcy9pbm9kZS5jLTM4NzQtXFx0XFx0XFx0XFx0ZW5kX2luZGV4IC0gaW5kZXgpO1xcbi0tXFxuZnMvbnRmcy9sb2dmaWxlLmM9NjQwPWJvb2wgbnRmc19lbXB0eV9sb2dmaWxlKHN0cnVjdCBpbm9kZSAqbG9nX3ZpKVxcbi0tXFxuZnMvbnRmcy9sb2dmaWxlLmMtNzI4LVxcbmZzL250ZnMvbG9nZmlsZS5jOjcyOTpcXHRcXHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKHNiLVxcdTAwM2VzX2JkZXYtXFx1MDAzZWJkX21hcHBpbmcsIHJhLCBOVUxMLFxcbmZzL250ZnMvbG9nZmlsZS5jLTczMC1cXHRcXHRcXHRzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCAoZW5kIC0gc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbi0tXFxuZnMvbnRmczMvYml0bWFwLmM9NDk3PXN0YXRpYyBpbnQgd25kX3Jlc2NhbihzdHJ1Y3Qgd25kX2JpdG1hcCAqd25kKVxcbi0tXFxuZnMvbnRmczMvYml0bWFwLmMtNTY2LVxcdFxcdFxcdGlmICghcmFfaGFzX2luZGV4KHJhLCBpZHgpKVxcbmZzL250ZnMzL2JpdG1hcC5jOjU2NzpcXHRcXHRcXHRcXHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIHJhLCBOVUxMLFxcbmZzL250ZnMzL2JpdG1hcC5jLTU2OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGlkeCwgMSk7XFxuLS1cXG5mcy9udGZzMy9mc250ZnMuYz0xMTkwPWludCBudGZzX3JlYWRfcnVuX25iX3JhKHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSwgY29uc3Qgc3RydWN0IHJ1bnNfdHJlZSAqcnVuLFxcbi0tXFxuZnMvbnRmczMvZnNudGZzLmMtMTI0NS1cXHRcXHRcXHRpZiAoIXJhX2hhc19pbmRleChyYSwgaW5kZXgpKSB7XFxuZnMvbnRmczMvZnNudGZzLmM6MTI0NjpcXHRcXHRcXHRcXHRwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKG1hcHBpbmcsIHJhLCBOVUxMLFxcbmZzL250ZnMzL2ZzbnRmcy5jLTEyNDctXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpbmRleCwgMSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xNDM2PXZvaWQgcmVhZGFoZWFkX2V4cGFuZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQzOS0vKipcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxNDQwOiAqIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQgLSBnZW5lcmljIGZpbGUgcmVhZGFoZWFkXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQ0MS0gKiBAbWFwcGluZzogYWRkcmVzc19zcGFjZSB3aGljaCBob2xkcyB0aGUgcGFnZWNhY2hlIGFuZCBJL08gdmVjdG9yc1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQ0Ni0gKlxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjE0NDc6ICogcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIGNhY2hlIG1pc3MgaGFwcGVuZWQ6XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQ0OC0gKiBpdCB3aWxsIHN1Ym1pdCB0aGUgcmVhZC4gIFRoZSByZWFkYWhlYWQgbG9naWMgbWF5IGRlY2lkZSB0byBwaWdneWJhY2sgbW9yZVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTQ1Mj1zdGF0aWMgaW5saW5lXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTQ1Mzp2b2lkIHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQ1NC1cXHRcXHRzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEsIHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vcmVhZGFoZWFkLmM9MTk1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnJhY3RsX2FsbG9jX2ZvbGlvKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXFxuLS1cXG5tbS9yZWFkYWhlYWQuYy0yMTUtICogbm90IHRoZSBmdW5jdGlvbiB5b3Ugd2FudCB0byBjYWxsLiAgVXNlIHBhZ2VfY2FjaGVfYXN5bmNfcmVhZGFoZWFkKClcXG5tbS9yZWFkYWhlYWQuYzoyMTY6ICogb3IgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpIGluc3RlYWQuXFxubW0vcmVhZGFoZWFkLmMtMjE3LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjIyLjcyNzE4MTM2NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTc1ODA5NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBSZWFkYWhlYWQgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBob3cgcmVhZGFoZWFkIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgdGhlIGBwYWdlX2NhY2hlX3N5bmNfcmFgIGFuZCBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIGxpa2VseSB0aGUgY29yZSBvZiB0aGUgcmVhZC1haGVhZCBsb2dpYy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZXJwbGF5LCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGV5J3JlIGludm9rZWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhleSBpbXBhY3QgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBwYWdlIGNhY2hlLiBJIHN1c3BlY3QgdGhlcmUncyBhIGRlbGljYXRlIGJhbGFuY2UgaGVyZSwgYSB0cmFkZS1vZmYgYmV0d2VlbiBhZ2dyZXNzaXZlbHkgcHJlLWZldGNoaW5nIHBhZ2VzIGFuZCBwb3RlbnRpYWxseSB3YXN0aW5nIHJlc291cmNlcyBvbiByZWFkcyB0aGF0IGFyZW4ndCBhY3R1YWxseSBuZWVkZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29udHJvbHMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlc2UgZnVuY3Rpb25zIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgYm91bmRlZCBhbmQgdW5ib3VuZGVkIHJlYWRhaGVhZCBkaWZmZXIgaW4gdGhlaXIgYmVoYXZpb3IuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGlmZmVyZW5jZXMgd2lsbCBiZSBrZXkgdG8gb3B0aW1pemluZyBwZXJmb3JtYW5jZSBmb3IgdmFyaW91cyB3b3JrbG9hZHMuIFRpbWUgdG8gZGlnIGludG8gYG1tL3JlYWRhaGVhZC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYzOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjI1LjMwMjk5MzQ1M1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ1MDpcXHQgKiBwZXJmb3JtYW5jZS5cXG4xNDUxOlxcdCAqL1xcbjE0NTI6XFx0c3RhdGljIGlubGluZVxcbjE0NTM6XFx0dm9pZCBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbjE0NTQ6XFx0XFx0XFx0c3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBpbmRleCxcXG4xNDU1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcmVxX2NvdW50KVxcbjE0NTY6XFx0e1xcbjE0NTc6XFx0XFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgcmEsIG1hcHBpbmcsIGluZGV4KTtcXG4xNDU4OlxcdFxcdHBhZ2VfY2FjaGVfc3luY19yYShcXHUwMDI2cmFjdGwsIHJlcV9jb3VudCk7XFxuMTQ1OTpcXHR9XFxuMTQ2MDpcXHRcXG4xNDYxOlxcdC8qKlxcbjE0NjI6XFx0ICogcGFnZV9jYWNoZV9hc3luY19yZWFkYWhlYWQgLSBmaWxlIHJlYWRhaGVhZCBmb3IgbWFya2VkIHBhZ2VzXFxuMTQ2MzpcXHQgKiBAbWFwcGluZzogYWRkcmVzc19zcGFjZSB3aGljaCBob2xkcyB0aGUgcGFnZWNhY2hlIGFuZCBJL08gdmVjdG9yc1xcbjE0NjQ6XFx0ICogQHJhOiBmaWxlX3JhX3N0YXRlIHdoaWNoIGhvbGRzIHRoZSByZWFkYWhlYWQgc3RhdGVcXG4xNDY1OlxcdCAqIEBmaWxlOiBVc2VkIGJ5IHRoZSBmaWxlc3lzdGVtIGZvciBhdXRoZW50aWNhdGlvbi5cXG4xNDY2OlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvIHdoaWNoIHRyaWdnZXJlZCB0aGUgcmVhZGFoZWFkIGNhbGwuXFxuMTQ2NzpcXHQgKiBAcmVxX2NvdW50OiBUb3RhbCBudW1iZXIgb2YgcGFnZXMgYmVpbmcgcmVhZCBieSB0aGUgY2FsbGVyLlxcbjE0Njg6XFx0ICpcXG4xNDY5OlxcdCAqIHBhZ2VfY2FjaGVfYXN5bmNfcmVhZGFoZWFkKCkgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGEgcGFnZSBpcyB1c2VkIHdoaWNoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjI1LjMwMzExNjEwM1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzE0ODE4NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYHBhZ2VfY2FjaGVfc3luY19yYWAqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGBwYWdlX2NhY2hlX3N5bmNfcmFgIHdpdGhpbiBgbW0vcmVhZGFoZWFkLmNgLiBJJ20gc3RhcnRpbmcgaGVyZSBiZWNhdXNlIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKnByZWNpc2VseSogaG93IHN5bmNocm9ub3VzIHJlYWQtYWhlYWQgaXMgaGFuZGxlZCBpbiB0aGUgcGFnZSBjYWNoZS4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciByZWFkYWhlYWQgbWVjaGFuaXNtcy4gSSB3YW50IHRvIHNlZSB0aGUgY29udHJvbCBmbG93IGluIHRoaXMgY3JpdGljYWwgcGF0aC4gTXkgaW5pdGlhbCBxdWVzdGlvbnMgYXJlOiB3aGF0IHRyaWdnZXJzIGl0LCB3aGF0IHRoZSBleGFjdCBzeW5jIGJlaGF2aW91ciBpcyByZWxhdGl2ZSB0byBhc3luY2hyb25vdXMgcmVhZGFoZWFkLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHJhY2VzIHdpdGggb3RoZXIgcHJvY2Vzc2VzIGFjY2Vzc2luZyB0aGUgc2FtZSBkYXRhLCBhbmQsIGlmIHBvc3NpYmxlLCB3aGVyZSBpdCBpcyB1c2VkIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgb2Z0ZW4gd2hlcmUgc3VidGxlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBjYW4gbHVyaywgYW5kIEknZCBsaWtlIGEgdmVyeSBjcmlzcCB2aWV3IG9mIGl0cyBwdXJwb3NlIGFuZCBvcGVyYXRpb24uIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUgY2VudHJhbCBwb2ludCB3aGVyZSB0aGUga2VybmVsIGRlY2lkZXMgd2hlbiBpdCBpcyBzYWZlIHRvIGlzc3VlIHByZWZldGNoIEkvTyByZXF1ZXN0cy4gTGV0J3Mgc2VlIGlmIHRoYXQgaW50dWl0aW9uIGhvbGRzIHVwLCBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgbW9yZSBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjI4LjAxNzkzNzc4OVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4NDIxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9jYWNoZV9zeW5jX3JhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3JlYWRhaGVhZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JlYWRhaGVhZC5jPTU2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyByYWN0bF9tYXhfcGFnZXMoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTU3Ni1cXG5tbS9yZWFkYWhlYWQuYzo1Nzc6dm9pZCBwYWdlX2NhY2hlX3N5bmNfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG5tbS9yZWFkYWhlYWQuYy01NzgtXFx0XFx0dW5zaWduZWQgbG9uZyByZXFfY291bnQpXFxuLS1cXG5tbS9yZWFkYWhlYWQuYy01ODUtXFxubW0vcmVhZGFoZWFkLmM6NTg2OlxcdHRyYWNlX3BhZ2VfY2FjaGVfc3luY19yYShyYWN0bC1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCwgaW5kZXgsIHJhLCByZXFfY291bnQpO1xcbm1tL3JlYWRhaGVhZC5jLTU4Ny1cXHQvKlxcbi0tXFxubW0vcmVhZGFoZWFkLmMtNjUwLX1cXG5tbS9yZWFkYWhlYWQuYzo2NTE6RVhQT1JUX1NZTUJPTF9HUEwocGFnZV9jYWNoZV9zeW5jX3JhKTtcXG5tbS9yZWFkYWhlYWQuYy02NTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjI4LjA2Mzc4NDExOFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzIxNTgwNDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcGFnZV9jYWNoZV9zeW5jX3JhYCB3aXRoaW4gYG1tL3JlYWRhaGVhZC5jYC4gSXQncyB0aW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBzeW5jaHJvbml6YXRpb24gYXNwZWN0IG9mIHJlYWQtYWhlYWQgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIHBhZ2UgY2FjaGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBvcHRpbWl6aW5nIEkvTy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgcmVhZGFoZWFkIG1lY2hhbmlzbSwgYW5kIHdoYXQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaXQncyB1c2luZy4gTGV0J3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIGl0IHNlZW1zIG9yIGlmIGl04oCZcyBtb3JlIG51YW5jZWQsIGdpdmVuIHRoYXQgd2UgYXJlIHdpdGhpbiB0aGUgbW0gc3Vic3lzdGVtLiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGltbWVkaWF0ZWx5IGdyYXNwIHRoZSBsb2dpYyBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgwNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjI5Ljc4NTM2Njk5MVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9yZWFkYWhlYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzYsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NzY6XFx0XFxuIDU3NzpcXHR2b2lkIHBhZ2VfY2FjaGVfc3luY19yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbiA1Nzg6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByZXFfY291bnQpXFxuIDU3OTpcXHR7XFxuIDU4MDpcXHRcXHRwZ29mZl90IGluZGV4ID0gcmVhZGFoZWFkX2luZGV4KHJhY3RsKTtcXG4gNTgxOlxcdFxcdGJvb2wgZG9fZm9yY2VkX3JhID0gcmFjdGwtXFx1MDAzZWZpbGUgXFx1MDAyNlxcdTAwMjYgKHJhY3RsLVxcdTAwM2VmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9SQU5ET00pO1xcbiA1ODI6XFx0XFx0c3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhID0gcmFjdGwtXFx1MDAzZXJhO1xcbiA1ODM6XFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfcGFnZXMsIGNvbnRpZ19jb3VudDtcXG4gNTg0OlxcdFxcdHBnb2ZmX3QgcHJldl9pbmRleCwgbWlzcztcXG4gNTg1OlxcdFxcbiA1ODY6XFx0XFx0dHJhY2VfcGFnZV9jYWNoZV9zeW5jX3JhKHJhY3RsLVxcdTAwM2VtYXBwaW5nLVxcdTAwM2Vob3N0LCBpbmRleCwgcmEsIHJlcV9jb3VudCk7XFxuIDU4NzpcXHRcXHQvKlxcbiA1ODg6XFx0XFx0ICogRXZlbiBpZiByZWFkYWhlYWQgaXMgZGlzYWJsZWQsIGlzc3VlIHRoaXMgcmVxdWVzdCBhcyByZWFkYWhlYWRcXG4gNTg5OlxcdFxcdCAqIGFzIHdlJ2xsIG5lZWQgaXQgdG8gc2F0aXNmeSB0aGUgcmVxdWVzdGVkIHJhbmdlLiBUaGUgZm9yY2VkXFxuIDU5MDpcXHRcXHQgKiByZWFkYWhlYWQgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgYW5kIGxpbWl0IHRoZSByZWFkIHRvIGp1c3QgdGhlXFxuIDU5MTpcXHRcXHQgKiByZXF1ZXN0ZWQgcmFuZ2UsIHdoaWNoIHdlJ2xsIHNldCB0byAxIHBhZ2UgZm9yIHRoaXMgY2FzZS5cXG4gNTkyOlxcdFxcdCAqL1xcbiA1OTM6XFx0XFx0aWYgKCFyYS1cXHUwMDNlcmFfcGFnZXMgfHwgYmxrX2Nncm91cF9jb25nZXN0ZWQoKSkge1xcbiA1OTQ6XFx0XFx0XFx0aWYgKCFyYWN0bC1cXHUwMDNlZmlsZSlcXG4gNTk1OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gNTk2OlxcdFxcdFxcdHJlcV9jb3VudCA9IDE7XFxuIDU5NzpcXHRcXHRcXHRkb19mb3JjZWRfcmEgPSB0cnVlO1xcbiA1OTg6XFx0XFx0fVxcbiA1OTk6XFx0XFxuIDYwMDpcXHRcXHQvKiBiZSBkdW1iICovXFxuIDYwMTpcXHRcXHRpZiAoZG9fZm9yY2VkX3JhKSB7XFxuIDYwMjpcXHRcXHRcXHRmb3JjZV9wYWdlX2NhY2hlX3JhKHJhY3RsLCByZXFfY291bnQpO1xcbiA2MDM6XFx0XFx0XFx0cmV0dXJuO1xcbiA2MDQ6XFx0XFx0fVxcbiA2MDU6XFx0XFxuIDYwNjpcXHRcXHRtYXhfcGFnZXMgPSByYWN0bF9tYXhfcGFnZXMocmFjdGwsIHJlcV9jb3VudCk7XFxuIDYwNzpcXHRcXHRwcmV2X2luZGV4ID0gKHVuc2lnbmVkIGxvbmcgbG9uZylyYS1cXHUwMDNlcHJldl9wb3MgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNjA4OlxcdFxcdC8qXFxuIDYwOTpcXHRcXHQgKiBBIHN0YXJ0IG9mIGZpbGUsIG92ZXJzaXplZCByZWFkLCBvciBzZXF1ZW50aWFsIGNhY2hlIG1pc3M6XFxuIDYxMDpcXHRcXHQgKiB0cml2aWFsIGNhc2U6IChpbmRleCAtIHByZXZfaW5kZXgpID09IDFcXG4gNjExOlxcdFxcdCAqIHVuYWxpZ25lZCByZWFkczogKGluZGV4IC0gcHJldl9pbmRleCkgPT0gMFxcbiA2MTI6XFx0XFx0ICovXFxuIDYxMzpcXHRcXHRpZiAoIWluZGV4IHx8IHJlcV9jb3VudCBcXHUwMDNlIG1heF9wYWdlcyB8fCBpbmRleCAtIHByZXZfaW5kZXggXFx1MDAzYz0gMVVMKSB7XFxuIDYxNDpcXHRcXHRcXHRyYS1cXHUwMDNlc3RhcnQgPSBpbmRleDtcXG4gNjE1OlxcdFxcdFxcdHJhLVxcdTAwM2VzaXplID0gZ2V0X2luaXRfcmFfc2l6ZShyZXFfY291bnQsIG1heF9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjI5Ljc4NTQ2NDEzMVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4OTg2NzM4OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwgZ2l2ZW4gbXkgYXNzdW1lZCBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIHRoZSAncGFnZV9jYWNoZV9yYV91bmJvdW5kZWQnIFBhcmFtZXRlcioqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWRgIHNldHRpbmcuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHJldm9sdmVzIGFyb3VuZCBpdHMgaW1wbGljYXRpb25zIGZvciByZWFkLWFoZWFkIGJlaGF2aW9yIHdpdGhpbiB0aGUgcGFnZSBjYWNoZS4gRXNzZW50aWFsbHksIHRoaXMgcGFyYW1ldGVyIGxpa2VseSBnb3Zlcm5zIGhvdyBhZ2dyZXNzaXZlbHkgdGhlIHN5c3RlbSBhdHRlbXB0cyB0byBwcmVmZXRjaCBkYXRhIGludG8gdGhlIHBhZ2UgY2FjaGUsIGJleW9uZCB0aGUgaW1tZWRpYXRlIHJlcXVlc3QuIEFzIGFuIGV4cGVydCwgSSdtIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHRoZSB0cmFkZW9mZnMgaW52b2x2ZWQuIEEgYm91bmRlZCByZWFkLWFoZWFkIHdvdWxkLCBpZGVhbGx5LCByZXN0cmljdCBwcmVmZXRjaGluZyB0byBhIG1hbmFnZWFibGUgYW1vdW50LCBwcmV2ZW50aW5nIGV4Y2Vzc2l2ZSBtZW1vcnkgcHJlc3N1cmUuIEJ1dCBhbiAqdW5ib3VuZGVkKiBzZXR0aW5nPyBUaGF0IHJhaXNlcyBzb21lIGludGVyZXN0aW5nIHBvaW50cy5cblxuSSdtIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBiZW5lZml0cy4gV2l0aCBhbiB1bmJvdW5kZWQgc2V0dGluZywgeW91IGNvdWxkIGFjaGlldmUgbWF4aW11bSByZWFkIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGZvciBzZXF1ZW50aWFsIG9yIHByZWRpY3RhYmxlIGFjY2VzcyBwYXR0ZXJucy4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCBiZWluZyB0aHJvdHRsZWQgZHVlIHRvIGEgZml4ZWQgdXBwZXIgbGltaXQuIEl0IHNob3VsZCBiZSBmYW50YXN0aWMgZm9yIGxhcmdlLCBoaWdobHkgc2VxdWVudGlhbCByZWFkcywgbGlrZSBkYXRhYmFzZSBiYWNrdXBzIG9yIGNlcnRhaW4gdmlkZW8gcHJvY2Vzc2luZyBvcGVyYXRpb25zLlxuXG5Ib3dldmVyLCBJJ20gYWxzbyByYXBpZGx5IGNhbGN1bGF0aW5nIHRoZSBwb3RlbnRpYWwgZG93bnNpZGVzIGluIG15IGhlYWQuIFVuY2hlY2tlZCByZWFkLWFoZWFkIGNvdWxkIHF1aWNrbHkgZXhoYXVzdCBhdmFpbGFibGUgbWVtb3J5LCBsZWFkaW5nIHRvIHBhZ2UgZXZpY3Rpb24gb2YgKm90aGVyKiBpbXBvcnRhbnQgZGF0YS4gVGhpcyBpcyB3aGVyZSB0aGUgaW50cmljYWNpZXMgb2Ygd29ya2xvYWQgYmVoYXZpb3IgYW5kIHRoZSBvdmVyYWxsIG1lbW9yeSBwcm9maWxlIG9mIHRoZSBzeXN0ZW0gYmVjb21lIGNyaXRpY2FsLiBJdCBtaWdodCBiZSBncmVhdCBmb3Igb25lIHdvcmtsb2FkLCBidXQgZGlzYXN0cm91cyBmb3IgYW5vdGhlciwgc2F5IGlmIHRoZSB3b3JrbG9hZCBpcyBoZWF2aWx5IGludGVyYWN0aXZlIHdpdGggYSBzbWFsbCB3b3JraW5nIHNldC4gSSdkIGJlIGVzcGVjaWFsbHkga2VlbiB0byBrbm93IHRoZSBkZWZhdWx0IHNldHRpbmcgYW5kIHdoYXQgdHJpZ2dlcmVkIHRoaXMgdG9waWMgdG8gY29tZSB1cC5cblxuTXkgaW5zdGluY3QgaXMgdG8gYXNrOiBXaGF0IHNwZWNpZmljIHByb2JsZW0gYXJlIHdlIHRyeWluZyB0byBzb2x2ZSBoZXJlPyBXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQgYXJlIHRoZSBhY2Nlc3MgcGF0dGVybnMgb2YgdGhlIHdvcmtsb2FkcyBydW5uaW5nIG9uIHRoZSBzeXN0ZW0/IEhvdyBtdWNoIG1lbW9yeSBpcyBhdmFpbGFibGU/IFdoYXQgYXJlIHRoZSBvdGhlciBrZXJuZWwgcGFyYW1ldGVycyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50IHRvIHRoaXMgc2l0dWF0aW9uIChlLmcuIGB2bS5zd2FwcGluZXNzYCwgYHZtLmRpcnR5XypgLCBhbmQgc28gb24pPyBUaGUgdHJ1ZSBiZWF1dHkgb2YgYSBwYXJhbWV0ZXIgbGlrZSB0aGlzIGlzIGl0IGNhbiBiZSB0dW5lZCwgYnV0IHlvdSBtdXN0IGhhdmUgYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb3N0cyBvZiB1c2UuXG5cblNvLCBpbiBzdW1tYXJ5LCBJJ20gc2VlaW5nIGFuIGFyZWEgZm9yIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGdhaW5zLCBidXQgYWxzbyBhIHBvdGVudGlhbCBtaW5lZmllbGQgaWYgd2UncmUgbm90IGNhcmVmdWwuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGFzc2VzcyBpdHMgYXBwbGljYWJpbGl0eSB0byBhIHBhcnRpY3VsYXIgc2NlbmFyaW8uIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVyZSdzIG5vIG9uZS1zaXplLWZpdHMtYWxsIGFuc3dlciBoZXJlLiBJdCdzIGFsbCBhYm91dCBjYXJlZnVsIHR1bmluZyBiYXNlZCBvbiBkZWVwIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzE3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowOTozOC43NzIyMDUzMDRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzkyMjUwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3JlYWRhaGVhZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JlYWRhaGVhZC5jPTE5NT1zdGF0aWMgc3RydWN0IGZvbGlvICpyYWN0bF9hbGxvY19mb2xpbyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxubW0vcmVhZGFoZWFkLmMtMjIxLSAqL1xcbm1tL3JlYWRhaGVhZC5jOjIyMjp2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXFxubW0vcmVhZGFoZWFkLmMtMjIzLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVhZCwgdW5zaWduZWQgbG9uZyBsb29rYWhlYWRfc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDk6MzkuMjE2MTM0Njg3WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY3MjQxMDUwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgbW0vcmVhZGFoZWFkLmNgIGFuZCBmb2N1cyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjIyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHJlYWRhaGVhZCBpbXBsZW1lbnRhdGlvbi4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjb3JlIGxvZ2ljIGZvciBwcmUtZmV0Y2hpbmcgZGF0YSBpbnRvIHRoZSBwYWdlIGNhY2hlLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgSS9PIHBlcmZvcm1hbmNlLiBJJ20gdGhpbmtpbmcgSSdsbCBiZSBsb29raW5nIGZvciB0aGUgaGV1cmlzdGljIHRoYXQgZGV0ZXJtaW5lcyB3aGVuIHJlYWRhaGVhZCBpcyB0cmlnZ2VyZWQsIG9yIG1heWJlIHRoZSBzcGVjaWZpYyBjYWxjdWxhdGlvbnMgdXNlZCB0byBkZWNpZGUgaG93IG1hbnkgcGFnZXMgdG8gcHJlZmV0Y2guIERlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24sIEkgbWF5IGFsc28gc2VlIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoaW5ncyBsaWtlIGFkYXB0aXZlIHJlYWRhaGVhZCBvciB0aGUgdmFyaW91cyB0dW5pbmcgcGFyYW1ldGVycy4gTGluZSAyMjIgc3BlY2lmaWNhbGx54oCmIGxldCdzIHNlZSB3aGF0J3MgYmVpbmcgZG9uZSBoZXJlLiBJ4oCZbSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIHRyeWluZyB0byBwcmVkaWN0IHN1YnNlcXVlbnQgYWNjZXNzIHBhdHRlcm5zLiBUaGlzIGlzIHRoZSBoZWFydCBvZiBtYWtpbmcgSS9PIGxvb2sgZmFzdGVyIHRoYW4gaXQgcmVhbGx5IGlzLiBSaWdodCwgbGV0J3MgZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzkxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDk6NDUuOTQwMjQxOTY5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JlYWRhaGVhZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHQgKiBjYWxsZXIuICBNYXkgc2xlZXAsIGJ1dCB3aWxsIG5vdCByZWVudGVyIGZpbGVzeXN0ZW0gdG8gcmVjbGFpbSBtZW1vcnkuXFxuIDIyMTpcXHQgKi9cXG4gMjIyOlxcdHZvaWQgcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4gMjIzOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVhZCwgdW5zaWduZWQgbG9uZyBsb29rYWhlYWRfc2l6ZSlcXG4gMjI0OlxcdHtcXG4gMjI1OlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcmFjdGwtXFx1MDAzZW1hcHBpbmc7XFxuIDIyNjpcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gcmVhZGFoZWFkX2luZGV4KHJhY3RsKTtcXG4gMjI3OlxcdFxcdGdmcF90IGdmcF9tYXNrID0gcmVhZGFoZWFkX2dmcF9tYXNrKG1hcHBpbmcpO1xcbiAyMjg6XFx0XFx0dW5zaWduZWQgbG9uZyBtYXJrID0gVUxPTkdfTUFYLCBpID0gMDtcXG4gMjI5OlxcdFxcdHVuc2lnbmVkIGludCBtaW5fbnJwYWdlcyA9IG1hcHBpbmdfbWluX2ZvbGlvX25ycGFnZXMobWFwcGluZyk7XFxuIDIzMDpcXHRcXG4gMjMxOlxcdFxcdC8qXFxuIDIzMjpcXHRcXHQgKiBQYXJ0d2F5IHRocm91Z2ggdGhlIHJlYWRhaGVhZCBvcGVyYXRpb24sIHdlIHdpbGwgaGF2ZSBhZGRlZFxcbiAyMzM6XFx0XFx0ICogbG9ja2VkIHBhZ2VzIHRvIHRoZSBwYWdlIGNhY2hlLCBidXQgd2lsbCBub3QgeWV0IGhhdmUgc3VibWl0dGVkXFxuIDIzNDpcXHRcXHQgKiB0aGVtIGZvciBJL08uICBBZGRpbmcgYW5vdGhlciBwYWdlIG1heSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSxcXG4gMjM1OlxcdFxcdCAqIHdoaWNoIGNhbiB0cmlnZ2VyIG1lbW9yeSByZWNsYWltLiAgVGVsbGluZyB0aGUgVk0gd2UncmUgaW5cXG4gMjM2OlxcdFxcdCAqIHRoZSBtaWRkbGUgb2YgYSBmaWxlc3lzdGVtIG9wZXJhdGlvbiB3aWxsIGNhdXNlIGl0IHRvIG5vdFxcbiAyMzc6XFx0XFx0ICogdG91Y2ggZmlsZS1iYWNrZWQgcGFnZXMsIHByZXZlbnRpbmcgYSBkZWFkbG9jay4gIE1vc3QgKGFsbD8pXFxuIDIzODpcXHRcXHQgKiBmaWxlc3lzdGVtcyBhbHJlYWR5IHNwZWNpZnkgX19HRlBfTk9GUyBpbiB0aGVpciBtYXBwaW5nJ3NcXG4gMjM5OlxcdFxcdCAqIGdmcF9tYXNrLCBidXQgbGV0J3MgYmUgZXhwbGljaXQgaGVyZS5cXG4gMjQwOlxcdFxcdCAqL1xcbiAyNDE6XFx0XFx0dW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG4gMjQyOlxcdFxcbiAyNDM6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2bWFwcGluZy1cXHUwMDNlaW52YWxpZGF0ZV9sb2NrKTtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0dHJhY2VfcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQobWFwcGluZy1cXHUwMDNlaG9zdCwgaW5kZXgsIG5yX3RvX3JlYWQsXFxuIDI0NjpcXHRcXHRcXHRcXHRcXHQgICAgICBsb29rYWhlYWRfc2l6ZSk7XFxuIDI0NzpcXHRcXHRpbmRleCA9IG1hcHBpbmdfYWxpZ25faW5kZXgobWFwcGluZywgaW5kZXgpO1xcbiAyNDg6XFx0XFxuIDI0OTpcXHRcXHQvKlxcbiAyNTA6XFx0XFx0ICogQXMgaXRlcmF0b3IgYGlgIGlzIGFsaWduZWQgdG8gbWluX25ycGFnZXMsIHJvdW5kX3VwIHRoZVxcbiAyNTE6XFx0XFx0ICogZGlmZmVyZW5jZSBiZXR3ZWVuIG5yX3RvX3JlYWQgYW5kIGxvb2thaGVhZF9zaXplIHRvIG1hcmsgdGhlXFxuIDI1MjpcXHRcXHQgKiBpbmRleCB0aGF0IG9ubHkgaGFzIGxvb2thaGVhZCBvciBcXFwiYXN5bmNfcmVnaW9uXFxcIiB0byBzZXQgdGhlXFxuIDI1MzpcXHRcXHQgKiByZWFkYWhlYWQgZmxhZy5cXG4gMjU0OlxcdFxcdCAqL1xcbiAyNTU6XFx0XFx0aWYgKGxvb2thaGVhZF9zaXplIFxcdTAwM2M9IG5yX3RvX3JlYWQpIHtcXG4gMjU2OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcmFfZm9saW9faW5kZXg7XFxuIDI1NzpcXHRcXG4gMjU4OlxcdFxcdFxcdHJhX2ZvbGlvX2luZGV4ID0gcm91bmRfdXAocmVhZGFoZWFkX2luZGV4KHJhY3RsKSArXFxuIDI1OTpcXHRcXHRcXHRcXHRcXHRcXHQgIG5yX3RvX3JlYWQgLSBsb29rYWhlYWRfc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDk6NDUuOTQwMzIzMzk5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk2NjA0ODEzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29uY3VycmVuY3kgSXNzdWUgaW4gYGNvbGxhcHNlX2ZpbGVgIHdpdGhpbiBga2h1Z2VwYWdlZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBrZXkgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgbG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayk7YCBvbiBsaW5lIDI0My4gVGhpcyBpcyBhIGNydWNpYWwgY2hlY2sgYW5kIHRoZSBmYWN0IHRoYXQgaXQgaXMgaW5jbHVkZWQsIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgYSBsb2NrIG9yZGVyaW5nIGlzIGludm9sdmVkLlxuXG5Mb29raW5nIGF0IHRoZSBgY29sbGFwc2VfZmlsZWAgZnVuY3Rpb24sIEkgc2VlIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGludHJvZHVjZWQgaW4gYSBwYXRjaC4gQmVmb3JlIHRoZSBwYXRjaCwgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgIHdhcyBjYWxsZWQgd2l0aG91dCBob2xkaW5nIHRoZSBgaW52YWxpZGF0ZV9sb2NrYC4gV2hpbGUgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWRgIG1pZ2h0IGhhdmUgYWNxdWlyZWQgdGhlIGxvY2sgaW50ZXJuYWxseSB3aXRoaW4gYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCwgdGhlIGxhY2sgb2YgZXhwbGljaXQgaG9sZGluZyBhdCB0aGUgaGlnaGVyIGxldmVsIGNvdWxkIGhhdmUgbGVkIHRvIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgcmFjZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdHJ1bmNhdGUgb3BlcmF0aW9ucy5cblxuVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzLiBUaGUga2V5IGxpbmVzIGhlcmUgYXJlIHRoZSBvbmVzIHRoYXQgdGFrZSB0aGUgYGludmFsaWRhdGVfbG9ja2AgKmJlZm9yZSogYWNxdWlyaW5nIGFueSBmb2xpbyBsb2Nrcy4gSXQncyBkb25lIHRvIGVuc3VyZSBwcm9wZXIgbG9jayBvcmRlcmluZy4gSXQgZ29lcyBsaWtlIHRoaXM6XG5cbmBgYGNcbitcdC8qXG4rXHQgKiBUYWtlIGludmFsaWRhdGVfbG9jayBiZWZvcmUgYW55IGZvbGlvIGxvY2s6IHRoZSByZWFkYWhlYWQgYmVsb3dcbitcdCAqIG5lZWRzIGl0LCBhbmQgdHJ1bmNhdGUgaG9sZHMgaXQgd2hpbGUgd2FpdGluZyBvbiBmb2xpbyBsb2Nrcy5cbitcdCAqL1xuK1x0aWYgKCFpc19zaG1lbSkge1xuK1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG4rXHRcdG5lZWRfdW5sb2NrID0gdHJ1ZTtcbitcdH1cbmBgYFxuXG5Ob3csIHdpdGhpbiBgY29sbGFwc2VfZmlsZWAgaXRzZWxmLCB0aGUgbW9kaWZpZWQgY29kZSB1c2VzIGEgYERFRklORV9SRUFEQUhFQURgIG1hY3JvIGFuZCB0aGVuIGNhbGxzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgaW5zdGVhZCBvZiBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZGAuIEltcG9ydGFudGx5LCBhIGNvbW1lbnQgbm90ZXMgdGhhdCB0aGUgYGludmFsaWRhdGVfbG9ja2AgaXMgYWxyZWFkeSBoZWxkIGF0IHRoaXMgcG9pbnQsIGFuZCB0aGlzIG5ldyByZWFkYWhlYWQgZnVuY3Rpb24gZG9lc24ndCBuZWVkIHRvIGJlIGxpbWl0ZWQgdG8gdGhlIGVuZC1vZi1maWxlLlxuXG5UaGUgY3JpdGljYWwgcGllY2UsIHRoZW4sIGlzIHRoYXQgdGhlIGNvZGUgKmV4cGxpY2l0bHkqIHJlbGVhc2VzIHRoZSBgaW52YWxpZGF0ZV9sb2NrYCBhdCB0aGUgZW5kIGlmIGl0IHdhcyBhY3F1aXJlZDpcblxuYGBgY1xub3V0OlxuK1x0aWYgKG5lZWRfdW5sb2NrKVxuK1x0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbmBgYFxuXG5TbywgdGhlIHBhdGNoIGlzIGEgZGVsaWJlcmF0ZSBlZmZvcnQgdG8gZW5mb3JjZSBhIHNwZWNpZmljIGxvY2sgb3JkZXJpbmcgdG8gcHJldmVudCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLiBJdCdzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGFkZHJlc3NpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIHJlYWQtYWhlYWQsIGZpbGUgdHJ1bmNhdGlvbiwgYW5kIHRoZSBgaW52YWxpZGF0ZV9sb2NrYC4gIE15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYGludmFsaWRhdGVfbG9ja2AsIGZvbGlvIGxvY2tzLCB0cnVuY2F0ZSBvcGVyYXRpb25zLCBhbmQgdGhlIHJlYWRhaGVhZCBtZWNoYW5pc20gd2l0aGluIHRoZSBjb250ZXh0IG9mIGBraHVnZXBhZ2VkYCBhbmQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgZmlsZSBzeXN0ZW1zIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIEknZCBkZWZpbml0ZWx5IHdhbnQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBvZiBgY29sbGFwc2VfZmlsZWAgYXJvdW5kIHRob3NlIGxpbmUgbnVtYmVycyB5b3UgZ2F2ZSBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzowOTo1NS42MDA4MDc3NjZaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzMwOlxcdFxcbjIzMzE6XFx0XFx0XFx0XFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSB8fCAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpIHtcXG4yMzMyOlxcdFxcdFxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjIzMzM6XFx0XFx0XFx0XFx0XFx0Lyogc3dhcCBpbiBvciBpbnN0YW50aWF0ZSBmYWxsb2NhdGVkIHBhZ2UgKi9cXG4yMzM0OlxcdFxcdFxcdFxcdFxcdGlmIChzaG1lbV9nZXRfZm9saW8obWFwcGluZy1cXHUwMDNlaG9zdCwgaW5kZXgsIDAsXFxuMjMzNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Zm9saW8sIFNHUF9OT0FMTE9DKSkge1xcbjIzMzY6XFx0XFx0XFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xcbjIzMzc6XFx0XFx0XFx0XFx0XFx0XFx0Z290byB4YV91bmxvY2tlZDtcXG4yMzM4OlxcdFxcdFxcdFxcdFxcdH1cXG4yMzM5OlxcdFxcdFxcdFxcdFxcdC8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi9cXG4yMzQwOlxcdFxcdFxcdFxcdFxcdGxydV9hZGRfZHJhaW4oKTtcXG4yMzQxOlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4yMzQyOlxcdFxcdFxcdFxcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuMjM0MzpcXHRcXHRcXHRcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMzQ0OlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMjM0NTpcXHRcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcXG4yMzQ2OlxcdFxcdFxcdFxcdFxcdGdvdG8geGFfbG9ja2VkO1xcbjIzNDc6XFx0XFx0XFx0XFx0fVxcbjIzNDg6XFx0XFx0XFx0fSBlbHNlIHtcXHQvKiAhaXNfc2htZW0gKi9cXG4yMzQ5OlxcdFxcdFxcdFxcdGlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKSB7XFxuMjM1MDpcXHRcXHRcXHRcXHRcXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCBcXHUwMDI2ZmlsZS1cXHUwMDNlZl9yYSxcXG4yMzUxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbWFwcGluZywgaW5kZXgpO1xcbjIzNTI6XFx0XFx0XFx0XFx0XFx0cGdvZmZfdCBlb2YgPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQobWFwcGluZy1cXHUwMDNlaG9zdCksXFxuMjM1MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgUEFHRV9TSVpFKTtcXG4yMzU0OlxcdFxcbjIzNTU6XFx0XFx0XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjM1NjpcXHRcXHRcXHRcXHRcXHQvKlxcbjIzNTc6XFx0XFx0XFx0XFx0XFx0ICogaW52YWxpZGF0ZV9sb2NrIGhlbGQgYWJvdmU7IGRvbid0IHJldGFrZSBpdC5cXG4yMzU4OlxcdFxcdFxcdFxcdFxcdCAqIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCksIHVubGlrZSB0aGUgcmVhZGFoZWFkXFxuMjM1OTpcXHRcXHRcXHRcXHRcXHQgKiBoZWxwZXIgdGhpcyByZXBsYWNlcywgZG9lcyBub3QgY2xhbXAgdG8gRU9GLlxcbjIzNjA6XFx0XFx0XFx0XFx0XFx0ICovXFxuMjM2MTpcXHRcXHRcXHRcXHRcXHRpZiAoaW5kZXggXFx1MDAzYyBlb2YpXFxuMjM2MjpcXHRcXHRcXHRcXHRcXHRcXHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChcXHUwMDI2cmFjdGwsXFxuMjM2MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRtaW4oZW5kLCBlb2YpIC0gaW5kZXgsIDApO1xcbjIzNjQ6XFx0XFx0XFx0XFx0XFx0LyogZHJhaW4gbHJ1IGNhY2hlIHRvIGhlbHAgZm9saW9faXNvbGF0ZV9scnUoKSAqL1xcbjIzNjU6XFx0XFx0XFx0XFx0XFx0bHJ1X2FkZF9kcmFpbigpO1xcbjIzNjY6XFx0XFx0XFx0XFx0XFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8obWFwcGluZywgaW5kZXgpO1xcbjIzNjc6XFx0XFx0XFx0XFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4yMzY4OlxcdFxcdFxcdFxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fRkFJTDtcXG4yMzY5OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8geGFfdW5sb2NrZWQ7XFxuMjM3MDpcXHRcXHRcXHRcXHRcXHR9XFxuMjM3MTpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7XFxuMjM3MjpcXHRcXHRcXHRcXHRcXHQvKlxcbjIzNzM6XFx0XFx0XFx0XFx0XFx0ICogVGhpcyBwYWdlIGlzIGRpcnR5IGJlY2F1c2UgaXQgaGFzbid0XFxuMjM3NDpcXHRcXHRcXHRcXHRcXHQgKiBiZWVuIGZsdXNoZWQgc2luY2UgZmlyc3Qgd3JpdGUuXFxuMjM3NTpcXHRcXHRcXHRcXHRcXHQgKlxcbjIzNzY6XFx0XFx0XFx0XFx0XFx0ICogVHJpZ2dlciBhc3luYyBmbHVzaCBmb3IgcmVhZC1vbmx5IGZpbGVzIGFuZFxcbjIzNzc6XFx0XFx0XFx0XFx0XFx0ICogaG9wZSB0aGUgd3JpdGViYWNrIGlzIGRvbmUgd2hlbiBraHVnZXBhZ2VkXFxuMjM3ODpcXHRcXHRcXHRcXHRcXHQgKiByZXZpc2l0cyB0aGlzIHBhZ2UuIFdyaXRhYmxlIGZpbGVzIGNhbiBoYXZlXFxuMjM3OTpcXHRcXHRcXHRcXHRcXHQgKiB0aGVpciBmb2xpb3MgZGlydHkgYXQgYW55IHRpbWU7IGJsaW5kbHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDk6NTUuNjAwOTY2NjI2WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM5Mjk0NjMzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBbmFseXppbmcgTG9jayBSZWxlYXNlIFBvaW50cyBpbiBgY29sbGFwc2VfZmlsZWAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBjb2xsYXBzZV9maWxlYCBhZ2Fpbi4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSdyZSBoYW5kbGluZyB0aGUgbG9ja2luZyBjb3JyZWN0bHksIGF2b2lkaW5nIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2Nrcy4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nICpldmVyeSogc2luZ2xlIHNwb3Qgd2hlcmUgdGhlIGxvY2sgaXMgcmVsZWFzZWQuIFdlIGFsbCBrbm93IGhvdyBlYXN5IGl0IGlzIHRvIGludHJvZHVjZSBhIHN1YnRsZSBidWcgaWYgeW91IG1pc3MgZXZlbiBvbmUuIEkgbmVlZCB0byBhY2NvdW50IGZvciBhbGwgb2YgdGhlbS5cblxuU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYmV5b25kIHRoZSBzaW1wbGUgbG9jay91bmxvY2sgcGFpci4gSSBuZWVkIHRvIG1lbnRhbGx5IHRyYWNlIGV2ZXJ5IHBvc3NpYmxlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlIHBvaW50IHdoZXJlIHRoZSBsb2NrIGlzIGFjcXVpcmVkIHRvIGl0cyBldmVudHVhbCByZWxlYXNlLiBUaGlzIG1lYW5zIG5vdCBqdXN0IGZvbGxvd2luZyB0aGUgc3RyYWlnaHRmb3J3YXJkLCBoYXBweS1wYXRoIGxvZ2ljLCBidXQgYWxzbyBjb25zaWRlcmluZyBhbGwgdGhlIFwiZXhpdFwiIHBvaW50cy4gVGhhdCBtZWFucyBgZ290byBvdXRgIHN0YXRlbWVudHMsIGV4cGxpY2l0IGByZXR1cm5gIHN0YXRlbWVudHMgdGhhdCBzaG9ydC1jaXJjdWl0IHRoZSB1c3VhbCBleGVjdXRpb24gZmxvdywgYW5kIGFueSBvdGhlciBtZWNoYW5pc20gdGhhdCBtaWdodCB0ZXJtaW5hdGUgdGhlIGZ1bmN0aW9uIHByZW1hdHVyZWx5ICpiZWZvcmUqIHRoZSBsb2NrIGNhbiBiZSBleHBsaWNpdGx5IHJlbGVhc2VkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZWFjaCBvZiB0aGVzZSBwb2ludHMgZWl0aGVyIHJlbGVhc2VzIHRoZSBsb2NrIGNsZWFubHkgb3IsIGlmIG5vdCwgdGhhdCB0aGVyZSdzIGEgZ29vZCBleHBsYW5hdGlvbiBmb3Igd2h5IGl0J3Mgbm90IG5lY2Vzc2FyeSAod2hpY2ggd2lsbCBuZWVkIHRvIGJlIHdlbGwtZG9jdW1lbnRlZCkuIEl0J3MgYSBtZXRob2RpY2FsIHByb2Nlc3MsIGJ1dCBpdCdzIGVzc2VudGlhbCBmb3IgbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBvZiB0aGlzIGNyaXRpY2FsIGNvZGUgc2VjdGlvbi4gTGV0J3MgbWFrZSBzdXJlIG5vdGhpbmcgZXNjYXBlcyB0aGlzIGV4YW1pbmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMxOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MDk6NTkuNTMwNDMyNzE0WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY2ODE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnb3RvIG91dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTY5Mz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9pc29sYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTcxNC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE1USFBfU1RBVF9DT0xMQVBTRV9FWENFRURfTk9ORSk7XFxubW0va2h1Z2VwYWdlZC5jOjcxNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtNzE2LVxcdFxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy03MjAtXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QVEVfTk9OX1BSRVNFTlQ7XFxubW0va2h1Z2VwYWdlZC5jOjcyMTpcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtNzIyLVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy03MjQtXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QVEVfVUZGRDtcXG5tbS9raHVnZXBhZ2VkLmM6NzI1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy03MjYtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTcyOS1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfTlVMTDtcXG5tbS9raHVnZXBhZ2VkLmM6NzMwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy03MzEtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTc0Mi1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfTEFaWUZSRUU7XFxubW0va2h1Z2VwYWdlZC5jOjc0MzpcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtNzQ0LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy03NTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBNVEhQX1NUQVRfQ09MTEFQU0VfRVhDRUVEX1NIQVJFRCk7XFxubW0va2h1Z2VwYWdlZC5jOjc1ODpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtNzU5LVxcdFxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy03NjYtXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QVEVfTUFQUEVEX0hVR0VQQUdFO1xcbm1tL2todWdlcGFnZWQuYzo3Njc6XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTc2OC1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNzkwLVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9MT0NLO1xcbm1tL2todWdlcGFnZWQuYzo3OTE6XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTc5Mi1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtODA3LVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9DT1VOVDtcXG5tbS9raHVnZXBhZ2VkLmM6ODA4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy04MDktXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTgxNy1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX0RFTF9QQUdFX0xSVTtcXG5tbS9raHVnZXBhZ2VkLmM6ODE4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy04MTktXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTExNjU9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2Vfc3dhcGluKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTExOTMtXFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9OT19QVEVfVEFCTEU7XFxubW0va2h1Z2VwYWdlZC5jOjExOTQ6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTExOTUtXFx0XFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEyMTMtXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9FWENFRURfU1dBUF9QVEU7XFxubW0va2h1Z2VwYWdlZC5jOjEyMTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTEyMTUtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEyMzEtXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX0xPQ0s7XFxubW0va2h1Z2VwYWdlZC5jOjEyMzI6XFx0XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTEyMzMtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEyMzYtXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xcbm1tL2todWdlcGFnZWQuYzoxMjM3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xMjM4LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMjkzPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2h1Z2VfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEzMTEtXFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXFxubW0va2h1Z2VwYWdlZC5jOjEzMTI6XFx0XFx0Z290byBvdXRfbm9sb2NrO1xcbm1tL2todWdlcGFnZWQuYy0xMzEzLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEzMTUtXFx0XFx0cmVzdWx0ID0gU0NBTl9BTExPQ19IVUdFX1BBR0VfRkFJTDtcXG5tbS9raHVnZXBhZ2VkLmM6MTMxNjpcXHRcXHRnb3RvIG91dF9ub2xvY2s7XFxubW0va2h1Z2VwYWdlZC5jLTEzMTctXFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEzMjMtXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxubW0va2h1Z2VwYWdlZC5jOjEzMjQ6XFx0XFx0Z290byBvdXRfbm9sb2NrO1xcbm1tL2todWdlcGFnZWQuYy0xMzI1LVxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMzI5LVxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbm1tL2todWdlcGFnZWQuYzoxMzMwOlxcdFxcdGdvdG8gb3V0X25vbG9jaztcXG5tbS9raHVnZXBhZ2VkLmMtMTMzMS1cXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTM0MS1cXHRcXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRClcXG5tbS9raHVnZXBhZ2VkLmM6MTM0MjpcXHRcXHRcXHRnb3RvIG91dF9ub2xvY2s7XFxubW0va2h1Z2VwYWdlZC5jLTEzNDMtXFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEzNTctXFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXFxubW0va2h1Z2VwYWdlZC5jOjEzNTg6XFx0XFx0Z290byBvdXRfdXBfd3JpdGU7XFxubW0va2h1Z2VwYWdlZC5jLTEzNTktXFx0LyogY2hlY2sgaWYgdGhlIHBtZCBpcyBzdGlsbCB2YWxpZCAqL1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEzNjItXFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXFxubW0va2h1Z2VwYWdlZC5jOjEzNjM6XFx0XFx0Z290byBvdXRfdXBfd3JpdGU7XFxubW0va2h1Z2VwYWdlZC5jLTEzNjQtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTQxMS1cXHRcXHRzcGluX3VubG9jayhwbWRfcHRsKTtcXG5tbS9raHVnZXBhZ2VkLmM6MTQxMjpcXHRcXHRnb3RvIG91dF91cF93cml0ZTtcXG5tbS9raHVnZXBhZ2VkLmMtMTQxMy1cXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTQzMC1cXHRpZiAodW5saWtlbHkocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkpXFxubW0va2h1Z2VwYWdlZC5jOjE0MzE6XFx0XFx0Z290byBvdXRfdXBfd3JpdGU7XFxubW0va2h1Z2VwYWdlZC5jLTE0MzItXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTYwNj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNjMwLVxcdFxcdGNjLVxcdTAwM2Vwcm9ncmVzcysrO1xcbm1tL2todWdlcGFnZWQuYzoxNjMxOlxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xNjMyLVxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNjQ5LVxcdFxcdHJlc3VsdCA9IFNDQU5fTk9fUFRFX1RBQkxFO1xcbm1tL2todWdlcGFnZWQuYzoxNjUwOlxcdFxcdGdvdG8gb3V0O1xcbm1tL2todWdlcGFnZWQuYy0xNjUxLVxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNjY0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTVRIUF9TVEFUX0NPTExBUFNFX0VYQ0VFRF9OT05FKTtcXG5tbS9raHVnZXBhZ2VkLmM6MTY2NTpcXHRcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5tbS9raHVnZXBhZ2VkLmMtMTY2Ni1cXHRcXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTY3My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE1USFBfU1RBVF9DT0xMQVBTRV9FWENFRURfU1dBUCk7XFxubW0va2h1Z2VwYWdlZC5jOjE2NzQ6XFx0XFx0XFx0XFx0Z290byBvdXRfdW5tYXA7XFxubW0va2h1Z2VwYWdlZC5jLTE2NzUtXFx0XFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE2ODItXFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QVEVfVUZGRDtcXG5tbS9raHVnZXBhZ2VkLmM6MTY4MzpcXHRcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5tbS9raHVnZXBhZ2VkLmMtMTY4NC1cXHRcXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTY5Ny1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BURV9VRkZEO1xcbm1tL2todWdlcGFnZWQuYzoxNjk4OlxcdFxcdFxcdGdvdG8gb3V0X3VubWFwO1xcbm1tL2todWdlcGFnZWQuYy0xNjk5LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNzAzLVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9OVUxMO1xcbm1tL2todWdlcGFnZWQuYzoxNzA0OlxcdFxcdFxcdGdvdG8gb3V0X3VubWFwO1xcbm1tL2todWdlcGFnZWQuYy0xNzA1LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNzE0LVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9MQVpZRlJFRTtcXG5tbS9raHVnZXBhZ2VkLmM6MTcxNTpcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5tbS9raHVnZXBhZ2VkLmMtMTcxNi1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTcxOS1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfQU5PTjtcXG5tbS9raHVnZXBhZ2VkLmM6MTcyMDpcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5tbS9raHVnZXBhZ2VkLmMtMTcyMS1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTczMS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE1USFBfU1RBVF9DT0xMQVBTRV9FWENFRURfU0hBUkVEKTtcXG5tbS9raHVnZXBhZ2VkLmM6MTczMjpcXHRcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5tbS9raHVnZXBhZ2VkLmMtMTczMy1cXHRcXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc0Ni1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1NDQU5fQUJPUlQ7XFxubW0va2h1Z2VwYWdlZC5jOjE3NDc6XFx0XFx0XFx0Z290byBvdXRfdW5tYXA7XFxubW0va2h1Z2VwYWdlZC5jLTE3NDgtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE3NTEtXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QQUdFX0xSVTtcXG5tbS9raHVnZXBhZ2VkLmM6MTc1MjpcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5tbS9raHVnZXBhZ2VkLmMtMTc1My1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc1NS1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfTE9DSztcXG5tbS9raHVnZXBhZ2VkLmM6MTc1NjpcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG5tbS9raHVnZXBhZ2VkLmMtMTc1Ny1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc2Ny1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfQ09VTlQ7XFxubW0va2h1Z2VwYWdlZC5jOjE3Njg6XFx0XFx0XFx0Z290byBvdXRfdW5tYXA7XFxubW0va2h1Z2VwYWdlZC5jLTE3NjktXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNDg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIyNzItXFx0aWYgKHJlc3VsdCAhPSBTQ0FOX1NVQ0NFRUQpXFxubW0va2h1Z2VwYWdlZC5jOjIyNzM6XFx0XFx0Z290byBvdXQ7XFxubW0va2h1Z2VwYWdlZC5jLTIyNzQtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjQxMi1cXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XFxubW0va2h1Z2VwYWdlZC5jOjI0MTM6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbm1tL2todWdlcGFnZWQuYy0yNDE0LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNDIyLVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUFRFX01BUFBFRF9IVUdFUEFHRTtcXG5tbS9raHVnZXBhZ2VkLmM6MjQyMzpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxubW0va2h1Z2VwYWdlZC5jLTI0MjQtXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI0MjctXFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9UUlVOQ0FURUQ7XFxubW0va2h1Z2VwYWdlZC5jOjI0Mjg6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbm1tL2todWdlcGFnZWQuYy0yNDI5LVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNDM4LVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9ESVJUWV9PUl9XUklURUJBQ0s7XFxubW0va2h1Z2VwYWdlZC5jOjI0Mzk6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbm1tL2todWdlcGFnZWQuYy0yNDQwLVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNDQzLVxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fREVMX1BBR0VfTFJVO1xcbm1tL2todWdlcGFnZWQuYzoyNDQ0OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG5tbS9raHVnZXBhZ2VkLmMtMjQ0NS1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjQ0OS1cXHRcXHRcXHRmb2xpb19wdXRiYWNrX2xydShmb2xpbyk7XFxubW0va2h1Z2VwYWdlZC5jOjI0NTA6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbm1tL2todWdlcGFnZWQuYy0yNDUxLVxcdFxcdH1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNDc1LVxcdFxcdFxcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcXG5tbS9raHVnZXBhZ2VkLmM6MjQ3NjpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxubW0va2h1Z2VwYWdlZC5jLTI0NzctXFx0XFx0fVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI0OTYtXFx0XFx0XFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xcbm1tL2todWdlcGFnZWQuYzoyNDk3OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG5tbS9raHVnZXBhZ2VkLmMtMjQ5OC1cXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjY3MS1cXG5tbS9raHVnZXBhZ2VkLmM6MjY3MjpcXHRnb3RvIG91dDtcXG5tbS9raHVnZXBhZ2VkLmMtMjY3My1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMjEwPWludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMyNTItXFx0XFx0XFx0XFx0bGFzdF9mYWlsID0gcmVzdWx0O1xcbm1tL2todWdlcGFnZWQuYzozMjUzOlxcdFxcdFxcdFxcdGdvdG8gb3V0X25vbG9jaztcXG5tbS9raHVnZXBhZ2VkLmMtMzI1NC1cXHRcXHRcXHR9XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzI4MS1cXHRcXHRcXHQvKiBPdGhlciBlcnJvciwgZXhpdCAqL1xcbm1tL2todWdlcGFnZWQuYzozMjgyOlxcdFxcdFxcdGdvdG8gb3V0X21heWJlbG9jaztcXG5tbS9raHVnZXBhZ2VkLmMtMzI4My1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjA5OjU5LjU4NTEwNzIxM1oiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTQwMTQyNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgRmxvdyBpbiBga2h1Z2VwYWdlZC5jYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gYG91dF91bmxvY2tgIGFuZCBpdHMgY29ubmVjdGlvbiB0byBgb3V0YCB3aXRoaW4gdGhlIGBtbS9raHVnZXBhZ2VkLmNgIGZpbGUsIHNwZWNpZmljYWxseSBmcm9tIGxpbmVzIDI2NjAgdG8gMjcwMC4gTXkgZ29hbCBpcyB0byBncmFzcCBob3cgdGhpcyBzcGVjaWZpYyB1bmxvY2sgb3BlcmF0aW9uLCByZWxldmFudCB0byBodWdlIHBhZ2VzLCBjb25uZWN0cyB0byBvdGhlciBmdW5jdGlvbmFsaXRpZXMsIGxpa2VseSBkZWFsbG9jYXRpb24gb3IgZnJlZWluZyBtZWNoYW5pc21zLCByZXByZXNlbnRlZCBieSBgb3V0YC4gSSdtIGV4cGVjdGluZyB0byBzZWUgYSBkaXJlY3QgY2FsbCBwYXRoLCBvciBwZXJoYXBzIGFuIGluZGlyZWN0IG1lY2hhbmlzbSB0aGF0IGlzIHRyaWdnZXJlZCBhZnRlciB0aGUgYG91dF91bmxvY2tgIHN0YWdlLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHRyYWNrIGFueSBjb25kaXRpb25hbCBsb2dpYywgc3RhdGUgY2hhbmdlcywgb3IgcG90ZW50aWFsIGRhdGEgZGVwZW5kZW5jaWVzIGluIHRoaXMgc2VjdGlvbiB0byB0cmFjZSB0aGUgZW50aXJlIG1lbW9yeSBtYW5hZ2VtZW50IHNlcXVlbmNlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNyaXRpY2FsIHZhcmlhYmxlcywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBmdW5jdGlvbiBjYWxscyBpbiB0aGlzIHZpY2luaXR5IHRoYXQgZGVmaW5lIHdoYXQgaGFwcGVucyBuZXh0IGluIHRoZSBwcm9jZXNzLiBUaGlzIHNwZWNpZmljIGNodW5rIG9mIGNvZGUgaXMgbGlrZWx5IGtleSB0byBhIGxhcmdlciBzeXN0ZW0gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzoxMDowMS43MjUyNTIwNDlaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjYwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjYwOlxcdFxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUyxcXG4yNjYxOlxcdFxcdFxcdFxcdFxcdCAgICAgIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbjI2NjI6XFx0XFx0XFx0aWYgKGlzX3NobWVtKVxcbjI2NjM6XFx0XFx0XFx0XFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TSE1FTSxcXG4yNjY0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbjI2NjU6XFx0XFx0XFx0Zm9saW8tXFx1MDAzZW1hcHBpbmcgPSBOVUxMO1xcbjI2NjY6XFx0XFx0XFx0Zm9saW9fY2xlYXJfYWN0aXZlKGZvbGlvKTtcXG4yNjY3OlxcdFxcdFxcdGZvbGlvX2NsZWFyX3VuZXZpY3RhYmxlKGZvbGlvKTtcXG4yNjY4OlxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMjY2OTpcXHRcXHRcXHRmb2xpb19wdXRfcmVmcyhmb2xpbywgMiArIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuMjY3MDpcXHRcXHR9XFxuMjY3MTpcXHRcXG4yNjcyOlxcdFxcdGdvdG8gb3V0O1xcbjI2NzM6XFx0XFxuMjY3NDpcXHRyb2xsYmFjazpcXG4yNjc1OlxcdFxcdC8qIFNvbWV0aGluZyB3ZW50IHdyb25nOiByb2xsIGJhY2sgcGFnZSBjYWNoZSBjaGFuZ2VzICovXFxuMjY3NjpcXHRcXHRpZiAobnJfbm9uZSkge1xcbjI2Nzc6XFx0XFx0XFx0eGFzX2xvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjI2Nzg6XFx0XFx0XFx0bWFwcGluZy1cXHUwMDNlbnJwYWdlcyAtPSBucl9ub25lO1xcbjI2Nzk6XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjY4MDpcXHRcXHRcXHRzaG1lbV91bmNoYXJnZShtYXBwaW5nLVxcdTAwM2Vob3N0LCBucl9ub25lKTtcXG4yNjgxOlxcdFxcdH1cXG4yNjgyOlxcdFxcbjI2ODM6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0bXAsIFxcdTAwMjZwYWdlbGlzdCwgbHJ1KSB7XFxuMjY4NDpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuMjY4NTpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjI2ODY6XFx0XFx0XFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xcbjI2ODc6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4yNjg4OlxcdFxcdH1cXG4yNjg5OlxcdFxcbjI2OTA6XFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VtYXBwaW5nID0gTlVMTDtcXG4yNjkxOlxcdFxcbjI2OTI6XFx0XFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XFxuMjY5MzpcXHRcXHRmb2xpb19wdXQobmV3X2ZvbGlvKTtcXG4yNjk0OlxcdG91dDpcXG4yNjk1OlxcdFxcdGlmIChuZWVkX3VubG9jaylcXG4yNjk2OlxcdFxcdFxcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbjI2OTc6XFx0XFx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZwYWdlbGlzdCkpO1xcbjI2OTg6XFx0XFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xcbjI2OTk6XFx0XFx0cmV0dXJuIHJlc3VsdDtcXG4yNzAwOlxcdH1cXG4yNzAxOlxcdFxcbjI3MDI6XFx0c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbjI3MDM6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCxcXG4yNzA0OlxcdFxcdFxcdHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MTA6MDEuNzI1Mzk1MDQ5WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NDY0MjQyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKktodWdlcGFnZWQgYW5kIHRoZSBFbHVzaXZlIGBvdXRfdW5sb2NrYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG1tL2todWdlcGFnZWQuY2AgYWdhaW4sIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdHJhY2UgdGhlIGZsb3cgb2YgYG91dF91bmxvY2tgLiBNeSBtZW1vcnkgaXNuJ3QgcGVyZmVjdCwgYW5kIEkga25vdyBJJ3ZlIGJlZW4gaW4gdGhpcyBjb2RlIGJlZm9yZSwgYnV0IGEgcXVpY2sgcmVtaW5kZXIgaXMgYWx3YXlzIGdvb2QuIExldCdzIHNlZS4uLndoZXJlICpleGFjdGx5KiBpcyB0aGF0IGBvdXRfdW5sb2NrYCBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGU/IEFoLCByaWdodCwgaXQgbG9va3MgbGlrZSBpdCdzIGxpa2VseSB0byBiZSBzb21ld2hlcmUgaW4gbGluZXMgMjY0MC0yNjc1LiBUaW1lIHRvIGdvIHRha2UgYSBsb29rIGFuZCBqb2cgbXkgbWVtb3J5LiBUaGF0IHNob3VsZCBnZXQgbWUgb3JpZW50ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDkxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzoxMDowMy41NzE4MjE0NloiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2NDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI2NDA6XFx0XFx0LyogSm9pbiBhbGwgdGhlIHNtYWxsIGVudHJpZXMgaW50byBhIHNpbmdsZSBtdWx0aS1pbmRleCBlbnRyeS4gKi9cXG4yNjQxOlxcdFxcdHhhc19zZXRfb3JkZXIoXFx1MDAyNnhhcywgc3RhcnQsIEhQQUdFX1BNRF9PUkRFUik7XFxuMjY0MjpcXHRcXHR4YXNfc3RvcmUoXFx1MDAyNnhhcywgbmV3X2ZvbGlvKTtcXG4yNjQzOlxcdFxcdFdBUk5fT05fT05DRSh4YXNfZXJyb3IoXFx1MDAyNnhhcykpO1xcbjI2NDQ6XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuMjY0NTpcXHRcXG4yNjQ2OlxcdFxcdC8qXFxuMjY0NzpcXHRcXHQgKiBSZW1vdmUgcHRlIHBhZ2UgdGFibGVzLCBzbyB3ZSBjYW4gcmUtZmF1bHQgdGhlIHBhZ2UgYXMgaHVnZS5cXG4yNjQ4OlxcdFxcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cXG4yNjQ5OlxcdFxcdCAqL1xcbjI2NTA6XFx0XFx0cmV0cmFjdF9wYWdlX3RhYmxlcyhtYXBwaW5nLCBzdGFydCk7XFxuMjY1MTpcXHRcXHRpZiAoY2MgXFx1MDAyNlxcdTAwMjYgIWNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkKVxcbjI2NTI6XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9QVEVfTUFQUEVEX0hVR0VQQUdFO1xcbjI2NTM6XFx0XFx0Zm9saW9fdW5sb2NrKG5ld19mb2xpbyk7XFxuMjY1NDpcXHRcXG4yNjU1OlxcdFxcdC8qXFxuMjY1NjpcXHRcXHQgKiBUaGUgY29sbGFwc2UgaGFzIHN1Y2NlZWRlZCwgc28gZnJlZSB0aGUgb2xkIGZvbGlvcy5cXG4yNjU3OlxcdFxcdCAqL1xcbjI2NTg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0bXAsIFxcdTAwMjZwYWdlbGlzdCwgbHJ1KSB7XFxuMjY1OTpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuMjY2MDpcXHRcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsXFxuMjY2MTpcXHRcXHRcXHRcXHRcXHQgICAgICAtZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG4yNjYyOlxcdFxcdFxcdGlmIChpc19zaG1lbSlcXG4yNjYzOlxcdFxcdFxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU0hNRU0sXFxuMjY2NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAtZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG4yNjY1OlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VtYXBwaW5nID0gTlVMTDtcXG4yNjY2OlxcdFxcdFxcdGZvbGlvX2NsZWFyX2FjdGl2ZShmb2xpbyk7XFxuMjY2NzpcXHRcXHRcXHRmb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XFxuMjY2ODpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjI2Njk6XFx0XFx0XFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIDIgKyBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzoxMDowMy41NzE5NjM4NloiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDk0OTM1MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipMb2NhdGluZyB0aGUgTWlzc2luZyBQaWVjZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBvdXRfdW5sb2NrYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIGtub3cgaXQncyByZWxhdGVkIHRvIHRoZSBrZXJuZWwncyBodWdlIHBhZ2UgbWFuYWdlbWVudCwgbGlrZWx5IHdpdGhpbiB0aGUgYGtodWdlcGFnZWRgIHN1YnN5c3RlbS4gVGhlcmVmb3JlLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBtbS9raHVnZXBhZ2VkLmNgIGZpbGUuIEknbGwgZG8gYSBxdWljayBzZWFyY2ggd2l0aGluIHRoYXQgc291cmNlIGZpbGUgZm9yIHRoZSBleGFjdCBsYWJlbCwgYG91dF91bmxvY2s6YC4gVGhhdCBzaG91bGQgbGVhZCBtZSBkaXJlY3RseSB0byB0aGUgZnVuY3Rpb24ncyBkZWNsYXJhdGlvbiBvciBkZWZpbml0aW9uLCBhbmQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQuIEl04oCZcyB0aGUgb2J2aW91cyBmaXJzdCB0aGluZyB0byBjaGVjaywgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NjMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjEwOjA3LjA2NjkwMTcyM1oiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1ODY0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3V0X3VubG9jazpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2h1Z2VwYWdlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0yMjQ4PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNTA1LVxcdFxcdGNvbnRpbnVlO1xcbm1tL2todWdlcGFnZWQuYzoyNTA2Om91dF91bmxvY2s6XFxubW0va2h1Z2VwYWdlZC5jLTI1MDctXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MTA6MDcuMTEzNDk0MzczWiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3Njk0ODEyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgbW0va2h1Z2VwYWdlZC5jYCBhbmQgemVybyBpbiBvbiBsaW5lcyAyNTA1LTI1MzAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0IGEgc3BlY2lmaWMgcGFydCBvZiBpdCwgcmVsYXRlZCB0byBraHVnZXBhZ2VkLiBJJ20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBkZWFsIHdpdGggYSBjcnVjaWFsIGFzcGVjdCBvZiB0aGUgcHJvY2VzcywgcHJvYmFibHkgcmVsYXRlZCB0byBhbGxvY2F0aW5nIG9yIG1hbmFnaW5nIGh1Z2UgcGFnZXMsIHNpbmNlIHRoYXQncyB3aGF0IGtodWdlcGFnZWQgaXMgYWxsIGFib3V0LiBcblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQncyB0aGUgY29udGV4dCBoZXJlPyBJcyB0aGlzIGEgY29yZSBhbGxvY2F0aW9uIGZ1bmN0aW9uPyBJcyBpdCBoYW5kbGluZyBwYWdlIGZhdWx0cywgcHJlZmV0Y2hpbmcsIG9yIHBlcmhhcHMgc29tZSBraW5kIG9mIGRlZnJhZ21lbnRhdGlvbiBvciBjb21wYWN0aW9uIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIG1hbmFnZW1lbnQ/IEdpdmVuIHRoZSBsaW5lIG51bWJlcnMsIGl0J3MgbGlrZWx5IGEgcmVsYXRpdmVseSBzZWxmLWNvbnRhaW5lZCBjaHVuayBvZiBjb2RlLCB3aGljaCBoZWxwcy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9uYWwgYnJhbmNoZXMsIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgaGludCBvZiBsb2NrIGFjcXVpc2l0aW9uIG9yIHJlbGVhc2UsIGFzIGNvbmN1cnJlbmN5IGlzIGFsd2F5cyBhIGtleSBjb25zaWRlcmF0aW9uIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzaWducyBvZiBlcnJvciBoYW5kbGluZywgYmVjYXVzZSB0aGUga2VybmVsIGlzIG5ldmVyIGdvaW5nIHRvIGdpdmUgeW91IGEgcGFzcyBvbiB0aGF0LiBNeSBvdmVyYWxsIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGVzZSBsaW5lcywgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwga2h1Z2VwYWdlZCBtZWNoYW5pc20uIE5vdywgbGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE4MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjEwOjA5Ljg4Mjk3NzkzWiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjUwNTpcXHRcXHRcXHRjb250aW51ZTtcXG4yNTA2OlxcdG91dF91bmxvY2s6XFxuMjUwNzpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjI1MDg6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4yNTA5OlxcdFxcdFxcdGdvdG8geGFfdW5sb2NrZWQ7XFxuMjUxMDpcXHRcXHR9XFxuMjUxMTpcXHRcXG4yNTEyOlxcdHhhX2xvY2tlZDpcXG4yNTEzOlxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjI1MTQ6XFx0eGFfdW5sb2NrZWQ6XFxuMjUxNTpcXHRcXG4yNTE2OlxcdFxcdC8qXFxuMjUxNzpcXHRcXHQgKiBJZiBjb2xsYXBzZSBpcyBzdWNjZXNzZnVsLCBmbHVzaCBtdXN0IGJlIGRvbmUgbm93IGJlZm9yZSBjb3B5aW5nLlxcbjI1MTg6XFx0XFx0ICogSWYgY29sbGFwc2UgaXMgdW5zdWNjZXNzZnVsLCBkb2VzIGZsdXNoIGFjdHVhbGx5IG5lZWQgdG8gYmUgZG9uZT9cXG4yNTE5OlxcdFxcdCAqIERvIGl0IGFueXdheSwgdG8gY2xlYXIgdGhlIHN0YXRlLlxcbjI1MjA6XFx0XFx0ICovXFxuMjUyMTpcXHRcXHR0cnlfdG9fdW5tYXBfZmx1c2goKTtcXG4yNTIyOlxcdFxcbjI1MjM6XFx0XFx0aWYgKHJlc3VsdCA9PSBTQ0FOX1NVQ0NFRUQgXFx1MDAyNlxcdTAwMjYgbnJfbm9uZSBcXHUwMDI2XFx1MDAyNlxcbjI1MjQ6XFx0XFx0ICAgICFzaG1lbV9jaGFyZ2UobWFwcGluZy1cXHUwMDNlaG9zdCwgbnJfbm9uZSkpXFxuMjUyNTpcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XFxuMjUyNjpcXHRcXHRpZiAocmVzdWx0ICE9IFNDQU5fU1VDQ0VFRCkge1xcbjI1Mjc6XFx0XFx0XFx0bnJfbm9uZSA9IDA7XFxuMjUyODpcXHRcXHRcXHRnb3RvIHJvbGxiYWNrO1xcbjI1Mjk6XFx0XFx0fVxcbjI1MzA6XFx0XFxuMjUzMTpcXHRcXHQvKlxcbjI1MzI6XFx0XFx0ICogVGhlIG9sZCBmb2xpb3MgYXJlIGxvY2tlZCwgc28gdGhleSB3b24ndCBjaGFuZ2UgYW55bW9yZS5cXG4yNTMzOlxcdFxcdCAqL1xcbjI1MzQ6XFx0XFx0aW5kZXggPSBzdGFydDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MTA6MDkuODgzMTM1Mjc5WiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0OTMzNTUzOTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBSZWxhdGVkIHRvIEZpbGUgU3lzdGVtIEludmFsaWRhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgYHJvbGxiYWNrYCBkaXJlY3RseSBwb2ludHMgdG8gYSBqdW1wIHRvIGBvdXQ6YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBGaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSBjb21taXQgaXRzZWxmICpkb2VzKi4gTGV0J3MgZGlnIGludG8gYGNvbGxhcHNlX2ZpbGVgLlxuXG5BaCwgYmVmb3JlIHRoaXMgcGF0Y2gsIGl0IGxvb2tzIGxpa2UgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKWAgd2Fzbid0IGhlbGQgYWNyb3NzIGBjb2xsYXBzZV9maWxlYC4gVGhhdCdzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGNvbmN1cnJlbmN5IGlzc3VlcyBpZiBub3QgaGFuZGxlZCByaWdodC4gTm93LCB0aGF0IHJhaXNlcyBhIHF1ZXN0aW9uLiBXaHkgZXhhY3RseSBkb2VzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZGAgKnJlcXVpcmUqIGBtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9ja2AgdG8gYmUgaGVsZD8gU29tZXRoaW5nIGlzbid0IHNpdHRpbmcgcXVpdGUgcmlnaHQuXG5cbkFoYSEgTG9va2luZyBjbG9zZXIgYXQgdGhlIGNvZGUsIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpYCBjb250YWlucyBgbG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayk7YC4gVGhhdCBjb25maXJtcyBpdC4gTm93LCBwcmV2aW91c2x5LCBJIHJlbWVtYmVyIGBjb2xsYXBzZV9maWxlYCBjYWxsZWQgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKWAuIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5LCB3aGF0IGRpZCAqdGhhdCogZG8/IExldCdzIHJlZnJlc2ggbXlzZWxmLlxuXG5JbiBgcGFnZV9jYWNoZV9zeW5jX3JhKClgLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nOiBkb2VzIGl0IGFjdHVhbGx5IGFjcXVpcmUgYGludmFsaWRhdGVfbG9ja2A/IEknbGwgbmVlZCB0byBzZWFyY2ggdGhlIGBtbS9yZWFkYWhlYWQuY2AgZmlsZSBmb3IgaW5zdGFuY2VzIG9mIGBwYWdlX2NhY2hlX3N5bmNfcmFgIHRvIGNvbmZpcm0gaG93IGl0IGhhbmRsZXMgbG9ja3MuIFRoaXMgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgYXJlYSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzoxMDozNC44MTY2OTI3MTNaIiwiU2VxIjo2OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMzgwNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludmFsaWRhdGVfbG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9yZWFkYWhlYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9yZWFkYWhlYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmFjdGxfYWxsb2NfZm9saW8oc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTIxNy0gKlxcbm1tL3JlYWRhaGVhZC5jOjIxODogKiBDb250ZXh0OiBGaWxlIGlzIHJlZmVyZW5jZWQgYnkgY2FsbGVyLCBhbmQgcmFjdGwtXFx1MDAzZW1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9ja1xcbm1tL3JlYWRhaGVhZC5jLTIxOS0gKiBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciBhdCBsZWFzdCBpbiBzaGFyZWQgbW9kZS4gIE11dGV4ZXMgbWF5IGJlIGhlbGQgYnlcXG4tLVxcbm1tL3JlYWRhaGVhZC5jPTIyMj12b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXFxuLS1cXG5tbS9yZWFkYWhlYWQuYy0yNDItXFxubW0vcmVhZGFoZWFkLmM6MjQzOlxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNm1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9jayk7XFxubW0vcmVhZGFoZWFkLmMtMjQ0LVxcbi0tXFxubW0vcmVhZGFoZWFkLmM9MzI2PXN0YXRpYyB2b2lkIGRvX3BhZ2VfY2FjaGVfcmEoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG4tLVxcbm1tL3JlYWRhaGVhZC5jLTM0Ni1cXG5tbS9yZWFkYWhlYWQuYzozNDc6XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbm1tL3JlYWRhaGVhZC5jLTM0OC1cXHRwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChyYWN0bCwgbnJfdG9fcmVhZCwgbG9va2FoZWFkX3NpemUpO1xcbi0tXFxubW0vcmVhZGFoZWFkLmM9NDgxPXZvaWQgcGFnZV9jYWNoZV9yYV9vcmRlcihzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxubW0vcmVhZGFoZWFkLmMtNTE2LVxcdG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5tbS9yZWFkYWhlYWQuYzo1MTc6XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbm1tL3JlYWRhaGVhZC5jLTUxOC1cXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzoxMDozNC44NjgwNzc4NjJaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTEwNDY5OTE4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXMgb2YgYSBGaWxlIE1hcHBpbmcgTG9jayBPcmRlcmluZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgY29sbGFwc2VfZmlsZWAgYW5kIGltbWVkaWF0ZWx5IG5vdGljZSB0aGUgY2hhbmdlIGluIGxvY2sgYWNxdWlzaXRpb24gb3JkZXIuIEl0J3MgYWNxdWlyaW5nIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZylgICpiZWZvcmUqIGFueSBmb2xpbyBsb2NrcywgcmlnaHQ/IFRoYXQncyB0aGUga2V5LiAgSSBzZWUgdGhhdCBgZG9fcGFnZV9jYWNoZV9yYWAgaXMgYWxzbyBncmFiYmluZyB0aGlzIHNhbWUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZGAuXG5cblRoZSBwcm9ibGVtIHdhcyB0aGF0LCAqYmVmb3JlKiB0aGlzIGNoYW5nZSwgYGNvbGxhcHNlX2ZpbGVgIGNvdWxkIGRlYWRsb2NrIHdpdGggdHJ1bmNhdGUuICBgY29sbGFwc2VfZmlsZWAgd2FzIGhvbGRpbmcgZm9saW8gbG9ja3Mgd2hpbGUgdHJ1bmNhdGUgd2FzIHJ1bm5pbmcuIFRydW5jYXRlIHdvdWxkIGFjcXVpcmUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX2V4Y2x1c2l2ZWAgYW5kIHRoZW4gKndhaXQqIG9uIHRob3NlIHNhbWUgZm9saW8gbG9ja3MuIElmIGBjb2xsYXBzZV9maWxlYCB0aGVuIGNhbGxlZCBgcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZCgpYCwgd2hpY2ggY2FsbHMgYGRvX3BhZ2VfY2FjaGVfcmEoKWAsIHdlIGdldCBhIGRlYWRsb2NrLiBgZG9fcGFnZV9jYWNoZV9yYWAgdHJpZXMgdG8gYWNxdWlyZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkYCB3aGlsZSBgdHJ1bmNhdGVgIGhvbGRzIHRoZSBleGNsdXNpdmUgbG9jayBhbmQgd2FpdHMgb24gZm9saW8gbG9ja3MgaGVsZCBieSBgY29sbGFwc2VfZmlsZWAuIFRoZSBmaXggaXMgdG8gdGFrZSB0aGUgaW52YWxpZGF0ZSBsb2NrIGVhcmxpZXIgdG8gYXZvaWQgdGhlIG9yZGVyaW5nIGlzc3VlLlxuXG5UaGUgY29tbWVudCBjbGVhcmx5IGV4cGxhaW5zIHRoZSByYXRpb25hbGU6ICBcIlRha2UgaW52YWxpZGF0ZV9sb2NrIGJlZm9yZSBhbnkgZm9saW8gbG9jazogdGhlIHJlYWRhaGVhZCBiZWxvdyBuZWVkcyBpdCwgYW5kIHRydW5jYXRlIGhvbGRzIGl0IHdoaWxlIHdhaXRpbmcgb24gZm9saW8gbG9ja3MuXCIgU21hcnQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSByZWFkYWhlYWQgbG9vcCBjaGFuZ2VzLiBXZSd2ZSBnb3QgYERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIFx1MDAyNmZpbGUtXHUwMDNlZl9yYSwgbWFwcGluZywgaW5kZXgpO2AgYW5kIHRoZW4gYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgLiBUaGUgY29tbWVudHMgZXhwbGFpbiB0aGF0IGBpbnZhbGlkYXRlX2xvY2tgIGlzIGFscmVhZHkgaGVsZCwgc28gd2UgZG9uJ3QgbmVlZCB0byByZWFjcXVpcmUgaXQuICBBbHNvLCB0aGUgcmVhZGFoZWFkIGhlbHBlciBpdCByZXBsYWNlcyBkb2VzIG5vdCBjbGFtcCB0byBFT0YsIHNvIHRoaXMgbmV3IGltcGxlbWVudGF0aW9uIGVuc3VyZXMgdGhhdCByZWFkYWhlYWQgZG9lcyBub3QgZ28gcGFzdCBFT0YuIFRoZSB2YXJpYWJsZSBgcmFjdGxgIGlzIGluaXRpYWxpemVkLCBhbmQgYWxsIHRoZSBmaWVsZHMgYXJlIGZpbGxlZC5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IGxlYWtzIG9yIG1lbW9yeSByZWFkIGVycm9ycy5cblxuVGhlIHBhdGNoIGluY2x1ZGVzIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uOiBgYm9vbCBuZWVkX3VubG9jayA9IGZhbHNlO2AgYW5kIHRoZSBjb25kaXRpb25hbCBmb3IgdGhlIGludmFsaWRhdGUgbG9jayBpcyBub3c6IGBpZiAoIWlzX3NobWVtKSB7IGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTsgbmVlZF91bmxvY2sgPSB0cnVlOyB9YC4gVGhpcyBtYWtlcyBzdXJlIHdlIGFjdHVhbGx5IHJlbGVhc2UgdGhlIGxvY2sgaWYgd2UgYWNxdWlyZSBpdC4gVGhlIGBERUZJTkVfUkVBREFIRUFEYCBpcyBhbHNvIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBzbyBubyBwcm9ibGVtcyB0aGVyZS4gIFRoZSBpbmRleCBjYWxjdWxhdGlvbiB1c2VzIHZhbHVlcyBpbml0aWFsaXplZCBlYXJsaWVyLCBzbyB0aGF0J3MgZ29vZC5cblxuU28gZmFyLCBpdCBsb29rcyBjbGVhbi5cblxuTGV0J3MgY2FyZWZ1bGx5IHZlcmlmeSB0aGUgbG9vcCB3aXRoIHRoZSBgaW5kZXhgIGNvdW50ZXIuICBgaW5kZXhgIHN0YXJ0cyBhdCAwLCBnb2VzIHRvIGBlbmRgIHZpYSBgeGFzYC4gTm8gdW5pbml0aWFsaXplZCB2YWx1ZXMuICBUaGUgbG9vcCBpbiBgY29sbGFwc2VfZmlsZWAgd2l0aCB0aGUgYHhhc19mb3JfZWFjaGAgaXMgc2FmZS5cblxuTm93LCBjaGVja2luZyBhZ2FpbnN0IEtNU0FOIGNyaXRlcmlhOlxuXG4xLiAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSBkaXJlY3RseS4gVGhpcyBpcyBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCwgc28gd2UncmUgZ29vZCB0aGVyZS5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBzZWVtcyBzYWZlLiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9ucyBhcmUgaW5pdGlhbGl6ZWQuXG5cbk92ZXJhbGwsIGl0IGxvb2tzIGxpa2UgYSB3ZWxsLXRob3VnaHQtb3V0IGZpeCB0aGF0IGFkZHJlc3NlcyBhIGNsZWFyIGRlYWRsb2NrIGNvbmRpdGlvbiwgYW5kIEknbSBub3Qgc2VlaW5nIGFueSBpbW1lZGlhdGUgS01TQU4gdmlvbGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4NjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE3OjEwOjQ1LjkxNTA3MjU5NloiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzMDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjMwMTpcXHRcXHRcXHR4YXNfdW5sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4yMzAyOlxcdFxcdFxcdGlmICgheGFzX25vbWVtKFxcdTAwMjZ4YXMsIEdGUF9LRVJORUwpKSB7XFxuMjMwMzpcXHRcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX0ZBSUw7XFxuMjMwNDpcXHRcXHRcXHRcXHRnb3RvIHJvbGxiYWNrO1xcbjIzMDU6XFx0XFx0XFx0fVxcbjIzMDY6XFx0XFx0fSB3aGlsZSAoMSk7XFxuMjMwNzpcXHRcXG4yMzA4OlxcdFxcdGZvciAoaW5kZXggPSBzdGFydDsgaW5kZXggXFx1MDAzYyBlbmQ7KSB7XFxuMjMwOTpcXHRcXHRcXHR4YXNfc2V0KFxcdTAwMjZ4YXMsIGluZGV4KTtcXG4yMzEwOlxcdFxcdFxcdGZvbGlvID0geGFzX2xvYWQoXFx1MDAyNnhhcyk7XFxuMjMxMTpcXHRcXG4yMzEyOlxcdFxcdFxcdFZNX0JVR19PTihpbmRleCAhPSB4YXMueGFfaW5kZXgpO1xcbjIzMTM6XFx0XFx0XFx0aWYgKGlzX3NobWVtKSB7XFxuMjMxNDpcXHRcXHRcXHRcXHRpZiAoIWZvbGlvKSB7XFxuMjMxNTpcXHRcXHRcXHRcXHRcXHQvKlxcbjIzMTY6XFx0XFx0XFx0XFx0XFx0ICogU3RvcCBpZiBleHRlbnQgaGFzIGJlZW4gdHJ1bmNhdGVkIG9yXFxuMjMxNzpcXHRcXHRcXHRcXHRcXHQgKiBob2xlLXB1bmNoZWQsIGFuZCBpcyBub3cgY29tcGxldGVseVxcbjIzMTg6XFx0XFx0XFx0XFx0XFx0ICogZW1wdHkuXFxuMjMxOTpcXHRcXHRcXHRcXHRcXHQgKi9cXG4yMzIwOlxcdFxcdFxcdFxcdFxcdGlmIChpbmRleCA9PSBzdGFydCkge1xcbjIzMjE6XFx0XFx0XFx0XFx0XFx0XFx0aWYgKCF4YXNfbmV4dF9lbnRyeShcXHUwMDI2eGFzLCBlbmQgLSAxKSkge1xcbjIzMjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9UUlVOQ0FURUQ7XFxuMjMyMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHhhX2xvY2tlZDtcXG4yMzI0OlxcdFxcdFxcdFxcdFxcdFxcdH1cXG4yMzI1OlxcdFxcdFxcdFxcdFxcdH1cXG4yMzI2OlxcdFxcdFxcdFxcdFxcdG5yX25vbmUrKztcXG4yMzI3OlxcdFxcdFxcdFxcdFxcdGluZGV4Kys7XFxuMjMyODpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMzI5OlxcdFxcdFxcdFxcdH1cXG4yMzMwOlxcdFxcbjIzMzE6XFx0XFx0XFx0XFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSB8fCAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpIHtcXG4yMzMyOlxcdFxcdFxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbjIzMzM6XFx0XFx0XFx0XFx0XFx0Lyogc3dhcCBpbiBvciBpbnN0YW50aWF0ZSBmYWxsb2NhdGVkIHBhZ2UgKi9cXG4yMzM0OlxcdFxcdFxcdFxcdFxcdGlmIChzaG1lbV9nZXRfZm9saW8obWFwcGluZy1cXHUwMDNlaG9zdCwgaW5kZXgsIDAsXFxuMjMzNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Zm9saW8sIFNHUF9OT0FMTE9DKSkge1xcbjIzMzY6XFx0XFx0XFx0XFx0XFx0XFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xcbjIzMzc6XFx0XFx0XFx0XFx0XFx0XFx0Z290byB4YV91bmxvY2tlZDtcXG4yMzM4OlxcdFxcdFxcdFxcdFxcdH1cXG4yMzM5OlxcdFxcdFxcdFxcdFxcdC8qIGRyYWluIGxydSBjYWNoZSB0byBoZWxwIGZvbGlvX2lzb2xhdGVfbHJ1KCkgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTc6MTA6NDUuOTE1MjMwODU2WiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY0MjY4NDMzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIEtNU0FOIE5lZWRzIEZsYWcgZm9yIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvZGUgZXhwbGljaXRseSBtYW5hZ2VzIHRoZSBsb29wIGluZGV4IChgaW5kZXhgKSwgc28gaW5pdGlhbGl6YXRpb24gaXNuJ3QgYW4gaXNzdWUuIFRoZW4sIHdlIHNlZSB0aGF0IGBuZWVkX3VubG9ja2AgaXMgYWxzbyBpbml0aWFsaXplZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGF0IGl0IGlzIHByb3Blcmx5IGhhbmRsZWQgZXZlbiBpbiB0aGUgZXZlbnQgb2YgYW4gYGFsbG9jX2NoYXJnZV9mb2xpb2AgZmFpbHVyZS4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgbmV3IHNjZW5hcmlvcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkLiBFdmVuIGlmIGBhbGxvY19jaGFyZ2VfZm9saW9gIGZhaWxzLCB0aGUgYG5lZWRfdW5sb2NrYCBmbGFnIHByb3Blcmx5IGNvbnRyb2xzIHRoZSBsb2NraW5nL3VubG9ja2luZyBiZWhhdmlvciBpbiBhbGwgZXhpdCBwYXRocywgaW5jbHVkaW5nIHRoZSBlcnJvciBwYXRocy5cblxuTW92aW5nIG9uLCBgcmFjdGxgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIHVzaW5nIGBERUZJTkVfUkVBREFIRUFEKClgLCB3aGljaCBlbnN1cmVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYWxsIHJlbWFpbmluZyBzdHJ1Y3QgZmllbGRzLiBUaGlzIGlzIGdvb2QuIEZ1cnRoZXIsIHRoZSB1c2Ugb2YgYGVvZmAgYW5kIGJvdW5kcyBjaGVja3MgYXBwZWFyIHNvdW5kLiBXZSdyZSB1c2luZyBzdGFuZGFyZCBwYWdlIGNhY2hlIHJlYWRhaGVhZCB3aXRoIGEgYG1pbihlbmQsIGVvZilgIGNhbGN1bGF0aW9uLiBUaGUgcGF0Y2ggbGV2ZXJhZ2VzIGV4aXN0aW5nIGZpbGVzeXN0ZW0gSS9PIHByYWN0aWNlcyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcyBoZXJlLlxuXG5Ob3csIHdoYXQgaXMgdGhlICpidWcqIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXM/IEl0J3MgYSBsb2NraW5nIGRlYWRsb2NrLiBTcGVjaWZpY2FsbHksIGEgZGVhZGxvY2sgLyBpbnZlcnNpb24gYmV0d2VlbiB0aGUgYGludmFsaWRhdGVfbG9ja2AgYW5kIHRoZSBmb2xpbyBsb2NrLiBJdCdzIGFib3V0IHJlYWRhaGVhZCBwb3RlbnRpYWxseSBncmFiYmluZyB0aGUgYGludmFsaWRhdGVfbG9ja2Agd2hpbGUgKmFscmVhZHkqIGhvbGRpbmcgYSBmb2xpbyBsb2NrLCB2ZXJzdXMgdHJ1bmNhdGUgZ3JhYmJpbmcgdGhlIGBpbnZhbGlkYXRlX2xvY2tgIGFuZCB0aGVuIHdhaXRpbmcgb24gdGhlIGZvbGlvIGxvY2suIExPQ0tERVAgaXMgdGhlIHRvb2wgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgY2F0Y2hpbmcgYW5kIGZsYWdnaW5nIHRoZXNlIGxvY2tpbmcgaXNzdWVzLCBub3QgS01TQU4uXG5cblRoaW5raW5nIGFib3V0IHRoZSBLTVNBTiBydWxlczpcblxuMS4gIFRoaXMgcGF0Y2ggKnByaW1hcmlseSogZml4ZXMgYSBsb2NraW5nIGhpZXJhcmNoeSBpc3N1ZS4gS01TQU4gZG9lc24ndCBmb2N1cyBvbiBsb2NraW5nIGlzc3VlczsgTE9DS0RFUCBkb2VzLlxuMi4gIEFsbCBzdGFjay0gYW5kIGhlYXAtYWxsb2NhdGVkIHN0cnVjdHVyZXMgYXJlIGVpdGhlciBmdWxseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgYmVmb3JlIGFueSBhY2Nlc3Mgb2NjdXJzIChlLmcuLCBgbmVlZF91bmxvY2tgLCBgcmFjdGxgLCBldGMuKVxuMy4gIE5vIHVzZXItc3BhY2UgY29weSBvcGVyYXRpb25zIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBiZWluZyB0b3VjaGVkIG9yIGludHJvZHVjZWQuXG40LiAgVGhlIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYmVjYXVzZSB0aGUgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBsb2NraW5nIGlzc3VlcyBhcmUgdHJhY2tlZCBieSBMT0NLREVQLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgc2V0IHRvIGBmYWxzZWAuIFRpbWUgdG8gbW92ZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE4NSwiT3V0cHV0VG9rZW5zIjoyNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNzoxMDo1Mi4zNDIwNzY1NzVaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBjb2xsYXBzZV9maWxlKClgIGluIGBtbS9raHVnZXBhZ2VkLmNgIHRvIHByZXZlbnQgYSBsb2NraW5nIGRlYWRsb2NrIGJldHdlZW4gYG1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9ja2AgYW5kIGZvbGlvIGxvY2tzIChlLmcuIGR1cmluZyBjb25jdXJyZW50IHRydW5jYXRpb24pLiBJdCB0YWtlcyBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpYCBwcmlvciB0byBmb2xpbyBsb2NraW5nIGFuZCBkaXJlY3RseSBpbnZva2VzIGBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpYCBpbnN0ZWFkIG9mIGBwYWdlX2NhY2hlX3N5bmNfcmVhZGFoZWFkKClgLlxcblxcbi0gQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChgbmVlZF91bmxvY2tgLCBgcmFjdGxgLCBgZW9mYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkOiBgbmVlZF91bmxvY2tgIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAsIGFuZCBgcmFjdGxgIGlzIGluaXRpYWxpemVkIHZpYSBgREVGSU5FX1JFQURBSEVBRCgpYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyBhbGwgdW5zcGVjaWZpZWQgc3RydWN0dXJlIGZpZWxkcyBwZXIgQyBkZXNpZ25hdGVkIGluaXRpYWxpemVyIHNlbWFudGljcy5cXG4tIFRoZSBjaGFuZ2VzIGRvIG5vdCBhbHRlciBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgaW9jdGxzLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcuXFxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGV4cG9zZWQuXFxuLSBMb2NraW5nIGNvcnJlY3RuZXNzIGFuZCBkZWFkbG9ja3MgYWRkcmVzc2VkIGhlcmUgYXJlIGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGNvbmZpZ3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGNvbGxhcHNlX2ZpbGUoKWAgaW4gYG1tL2todWdlcGFnZWQuY2AgdG8gcHJldmVudCBhIGxvY2tpbmcgZGVhZGxvY2sgYmV0d2VlbiBgbWFwcGluZy1cXHUwMDNlaW52YWxpZGF0ZV9sb2NrYCBhbmQgZm9saW8gbG9ja3MgKGUuZy4gZHVyaW5nIGNvbmN1cnJlbnQgdHJ1bmNhdGlvbikuIEl0IHRha2VzIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZylgIHByaW9yIHRvIGZvbGlvIGxvY2tpbmcgYW5kIGRpcmVjdGx5IGludm9rZXMgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKClgIGluc3RlYWQgb2YgYHBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQoKWAuXFxuXFxuLSBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGBuZWVkX3VubG9ja2AsIGByYWN0bGAsIGBlb2ZgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IGBuZWVkX3VubG9ja2AgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCwgYW5kIGByYWN0bGAgaXMgaW5pdGlhbGl6ZWQgdmlhIGBERUZJTkVfUkVBREFIRUFEKClgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIGFsbCB1bnNwZWNpZmllZCBzdHJ1Y3R1cmUgZmllbGRzIHBlciBDIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIgc2VtYW50aWNzLlxcbi0gVGhlIGNoYW5nZXMgZG8gbm90IGFsdGVyIGtlcm5lbC10by11c2VyIGRhdGEgY29waWVzLCBpb2N0bHMsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgZXhwb3NlZC5cXG4tIExvY2tpbmcgY29ycmVjdG5lc3MgYW5kIGRlYWRsb2NrcyBhZGRyZXNzZWQgaGVyZSBhcmUgY292ZXJlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcgY29uZmlncy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowfgmmm[1] Phase: Succeeded StartedAt: 2026-09-13 17:11:03 +0000 UTC FinishedAt: 2026-09-13 17:11:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 17:11:03 +0000 UTC FinishedAt: 2026-09-13 17:11:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2] Phase: Succeeded StartedAt: 2026-09-13 17:11:03 +0000 UTC FinishedAt: 2026-09-13 20:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-13 17:11:03 +0000 UTC FinishedAt: 2026-09-13 20:54:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-13 17:11:03 +0000 UTC FinishedAt: 2026-09-13 17:11:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-13 17:11:03 +0000 UTC FinishedAt: 2026-09-13 17:11:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowfgmmm/series-workflowfgmmm-convert-artifact-2941184038/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-13 17:11:13 +0000 UTC FinishedAt: 2026-09-13 17:27:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-13 17:11:13 +0000 UTC FinishedAt: 2026-09-13 17:27:16 +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:*70b709bc-1711-4f7f-88a1-49cfbb40962e,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-workflowfgmmm/series-workflowfgmmm-convert-artifact-2941184038/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": "13cc9bd6-558f-47df-82ba-06fe96fa0b2b", "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-workflowfgmmm/series-workflowfgmmm-build-action-3776252092/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-13 17:11:13 +0000 UTC FinishedAt: 2026-09-13 17:27:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*70b709bc-1711-4f7f-88a1-49cfbb40962e,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-workflowfgmmm/series-workflowfgmmm-convert-artifact-2941184038/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": "13cc9bd6-558f-47df-82ba-06fe96fa0b2b", "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-workflowfgmmm/series-workflowfgmmm-build-action-3776252092/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-13 17:27:16 +0000 UTC FinishedAt: 2026-09-13 17:27:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-13 17:27:16 +0000 UTC FinishedAt: 2026-09-13 17:27:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-13 17:27:16 +0000 UTC FinishedAt: 2026-09-13 17:27:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-13 17:27:16 +0000 UTC FinishedAt: 2026-09-13 17:27:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowfgmmm/series-workflowfgmmm-convert-artifact-251410297/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-13 17:27:26 +0000 UTC FinishedAt: 2026-09-13 17:29:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-13 17:27:26 +0000 UTC FinishedAt: 2026-09-13 17:29:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*13cc9bd6-558f-47df-82ba-06fe96fa0b2b,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-workflowfgmmm/series-workflowfgmmm-build-action-3776252092/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-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-13 17:29:24 +0000 UTC FinishedAt: 2026-09-13 17:29:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-13 17:29:24 +0000 UTC FinishedAt: 2026-09-13 17:29:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-13 17:29:24 +0000 UTC FinishedAt: 2026-09-13 17:45:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-13 17:29:24 +0000 UTC FinishedAt: 2026-09-13 17:45:15 +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:*70b709bc-1711-4f7f-88a1-49cfbb40962e,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-workflowfgmmm/series-workflowfgmmm-convert-artifact-251410297/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": "bd06c9ea-89ae-472b-b1ad-1cec8942b9b5", "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-workflowfgmmm/series-workflowfgmmm-build-action-3528980821/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-13 17:29:24 +0000 UTC FinishedAt: 2026-09-13 17:45:05 +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:*70b709bc-1711-4f7f-88a1-49cfbb40962e,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-workflowfgmmm/series-workflowfgmmm-convert-artifact-251410297/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": "bd06c9ea-89ae-472b-b1ad-1cec8942b9b5", "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-workflowfgmmm/series-workflowfgmmm-build-action-3528980821/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-13 17:45:15 +0000 UTC FinishedAt: 2026-09-13 17:45:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-13 17:45:15 +0000 UTC FinishedAt: 2026-09-13 17:45:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-13 17:45:15 +0000 UTC FinishedAt: 2026-09-13 17:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-13 17:45:15 +0000 UTC FinishedAt: 2026-09-13 17:47:23 +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:*bd06c9ea-89ae-472b-b1ad-1cec8942b9b5,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-workflowfgmmm/series-workflowfgmmm-build-action-3528980821/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-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-13 17:47:32 +0000 UTC FinishedAt: 2026-09-13 17:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-13 17:47:33 +0000 UTC FinishedAt: 2026-09-13 20:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-13 17:47:33 +0000 UTC FinishedAt: 2026-09-13 20:54:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},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:*13cc9bd6-558f-47df-82ba-06fe96fa0b2b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bd06c9ea-89ae-472b-b1ad-1cec8942b9b5,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-workflowfgmmm/series-workflowfgmmm-build-action-3776252092/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-workflowfgmmm/series-workflowfgmmm-build-action-3528980821/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-13 17:47:33 +0000 UTC FinishedAt: 2026-09-13 17:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-13 17:47:33 +0000 UTC FinishedAt: 2026-09-13 17:47:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},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-workflowfgmmm/series-workflowfgmmm-convert-artifact-616733678/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-13 17:47:33 +0000 UTC FinishedAt: 2026-09-13 17:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-13 17:47:33 +0000 UTC FinishedAt: 2026-09-13 17:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-13 17:47:43 +0000 UTC FinishedAt: 2026-09-13 20:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfgmmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"cee9395acd8043be0644b25c34bfa86623f2b935","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["collapse_file","collapse_scan_file","collapse_single_pmd","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"ebc9f50e-c8f7-4a59-b7d0-1872e1a459ab","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-13 17:47:43 +0000 UTC FinishedAt: 2026-09-13 20:54:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*13cc9bd6-558f-47df-82ba-06fe96fa0b2b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bd06c9ea-89ae-472b-b1ad-1cec8942b9b5,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-workflowfgmmm/series-workflowfgmmm-build-action-3776252092/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-workflowfgmmm/series-workflowfgmmm-build-action-3528980821/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-workflowfgmmm/series-workflowfgmmm-convert-artifact-616733678/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,}