Name: series-workflowsss4f Phase: Succeeded StartedAt: 2026-09-03 14:19:53 +0000 UTC FinishedAt: 2026-09-03 18:11:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[0] Phase: Succeeded StartedAt: 2026-09-03 14:19:53 +0000 UTC FinishedAt: 2026-09-03 14:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 14:19:53 +0000 UTC FinishedAt: 2026-09-03 14:23:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XARRAY_MULTI", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XARRAY_MULTI", "TRANSPARENT_HUGEPAGE" ], "series_id": "a0f55a0d-19d3-47cb-b831-32aaf125825e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "xas_find", "xa_find", "xa_find_after" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hBUlJBWV9NVUxUSSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDssCiAgICAmIzM0O3hhX2ZpbmQmIzM0OywKICAgICYjMzQ7eGFfZmluZF9hZnRlciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBvZmZzZXQgY2FsY3VsYXRpb24gbG9naWMgaW4geGFzX2ZpbmQoKSB3aXRoaW4gdGhlIFhBcnJheSBkYXRhIHN0cnVjdHVyZSBpbXBsZW1lbnRhdGlvbiAobGliL3hhcnJheS5jKSBhbmQgYWRkcyBhIHRlc3QgY2FzZSB0byB0aGUgWEFycmF5IHNlbGYtdGVzdCBzdWl0ZSAobGliL3Rlc3RfeGFycmF5LmMpLlxuXG5UaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCB0cmVlIHRyYXZlcnNhbCBpbmRleGluZy9vZmZzZXQgYXJpdGhtZXRpYyBmb3IgbXVsdGktaW5kZXggZW50cmllcyAoWEFfU1RBVEUgLyB4YV9ub2RlIG9mZnNldCBjYWxjdWxhdGlvbnMpLiBObyBuZXcgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyByZXN1bHRpbmcgZnJvbSBjb3JydXB0ZWQgb3IgaW5jb3JyZWN0IHRyYXZlcnNhbCBvZmZzZXRzIHdvdWxkIGJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl0ZXJhdGlvbiBvZmZzZXQgY2FsY3VsYXRpb24gaW4geGFzX2ZpbmQoKSB3aXRoaW4gbGliL3hhcnJheS5jIGZvciBtdWx0aS1vcmRlciBub2RlcyAod2hlcmUgc2hpZnQgXHUwMDNlIDApLiBUaGlzIGlzIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgbG9naWMgZXhlcmNpc2VkIGFjcm9zcyBtZW1vcnkgbWFuYWdlbWVudCAocGFnZSBjYWNoZSwgc2htZW0sIGZvbGlvIGxvb2t1cHMpIGFuZCBzdWJzeXN0ZW0gaXRlcmF0b3JzLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzRhNTMwYzQ2MDczMjFhZTUyYWVmNjQ1YWJmODE0N2VjZmVjMzUyNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTQ6MjI6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfeGFycmF5LmMgYi9saWIvdGVzdF94YXJyYXkuY1xuaW5kZXggNWNhMGFlZmVlOWFhNS4uY2RhNzI0NWU0NzcxNiAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X3hhcnJheS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF94YXJyYXkuY1xuQEAgLTEyNDcsNiAmIzQzOzEyNDcsNjcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8zKHN0cnVjdCB4YXJyYXkgKnhhKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF80KHN0cnVjdCB4YXJyYXkgKnhhKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG4mIzQzO1x0WEFfU1RBVEUoeGFzLCB4YSwgMTAwKTtcbiYjNDM7XHRYQV9TVEFURV9PUkRFUihzcGxpdCwgeGEsIDAsIDApO1xuJiM0MztcdHZvaWQgKmVudHJ5O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XG4mIzQzO1x0LyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovXG4mIzQzO1x0eGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcbiYjNDM7XG4mIzQzO1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xuJiM0MztcbiYjNDM7XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHR4YV9lcmFzZV9pbmRleCh4YSwgMTI4KTtcbiYjNDM7XHR4YV9lcmFzZV9pbmRleCh4YSwgMCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcbiYjNDM7XG4mIzQzO1x0LyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi9cbiYjNDM7XHR4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XG4mIzQzO1xuJiM0MztcdHhhc19zZXQoXHUwMDI2eGFzLCAxMDApO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHR4YXNfc3BsaXRfYWxsb2MoXHUwMDI2c3BsaXQsIHhhX21rX2luZGV4KDApLCA3LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR4YXNfbG9jayhcdTAwMjZzcGxpdCk7XG4mIzQzO1x0eGFzX3NwbGl0KFx1MDAyNnNwbGl0LCB4YV9ta19pbmRleCgwKSwgNyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMTI4OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdF9feGFfc3RvcmUoeGEsIGksIHhhX21rX2luZGV4KGkpLCAwKTtcbiYjNDM7XHR4YXNfdW5sb2NrKFx1MDAyNnNwbGl0KTtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcbiYjNDM7XG4mIzQzO1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0eGFfZGVzdHJveSh4YSk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZF8xKHN0cnVjdCB4YXJyYXkgKnhhKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgaiwgaztcbkBAIC0xMzcwLDYgJiM0MzsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSlcbiBcdFx0Y2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTtcbiBcdGNoZWNrX211bHRpX2ZpbmRfMih4YSk7XG4gXHRjaGVja19tdWx0aV9maW5kXzMoeGEpO1xuJiM0MztcdGNoZWNrX211bHRpX2ZpbmRfNCh4YSk7XG4gfVxuIFxuIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovXG5kaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jXG5pbmRleCA5YThiNDkxNjU0MGNmLi45ODAzMjRkNjg2YmQwIDEwMDY0NFxuLS0tIGEvbGliL3hhcnJheS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIveGFycmF5LmNcbkBAIC0xNDA2LDkgJiM0MzsxNDA2LDExIEBAIHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcbiBcdFx0ZW50cnkgPSB4YXNfbG9hZCh4YXMpO1xuIFx0XHRpZiAoZW50cnkgfHwgeGFzX25vdF9ub2RlKHhhcy1cdTAwM2V4YV9ub2RlKSlcbiBcdFx0XHRyZXR1cm4gZW50cnk7XG4tXHR9IGVsc2UgaWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gKHhhcy1cdTAwM2V4YV9pbmRleCBcdTAwMjYgWEFfQ0hVTktfTUFTSykpIHtcbi1cdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVx1MDAzZXhhX2luZGV4IC0gMSkgXHUwMDI2IFhBX0NIVU5LX01BU0spICYjNDM7IDE7XG4mIzQzO1x0fSBlbHNlIGlmICh4YXMtXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSkpIHtcbiYjNDM7XHRcdGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQpXG4mIzQzO1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSAmIzQzOyAxO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbiBcdH1cbiBcbiBcdHhhc19uZXh0X29mZnNldCh4YXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hBUlJBWV9NVUxUSSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDssCiAgICAmIzM0O3hhX2ZpbmQmIzM0OywKICAgICYjMzQ7eGFfZmluZF9hZnRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXRlcmF0aW9uIG9mZnNldCBjYWxjdWxhdGlvbiBpbiB4YXNfZmluZCgpIHdpdGhpbiBsaWIveGFycmF5LmMgZm9yIG11bHRpLW9yZGVyIG5vZGVzICh3aGVyZSBzaGlmdCBcdTAwM2UgMCkuIFRoaXMgaXMgY29yZSBkYXRhIHN0cnVjdHVyZSBsb2dpYyBleGVyY2lzZWQgYWNyb3NzIG1lbW9yeSBtYW5hZ2VtZW50IChwYWdlIGNhY2hlLCBzaG1lbSwgZm9saW8gbG9va3VwcykgYW5kIHN1YnN5c3RlbSBpdGVyYXRvcnMsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNGE1MzBjNDYwNzMyMWFlNTJhZWY2NDVhYmY4MTQ3ZWNmZWMzNTI0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAxNDoyMjoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3hhcnJheS5jIGIvbGliL3Rlc3RfeGFycmF5LmMKaW5kZXggNWNhMGFlZmVlOWFhNS4uY2RhNzI0NWU0NzcxNiAxMDA2NDQKLS0tIGEvbGliL3Rlc3RfeGFycmF5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RfeGFycmF5LmMKQEAgLTEyNDcsNiAmIzQzOzEyNDcsNjcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8zKHN0cnVjdCB4YXJyYXkgKnhhKQogCX0KIH0KIAomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVEkKJiM0MzsJWEFfU1RBVEUoeGFzLCB4YSwgMTAwKTsKJiM0MzsJWEFfU1RBVEVfT1JERVIoc3BsaXQsIHhhLCAwLCAwKTsKJiM0MzsJdm9pZCAqZW50cnk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJLyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovCiYjNDM7CXhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7CiYjNDM7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7CiYjNDM7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwl4YV9lcmFzZV9pbmRleCh4YSwgMTI4KTsKJiM0MzsJeGFfZXJhc2VfaW5kZXgoeGEsIDApOwomIzQzOwlYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpOwomIzQzOwomIzQzOwkvKiAoMikgU3BsaXR0aW5nIGEgbXVsdGktaW5kZXggZW50cnkgYWZ0ZXIgYSBsb29rdXAgYmVnaW5zIGluc2lkZSBpdCAqLwomIzQzOwl4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpOwomIzQzOwomIzQzOwl4YXNfc2V0KCZhbXA7eGFzLCAxMDApOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJeGFzX3NwbGl0X2FsbG9jKCZhbXA7c3BsaXQsIHhhX21rX2luZGV4KDApLCA3LCBHRlBfS0VSTkVMKTsKJiM0MzsJeGFzX2xvY2soJmFtcDtzcGxpdCk7CiYjNDM7CXhhc19zcGxpdCgmYW1wO3NwbGl0LCB4YV9ta19pbmRleCgwKSwgNyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAxMjg7IGkmIzQzOyYjNDM7KQomIzQzOwkJX194YV9zdG9yZSh4YSwgaSwgeGFfbWtfaW5kZXgoaSksIDApOwomIzQzOwl4YXNfdW5sb2NrKCZhbXA7c3BsaXQpOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7CiYjNDM7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwl4YV9kZXN0cm95KHhhKTsKJiM0MzsJWEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kXzEoc3RydWN0IHhhcnJheSAqeGEpCiB7CiAJdW5zaWduZWQgbG9uZyBpLCBqLCBrOwpAQCAtMTM3MCw2ICYjNDM7MTQzMSw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEpCiAJCWNoZWNrX211bHRpX2ZpbmRfMSh4YSwgaSk7CiAJY2hlY2tfbXVsdGlfZmluZF8yKHhhKTsKIAljaGVja19tdWx0aV9maW5kXzMoeGEpOwomIzQzOwljaGVja19tdWx0aV9maW5kXzQoeGEpOwogfQogCiAvKiBTZWUgZmluZF9zd2FwX2VudHJ5KCkgaW4gbW0vc2htZW0uYyAqLwpkaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jCmluZGV4IDlhOGI0OTE2NTQwY2YuLjk4MDMyNGQ2ODZiZDAgMTAwNjQ0Ci0tLSBhL2xpYi94YXJyYXkuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIveGFycmF5LmMKQEAgLTE0MDYsOSAmIzQzOzE0MDYsMTEgQEAgdm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KQogCQllbnRyeSA9IHhhc19sb2FkKHhhcyk7CiAJCWlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLSZndDt4YV9ub2RlKSkKIAkJCXJldHVybiBlbnRyeTsKLQl9IGVsc2UgaWYgKCF4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0ICZhbXA7JmFtcDsKLQkJICAgIHhhcy0mZ3Q7eGFfb2Zmc2V0ICE9ICh4YXMtJmd0O3hhX2luZGV4ICZhbXA7IFhBX0NIVU5LX01BU0spKSB7Ci0JCXhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKJiM0MzsJfSBlbHNlIGlmICh4YXMtJmd0O3hhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy0mZ3Q7eGFfaW5kZXgsIHhhcy0mZ3Q7eGFfbm9kZSkpIHsKJiM0MzsJCWlmICgheGFzLSZndDt4YV9ub2RlLSZndDtzaGlmdCkKJiM0MzsJCQl4YXMtJmd0O3hhX29mZnNldCA9ICgoeGFzLSZndDt4YV9pbmRleCAtIDEpICZhbXA7IFhBX0NIVU5LX01BU0spICYjNDM7IDE7CiYjNDM7CQllbHNlCiYjNDM7CQkJeGFzLSZndDt4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy0mZ3Q7eGFfaW5kZXgsIHhhcy0mZ3Q7eGFfbm9kZSk7CiAJfQogCiAJeGFzX25leHRfb2Zmc2V0KHhhcyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwOTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYQXJyYXkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgbW9kaWZpY2F0aW9uIGF0IGEgZ3JhbnVsYXIgbGV2ZWwuIEkgc2VlIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZmZlY3RzIHRoZSBgeGFzX2ZpbmQoKWAgZnVuY3Rpb24gd2l0aGluIGBsaWIveGFycmF5LmNgLiAgU3BlY2lmaWNhbGx5LCB0aGUgZGlmZiBoaWdobGlnaHRzIGEgY2hhbmdlIGluIHRoZSBsb2dpYyBzdXJyb3VuZGluZyBob3cgYHhhc19vZmZzZXRgIGlzIG1hbmFnZWQgd2hlbiBzZWFyY2hpbmcgdGhlIFhBcnJheS4gSSBuZWVkIHRvIGZ1bGx5IGdyb2sgdGhlIHB1cnBvc2Ugb2YgdGhpcyBjaGFuZ2UsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgY29kZS4KCkJlZm9yZSwgdGhlcmUgd2FzIGFuIGBlbHNlIGlmYCBibG9jayB0aGF0IGFwcGVhcmVkIHRvIGhhbmRsZSBhIHNwZWNpZmljIHNjZW5hcmlvIHdoZXJlIHRoZSBjdXJyZW50IG9mZnNldCB3YXMgbWlzYWxpZ25lZCB3aXRoaW4gYSBjaHVuay4gVGhlIHByZXZpb3VzIGNvZGUgY2hlY2tlZCBpZiB0aGUgYHNoaWZ0YCB3YXMgemVybyBhbmQgYWRqdXN0ZWQgdGhlIG9mZnNldCBpZiB0aGUgbWlzYWxpZ25tZW50IGhhcHBlbmVkLiBUaGUgbmV3IGNvZGUgcmVwbGFjZXMgdGhhdCB3aXRoIGFuIGBlbHNlIGlmYCB0aGF0IGNhbGxzIGBnZXRfb2Zmc2V0KClgIGZ1bmN0aW9uLiBJbiB0aGUgYGVsc2VgIGNhc2UsIGl0IG5vdyBzZWVtcyB3ZSBjaGVjayBmb3IgdGhlIHNoaWZ0IGFnYWluIGJlZm9yZSByZWFkanVzdGluZyB0aGUgb2Zmc2V0LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBnZXRfb2Zmc2V0KClgIGFuZCB0aGUgYWRkZWQgYHNoaWZ0YCBjaGVjayBoaW50cyB0aGF0IHRoaXMgaXMgYSBjaGFuZ2UgZGVhbGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZSBvciBvZmZzZXQgY2FsY3VsYXRpb24gd2l0aGluIHRoZSBYQXJyYXkuIFRoaXMgaXMgaW50ZXJlc3RpbmcuCgpUbyBmdWxseSBncmFzcCB0aGUgaW1wYWN0LCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGxpYi94YXJyYXkuY2AgdG8gc2VlIGhvdyB0aGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgYW5kIGhvdyB0aGUgWEFycmF5IGRhdGEgc3RydWN0dXJlIGlzIG1hbmFnZWQuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcXVpY2tseSBqdW1wIGFyb3VuZCBhbmQgZ2V0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBvcHRpbWl6aW5nIGhvdyB0aGUgWEFycmF5IGhhbmRsZXMgbGFyZ2VyIHJhbmdlcyBvciBkaWZmZXJlbnQgbm9kZSB0eXBlcy4gVGhlIHByZXNlbmNlIG9mIGEgdGVzdCBjYXNlIGluIGBsaWIvdGVzdF94YXJyYXkuY2Agc3VnZ2VzdHMgYSBzcGVjaWZpYyBidWcgb3IgZWRnZSBjYXNlIHRoaXMgcGF0Y2ggaXMgdHJ5aW5nIHRvIGFkZHJlc3MuIEdvb2QsIGEgdGVzdCBjYXNlIGlzIGFsd2F5cyB3ZWxjb21lLiBIb3BlZnVsbHkgaXQmIzM5O3Mgd2VsbC13cml0dGVuLCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgYW5kIHRoZSBwcm9ibGVtIHRoaXMgcGF0Y2ggc29sdmVzLiBUaGlzIGlzIGEgc29saWQgc3RhcnQsIGJ1dCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi94YXJyYXkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM5MDpcdCAqXG4xMzkxOlx0ICogUmV0dXJuOiBUaGUgZW50cnksIGlmIGZvdW5kLCBvdGhlcndpc2UgJU5VTEwuXG4xMzkyOlx0ICovXG4xMzkzOlx0dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuMTM5NDpcdHtcbjEzOTU6XHRcdHZvaWQgKmVudHJ5O1xuMTM5NjpcdFxuMTM5NzpcdFx0aWYgKHhhc19lcnJvcih4YXMpIHx8IHhhcy1cdTAwM2V4YV9ub2RlID09IFhBU19CT1VORFMpXG4xMzk4Olx0XHRcdHJldHVybiBOVUxMO1xuMTM5OTpcdFx0aWYgKHhhcy1cdTAwM2V4YV9pbmRleCBcdTAwM2UgbWF4KVxuMTQwMDpcdFx0XHRyZXR1cm4gc2V0X2JvdW5kcyh4YXMpO1xuMTQwMTpcdFxuMTQwMjpcdFx0aWYgKCF4YXMtXHUwMDNleGFfbm9kZSkge1xuMTQwMzpcdFx0XHR4YXMtXHUwMDNleGFfaW5kZXggPSAxO1xuMTQwNDpcdFx0XHRyZXR1cm4gc2V0X2JvdW5kcyh4YXMpO1xuMTQwNTpcdFx0fSBlbHNlIGlmICh4YXMtXHUwMDNleGFfbm9kZSA9PSBYQVNfUkVTVEFSVCkge1xuMTQwNjpcdFx0XHRlbnRyeSA9IHhhc19sb2FkKHhhcyk7XG4xNDA3Olx0XHRcdGlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLVx1MDAzZXhhX25vZGUpKVxuMTQwODpcdFx0XHRcdHJldHVybiBlbnRyeTtcbjE0MDk6XHRcdH0gZWxzZSBpZiAoeGFzLVx1MDAzZXhhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpKSB7XG4xNDEwOlx0XHRcdGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQpXG4xNDExOlx0XHRcdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVx1MDAzZXhhX2luZGV4IC0gMSkgXHUwMDI2IFhBX0NIVU5LX01BU0spICYjNDM7IDE7XG4xNDEyOlx0XHRcdGVsc2VcbjE0MTM6XHRcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbjE0MTQ6XHRcdH1cbjE0MTU6XHRcbjE0MTY6XHRcdHhhc19uZXh0X29mZnNldCh4YXMpO1xuMTQxNzpcdFxuMTQxODpcdFx0d2hpbGUgKHhhcy1cdTAwM2V4YV9ub2RlIFx1MDAyNlx1MDAyNiAoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAzYz0gbWF4KSkge1xuMTQxOTpcdFx0XHRpZiAodW5saWtlbHkoeGFzLVx1MDAzZXhhX29mZnNldCA9PSBYQV9DSFVOS19TSVpFKSkge1xuMTQyMDpcdFx0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSB4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VvZmZzZXQgJiM0MzsgMTtcbjE0MjE6XHRcdFx0XHR4YXMtXHUwMDNleGFfbm9kZSA9IHhhX3BhcmVudCh4YXMtXHUwMDNleGEsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbjE0MjI6XHRcdFx0XHRjb250aW51ZTtcbjE0MjM6XHRcdFx0fVxuMTQyNDpcdFxuMTQyNTpcdFx0XHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cdTAwM2V4YSwgeGFzLVx1MDAzZXhhX25vZGUsIHhhcy1cdTAwM2V4YV9vZmZzZXQpO1xuMTQyNjpcdFx0XHRpZiAoeGFfaXNfbm9kZShlbnRyeSkpIHtcbjE0Mjc6XHRcdFx0XHR4YXMtXHUwMDNleGFfbm9kZSA9IHhhX3RvX25vZGUoZW50cnkpO1xuMTQyODpcdFx0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAwO1xuMTQyOTpcdFx0XHRcdGNvbnRpbnVlO1xuMTQzMDpcdFx0XHR9XG4xNDMxOlx0XHRcdGlmIChlbnRyeSBcdTAwMjZcdTAwMjYgIXhhX2lzX3NpYmxpbmcoZW50cnkpKVxuMTQzMjpcdFx0XHRcdHJldHVybiBlbnRyeTtcbjE0MzM6XHRcbjE0MzQ6XHRcdFx0eGFzX25leHRfb2Zmc2V0KHhhcyk7XG4xNDM1Olx0XHR9XG4xNDM2Olx0XG4xNDM3Olx0XHRpZiAoIXhhcy1cdTAwM2V4YV9ub2RlKVxuMTQzODpcdFx0XHR4YXMtXHUwMDNleGFfbm9kZSA9IFhBU19CT1VORFM7XG4xNDM5Olx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njc5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWEFycmF5JiMzOTtzIENvcmUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGB4YXNfZmluZGAsIGEgY3J1Y2lhbCBmdW5jdGlvbiByZXNpZGluZyB3aXRoaW4gYGxpYi94YXJyYXkuY2AuIFRoaXMgcGxhY2VzIGl0IGZpcm1seSB3aXRoaW4gdGhlIFhBcnJheSBjb3JlIGxpYnJhcnkgb2YgdGhlIExpbnV4IGtlcm5lbCDigJMgdGhlIGJlZHJvY2sgZm9yIGEgcGxldGhvcmEgb2YgY3JpdGljYWwga2VybmVsIGZ1bmN0aW9uYWxpdGllcy4gWEFycmF5LCBhcyB3ZSBrbm93LCBpcyB1YmlxdWl0b3VzLCBoYW5kbGluZyBldmVyeXRoaW5nIGZyb20gdGhlIHBhZ2UgY2FjaGUgYW5kIGZpbGVtYXBzIHRvIHNobWVtLCBEUk0sIERBWCwgc3lzZnMsIGFuZCBJUEMuIFRoYXQmIzM5O3MgYSBzZXJpb3VzIGZvb3RwcmludC4KClNvLCBgeGFzX2ZpbmRgIGl0c2VsZj8gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciBpdGVyYXRpbmcgdGhyb3VnaCBYQXJyYXkgZW50cmllcy4gSSYjMzk7bSB0aGlua2luZyBtdWx0aS1pbmRleCBlbnRyaWVzLCBzaG1lbSBpbXBsZW1lbnRhdGlvbnMsIGFuZCBmb2xpbyBzZWFyY2hlcyBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQuIEl0JiMzOTtzIHRoZSB3b3JraG9yc2UgZnVuY3Rpb24uIE5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGB4YXNfZmluZGAsIGB4YV9maW5kYCwgYW5kIGB4YV9maW5kX2FmdGVyYCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIFNlZWluZyB3aGVyZSBhbmQgaG93IHRoZXNlIGFyZSBpbnZva2VkIHdpbGwgcmV2ZWFsIGEgd2VhbHRoIG9mIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgWEFycmF5IGlzIGxldmVyYWdlZCwgYW5kIHBvdGVudGlhbGx5IGhpZ2hsaWdodCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIHdpdGhpbiB0aG9zZSBjcml0aWNhbCBhcmVhcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHRlbGxzIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hhc19maW5kXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdD00MTc9aGVsZCwgd2hpbGUgbW92aW5nIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIGluZGV4IGRvZXMuXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDE4LVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjQxOTpZb3UgY2FuIHNlYXJjaCBmb3IgdGhlIG5leHQgcHJlc2VudCBlbnRyeSB1c2luZyB4YXNfZmluZCgpLiAgVGhpc1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0LTQyMC1pcyB0aGUgZXF1aXZhbGVudCBvZiBib3RoIHhhX2ZpbmQoKSBhbmQgeGFfZmluZF9hZnRlcigpO1xuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdD00MjM9ZW50cnkgYXQgdGhlIGluZGV4IG9mIHRoZSB4YV9zdGF0ZS4gIFVzaW5nIHhhc19uZXh0X2VudHJ5KCkgdG9cbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0MjQ6bW92ZSB0byB0aGUgbmV4dCBwcmVzZW50IGVudHJ5IGluc3RlYWQgb2YgeGFzX2ZpbmQoKSB3aWxsIHNhdmVcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00MjUtYSBmdW5jdGlvbiBjYWxsIGluIHRoZSBtYWpvcml0eSBvZiBjYXNlcyBhdCB0aGUgZXhwZW5zZSBvZiBlbWl0dGluZyBtb3JlXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTQ3Nz1pbiB0aGUgeGFfc3RhdGUgd2lsbCBub3QgYmUgY2hhbmdlZC4gIFdoZW4gaXRlcmF0aW5nIG92ZXIgYW4gWEFycmF5XG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q6NDc4Om9yIGNhbGxpbmcgeGFzX2ZpbmQoKSwgaWYgdGhlIGluaXRpYWwgaW5kZXggaXMgaW4gdGhlIG1pZGRsZVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0LTQ3OS1vZiBhIG11bHRpLWluZGV4IGVudHJ5LCBpdCB3aWxsIG5vdCBiZSBhbHRlcmVkLiAgU3Vic2VxdWVudCBjYWxsc1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3Q9MzE1PXhhc19sb2FkKCnkvJrlsL3lj6/og73lnLDlsIZ4YV9zdGF0Zeenu+WKqOWIsOivpeadoeebrumZhOi/keOAguWmguaenOS9oOefpemBk3hhX3N0YXRl5bey57uP56e75Yqo5Yiw5LqG6K+l5p2h55uu77yM5bm25LiU6ZyA6KaB5qOA5p+lXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0zMjEtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0OjMyMjrkvaDlj6/ku6Xkvb/nlKh4YXNfZmluZCgp5pCc57Si5LiL5LiA5Liq5b2T5YmN5p2h55uu44CC6L+Z55u45b2T5LqOeGFfZmluZCgp5ZKMeGFfZmluZF9hZnRlcigp77yb5aaC5p6c5YWJ5qCH5bey57uP56e75Yqo5Yiw5LqGXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTMyMy3kuIDkuKrmnaHnm67vvIzpgqPkuYjlroPlsIbmib7liLDlvZPliY3lvJXnlKjnmoTmnaHnm67kuYvlkI7nmoTkuIvkuIDkuKrmnaHnm67jgILlpoLmnpzmsqHmnInvvIzlroPlsIbov5Tlm554YV9zdGF0Zee0ouW8leWkhOeahOadoeebruOAguS9v+eUqFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdDozMjQ6eGFzX25leHRfZW50cnkoKeiAjOS4jeaYr3hhc19maW5kKCnmnaXnp7vliqjliLDkuIvkuIDkuKrlvZPliY3mnaHnm67vvIzlnKjlpKflpJrmlbDmg4XlhrXkuIvkvJroioLnnIHkuIDkuKrlh73mlbDosIPnlKjvvIzkvYbku6Pku7dcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzI1LeaYr+WPkeWHuuabtOWkmuWGheiBlOS7o+eggeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3Q9MzQ1PVhBcnJheeacieiDveWKm+WwhuWkmuS4que0ouW8leiBlOezu+WcqOS4gOi1t++8jOWboOatpOWvueS4gOS4que0ouW8leeahOaTjeS9nOS8muW9seWTjeWIsOaJgOacieeahOe0ouW8leOAguS+i+Wmgu+8jOWtmOWCqOWIsOS7u+S9lee0ouW8leWwhlx1ZmZmZFx1ZmZmZC4uLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzU0LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdDozNTU65aaC5p6ceGFzX2xvYWQoKemBh+WIsOS4gOS4quWkmue0ouW8leadoeebru+8jHhhX3N0YXRl5Lit55qEeGFfaW5kZXjlsIbkuI3kvJrooqvmlLnlj5jjgILlvZPpgY3ljobkuIDkuKpYQXJyYXnmiJbogIXosIPnlKh4YXNfZmluZCgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTM1Ni3ml7bvvIzlpoLmnpzliJ3lp4vntKLlvJXlnKjkuIDkuKrlpJrntKLlvJXmnaHnm67nmoTkuK3pl7TvvIzlroPlsIbkuI3kvJrooqvmlLnlj5jjgILpmo/lkI7nmoTosIPnlKjmiJbov63ku6PlsIbmiorntKLlvJXnp7vliLDojIPlm7TlhoXnmoTnrKxcdWZmZmRcdWZmZmQuLi5cbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE1NDM9dm9pZCAqeGFzX3N0b3JlKHN0cnVjdCB4YV9zdGF0ZSAqLCB2b2lkICplbnRyeSk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE1NDQ6dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICosIHVuc2lnbmVkIGxvbmcgbWF4KTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTU0NS12b2lkICp4YXNfZmluZF9jb25mbGljdChzdHJ1Y3QgeGFfc3RhdGUgKik7XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xNzAxPXN0YXRpYyBpbmxpbmUgdm9pZCB4YXNfc2V0X2xydShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzExLSAqIHhhc19uZXh0X2VudHJ5KCkgaXMgYW4gaW5saW5lIGZ1bmN0aW9uIHRvIG9wdGltaXNlIHhhcnJheSB0cmF2ZXJzYWwgZm9yXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE3MTI6ICogc3BlZWQuICBJdCBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgeGFzX2ZpbmQoKSwgYW5kIHdpbGwgY2FsbCB4YXNfZmluZCgpXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MTMtICogZm9yIGFsbCB0aGUgaGFyZCBjYXNlcy5cbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE3MTc9c3RhdGljIGlubGluZSB2b2lkICp4YXNfbmV4dF9lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzIzLVx0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gKHhhcy1cdTAwM2V4YV9pbmRleCBcdTAwMjYgWEFfQ0hVTktfTUFTSykpKVxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzI0Olx0XHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzI1LVxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyNy1cdFx0aWYgKHVubGlrZWx5KHhhcy1cdTAwM2V4YV9pbmRleCBcdTAwM2U9IG1heCkpXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE3Mjg6XHRcdFx0cmV0dXJuIHhhc19maW5kKHhhcywgbWF4KTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyOS1cdFx0aWYgKHVubGlrZWx5KHhhcy1cdTAwM2V4YV9vZmZzZXQgPT0gWEFfQ0hVTktfTUFTSykpXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE3MzA6XHRcdFx0cmV0dXJuIHhhc19maW5kKHhhcywgbWF4KTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTczMS1cdFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIHhhcy1cdTAwM2V4YV9vZmZzZXQgJiM0MzsgMSk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MzItXHRcdGlmICh1bmxpa2VseSh4YV9pc19pbnRlcm5hbChlbnRyeSkpKVxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzMzOlx0XHRcdHJldHVybiB4YXNfZmluZCh4YXMsIG1heCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MzQtXHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQmIzQzOyYjNDM7O1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTgwMD1lbnVtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4MTctI2RlZmluZSB4YXNfZm9yX2VhY2goeGFzLCBlbnRyeSwgbWF4KSBcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxODE4Olx0Zm9yIChlbnRyeSA9IHhhc19maW5kKHhhcywgbWF4KTsgZW50cnk7IFxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4MTktXHQgICAgIGVudHJ5ID0geGFzX25leHRfZW50cnkoeGFzLCBtYXgpKVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTEwMj1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja194YXNfcmV0cnkoc3RydWN0IHhhcnJheSAqeGEpXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTEwLVx0cmN1X3JlYWRfbG9jaygpO1xubGliL3Rlc3RfeGFycmF5LmM6MTExOlx0WEFfQlVHX09OKHhhLCB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0geGFfbWtfdmFsdWUoMCkpO1xubGliL3Rlc3RfeGFycmF5LmMtMTEyLVx0eGFfZXJhc2VfaW5kZXgoeGEsIDEpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTEyNTA9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF80KHN0cnVjdCB4YXJyYXkgKnhhKVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTEyNjItXHRyY3VfcmVhZF9sb2NrKCk7XG5saWIvdGVzdF94YXJyYXkuYzoxMjYzOlx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG5saWIvdGVzdF94YXJyYXkuYy0xMjY0LVx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTI2Ni1cbmxpYi90ZXN0X3hhcnJheS5jOjEyNjc6XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbmxpYi90ZXN0X3hhcnJheS5jLTEyNjgtXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTEyNzAtXG5saWIvdGVzdF94YXJyYXkuYzoxMjcxOlx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG5saWIvdGVzdF94YXJyYXkuYy0xMjcyLVx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0xMjg0LVx0cmN1X3JlYWRfbG9jaygpO1xubGliL3Rlc3RfeGFycmF5LmM6MTI4NTpcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xubGliL3Rlc3RfeGFycmF5LmMtMTI4Ni1cdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTEyOTctXHRyY3VfcmVhZF9sb2NrKCk7XG5saWIvdGVzdF94YXJyYXkuYzoxMjk4Olx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG5saWIvdGVzdF94YXJyYXkuYy0xMjk5LVx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTtcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0xMzAxLVxubGliL3Rlc3RfeGFycmF5LmM6MTMwMjpcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xubGliL3Rlc3RfeGFycmF5LmMtMTMwMy1cdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MTU4Nj1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tb3ZlX21heChzdHJ1Y3QgeGFycmF5ICp4YSlcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0xNTkxLVx0cmN1X3JlYWRfbG9jaygpO1xubGliL3Rlc3RfeGFycmF5LmM6MTU5MjpcdFhBX0JVR19PTih4YSwgeGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpICE9IHhhX21rX2luZGV4KFVMT05HX01BWCkpO1xubGliL3Rlc3RfeGFycmF5LmM6MTU5MzpcdFhBX0JVR19PTih4YSwgeGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpICE9IE5VTEwpO1xubGliL3Rlc3RfeGFycmF5LmMtMTU5NC1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTE1OTctXHRyY3VfcmVhZF9sb2NrKCk7XG5saWIvdGVzdF94YXJyYXkuYzoxNTk4Olx0WEFfQlVHX09OKHhhLCB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0geGFfbWtfaW5kZXgoVUxPTkdfTUFYKSk7XG5saWIvdGVzdF94YXJyYXkuYy0xNTk5LVx0eGFzX3BhdXNlKFx1MDAyNnhhcyk7XG5saWIvdGVzdF94YXJyYXkuYzoxNjAwOlx0WEFfQlVHX09OKHhhLCB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0gTlVMTCk7XG5saWIvdGVzdF94YXJyYXkuYy0xNjAxLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubGliL3hhcnJheS5jPTEzNzU9RVhQT1JUX1NZTUJPTF9HUEwoX194YXNfbmV4dCk7XG4tLVxubGliL3hhcnJheS5jLTEzNzctLyoqXG5saWIveGFycmF5LmM6MTM3ODogKiB4YXNfZmluZCgpIC0gRmluZCB0aGUgbmV4dCBwcmVzZW50IGVudHJ5IGluIHRoZSBYQXJyYXkuXG5saWIveGFycmF5LmMtMTM3OS0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxuLS1cbmxpYi94YXJyYXkuYy0xMzkyLSAqL1xubGliL3hhcnJheS5jOjEzOTM6dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxubGliL3hhcnJheS5jLTEzOTQte1xuLS1cbmxpYi94YXJyYXkuYz0yMTcyPUVYUE9SVF9TWU1CT0woeGFfY2xlYXJfbWFyayk7XG4tLVxubGliL3hhcnJheS5jLTIxODUtICogZW50cmllcyB3aGljaCBhcmUgYmVpbmcgc2ltdWx0YW5lb3VzbHkgYWRkZWQuICBJdCB3aWxsIG5vdCByZXR1cm4gYW5cbmxpYi94YXJyYXkuYzoyMTg2OiAqICVYQV9SRVRSWV9FTlRSWTsgaWYgeW91IG5lZWQgdG8gc2VlIHJldHJ5IGVudHJpZXMsIHVzZSB4YXNfZmluZCgpLlxubGliL3hhcnJheS5jLTIxODctICpcbi0tXG5saWIveGFycmF5LmM9MjE5MT12b2lkICp4YV9maW5kKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXG4tLVxubGliL3hhcnJheS5jLTIyMDEtXHRcdGVsc2VcbmxpYi94YXJyYXkuYzoyMjAyOlx0XHRcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBtYXgpO1xubGliL3hhcnJheS5jLTIyMDMtXHR9IHdoaWxlICh4YXNfcmV0cnkoXHUwMDI2eGFzLCBlbnRyeSkpO1xuLS1cbmxpYi94YXJyYXkuYz0yMjEyPXN0YXRpYyBib29sIHhhc19zaWJsaW5nKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbmxpYi94YXJyYXkuYy0yMjM1LSAqIHdoaWNoIGFyZSBiZWluZyBzaW11bHRhbmVvdXNseSBhZGRlZC4gIEl0IHdpbGwgbm90IHJldHVybiBhblxubGliL3hhcnJheS5jOjIyMzY6ICogJVhBX1JFVFJZX0VOVFJZOyBpZiB5b3UgbmVlZCB0byBzZWUgcmV0cnkgZW50cmllcywgdXNlIHhhc19maW5kKCkuXG5saWIveGFycmF5LmMtMjIzNy0gKlxuLS1cbmxpYi94YXJyYXkuYz0yMjQxPXZvaWQgKnhhX2ZpbmRfYWZ0ZXIoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgKmluZGV4cCxcbi0tXG5saWIveGFycmF5LmMtMjI1NC1cdFx0ZWxzZVxubGliL3hhcnJheS5jOjIyNTU6XHRcdFx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIG1heCk7XG5saWIveGFycmF5LmMtMjI1Ni1cbi0tXG5tbS9maWxlbWFwLmM9NDc5PWJvb2wgZmlsZW1hcF9yYW5nZV9oYXNfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtNDkwLVx0Zm9yICg7Oykge1xubW0vZmlsZW1hcC5jOjQ5MTpcdFx0Zm9saW8gPSB4YXNfZmluZChcdTAwMjZ4YXMsIG1heCk7XG5tbS9maWxlbWFwLmMtNDkyLVx0XHRpZiAoeGFzX3JldHJ5KFx1MDAyNnhhcywgZm9saW8pKVxuLS1cbm1tL2ZpbGVtYXAuYz0yMDc4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmaW5kX2dldF9lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgcGdvZmZfdCBtYXgsXG4tLVxubW0vZmlsZW1hcC5jLTIwODQtXHRpZiAobWFyayA9PSBYQV9QUkVTRU5UKVxubW0vZmlsZW1hcC5jOjIwODU6XHRcdGZvbGlvID0geGFzX2ZpbmQoeGFzLCBtYXgpO1xubW0vZmlsZW1hcC5jLTIwODYtXHRlbHNlXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0yNDM0PWJvb2wga3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yNDQ5LVx0aWYgKCFhdHRycylcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjQ1MDpcdFx0cmV0dXJuICF4YXNfZmluZChcdTAwMjZ4YXMsIGVuZCAtIDEpO1xudmlydC9rdm0va3ZtX21haW4uYy0yNDUxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNjgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBYQXJyYXkgdXNhZ2UuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHBlcnZhc2l2ZSB0aGVzZSBmdW5jdGlvbnMgYXJlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGF0IGhvdyBgeGFfZmluZGAsIGB4YV9maW5kX2FmdGVyYCwgYHhhc19mb3JfZWFjaGAsIGFuZCBgeGFzX2ZpbmRgIGFyZSB1dGlsaXplZC4KCioqWEFycmF5IEZ1bmN0aW9uIFVzYWdlIERlZXAgRGl2ZSoqCgpJdCYjMzk7cyBpbW1lZGlhdGVseSBzdHJpa2luZyB0aGF0IGB4YXNfZm9yX2VhY2hgIHNlZW1zIHRvIGJlIHRoZSB3b3JraG9yc2UgaGVyZS4gSSBzZWUgaXQmIzM5O3MgaGVhdmlseSBpbnZvbHZlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgZmlsZSBtYXBwaW5nLCBzaGFyZWQgbWVtb3J5LCBLVk0sIGZpbGVzeXN0ZW1zIOKAkyBpdCYjMzk7cyBhbGwgb3ZlciB0aGUgcGxhY2UhIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIHNpZ25pZnlpbmcgaXRzIGltcG9ydGFuY2UgdG8gY29yZSBmdW5jdGlvbmFsaXRpZXMuCgpUaGVuLCBJIG9ic2VydmUgYHhhX2ZpbmRgIGFuZCBgeGFfZmluZF9hZnRlcmAgYXJlIGVxdWFsbHkgd2lkZXNwcmVhZCwgd2l0aCBhcHBsaWNhdGlvbiBhY3Jvc3Mga2VybmVsIG1vZHVsZXMgYW5kIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGNvcmUgc3Vic3lzdGVtcy4gVGhlaXIgYnJvYWQgdXNlIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGNydWNpYWwgZm9yIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZW0gd2VsbC4KCkZpbmFsbHksIGB4YXNfZmluZGAgaXMgbG9jYXRlZCByaWdodCBpbiBgbGliL3hhcnJheS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGhvd2V2ZXIsIHRoZSBsb2NhdGlvbiBvZiBhIHNwZWNpZmljIGZ1bmN0aW9uIGRvZXMgbm90IHRlbGwgbWUgZXZlcnl0aGluZyBhYm91dCBpdHMgdXNhZ2UuIAoKTm93LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIGBDT05GSUdfWEFSUkFZX01VTFRJYCBpcyBhIGNvbmZpZ3VyYWJsZSBvcHRpb24uIFRoaXMgd2lsbCBhZmZlY3QgaG93IGl0JiMzOTtzIHVzZWQgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgYSBzdGFuZGFyZCBzZXR0aW5nLCBvciBpZiBpdCBpcyBjb25maWd1cmFibGUuIFRoaXMgd2lsbCBkZWZpbmUgdGhlIHJhbmdlIG9mIHN5c3RlbXMgdGhhdCBsZXZlcmFnZSB0aGUgZmVhdHVyZXMgb2YgdGhpcyBhcnJheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEFSUkFZX01VTFRJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnPTM0OD1jb25maWcgSU5URVJWQUxfVFJFRV9TUEFOX0lURVJcbi0tXG5saWIvS2NvbmZpZy0zNTEtXG5saWIvS2NvbmZpZzozNTI6Y29uZmlnIFhBUlJBWV9NVUxUSVxubGliL0tjb25maWctMzUzLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4ODYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlc2Ugc2V0dGluZ3M6IHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEdpdmVuIHRoYXQgSSYjMzk7bSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgYXJlYSBvciBmZWF0dXJlLCBhIHRhcmdldGVkIGFwcHJvYWNoIGlzIGJlc3QuIEkmIzM5O20gaG9taW5nIGluIG9uIGxpbmUgMzUyIGluIGBsaWIvS2NvbmZpZ2AuIFRoaXMgc3VnZ2VzdHMgSSBoYXZlIGEgc3BlY2lmaWMgY29udGV4dCBpbiBtaW5kLiBQZXJoYXBzIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIG9wdGlvbiwgYSBkZXBlbmRlbmN5IGNoYWluLCBvciBob3cgYSBmZWF0dXJlIGlzIGNvbmRpdGlvbmFsbHkgZW5hYmxlZC4gVGhlIGxpbmUgbnVtYmVyIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEkgZXhwZWN0IHRvIHNlZSB0aGUgbWVhdCBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgdGhlcmUgaW4gdGhlIGBLY29uZmlnYCBmaWxlLiBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0IHNwZWNpZmljIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZ3VhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0NTpcdFxuIDM0NjpcdFx0ICBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAzNDc6XHRcbiAzNDg6XHRjb25maWcgSU5URVJWQUxfVFJFRV9TUEFOX0lURVJcbiAzNDk6XHRcdGJvb2xcbiAzNTA6XHRcdGRlcGVuZHMgb24gSU5URVJWQUxfVFJFRVxuIDM1MTpcdFxuIDM1MjpcdGNvbmZpZyBYQVJSQVlfTVVMVElcbiAzNTM6XHRcdGJvb2xcbiAzNTQ6XHRcdGhlbHBcbiAzNTU6XHRcdCAgU3VwcG9ydCBlbnRyaWVzIHdoaWNoIG9jY3VweSBtdWx0aXBsZSBjb25zZWN1dGl2ZSBpbmRpY2VzIGluIHRoZVxuIDM1NjpcdFx0ICBYQXJyYXkuXG4gMzU3Olx0XG4gMzU4Olx0Y29uZmlnIEFTU09DSUFUSVZFX0FSUkFZXG4gMzU5Olx0XHRib29sXG4gMzYwOlx0XHRoZWxwXG4gMzYxOlx0XHQgIEdlbmVyaWMgYXNzb2NpYXRpdmUgYXJyYXkuICBDYW4gYmUgc2VhcmNoZWQgYW5kIGl0ZXJhdGVkIG92ZXIgd2hpbHN0XG4gMzYyOlx0XHQgIGl0IGlzIGJlaW5nIG1vZGlmaWVkLiAgSXQgaXMgYWxzbyByZWFzb25hYmx5IHF1aWNrIHRvIHNlYXJjaCBhbmRcbiAzNjM6XHRcdCAgbW9kaWZ5LiAgVGhlIGFsZ29yaXRobXMgYXJlIG5vbi1yZWN1cnNpdmUsIGFuZCB0aGUgdHJlZXMgYXJlIGhpZ2hseVxuIDM2NDpcdFx0ICBjYXBhY2lvdXMuXG4gMzY1Olx0XG4gMzY2Olx0XHQgIFNlZTpcbiAzNjc6XHRcbiAzNjg6XHRcdFx0RG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9hc3NvY19hcnJheS5yc3RcbiAzNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MTgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYFhBUlJBWV9NVUxUSWAgU2VsZWN0aW9uIGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCYjMzk7cyBjaG9vc2luZyBgWEFSUkFZX01VTFRJYCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIEkgd2FudCBhIGhvbGlzdGljIHZpZXcsIGEgbWFwLCBvZiB3aGVyZSBhbmQgaG93IHRoaXMgZmxhZyBpcyBiZWluZyB0cmlnZ2VyZWQuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBsb2dpYywgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgcGlucG9pbnQgdGhlIHNwZWNpZmljIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGl0cyBzZWxlY3Rpb24uIEl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBoZXJlIGlzIGdvaW5nIHRvIGluZm9ybSBteSBuZXh0IHN0ZXBzLiBUaGlzIGtpbmQgb2Yga2VybmVsLWxldmVsIGludmVzdGlnYXRpb24gaXMgc2Vjb25kIG5hdHVyZSwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBwcmVjaXNlIGFuZCBjb21wcmVoZW5zaXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgdW5jb3Zlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFhBUlJBWV9NVUxUSSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTE4Mjc9Y29uZmlnIFg4Nl9TR1hcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE4MzItXHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQVxuYXJjaC94ODYvS2NvbmZpZzoxODMzOlx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuYXJjaC94ODYvS2NvbmZpZy0xODM0LVx0aGVscFxuLS1cbmZzL0tjb25maWc9MjczPWNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI3NTpcdHNlbGVjdCBYQVJSQVlfTVVMVElcbmZzL0tjb25maWctMjc2LVxuLS1cbm1tL0tjb25maWc9ODQ2PW1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbi0tXG5tbS9LY29uZmlnLTg0OS1cdHNlbGVjdCBDT01QQUNUSU9OXG5tbS9LY29uZmlnOjg1MDpcdHNlbGVjdCBYQVJSQVlfTVVMVElcbm1tL0tjb25maWctODUxLVx0c2VsZWN0IE1NX0lEXG4tLVxubW0vS2NvbmZpZz0xMjM2PWNvbmZpZyBaT05FX0RFVklDRVxuLS1cbm1tL0tjb25maWctMTI0MC1cdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWc6MTI0MTpcdHNlbGVjdCBYQVJSQVlfTVVMVElcbm1tL0tjb25maWctMTI0Mi1cbi0tXG5zb3VuZC9jb3JlL0tjb25maWc9MTgxPWNvbmZpZyBTTkRfQ1RMX0ZBU1RfTE9PS1VQXG4tLVxuc291bmQvY29yZS9LY29uZmlnLTE4My1cdGRlZmF1bHQgeVxuc291bmQvY29yZS9LY29uZmlnOjE4NDpcdHNlbGVjdCBYQVJSQVlfTVVMVElcbnNvdW5kL2NvcmUvS2NvbmZpZy0xODUtXHRoZWxwXG4tLVxudmlydC9rdm0vS2NvbmZpZz0xMDY9Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZzoxMDc6ICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbnZpcnQva3ZtL0tjb25maWctMTA4LSAgICAgICBib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDUzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipYQXJyYXkgSW52ZXN0aWdhdGlvbiAtIEluaXRpYWwgVGhvdWdodHMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgWEFSUkFZX01VTFRJYCBpcyBnZXR0aW5nIHB1bGxlZCBpbiBieSBhIGZldyBkaWZmZXJlbnQgb3B0aW9ucywgbmFtZWx5IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBIVUdFVExCX1BBR0VgLCBhbmQgYFNORF9DVExfRkFTVF9MT09LVVBgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSXQmIzM5O3MgYSBrZXkgY29tcG9uZW50LCBvYnZpb3VzbHksIGlmIGl0JiMzOTtzIGRlcGVuZGVudCBvbiB0aG9zZSBjb21tb25seSB1c2VkIGZlYXR1cmVzLiBBbmQsIEkgYWxzbyBrbm93IHRoYXQgYHhhcnJheS5jYCBpcyBhbHdheXMgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUgdm1saW51eCBpbWFnZS4gVGhhdCBtZWFucyBpdCYjMzk7cyBwcmV0dHkgZnVuZGFtZW50YWwsIGEgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgaW5mcmFzdHJ1Y3R1cmUuIEl0JiMzOTtzIG5vdCBhIG1vZHVsYXIgY29tcG9uZW50IHRoYXQgY2FuIGJlIGVhc2lseSBzd2FwcGVkIG91dC4KCkdpdmVuIHRoYXQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbGliL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGB4YXJyYXkub2AgaXMgY29tcGlsZWQuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGluZmx1ZW5jZXMgaXRzIGluY2x1c2lvbi4gVGhpcyBzaG91bGQgYWxzbyBoZWxwIGVzdGFibGlzaCB0aGUgY29udGV4dCBmb3IgYFhBUlJBWV9NVUxUSWAmIzM5O3Mgcm9sZSBpbiByZWxhdGlvbiB0byB0aG9zZSBvdGhlciB2YXJpYWJsZXMgYW5kIHVsdGltYXRlbHksIHRvIGdhaW4gaW5zaWdodCBpbnRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGFycmF5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9NYWtlZmlsZT0zNj1saWIteSA6PSBjdHlwZS5vIHN0cmluZy5vIHZzcHJpbnRmLm8gY21kbGluZS5vIFxcXG5saWIvTWFrZWZpbGU6Mzc6XHQgcmJ0cmVlLm8gcmFkaXgtdHJlZS5vIHRpbWVycXVldWUubyB4YXJyYXkubyBcXFxubGliL01ha2VmaWxlLTM4LVx0IG1hcGxlX3RyZWUubyBpZHIubyBleHRhYmxlLm8gaXJxX3JlZ3MubyBhcmd2X3NwbGl0Lm8gXFxcbi0tXG5saWIvTWFrZWZpbGU9OTI9ZW5kaWZcbmxpYi9NYWtlZmlsZS05My1cbmxpYi9NYWtlZmlsZTo5NDpvYmotJChDT05GSUdfVEVTVF9YQVJSQVkpICYjNDM7PSB0ZXN0X3hhcnJheS5vXG5saWIvTWFrZWZpbGUtOTUtb2JqLSQoQ09ORklHX1RFU1RfTUFQTEVfVFJFRSkgJiM0Mzs9IHRlc3RfbWFwbGVfdHJlZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTg0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgeGFycmF5IFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB4YXNfZmluZGAgd2l0aGluIGBsaWIveGFycmF5LmNgLCBhIGNyaXRpY2FsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgeGFycmF5IGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgaGFuZGxpbmcgdGhlIGB4YXMtJmd0O3hhX29mZnNldGAgY2FsY3VsYXRpb24gd2hlbiBkZWFsaW5nIHdpdGggbm9uLWxlYWYgbm9kZXMgKGB4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0ICE9IDBgKS4gQmVmb3JlLCB0aGlzIHNwZWNpZmljIGNvbmRpdGlvbiB3YXNuJiMzOTt0IGNvcnJlY3RseSBhZGRyZXNzZWQsIGJ1dCBub3cgaXQgY2hlY2tzIGB4YXMtJmd0O3hhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy0mZ3Q7eGFfaW5kZXgsIHhhcy0mZ3Q7eGFfbm9kZSlgIGFuZCBhZGp1c3RzIGFjY29yZGluZ2x5LiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgY2hhbmdlIHRvIGhvdyB0aGUgeGFycmF5IHRyYXZlcnNlcyBpdHMgc3RydWN0dXJlLgoKTm93LCBpcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSAqcmVhY2hhYmxlKiBpbiBhIHJ1bm5pbmcga2VybmVsPyBBYnNvbHV0ZWx5LiBgeGFzX2ZpbmRgIGlzIGEgZnVuZGFtZW50YWwgZnVuY3Rpb24sIHVzZWQgZXh0ZW5zaXZlbHkgaW4gdGhpbmdzIGxpa2UgdGhlIHBhZ2UgY2FjaGUsIHNoYXJlZCBtZW1vcnkgbG9va3VwcyAoc2htZW0pLCBLVk0sIHNvdW5kIGNvbnRyb2wsIGFuZCBmaWxlIG1hcHBpbmcuIEl0JiMzOTtzIHBhcnQgb2YgdGhlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGRhdGEgc3RydWN0dXJlcyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuCgpHaXZlbiB0aGUgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGlmIHNvbWV0aGluZyBpcyB3b3J0aCBmdXp6aW5nLCB0aGlzIGlzIGEgY2xlYXIgeWVzLiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIHN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSBtZW1vcnkgbWFuYWdlbWVudCB0aHJvdWdoIHRoZSB4YXJyYXksIGFuZCBpdCBpbnZvbHZlcyByZXN0cnVjdHVyaW5nIG9mIGEgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlLiBUaGlzIHRpY2tzIGFsbCB0aGUgYm94ZXMuCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy4gQ2xlYXJseSwgYHhhc19maW5kYCBpdHNlbGYgaXMgYSBwcmltZSBjYW5kaWRhdGUsIGdpdmVuIGl0IHdhcyBkaXJlY3RseSBtb2RpZmllZC4gQnV0IGxldCYjMzk7cyBsb29rIGZvciBkaXJlY3Qgd3JhcHBlcnM6IGB4YV9maW5kYCBhbmQgYHhhX2ZpbmRfYWZ0ZXJgIGFyZSByaWdodCB0aGVyZSBhbmQgY2FsbCBgeGFzX2ZpbmRgLiBUaGV5IGFyZSBpbW1lZGlhdGVseSByZWxldmFudC4gVGltZSB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGVudHJ5cG9pbnRzIGluIGBsaWIveGFycmF5LmNgIHRoYXQgY2FsbCBgeGFzX2ZpbmRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4YXNfZmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi94YXJyYXkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIveGFycmF5LmM9MTM3NT1FWFBPUlRfU1lNQk9MX0dQTChfX3hhc19uZXh0KTtcbi0tXG5saWIveGFycmF5LmMtMTM3Ny0vKipcbmxpYi94YXJyYXkuYzoxMzc4OiAqIHhhc19maW5kKCkgLSBGaW5kIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW4gdGhlIFhBcnJheS5cbmxpYi94YXJyYXkuYy0xMzc5LSAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXG4tLVxubGliL3hhcnJheS5jLTEzOTItICovXG5saWIveGFycmF5LmM6MTM5Mzp2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXG5saWIveGFycmF5LmMtMTM5NC17XG4tLVxubGliL3hhcnJheS5jLTE0NDAtfVxubGliL3hhcnJheS5jOjE0NDE6RVhQT1JUX1NZTUJPTF9HUEwoeGFzX2ZpbmQpO1xubGliL3hhcnJheS5jLTE0NDItXG5saWIveGFycmF5LmMtMTQ0My0vKipcbmxpYi94YXJyYXkuYzoxNDQ0OiAqIHhhc19maW5kX21hcmtlZCgpIC0gRmluZCB0aGUgbmV4dCBtYXJrZWQgZW50cnkgaW4gdGhlIFhBcnJheS5cbmxpYi94YXJyYXkuYy0xNDQ1LSAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXG4tLVxubGliL3hhcnJheS5jLTE0NjMtICovXG5saWIveGFycmF5LmM6MTQ2NDp2b2lkICp4YXNfZmluZF9tYXJrZWQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4LCB4YV9tYXJrX3QgbWFyaylcbmxpYi94YXJyYXkuYy0xNDY1LXtcbi0tXG5saWIveGFycmF5LmMtMTUxMS1cbmxpYi94YXJyYXkuYzoxNTEyOlx0XHRvZmZzZXQgPSB4YXNfZmluZF9jaHVuayh4YXMsIGFkdmFuY2UsIG1hcmspO1xubGliL3hhcnJheS5jLTE1MTMtXHRcdGlmIChvZmZzZXQgXHUwMDNlIHhhcy1cdTAwM2V4YV9vZmZzZXQpIHtcbi0tXG5saWIveGFycmF5LmMtMTU0Mi19XG5saWIveGFycmF5LmM6MTU0MzpFWFBPUlRfU1lNQk9MX0dQTCh4YXNfZmluZF9tYXJrZWQpO1xubGliL3hhcnJheS5jLTE1NDQtXG5saWIveGFycmF5LmMtMTU0NS0vKipcbmxpYi94YXJyYXkuYzoxNTQ2OiAqIHhhc19maW5kX2NvbmZsaWN0KCkgLSBGaW5kIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW4gYSByYW5nZS5cbmxpYi94YXJyYXkuYy0xNTQ3LSAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXG4tLVxubGliL3hhcnJheS5jLTE1NTMtICovXG5saWIveGFycmF5LmM6MTU1NDp2b2lkICp4YXNfZmluZF9jb25mbGljdChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbmxpYi94YXJyYXkuYy0xNTU1LXtcbi0tXG5saWIveGFycmF5LmMtMTYwMy19XG5saWIveGFycmF5LmM6MTYwNDpFWFBPUlRfU1lNQk9MX0dQTCh4YXNfZmluZF9jb25mbGljdCk7XG5saWIveGFycmF5LmMtMTYwNS1cbi0tXG5saWIveGFycmF5LmM9MTk4Nz1pbnQgX194YV9hbGxvYyhzdHJ1Y3QgeGFycmF5ICp4YSwgdTMyICppZCwgdm9pZCAqZW50cnksXG4tLVxubGliL3hhcnJheS5jLTIwMDEtXHRcdHhhcy54YV9pbmRleCA9IGxpbWl0Lm1pbjtcbmxpYi94YXJyYXkuYzoyMDAyOlx0XHR4YXNfZmluZF9tYXJrZWQoXHUwMDI2eGFzLCBsaW1pdC5tYXgsIFhBX0ZSRUVfTUFSSyk7XG5saWIveGFycmF5LmMtMjAwMy1cdFx0aWYgKHhhcy54YV9ub2RlID09IFhBU19SRVNUQVJUKVxuLS1cbmxpYi94YXJyYXkuYz0yMTcyPUVYUE9SVF9TWU1CT0woeGFfY2xlYXJfbWFyayk7XG4tLVxubGliL3hhcnJheS5jLTIxODUtICogZW50cmllcyB3aGljaCBhcmUgYmVpbmcgc2ltdWx0YW5lb3VzbHkgYWRkZWQuICBJdCB3aWxsIG5vdCByZXR1cm4gYW5cbmxpYi94YXJyYXkuYzoyMTg2OiAqICVYQV9SRVRSWV9FTlRSWTsgaWYgeW91IG5lZWQgdG8gc2VlIHJldHJ5IGVudHJpZXMsIHVzZSB4YXNfZmluZCgpLlxubGliL3hhcnJheS5jLTIxODctICpcbi0tXG5saWIveGFycmF5LmM9MjE5MT12b2lkICp4YV9maW5kKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXG4tLVxubGliL3hhcnJheS5jLTIxOTktXHRcdGlmICgoX19mb3JjZSB1bnNpZ25lZCBpbnQpZmlsdGVyIFx1MDAzYyBYQV9NQVhfTUFSS1MpXG5saWIveGFycmF5LmM6MjIwMDpcdFx0XHRlbnRyeSA9IHhhc19maW5kX21hcmtlZChcdTAwMjZ4YXMsIG1heCwgZmlsdGVyKTtcbmxpYi94YXJyYXkuYy0yMjAxLVx0XHRlbHNlXG5saWIveGFycmF5LmM6MjIwMjpcdFx0XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgbWF4KTtcbmxpYi94YXJyYXkuYy0yMjAzLVx0fSB3aGlsZSAoeGFzX3JldHJ5KFx1MDAyNnhhcywgZW50cnkpKTtcbi0tXG5saWIveGFycmF5LmM9MjIxMj1zdGF0aWMgYm9vbCB4YXNfc2libGluZyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5saWIveGFycmF5LmMtMjIzNS0gKiB3aGljaCBhcmUgYmVpbmcgc2ltdWx0YW5lb3VzbHkgYWRkZWQuICBJdCB3aWxsIG5vdCByZXR1cm4gYW5cbmxpYi94YXJyYXkuYzoyMjM2OiAqICVYQV9SRVRSWV9FTlRSWTsgaWYgeW91IG5lZWQgdG8gc2VlIHJldHJ5IGVudHJpZXMsIHVzZSB4YXNfZmluZCgpLlxubGliL3hhcnJheS5jLTIyMzctICpcbi0tXG5saWIveGFycmF5LmM9MjI0MT12b2lkICp4YV9maW5kX2FmdGVyKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXG4tLVxubGliL3hhcnJheS5jLTIyNTItXHRcdGlmICgoX19mb3JjZSB1bnNpZ25lZCBpbnQpZmlsdGVyIFx1MDAzYyBYQV9NQVhfTUFSS1MpXG5saWIveGFycmF5LmM6MjI1MzpcdFx0XHRlbnRyeSA9IHhhc19maW5kX21hcmtlZChcdTAwMjZ4YXMsIG1heCwgZmlsdGVyKTtcbmxpYi94YXJyYXkuYy0yMjU0LVx0XHRlbHNlXG5saWIveGFycmF5LmM6MjI1NTpcdFx0XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgbWF4KTtcbmxpYi94YXJyYXkuYy0yMjU2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAwNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYYXJyYXkgTW9kdWxlIFRlc3RpbmcgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgeGFycmF5IHRlc3Qgc2l0dWF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBjb21wcmVoZW5zaXZlbHkgY292ZXJpbmcgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgc28gSSYjMzk7bGwgY2hlY2sgYHRlc3RfeGFycmF5LmNgIGFzIHdlbGwuIFJpZ2h0LCB0aGUgdGVzdHMgaW4gYGxpYi90ZXN0X3hhcnJheS5jYCBhcmUgdGllZCB0byB0aGF0IGBDT05GSUdfVEVTVF9YQVJSQVlgIG1vZHVsZSwgc28gdGhhdCYjMzk7cyB3aGVyZSB0aGUgcHJpbWFyeSBzZWxmLWNoZWNrcyBhcmUgaGFwcGVuaW5nLgoKTXkgZm9jdXMgZm9yIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBkZWZpbml0ZWx5IGJlIG9uOgoqICAgYHhhc19maW5kYAoqICAgYHhhX2ZpbmRgCiogICBgeGFfZmluZF9hZnRlcmAKCkJ1dCBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrLCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcml0aWNhbCB0byBjb3Zlcj8KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBicm9hZGVyIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gUGVyaGFwcyBJIG5lZWQgdG8gY2hlY2sgaWYgYGZpbGVtYXBfcmFuZ2VfaGFzX3BhZ2VgIG9yIGBmaW5kX3N3YXBfZW50cnlgIHV0aWxpemUgYHhhc19maW5kYC4gVGhhdCB3b3VsZCBiZSBhbiBpbXBvcnRhbnQgYWRkaXRpb24gdG8gbXkgdW5kZXJzdGFuZGluZy4KCkEgcXVpY2sgYW5kIGRpcnR5IGNoZWNrIHdvdWxkIGJlIHRvIHNpbXBseSBgZ3JlcGAgYWNyb3NzIHRoZSBgbW0vYCBkaXJlY3RvcnkgZm9yIGFueSBjYWxscyB0byBgeGFzX2ZpbmRgLiBUaGF0IHNob3VsZCBxdWlja2x5IHVuY292ZXIgYW55IHVzYWdlcyB0aGF0IEkgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4YXNfZmluZFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmM9NDc5PWJvb2wgZmlsZW1hcF9yYW5nZV9oYXNfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtNDkwLVx0Zm9yICg7Oykge1xubW0vZmlsZW1hcC5jOjQ5MTpcdFx0Zm9saW8gPSB4YXNfZmluZChcdTAwMjZ4YXMsIG1heCk7XG5tbS9maWxlbWFwLmMtNDkyLVx0XHRpZiAoeGFzX3JldHJ5KFx1MDAyNnhhcywgZm9saW8pKVxuLS1cbm1tL2ZpbGVtYXAuYz0yMDc4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmaW5kX2dldF9lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgcGdvZmZfdCBtYXgsXG4tLVxubW0vZmlsZW1hcC5jLTIwODQtXHRpZiAobWFyayA9PSBYQV9QUkVTRU5UKVxubW0vZmlsZW1hcC5jOjIwODU6XHRcdGZvbGlvID0geGFzX2ZpbmQoeGFzLCBtYXgpO1xubW0vZmlsZW1hcC5jLTIwODYtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjMzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgU2VhcmNoIFRlcm1zIGZvciBgeGFfZmluZGAgRnVuY3Rpb25zKioKClJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGVzZSBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdlJiMzOTtyZSB0YXJnZXRpbmcgdGhlIFhBcnJheSBkYXRhIHN0cnVjdHVyZSBhbmQgaXRzIHNlYXJjaCBmdW5jdGlvbmFsaXRpZXMuJiMzNDsgVGhlIGZhY3QgdGhhdCB3ZSYjMzk7cmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGB4YV9maW5kKGAgYW5kIGB4YV9maW5kX2FmdGVyKGAgc3Ryb25nbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIGRpZ2dpbmcgaW50byB0aGUgY29yZSBzZWFyY2ggaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBYQXJyYXkgY29kZSBiYXNlLgoKV2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIG90aGVyIGB4YV9gIGZ1bmN0aW9ucywgYW5kIG9ubHkgdGhvc2Ugd2hpY2ggcGVydGFpbiB0byBmaW5kaW5nIGFyZSBvZiBpbnRlcmVzdC4gVGhpcyB0ZWxscyBtZSB0aGF0IHdlIGFyZSBpbnRlcmVzdGVkIGluIGVpdGhlciBhIGZ1bmN0aW9uIGNhbGwgb3IgaW1wbGVtZW50YXRpb24gb2YgdGhvc2Ugc2VhcmNoIGZ1bmN0aW9uYWxpdGllcy4gCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcYnhhX2ZpbmRcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTg4PWJ5IGNhbGxpbmcgeGFfZm9yX2VhY2goKSwgeGFfZm9yX2VhY2hfc3RhcnQoKSBvciB4YV9mb3JfZWFjaF9yYW5nZSgpLlxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0Ojg5OllvdSBtYXkgcHJlZmVyIHRvIHVzZSB4YV9maW5kKCkgb3IgeGFfZmluZF9hZnRlcigpIHRvIG1vdmUgdG8gdGhlIG5leHRcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC05MC1wcmVzZW50IGVudHJ5IGluIHRoZSBYQXJyYXkuXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTE5NT1UYWtlcyBSQ1UgcmVhZCBsb2NrOlxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC0xOTktICogeGFfZm9yX2VhY2hfcmFuZ2UoKVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjIwMDogKiB4YV9maW5kKClcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC0yMDEtICogeGFfZmluZF9hZnRlcigpXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTQxOT1Zb3UgY2FuIHNlYXJjaCBmb3IgdGhlIG5leHQgcHJlc2VudCBlbnRyeSB1c2luZyB4YXNfZmluZCgpLiAgVGhpc1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjQyMDppcyB0aGUgZXF1aXZhbGVudCBvZiBib3RoIHhhX2ZpbmQoKSBhbmQgeGFfZmluZF9hZnRlcigpO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0LTQyMS1pZiB0aGUgY3Vyc29yIGhhcyBiZWVuIHdhbGtlZCB0byBhbiBlbnRyeSwgdGhlbiBpdCB3aWxsIGZpbmQgdGhlIG5leHRcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0PTc2PXhhX2Zvcl9lYWNoKCnjgIF4YV9mb3JfZWFjaF9zdGFydCgp5oiWeGFfZm9yX2VhY2hfcmFuZ2UoKeadpemBjeWOhlhBcnJheeS4reeahOeOsOacieadoeebruOAguS9oFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdDo3Nzrlj6/og73mm7TllpzmrKLkvb/nlKh4YV9maW5kKCnmiJZ4YV9maW5kX2FmdGVyKCnmnaXnp7vliqjliLBYQXJyYXnkuK3nmoTkuIvkuIDkuKrlvZPliY3mnaHnm67jgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtNzgtXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdD0xMzU9eGFfc3RvcmUoKSwgeGFfY21weGNoZygpLCB4YV9hbGxvYygpLCB4YV9yZXNlcnZlKCnlkox4YV9pbnNlcnQoKeWHveaVsOaOpeWPl+S4gOS4qmdmcF905Y+C5pWw77yM5LulXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0xNTYtICogeGFfZm9yX2VhY2hfcmFuZ2UoKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdDoxNTc6ICogeGFfZmluZCgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTE1OC0gKiB4YV9maW5kX2FmdGVyKClcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0PTMxNT14YXNfbG9hZCgp5Lya5bC95Y+v6IO95Zyw5bCGeGFfc3RhdGXnp7vliqjliLDor6XmnaHnm67pmYTov5HjgILlpoLmnpzkvaDnn6XpgZN4YV9zdGF0ZeW3sue7j+enu+WKqOWIsOS6huivpeadoeebru+8jOW5tuS4lOmcgOimgeajgOafpVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzIxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdDozMjI65L2g5Y+v5Lul5L2/55SoeGFzX2ZpbmQoKeaQnOe0ouS4i+S4gOS4quW9k+WJjeadoeebruOAgui/meebuOW9k+S6jnhhX2ZpbmQoKeWSjHhhX2ZpbmRfYWZ0ZXIoKe+8m+WmguaenOWFieagh+W3sue7j+enu+WKqOWIsOS6hlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0zMjMt5LiA5Liq5p2h55uu77yM6YKj5LmI5a6D5bCG5om+5Yiw5b2T5YmN5byV55So55qE5p2h55uu5LmL5ZCO55qE5LiL5LiA5Liq5p2h55uu44CC5aaC5p6c5rKh5pyJ77yM5a6D5bCG6L+U5ZueeGFfc3RhdGXntKLlvJXlpITnmoTmnaHnm67jgILkvb/nlKhcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MzUwPXN0cnVjdCBkcGxsX3Bpbl9yZWYgKmRwbGxfeGFfcmVmX2RwbGxfZmlyc3Qoc3RydWN0IHhhcnJheSAqeGFfcmVmcylcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzU0LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM1NTpcdHJlZiA9IHhhX2ZpbmQoeGFfcmVmcywgXHUwMDI2aSwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNTYtXHRXQVJOX09OKCFyZWYpO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yMC0jZGVmaW5lIHhhX2Zvcl9lYWNoX21hcmtlZF9zdGFydCh4YSwgaW5kZXgsIGVudHJ5LCBmaWx0ZXIsIHN0YXJ0KSBcXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjIxOlx0Zm9yIChpbmRleCA9IHN0YXJ0LCBlbnRyeSA9IHhhX2ZpbmQoeGEsIFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIGZpbHRlcik7IFxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMjItXHQgICAgIGVudHJ5OyBlbnRyeSA9IHhhX2ZpbmRfYWZ0ZXIoeGEsIFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIGZpbHRlcikpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTEyNDA9ZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjUzLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEyNTQ6XHRyZWZfc3luY19waW4gPSB4YV9maW5kKFx1MDAyNnBpbi1cdTAwM2VyZWZfc3luY19waW5zLCBcdTAwMjZyZWZfc3luY19waW5faWR4LFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEyNTUtXHRcdFx0ICAgICAgIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3VzZXJxLmM9MTIyNz12b2lkIGFtZGdwdV91c2VycV9tZ3JfZmluaShzdHJ1Y3QgYW1kZ3B1X3VzZXJxX21nciAqdXNlcnFfbWdyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV91c2VycS5jLTEyMzMtXHRcdHhhX2xvY2soXHUwMDI2dXNlcnFfbWdyLVx1MDAzZXVzZXJxX3hhKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV91c2VycS5jOjEyMzQ6XHRcdHF1ZXVlID0geGFfZmluZChcdTAwMjZ1c2VycV9tZ3ItXHUwMDNldXNlcnFfeGEsIFx1MDAyNnF1ZXVlX2lkLCBVTE9OR19NQVgsXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdXNlcnEuYy0xMjM1LVx0XHRcdFx0WEFfUFJFU0VOVCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9zY2hlZC5jPTM4MjQ9c3RhdGljIHN0cnVjdCBwYW50aG9yX2dyb3VwICpncm91cF9mcm9tX2hhbmRsZShzdHJ1Y3QgcGFudGhvcl9ncm91cF9wb29sICpwb29sLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYy0zODI5LVx0eGFfbG9jayhcdTAwMjZwb29sLVx1MDAzZXhhKTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYzozODMwOlx0Z3JvdXAgPSBncm91cF9nZXQoeGFfZmluZChcdTAwMjZwb29sLVx1MDAzZXhhLCBcdTAwMjZncm91cF9oYW5kbGUsIGdyb3VwX2hhbmRsZSwgR1JPVVBfUkVHSVNURVJFRCkpO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9zY2hlZC5jLTM4MzEtXHR4YV91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2V4YSk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvbmV0ZGV2X3J4LmM9NDc3PXZvaWQgKmhmaTFfbmV0ZGV2X2dldF9maXJzdF9kYXRhKHN0cnVjdCBoZmkxX2RldmRhdGEgKmRkLCBpbnQgKnN0YXJ0X2lkKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL25ldGRldl9yeC5jLTQ4Mi1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL25ldGRldl9yeC5jOjQ4MzpcdHJldCA9IHhhX2ZpbmQoXHUwMDI2cngtXHUwMDNlZGV2X3RibCwgXHUwMDI2aW5kZXgsIFVJTlRfTUFYLCBYQV9QUkVTRU5UKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL25ldGRldl9yeC5jLTQ4NC1cdCpzdGFydF9pZCA9IChpbnQpaW5kZXg7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guaD03NTA9dm9pZCBtbHg1ZV90Y19jbGVhbl9mZGJfcGVlcl9mbG93cyhzdHJ1Y3QgbWx4NV9lc3dpdGNoICplc3cpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lc3dpdGNoLmgtNzY5LSNkZWZpbmUgbWx4NV9lc3dfZm9yX2VhY2hfZW50cnlfbWFya2VkKHhhLCBpbmRleCwgZW50cnksIGxhc3QsIGZpbHRlcilcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3aXRjaC5oOjc3MDpcdGZvciAoaW5kZXggPSAwLCBlbnRyeSA9IHhhX2ZpbmQoeGEsIFx1MDAyNmluZGV4LCBsYXN0LCBmaWx0ZXIpOyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guaC03NzEtXHQgICAgIGVudHJ5OyBlbnRyeSA9IHhhX2ZpbmRfYWZ0ZXIoeGEsIFx1MDAyNmluZGV4LCBsYXN0LCBmaWx0ZXIpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmM9MzgwPXN0YXRpYyBpbnQgbWx4NV9sYWdfZ2V0X21hc3Rlcl9pZHgoc3RydWN0IG1seDVfbGFnICpsZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmMtMzg3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9sYWcuYzozODg6XHRlbnRyeSA9IHhhX2ZpbmQoXHUwMDI2bGRldi1cdTAwM2VwZnMsIFx1MDAyNmlkeCwgVThfTUFYLCBNTFg1X0xBR19YQV9NQVJLX01BU1RFUik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5jLTM4OS1cdGlmICghZW50cnkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9sYWcuYz01NjI9c3RhdGljIHZvaWQgbWx4NV9sYWdfY2xlYXJfbWFzdGVyKHN0cnVjdCBtbHg1X2xhZyAqbGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5jLTU2Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmM6NTY3Olx0ZW50cnkgPSB4YV9maW5kKFx1MDAyNmxkZXYtXHUwMDNlcGZzLCBcdTAwMjZpZHgsIFU4X01BWCwgTUxYNV9MQUdfWEFfTUFSS19NQVNURVIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9sYWcuYy01NjgtXHRpZiAoIWVudHJ5KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmgtMjItI2RlZmluZSB4YV9mb3JfZWFjaF9tYXJrZWRfc3RhcnQoeGEsIGluZGV4LCBlbnRyeSwgZmlsdGVyLCBzdGFydClcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5oOjIzOlx0Zm9yIChpbmRleCA9IHN0YXJ0LCBlbnRyeSA9IHhhX2ZpbmQoeGEsIFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIGZpbHRlcik7IFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5oLTI0LVx0ICAgICBlbnRyeTsgZW50cnkgPSB4YV9maW5kX2FmdGVyKHhhLCBcdTAwMjZpbmRleCwgVUxPTkdfTUFYLCBmaWx0ZXIpKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsL3BtdC90ZWxlbWV0cnkuYz0xNzI9c3RydWN0IHRlbGVtX2VuZHBvaW50ICpwbXRfdGVsZW1fcmVnaXN0ZXJfZW5kcG9pbnQoaW50IGRldmlkKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsL3BtdC90ZWxlbWV0cnkuYy0xNzctXHRtdXRleF9sb2NrKFx1MDAyNmVwX2xvY2spO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWwvcG10L3RlbGVtZXRyeS5jOjE3ODpcdGVudHJ5ID0geGFfZmluZChcdTAwMjZ0ZWxlbV9hcnJheSwgXHUwMDI2aW5kZXgsIGluZGV4LCBYQV9QUkVTRU5UKTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsL3BtdC90ZWxlbWV0cnkuYy0xNzktXHRpZiAoIWVudHJ5KSB7XG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWwvcG10L3RlbGVtZXRyeS5jPTE5Nz1pbnQgcG10X3RlbGVtX2dldF9lbmRwb2ludF9pbmZvKGludCBkZXZpZCwgc3RydWN0IHRlbGVtX2VuZHBvaW50X2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWwvcG10L3RlbGVtZXRyeS5jLTIwNi1cdG11dGV4X2xvY2soXHUwMDI2ZXBfbG9jayk7XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbC9wbXQvdGVsZW1ldHJ5LmM6MjA3Olx0ZW50cnkgPSB4YV9maW5kKFx1MDAyNnRlbGVtX2FycmF5LCBcdTAwMjZpbmRleCwgaW5kZXgsIFhBX1BSRVNFTlQpO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWwvcG10L3RlbGVtZXRyeS5jLTIwOC1cdGlmICghZW50cnkpIHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9OTI3PXN0YXRpYyBpbnQgdmhvc3RfdnFfYXR0YWNoX3dvcmtlcihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtOTM2LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjkzNzpcdHdvcmtlciA9IHhhX2ZpbmQoXHUwMDI2ZGV2LVx1MDAzZXdvcmtlcl94YSwgXHUwMDI2aW5kZXgsIFVJTlRfTUFYLCBYQV9QUkVTRU5UKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy05MzgtXHRpZiAoIXdvcmtlciB8fCB3b3JrZXItXHUwMDNlaWQgIT0gaW5mby1cdTAwM2V3b3JrZXJfaWQpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTk2MD1zdGF0aWMgaW50IHZob3N0X2ZyZWVfd29ya2VyKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtOTY1LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjk2NjpcdHdvcmtlciA9IHhhX2ZpbmQoXHUwMDI2ZGV2LVx1MDAzZXdvcmtlcl94YSwgXHUwMDI2aW5kZXgsIFVJTlRfTUFYLCBYQV9QUkVTRU5UKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy05NjctXHRpZiAoIXdvcmtlciB8fCB3b3JrZXItXHUwMDNlaWQgIT0gaW5mby1cdTAwM2V3b3JrZXJfaWQpXG4tLVxuZnMvYnRyZnMvZGVsYXllZC1yZWYuYz0zNjc9c3RhdGljIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9oZWFkICpmaW5kX2ZpcnN0X3JlZl9oZWFkKFxuLS1cbmZzL2J0cmZzL2RlbGF5ZWQtcmVmLmMtMzczLVxuZnMvYnRyZnMvZGVsYXllZC1yZWYuYzozNzQ6XHRyZXR1cm4geGFfZmluZChcdTAwMjZkci1cdTAwM2VoZWFkX3JlZnMsIFx1MDAyNmZyb20sIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XG5mcy9idHJmcy9kZWxheWVkLXJlZi5jLTM3NS19XG4tLVxuZnMvYnRyZnMvZXh0ZW50X21hcC5jPTEyMDY9c3RhdGljIHN0cnVjdCBidHJmc19pbm9kZSAqZmluZF9maXJzdF9pbm9kZV90b19zaHJpbmsoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsXG4tLVxuZnMvYnRyZnMvZXh0ZW50X21hcC5jLTEyMTUtXG5mcy9idHJmcy9leHRlbnRfbWFwLmM6MTIxNjpcdFx0aW5vZGUgPSB4YV9maW5kKFx1MDAyNnJvb3QtXHUwMDNlaW5vZGVzLCBcdTAwMjZmcm9tLCBVTE9OR19NQVgsIFhBX1BSRVNFTlQpO1xuZnMvYnRyZnMvZXh0ZW50X21hcC5jLTEyMTctXHRcdGlmICghaW5vZGUpXG4tLVxuZnMvYnRyZnMvaW5vZGUuYz0xMDY3ND1zdHJ1Y3QgYnRyZnNfaW5vZGUgKmJ0cmZzX2ZpbmRfZmlyc3RfaW5vZGUoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBtaW5faW5vKVxuLS1cbmZzL2J0cmZzL2lub2RlLmMtMTA2ODAtXHR3aGlsZSAodHJ1ZSkge1xuZnMvYnRyZnMvaW5vZGUuYzoxMDY4MTpcdFx0aW5vZGUgPSB4YV9maW5kKFx1MDAyNnJvb3QtXHUwMDNlaW5vZGVzLCBcdTAwMjZmcm9tLCBVTE9OR19NQVgsIFhBX1BSRVNFTlQpO1xuZnMvYnRyZnMvaW5vZGUuYy0xMDY4Mi1cdFx0aWYgKCFpbm9kZSlcbi0tXG5mcy94ZnMvbGlieGZzL3hmc19ncm91cC5jPTEyMT14ZnNfZ3JvdXBfZ3JhYl9uZXh0X21hcmsoXG4tLVxuZnMveGZzL2xpYnhmcy94ZnNfZ3JvdXAuYy0xMzQtXHRyY3VfcmVhZF9sb2NrKCk7XG5mcy94ZnMvbGlieGZzL3hmc19ncm91cC5jOjEzNTpcdHhnID0geGFfZmluZChcdTAwMjZtcC1cdTAwM2VtX2dyb3Vwc1t0eXBlXS54YSwgXHUwMDI2aW5kZXgsIFVMT05HX01BWCwgbWFyayk7XG5mcy94ZnMvbGlieGZzL3hmc19ncm91cC5jLTEzNi1cdGlmICh4Zykge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MzM1OT1pbnQgY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzX2luZm8odW5zaWduZWQgbG9uZyB2YWwsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMzgyLSNkZWZpbmUgZm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkLCBpZmluZGV4KVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzM4MzpcdGZvciAoOyAoZCA9IHhhX2ZpbmQoXHUwMDI2KG5ldCktXHUwMDNlZGV2X2J5X2luZGV4LCBcdTAwMjZpZmluZGV4LFx0XHRcXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMzg0LVx0XHRcdCAgICBVTE9OR19NQVgsIFhBX1BSRVNFTlQpKTsgaWZpbmRleCYjNDM7JiM0MzspXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0zNjI9dm9pZCB4YV9jbGVhcl9tYXJrKHN0cnVjdCB4YXJyYXkgKiwgdW5zaWduZWQgbG9uZyBpbmRleCwgeGFfbWFya190KTtcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MzYzOnZvaWQgKnhhX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgKmluZGV4LFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0zNjQtXHRcdHVuc2lnbmVkIGxvbmcgbWF4LCB4YV9tYXJrX3QpIF9fYXR0cmlidXRlX18oKG5vbm51bGwoMikpKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTQyMj1zdGF0aWMgaW5saW5lIGJvb2wgeGFfbWFya2VkKGNvbnN0IHN0cnVjdCB4YXJyYXkgKnhhLCB4YV9tYXJrX3QgbWFyaylcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTQ1Mi1cdGZvciAoaW5kZXggPSBzdGFydCxcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo0NTM6XHQgICAgIGVudHJ5ID0geGFfZmluZCh4YSwgXHUwMDI2aW5kZXgsIGxhc3QsIFhBX1BSRVNFTlQpO1x0XHRcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC00NTQtXHQgICAgIGVudHJ5O1x0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTUzMS0jZGVmaW5lIHhhX2Zvcl9lYWNoX21hcmtlZCh4YSwgaW5kZXgsIGVudHJ5LCBmaWx0ZXIpIFxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjUzMjpcdGZvciAoaW5kZXggPSAwLCBlbnRyeSA9IHhhX2ZpbmQoeGEsIFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIGZpbHRlcik7IFxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTUzMy1cdCAgICAgZW50cnk7IGVudHJ5ID0geGFfZmluZF9hZnRlcih4YSwgXHUwMDI2aW5kZXgsIFVMT05HX01BWCwgZmlsdGVyKSlcbi0tXG5pb191cmluZy9rYnVmLmM9NDY4PXZvaWQgaW9fZGVzdHJveV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuLS1cbmlvX3VyaW5nL2tidWYuYy00NzUtXHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2Y3R4LVx1MDAzZW1tYXBfbG9jaykge1xuaW9fdXJpbmcva2J1Zi5jOjQ3NjpcdFx0XHRibCA9IHhhX2ZpbmQoXHUwMDI2Y3R4LVx1MDAzZWlvX2JsX3hhLCBcdTAwMjZpbmRleCwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKTtcbmlvX3VyaW5nL2tidWYuYy00NzctXHRcdFx0aWYgKGJsKVxuLS1cbmlvX3VyaW5nL3pjcnguYz0xMDMxPXZvaWQgaW9fdGVybWluYXRlX3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvemNyeC5jLTEwMzktXHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2Y3R4LVx1MDAzZW1tYXBfbG9jaylcbmlvX3VyaW5nL3pjcnguYzoxMDQwOlx0XHRcdGlmcSA9IHhhX2ZpbmQoXHUwMDI2Y3R4LVx1MDAzZXpjcnhfY3R4cywgXHUwMDI2aWQsIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XG5pb191cmluZy96Y3J4LmMtMTA0MS1cdFx0aWYgKCFpZnEpXG4tLVxuaW9fdXJpbmcvemNyeC5jPTEwNTE9dm9pZCBpb191bnJlZ2lzdGVyX3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvemNyeC5jLTEwNjAtXG5pb191cmluZy96Y3J4LmM6MTA2MTpcdFx0XHRpZnEgPSB4YV9maW5kKFx1MDAyNmN0eC1cdTAwM2V6Y3J4X2N0eHMsIFx1MDAyNmlkLCBVTE9OR19NQVgsIFhBX1BSRVNFTlQpO1xuaW9fdXJpbmcvemNyeC5jLTEwNjItXHRcdFx0aWYgKGlmcSkge1xuLS1cbmxpYi9pZHIuYz00OTM9aW50IGlkYV9maW5kX2ZpcnN0X3JhbmdlKHN0cnVjdCBpZGEgKmlkYSwgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heClcbi0tXG5saWIvaWRyLmMtNTA5LVxubGliL2lkci5jOjUxMDpcdGVudHJ5ID0geGFfZmluZChcdTAwMjZpZGEtXHUwMDNleGEsIFx1MDAyNmluZGV4LCBtYXggLyBJREFfQklUTUFQX0JJVFMsIFhBX1BSRVNFTlQpO1xubGliL2lkci5jLTUxMS1cdGlmICghZW50cnkpIHtcbi0tXG5saWIvdGVzdF94YXJyYXkuYz0xMTgwPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgb3JkZXIpXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTE5MS1cdGluZGV4ID0gMDtcbmxpYi90ZXN0X3hhcnJheS5jOjExOTI6XHRYQV9CVUdfT04oeGEsIHhhX2ZpbmQoeGEsIFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIFhBX1BSRVNFTlQpICE9XG5saWIvdGVzdF94YXJyYXkuYy0xMTkzLVx0XHRcdHhhX21rX3ZhbHVlKG11bHRpKSk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTE5NS1cdGluZGV4ID0gbXVsdGkgJiM0MzsgMTtcbmxpYi90ZXN0X3hhcnJheS5jOjExOTY6XHRYQV9CVUdfT04oeGEsIHhhX2ZpbmQoeGEsIFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIFhBX1BSRVNFTlQpICE9XG5saWIvdGVzdF94YXJyYXkuYy0xMTk3LVx0XHRcdHhhX21rX3ZhbHVlKG11bHRpKSk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MTMxMT1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kXzEoc3RydWN0IHhhcnJheSAqeGEpXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTMyOS1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBrO1xubGliL3Rlc3RfeGFycmF5LmM6MTMzMDpcdFx0XHRcdHZvaWQgKmVudHJ5ID0geGFfZmluZCh4YSwgXHUwMDI2aW5kZXgsIFVMT05HX01BWCxcbmxpYi90ZXN0X3hhcnJheS5jLTEzMzEtXHRcdFx0XHRcdFx0XHRcdFhBX1BSRVNFTlQpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTEzMzktXHRcdFx0XHRpbmRleCA9IGs7XG5saWIvdGVzdF94YXJyYXkuYzoxMzQwOlx0XHRcdFx0ZW50cnkgPSB4YV9maW5kKHhhLCBcdTAwMjZpbmRleCwgVUxPTkdfTUFYLFxubGliL3Rlc3RfeGFycmF5LmMtMTM0MS1cdFx0XHRcdFx0XHRcdFx0WEFfTUFSS18wKTtcbi0tXG5saWIveGFycmF5LmM9MjE3Mj1FWFBPUlRfU1lNQk9MKHhhX2NsZWFyX21hcmspO1xuLS1cbmxpYi94YXJyYXkuYy0yMTc0LS8qKlxubGliL3hhcnJheS5jOjIxNzU6ICogeGFfZmluZCgpIC0gU2VhcmNoIHRoZSBYQXJyYXkgZm9yIGFuIGVudHJ5LlxubGliL3hhcnJheS5jLTIxNzYtICogQHhhOiBYQXJyYXkuXG4tLVxubGliL3hhcnJheS5jLTIxOTAtICovXG5saWIveGFycmF5LmM6MjE5MTp2b2lkICp4YV9maW5kKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXG5saWIveGFycmF5LmMtMjE5Mi1cdFx0XHR1bnNpZ25lZCBsb25nIG1heCwgeGFfbWFya190IGZpbHRlcilcbi0tXG5tbS9zaG1lbS5jPTE4NjQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3NobWVtLmMtMTg5MS1cdFx0ICovXG5tbS9zaG1lbS5jOjE4OTI6XHRcdGlmICgheGFfZmluZChcdTAwMjZtYXBwaW5nLVx1MDAzZWlfcGFnZXMsIFx1MDAyNmFsaWduZWRfaW5kZXgsXG5tbS9zaG1lbS5jLTE4OTMtXHRcdFx0ICAgICBhbGlnbmVkX2luZGV4ICYjNDM7IHBhZ2VzIC0gMSwgWEFfUFJFU0VOVCkpXG4tLVxubW0vc2htZW0uYz0xOTIzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX2FsbG9jX2FuZF9hZGRfZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc2htZW0uYy0xOTcwLVx0aWYgKGVycm9yKSB7XG5tbS9zaG1lbS5jOjE5NzE6XHRcdGlmICh4YV9maW5kKFx1MDAyNm1hcHBpbmctXHUwMDNlaV9wYWdlcywgXHUwMDI2aW5kZXgsXG5tbS9zaG1lbS5jLTE5NzItXHRcdFx0XHRpbmRleCAmIzQzOyBwYWdlcyAtIDEsIFhBX1BSRVNFTlQpKSB7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTEyNz1uZXRkZXZfeGFfZmluZF9sb2NrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuYy0xMTM0LVx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvY29yZS9kZXYuYzoxMTM1Olx0XHRkZXYgPSB4YV9maW5kKFx1MDAyNm5ldC1cdTAwM2VkZXZfYnlfaW5kZXgsIGluZGV4LCBVTE9OR19NQVgsIFhBX1BSRVNFTlQpO1xubmV0L2NvcmUvZGV2LmMtMTEzNi1cdFx0aWYgKCFkZXYpIHtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMTUyPW5ldGRldl94YV9maW5kX2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTE1OS1cdFx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2NvcmUvZGV2LmM6MTE2MDpcdFx0ZGV2ID0geGFfZmluZChcdTAwMjZuZXQtXHUwMDNlZGV2X2J5X2luZGV4LCBpbmRleCwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKTtcbm5ldC9jb3JlL2Rldi5jLTExNjEtXHRcdGlmICghZGV2KSB7XG4tLVxubmV0L2RldmxpbmsvY29yZS5jPTE5PXN0YXRpYyBzdHJ1Y3QgZGV2bGluayAqZGV2bGlua3NfeGFfZ2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTIzLVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2RldmxpbmsvY29yZS5jOjI0Olx0ZGV2bGluayA9IHhhX2ZpbmQoXHUwMDI2ZGV2bGlua3MsIFx1MDAyNmluZGV4LCBpbmRleCwgREVWTElOS19SRUdJU1RFUkVEKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNS1cdGlmICghZGV2bGluayB8fCAhZGV2bGlua190cnlfZ2V0KGRldmxpbmspKVxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYz0xOTI9c3RhdGljIHN0cnVjdCBkZXZsaW5rX3JlbCAqZGV2bGlua19yZWxfZmluZCh1bnNpZ25lZCBsb25nIHJlbF9pbmRleClcbm5ldC9kZXZsaW5rL2NvcmUuYy0xOTMte1xubmV0L2RldmxpbmsvY29yZS5jOjE5NDpcdHJldHVybiB4YV9maW5kKFx1MDAyNmRldmxpbmtfcmVscywgXHUwMDI2cmVsX2luZGV4LCByZWxfaW5kZXgsXG5uZXQvZGV2bGluay9jb3JlLmMtMTk1LVx0XHQgICAgICAgREVWTElOS19SRUxfSU5fVVNFKTtcbi0tXG5uZXQvZGV2bGluay9jb3JlLmM9MzQ1PXN0YXRpYyBzdHJ1Y3QgZGV2bGluayAqX19kZXZsaW5rc194YV9maW5kX2dldChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTM1Mi1yZXRyeTpcbm5ldC9kZXZsaW5rL2NvcmUuYzozNTM6XHRkZXZsaW5rID0geGFfZmluZChcdTAwMjZkZXZsaW5rcywgaW5kZXhwLCBlbmQsIERFVkxJTktfUkVHSVNURVJFRCk7XG5uZXQvZGV2bGluay9jb3JlLmMtMzU0LVx0aWYgKCFkZXZsaW5rKVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jPTQ0MT1yc3NfZHVtcF9vbmVfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbi0tXG5uZXQvZXRodG9vbC9yc3MuYy00NTYtXG5uZXQvZXRodG9vbC9yc3MuYzo0NTc6XHRmb3IgKDsgeGFfZmluZChcdTAwMjZkZXYtXHUwMDNlZXRodG9vbC1cdTAwM2Vyc3NfY3R4LCBcdTAwMjZjdHgtXHUwMDNlY3R4X2lkeCxcbm5ldC9ldGh0b29sL3Jzcy5jLTQ1OC1cdFx0ICAgICAgIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7IGN0eC1cdTAwM2VjdHhfaWR4JiM0MzsmIzQzOykge1xuLS1cbm5ldC9zaGFwZXIvc2hhcGVyLmM9ODUzPWludCBuZXRfc2hhcGVyX25sX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvc2hhcGVyL3NoYXBlci5jLTg3MC1cbm5ldC9zaGFwZXIvc2hhcGVyLmM6ODcxOlx0Zm9yICg7IChzaGFwZXIgPSB4YV9maW5kKFx1MDAyNmhpZXJhcmNoeS1cdTAwM2VzaGFwZXJzLCBcdTAwMjZjdHgtXHUwMDNlc3RhcnRfaW5kZXgsXG5uZXQvc2hhcGVyL3NoYXBlci5jLTg3Mi1cdFx0XHRcdCBVMzJfTUFYLCBYQV9QUkVTRU5UKSk7XG4tLVxucnVzdC9rZXJuZWwveGFycmF5LnJzPTExMT0gICAgZm4gaXRlcihcdTAwMjZzZWxmKSAtXHUwMDNlIGltcGwgSXRlcmF0b3JcdTAwM2NJdGVtID0gTm9uTnVsbFx1MDAzY2Nfdm9pZFx1MDAzZVx1MDAzZSAmIzQzOyAmIzM5O18ge1xuLS1cbnJ1c3Qva2VybmVsL3hhcnJheS5ycy0xMTUtICAgICAgICBpdGVyOjpvbmNlKHVuc2FmZSB7XG5ydXN0L2tlcm5lbC94YXJyYXkucnM6MTE2OiAgICAgICAgICAgIGJpbmRpbmdzOjp4YV9maW5kKHNlbGYueGEuZ2V0KCksIFx1MDAyNm11dCBpbmRleCwgdXNpemU6Ok1BWCwgYmluZGluZ3M6OlhBX1BSRVNFTlQpXG5ydXN0L2tlcm5lbC94YXJyYXkucnMtMTE3LSAgICAgICAgfSlcbi0tXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbXVsdGlvcmRlci5jPTI0MD1zdGF0aWMgdm9pZCAqbG9hZF93b3JrZXIodm9pZCAqcHRyKVxuLS1cbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tdWx0aW9yZGVyLmMtMjQ4LVx0XHRhc3NlcnQoIXhhX2lzX2ludGVybmFsKGl0ZW0pKTtcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tdWx0aW9yZGVyLmM6MjQ5Olx0XHRpdGVtID0geGFfZmluZChwdHIsIFx1MDAyNmZpbmRfaW5kZXgsIGluZGV4LCBYQV9NQVJLXzEpO1xudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL211bHRpb3JkZXIuYy0yNTAtXHRcdGFzc2VydCgheGFfaXNfaW50ZXJuYWwoaXRlbSkpO1xuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9MjA5PXN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTIxMy1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6MjE0Olx0aWYgKHhhX2ZpbmQoXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgXHUwMDI2c3RhcnQsIGVuZCAtIDEsIFhBX1BSRVNFTlQpKSB7XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTIxNS1cdFx0S1ZNX01NVV9MT0NLKGt2bSk7XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz02NDM9aW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjc3LVx0aWYgKCF4YV9lbXB0eShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzKSBcdTAwMjZcdTAwMjZcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6Njc4Olx0ICAgIHhhX2ZpbmQoXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgXHUwMDI2c3RhcnQsIGVuZCAtIDEsIFhBX1BSRVNFTlQpKSB7XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY3OS1cdFx0ciA9IC1FRVhJU1Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDU3CgkJCQkJCQlvdXRwdXQ6IDEzMgoJCQkJCQkJdGhvdWdodHM6IDU3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHhhc19maW5kYCBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIHRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBjbGVhcmx5IGB4YXNfZmluZGAsIGB4YV9maW5kYCwgYW5kIGB4YV9maW5kX2FmdGVyYC4gTGV0JiMzOTtzIHplcm8gaW4gb24gdGhvc2UuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgaGFuZGxpbmcgbXVsdGktb3JkZXIgWEFycmF5cywgYW5kIHNwZWNpZmljYWxseSBob3cgYHhhc19maW5kYCBkZWFscyB3aXRoIHRoZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBFbmFibGVDb25maWdzIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLgoKSSBzZWUgYFhBUlJBWV9NVUxUSWAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZyBhcyBpdCYjMzk7cyBzZWxlY3RlZCBieSBzZXZlcmFsLCBsaWtlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgSFVHRVRMQl9QQUdFYC4gQnV0LCBpbXBvcnRhbnRseSwgYHhhc19maW5kYCBpcyBjb21waWxlZCBpbnRvIGB4YXJyYXkub2AsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGtlcm5lbCBjb3JlLiBUaGF0IG1ha2VzIHRoaXMgcG90ZW50aWFsbHkgdmVyeSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIGxvZ2ljIHRoYXQgaGFuZGxlcyB0aGVzZSBtdWx0aS1vcmRlciBjYXNlcyBhcHBlYXJzIHRvIGJlIGluIHRoZSBjaGVjazogYGlmICgheGFzLSZndDt4YV9ub2RlLSZndDtzaGlmdClgIHZzIGB4YXMtJmd0O3hhX29mZnNldCAhPSBnZXRfb2Zmc2V0KC4uLilgLiBTZWVtcyBsaWtlIHRoZSBjb2RlIGlzIHRyeWluZyB0byBoYW5kbGUgdGhlIGBzaGlmdCAmZ3Q7IDBgIHBhdGhzIGFuZCBtdWx0aS1pbmRleCBYQXJyYXlzIGNvcnJlY3RseS4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGBYQVJSQVlfTVVMVElgIHJlbGF0aW9uc2hpcC4gSXQmIzM5O3MgdmlzaWJsZSBpbiBgbGliL0tjb25maWdgLCBidXQgbm90IGRpcmVjdGx5IHVzZXItc2VsZWN0YWJsZSB2aWEgYG1lbnVjb25maWdgLCB1bmxlc3MgaXQmIzM5O3Mgc2VsZWN0ZWQgYnkgb3RoZXIgc3ltYm9scywgYnV0IGl0IGNhbiBiZSBzZXQgYnkgY29uZmlncyBzdWNoIGFzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIG9yIGBIVUdFVExCRlNgIC4gU28sIHNwZWNpZnlpbmcgdGhvc2UgbWlnaHQgYmUgdGhlIHJpZ2h0IGFwcHJvYWNoLiBJdCBzZWVtcyB0byBlbmFibGUgdGhvc2UgbXVsdGktb3JkZXIgeGFycmF5IHBhdGhzIHdoZXJlIGBzaGlmdCAmZ3Q7IDBgLgoKT2theSwgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IGluIHRob3NlIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIHNldC1yZXN1bHRzIHBhcmFtZXRlcnMgY29ycmVjdC4gVGhlIGZ1enppbmcgdmVyZGljdCBpcywgb2YgY291cnNlLCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGJlY2F1c2UgdGhlIHBhdGNoIGNoYW5nZXMgYHhhc19maW5kYCBpbiBgbGliL3hhcnJheS5jYCB0byBoYW5kbGUgdGhlIGB4YXMtJmd0O3hhX29mZnNldGAgcHJvcGVybHkgd2hlbiB0cmF2ZXJzaW5nIG11bHRpLW9yZGVyIFhBcnJheSBlbnRyaWVzIHdoZXJlIGB4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0YCBpcyBub24temVyby4gQW5kIHRoaXMgaXMgaW4gY29yZSBkYXRhIHN0cnVjdHVyZSBsb2dpYyB0aGF0JiMzOTtzIGhpdCBkdXJpbmcgcGFnZSBjYWNoZSBvcGVyYXRpb25zLCBzaG1lbSBsb29rdXBzLCBldGMuIFNvdW5kcyBsaWtlIGEgZ29vZCB0YXJnZXQuCgpUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNvcnJlY3Q6IGB4YXNfZmluZGAsIGB4YV9maW5kYCwgYHhhX2ZpbmRfYWZ0ZXJgLiBBbmQgYmFzZWQgb24gZXZlcnl0aGluZyBhYm92ZSwgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBgWEFSUkFZX01VTFRJYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSB0aGluayBJJiMzOTt2ZSBnb3QgdGhpcy4gVGltZSB0byBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGVuIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hBUlJBWV9NVUxUSSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDssCiAgICAmIzM0O3hhX2ZpbmQmIzM0OywKICAgICYjMzQ7eGFfZmluZF9hZnRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXRlcmF0aW9uIG9mZnNldCBjYWxjdWxhdGlvbiBpbiB4YXNfZmluZCgpIHdpdGhpbiBsaWIveGFycmF5LmMgZm9yIG11bHRpLW9yZGVyIG5vZGVzICh3aGVyZSBzaGlmdCBcdTAwM2UgMCkuIFRoaXMgaXMgY29yZSBkYXRhIHN0cnVjdHVyZSBsb2dpYyBleGVyY2lzZWQgYWNyb3NzIG1lbW9yeSBtYW5hZ2VtZW50IChwYWdlIGNhY2hlLCBzaG1lbSwgZm9saW8gbG9va3VwcykgYW5kIHN1YnN5c3RlbSBpdGVyYXRvcnMsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hBUlJBWV9NVUxUSSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDssCiAgICAmIzM0O3hhX2ZpbmQmIzM0OywKICAgICYjMzQ7eGFfZmluZF9hZnRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXRlcmF0aW9uIG9mZnNldCBjYWxjdWxhdGlvbiBpbiB4YXNfZmluZCgpIHdpdGhpbiBsaWIveGFycmF5LmMgZm9yIG11bHRpLW9yZGVyIG5vZGVzICh3aGVyZSBzaGlmdCBcdTAwM2UgMCkuIFRoaXMgaXMgY29yZSBkYXRhIHN0cnVjdHVyZSBsb2dpYyBleGVyY2lzZWQgYWNyb3NzIG1lbW9yeSBtYW5hZ2VtZW50IChwYWdlIGNhY2hlLCBzaG1lbSwgZm9saW8gbG9va3VwcykgYW5kIHN1YnN5c3RlbSBpdGVyYXRvcnMsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgb2Zmc2V0IGNhbGN1bGF0aW9uIGxvZ2ljIGluIHhhc19maW5kKCkgd2l0aGluIHRoZSBYQXJyYXkgZGF0YSBzdHJ1Y3R1cmUgaW1wbGVtZW50YXRpb24gKGxpYi94YXJyYXkuYykgYW5kIGFkZHMgYSB0ZXN0IGNhc2UgdG8gdGhlIFhBcnJheSBzZWxmLXRlc3Qgc3VpdGUgKGxpYi90ZXN0X3hhcnJheS5jKS5cblxuVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgdHJlZSB0cmF2ZXJzYWwgaW5kZXhpbmcvb2Zmc2V0IGFyaXRobWV0aWMgZm9yIG11bHRpLWluZGV4IGVudHJpZXMgKFhBX1NUQVRFIC8geGFfbm9kZSBvZmZzZXQgY2FsY3VsYXRpb25zKS4gTm8gbmV3IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gY29ycnVwdGVkIG9yIGluY29ycmVjdCB0cmF2ZXJzYWwgb2Zmc2V0cyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNGE1MzBjNDYwNzMyMWFlNTJhZWY2NDVhYmY4MTQ3ZWNmZWMzNTI0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAxNDoyMjoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3hhcnJheS5jIGIvbGliL3Rlc3RfeGFycmF5LmMKaW5kZXggNWNhMGFlZmVlOWFhNS4uY2RhNzI0NWU0NzcxNiAxMDA2NDQKLS0tIGEvbGliL3Rlc3RfeGFycmF5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RfeGFycmF5LmMKQEAgLTEyNDcsNiAmIzQzOzEyNDcsNjcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8zKHN0cnVjdCB4YXJyYXkgKnhhKQogCX0KIH0KIAomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVEkKJiM0MzsJWEFfU1RBVEUoeGFzLCB4YSwgMTAwKTsKJiM0MzsJWEFfU1RBVEVfT1JERVIoc3BsaXQsIHhhLCAwLCAwKTsKJiM0MzsJdm9pZCAqZW50cnk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJLyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovCiYjNDM7CXhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7CiYjNDM7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7CiYjNDM7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwl4YV9lcmFzZV9pbmRleCh4YSwgMTI4KTsKJiM0MzsJeGFfZXJhc2VfaW5kZXgoeGEsIDApOwomIzQzOwlYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpOwomIzQzOwomIzQzOwkvKiAoMikgU3BsaXR0aW5nIGEgbXVsdGktaW5kZXggZW50cnkgYWZ0ZXIgYSBsb29rdXAgYmVnaW5zIGluc2lkZSBpdCAqLwomIzQzOwl4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpOwomIzQzOwomIzQzOwl4YXNfc2V0KCZhbXA7eGFzLCAxMDApOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJeGFzX3NwbGl0X2FsbG9jKCZhbXA7c3BsaXQsIHhhX21rX2luZGV4KDApLCA3LCBHRlBfS0VSTkVMKTsKJiM0MzsJeGFzX2xvY2soJmFtcDtzcGxpdCk7CiYjNDM7CXhhc19zcGxpdCgmYW1wO3NwbGl0LCB4YV9ta19pbmRleCgwKSwgNyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAxMjg7IGkmIzQzOyYjNDM7KQomIzQzOwkJX194YV9zdG9yZSh4YSwgaSwgeGFfbWtfaW5kZXgoaSksIDApOwomIzQzOwl4YXNfdW5sb2NrKCZhbXA7c3BsaXQpOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7CiYjNDM7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwl4YV9kZXN0cm95KHhhKTsKJiM0MzsJWEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kXzEoc3RydWN0IHhhcnJheSAqeGEpCiB7CiAJdW5zaWduZWQgbG9uZyBpLCBqLCBrOwpAQCAtMTM3MCw2ICYjNDM7MTQzMSw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEpCiAJCWNoZWNrX211bHRpX2ZpbmRfMSh4YSwgaSk7CiAJY2hlY2tfbXVsdGlfZmluZF8yKHhhKTsKIAljaGVja19tdWx0aV9maW5kXzMoeGEpOwomIzQzOwljaGVja19tdWx0aV9maW5kXzQoeGEpOwogfQogCiAvKiBTZWUgZmluZF9zd2FwX2VudHJ5KCkgaW4gbW0vc2htZW0uYyAqLwpkaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jCmluZGV4IDlhOGI0OTE2NTQwY2YuLjk4MDMyNGQ2ODZiZDAgMTAwNjQ0Ci0tLSBhL2xpYi94YXJyYXkuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIveGFycmF5LmMKQEAgLTE0MDYsOSAmIzQzOzE0MDYsMTEgQEAgdm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KQogCQllbnRyeSA9IHhhc19sb2FkKHhhcyk7CiAJCWlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLSZndDt4YV9ub2RlKSkKIAkJCXJldHVybiBlbnRyeTsKLQl9IGVsc2UgaWYgKCF4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0ICZhbXA7JmFtcDsKLQkJICAgIHhhcy0mZ3Q7eGFfb2Zmc2V0ICE9ICh4YXMtJmd0O3hhX2luZGV4ICZhbXA7IFhBX0NIVU5LX01BU0spKSB7Ci0JCXhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKJiM0MzsJfSBlbHNlIGlmICh4YXMtJmd0O3hhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy0mZ3Q7eGFfaW5kZXgsIHhhcy0mZ3Q7eGFfbm9kZSkpIHsKJiM0MzsJCWlmICgheGFzLSZndDt4YV9ub2RlLSZndDtzaGlmdCkKJiM0MzsJCQl4YXMtJmd0O3hhX29mZnNldCA9ICgoeGFzLSZndDt4YV9pbmRleCAtIDEpICZhbXA7IFhBX0NIVU5LX01BU0spICYjNDM7IDE7CiYjNDM7CQllbHNlCiYjNDM7CQkJeGFzLSZndDt4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy0mZ3Q7eGFfaW5kZXgsIHhhcy0mZ3Q7eGFfbm9kZSk7CiAJfQogCiAJeGFzX25leHRfb2Zmc2V0KHhhcyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzA5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYSBQYXRjaDogRm9jdXMgb24gWGFycmF5IEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIGNydWNpYWwgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBpZGVudGlmeSB0aGUgc2NvcGUuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIGltcGFjdGluZyBgbGliL3Rlc3RfeGFycmF5LmNgIGFuZCBgbGliL3hhcnJheS5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBjaGFuZ2VzIHRvIHRoZSB4YXJyYXkgaW1wbGVtZW50YXRpb24gaXRzZWxmLCBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgdGVzdHMuIEdpdmVuIHRoZSBmaWxlIG5hbWVzLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhlIGNvcmUgb2YgdGhlIHhhcnJheSBkYXRhIHN0cnVjdHVyZSBpcyBsaWtlbHkgdGhlIHRhcmdldCBvZiB0aGlzIHBhdGNoLCB3aGljaCBpcyBjb21tb24uCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBsaWIveGFycmF5LmNgLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGRpZmYsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNDA2LCBzbyBJ4oCZbGwgdXNlIG15IHRydXN0eSBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBpbnRvIHRoZSBjb2RlLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gaW1tZWRpYXRlbHkgZXhhbWluZSB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlLiBMaW5lIDE0MDYgaXNuJiMzOTt0IHBhcnRpY3VsYXJseSBpbmZvcm1hdGl2ZSB3aXRob3V0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIGV4YW1pbmUgdGhlIGxpbmVzIGltbWVkaWF0ZWx5IGFib3ZlIGFuZCBiZWxvdyB0byBmb3JtIGFuIGluaXRpYWwgaHlwb3RoZXNpcyByZWdhcmRpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGNoYW5nZS4gSXMgdGhpcyBhIGJ1ZyBmaXg/IEFuIG9wdGltaXphdGlvbj8gQSBmZWF0dXJlIGFkZGl0aW9uPyBUaGUgY29kZSB3aWxsIHJldmVhbCB0aGUgYW5zd2Vycy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgdGhpcyBpcyBhIHRlc3QgYW5kIGEgbWFpbiB4YXJyYXkgbGlicmFyeSBmaWxlIC0gdGhpcyBtYXkgYmUgYSBzaW1wbGUgdGVzdCBjaGFuZ2UsIG9yIGEgbW9yZSBpbnZhc2l2ZSB4YXJyYXkgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHJlYWQgdGhlIGNvZGUgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIveGFycmF5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzOTA6XHQgKlxuMTM5MTpcdCAqIFJldHVybjogVGhlIGVudHJ5LCBpZiBmb3VuZCwgb3RoZXJ3aXNlICVOVUxMLlxuMTM5MjpcdCAqL1xuMTM5MzpcdHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcbjEzOTQ6XHR7XG4xMzk1Olx0XHR2b2lkICplbnRyeTtcbjEzOTY6XHRcbjEzOTc6XHRcdGlmICh4YXNfZXJyb3IoeGFzKSB8fCB4YXMtXHUwMDNleGFfbm9kZSA9PSBYQVNfQk9VTkRTKVxuMTM5ODpcdFx0XHRyZXR1cm4gTlVMTDtcbjEzOTk6XHRcdGlmICh4YXMtXHUwMDNleGFfaW5kZXggXHUwMDNlIG1heClcbjE0MDA6XHRcdFx0cmV0dXJuIHNldF9ib3VuZHMoeGFzKTtcbjE0MDE6XHRcbjE0MDI6XHRcdGlmICgheGFzLVx1MDAzZXhhX25vZGUpIHtcbjE0MDM6XHRcdFx0eGFzLVx1MDAzZXhhX2luZGV4ID0gMTtcbjE0MDQ6XHRcdFx0cmV0dXJuIHNldF9ib3VuZHMoeGFzKTtcbjE0MDU6XHRcdH0gZWxzZSBpZiAoeGFzLVx1MDAzZXhhX25vZGUgPT0gWEFTX1JFU1RBUlQpIHtcbjE0MDY6XHRcdFx0ZW50cnkgPSB4YXNfbG9hZCh4YXMpO1xuMTQwNzpcdFx0XHRpZiAoZW50cnkgfHwgeGFzX25vdF9ub2RlKHhhcy1cdTAwM2V4YV9ub2RlKSlcbjE0MDg6XHRcdFx0XHRyZXR1cm4gZW50cnk7XG4xNDA5Olx0XHR9IGVsc2UgaWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSkge1xuMTQxMDpcdFx0XHRpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0KVxuMTQxMTpcdFx0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSAmIzQzOyAxO1xuMTQxMjpcdFx0XHRlbHNlXG4xNDEzOlx0XHRcdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSk7XG4xNDE0Olx0XHR9XG4xNDE1Olx0XG4xNDE2Olx0XHR4YXNfbmV4dF9vZmZzZXQoeGFzKTtcbjE0MTc6XHRcbjE0MTg6XHRcdHdoaWxlICh4YXMtXHUwMDNleGFfbm9kZSBcdTAwMjZcdTAwMjYgKHhhcy1cdTAwM2V4YV9pbmRleCBcdTAwM2M9IG1heCkpIHtcbjE0MTk6XHRcdFx0aWYgKHVubGlrZWx5KHhhcy1cdTAwM2V4YV9vZmZzZXQgPT0gWEFfQ0hVTktfU0laRSkpIHtcbjE0MjA6XHRcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0geGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlb2Zmc2V0ICYjNDM7IDE7XG4xNDIxOlx0XHRcdFx0eGFzLVx1MDAzZXhhX25vZGUgPSB4YV9wYXJlbnQoeGFzLVx1MDAzZXhhLCB4YXMtXHUwMDNleGFfbm9kZSk7XG4xNDIyOlx0XHRcdFx0Y29udGludWU7XG4xNDIzOlx0XHRcdH1cbjE0MjQ6XHRcbjE0MjU6XHRcdFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIHhhcy1cdTAwM2V4YV9ub2RlLCB4YXMtXHUwMDNleGFfb2Zmc2V0KTtcbjE0MjY6XHRcdFx0aWYgKHhhX2lzX25vZGUoZW50cnkpKSB7XG4xNDI3Olx0XHRcdFx0eGFzLVx1MDAzZXhhX25vZGUgPSB4YV90b19ub2RlKGVudHJ5KTtcbjE0Mjg6XHRcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gMDtcbjE0Mjk6XHRcdFx0XHRjb250aW51ZTtcbjE0MzA6XHRcdFx0fVxuMTQzMTpcdFx0XHRpZiAoZW50cnkgXHUwMDI2XHUwMDI2ICF4YV9pc19zaWJsaW5nKGVudHJ5KSlcbjE0MzI6XHRcdFx0XHRyZXR1cm4gZW50cnk7XG4xNDMzOlx0XG4xNDM0Olx0XHRcdHhhc19uZXh0X29mZnNldCh4YXMpO1xuMTQzNTpcdFx0fVxuMTQzNjpcdFxuMTQzNzpcdFx0aWYgKCF4YXMtXHUwMDNleGFfbm9kZSlcbjE0Mzg6XHRcdFx0eGFzLVx1MDAzZXhhX25vZGUgPSBYQVNfQk9VTkRTO1xuMTQzOTpcdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBsaWIveGFycmF5LmMgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBpbXBhY3Qgb2YgdGhlIG1vZGlmaWNhdGlvbiBpbiBgbGliL3hhcnJheS5jYC4gVGhlIGNvcmUgZGlmZmVyZW5jZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBob3cgYHhhcy0mZ3Q7eGFfb2Zmc2V0YCBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdW5kZXIgdGhlIGNvbmRpdGlvbiB3aGVyZSB0aGUgbm9kZSBpc24mIzM5O3QgYSBzaGlmdCBub2RlICphbmQqIHRoZSBvZmZzZXQgZG9lc24mIzM5O3QgbWF0Y2ggdGhlIGNodW5rIG1hc2suCgpCZWZvcmUgdGhlIGNoYW5nZSwgaXQgYXBwZWFycyB3ZSB3ZXJlIHNldHRpbmcgYHhhcy0mZ3Q7eGFfb2Zmc2V0YCB0byBhIGNhbGN1bGF0ZWQgdmFsdWU6IGAoKHhhcy0mZ3Q7eGFfaW5kZXggLSAxKSAmYW1wOyBYQV9DSFVOS19NQVNLKSAmIzQzOyAxYC4gTm93LCB0aGUgY29uZGl0aW9uIHNlZW1zIG1vcmUgaW52b2x2ZWQuIEl0IGNoZWNrcyBpZiBgeGFzLSZndDt4YV9vZmZzZXRgIGlzICpub3QgZXF1YWwgdG8qIHRoZSByZXN1bHQgb2YgYSBjYWxsIHRvIGBnZXRfb2Zmc2V0KClgIHdpdGggYHhhcy0mZ3Q7eGFfaW5kZXhgIGFuZCBgeGFzLSZndDt4YV9ub2RlYCBhcyBwYXJhbWV0ZXJzLiBJZiB0aGF0IGNvbmRpdGlvbiBob2xkcywgd2UgaGF2ZSBhIGNvbmRpdGlvbmFsIHdpdGhpbiB0aGF0IGNvbmRpdGlvbmFsOiBJZiBgIXhhcy0mZ3Q7eGFfbm9kZS0mZ3Q7c2hpZnRgIHRoZSBvbGQgYXBwcm9hY2ggaXMgdXNlZCBidXQgaWYgdGhlIG5vZGUgKmlzKiBhIHNoaWZ0IG5vZGUsIGB4YXMtJmd0O3hhX29mZnNldGAgaXMgbm93IGFzc2lnbmVkIHRoZSByZXN1bHQgb2YgYGdldF9vZmZzZXQoKWAuCgpUaGlzIHN1Z2dlc3RzIHRoYXQgYGdldF9vZmZzZXRgIGlzIGJlY29taW5nIHRoZSBwcmltYXJ5IG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIG9mZnNldC4gSXQgYWxzbyBzZWVtcyB0aGVyZSYjMzk7cyBhIGRpc3RpbmN0aW9uIGluIGhvdyB3ZSBoYW5kbGUgbm9uLXNoaWZ0IGFuZCBzaGlmdCBub2Rlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYGdldF9vZmZzZXRgIHRvIGZ1bGx5IGdyYXNwIHRoaXMuIEl0JiMzOTtzIGxpa2VseSB0aGUga2V5IHRvIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gSSBuZWVkIHRvIGNoZWNrIGl0cyBkZWZpbml0aW9uIHRvIHNlZSBob3cgaXQmIzM5O3MgY2FsY3VsYXRpbmcgdGhlIG9mZnNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfb2Zmc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL3hhcnJheS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEwNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQganVzdCBoYXBwZW5lZDoKCioqRmluZGluZyB0aGUgYGdldF9vZmZzZXRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoZSBgZ2V0X29mZnNldGAgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgdXNlZCwgbW9zdCBsaWtlbHkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgY29kZS4gR2l2ZW4gaXRzIGxpa2VseSByZWxhdGlvbiB0byBvZmZzZXRzLCBJJiMzOTttIGJldHRpbmcgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoIGB4YXJyYXlgLCBzbyB0aGF0IGRpcmVjdHMgbWUgdG8gdGhlIGBsaWIvYCBkaXJlY3RvcnksIHdoaWNoIGhvdXNlcyBrZXJuZWwgbGlicmFyaWVzLCBvciBwZXJoYXBzIHdpdGhpbiB0aGUgYGluY2x1ZGUvbGludXgvYCBkaXJlY3RvcnksIHdoZXJlIHdlIGNhbiBmaW5kIG1hbnkga2V5IGhlYWRlcnMsIHBvdGVudGlhbGx5IGluIGB4YXJyYXkuaGAuIExldCYjMzk7cyBzdGFydCB0aGUgaHVudCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X29mZnNldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi94YXJyYXkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIveGFycmF5LmM9MTI2PXN0YXRpYyB2b2lkIHhhc19zcXVhc2hfbWFya3MoY29uc3Qgc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubGliL3hhcnJheS5jLTE0NC0vKiBleHRyYWN0cyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGlzIG5vZGUgZnJvbSB0aGUgaW5kZXggKi9cbmxpYi94YXJyYXkuYzoxNDU6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHN0cnVjdCB4YV9ub2RlICpub2RlKVxubGliL3hhcnJheS5jLTE0Ni17XG4tLVxubGliL3hhcnJheS5jPTE1MD1zdGF0aWMgdm9pZCB4YXNfc2V0X29mZnNldChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbmxpYi94YXJyYXkuYy0xNTEte1xubGliL3hhcnJheS5jOjE1MjpcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpO1xubGliL3hhcnJheS5jLTE1My19XG4tLVxubGliL3hhcnJheS5jPTIwND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKnhhc19kZXNjZW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuLS1cbmxpYi94YXJyYXkuYy0yMDYte1xubGliL3hhcnJheS5jOjIwNzpcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgbm9kZSk7XG5saWIveGFycmF5LmMtMjA4LVx0dm9pZCAqZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XG4tLVxubGliL3hhcnJheS5jPTEzMDY9dm9pZCAqX194YXNfcHJldihzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5saWIveGFycmF5LmMtMTMxNi1cbmxpYi94YXJyYXkuYzoxMzE3Olx0aWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSlcbmxpYi94YXJyYXkuYy0xMzE4LVx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0LS07XG4tLVxubGliL3hhcnJheS5jPTEzNDU9dm9pZCAqX194YXNfbmV4dChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5saWIveGFycmF5LmMtMTM1NS1cbmxpYi94YXJyYXkuYzoxMzU2Olx0aWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSlcbmxpYi94YXJyYXkuYy0xMzU3LVx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0JiM0MzsmIzQzOztcbi0tXG5saWIveGFycmF5LmM9MTM5Mz12b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXG4tLVxubGliL3hhcnJheS5jLTE0MDgtXHRcdFx0cmV0dXJuIGVudHJ5O1xubGliL3hhcnJheS5jOjE0MDk6XHR9IGVsc2UgaWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSkge1xubGliL3hhcnJheS5jLTE0MTAtXHRcdGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQpXG4tLVxubGliL3hhcnJheS5jLTE0MTItXHRcdGVsc2VcbmxpYi94YXJyYXkuYzoxNDEzOlx0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpO1xubGliL3hhcnJheS5jLTE0MTQtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzQKCQkJCQkJCW91dHB1dDogMTY1CgkJCQkJCQl0aG91Z2h0czogMzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhhcnJheSBNdWx0aS1JbmRleCBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB0ZXN0X3hhcnJheS5jYCBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBuZXcgdW5pdCB0ZXN0LCBgY2hlY2tfbXVsdGlfZmluZF80YCwgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgbXVsdGktaW5kZXggZmluZCBhbmQgc3BsaXQgb3BlcmF0aW9ucyB3aXRoaW4geGFycmF5LiBUaGF0JiMzOTtzIGdvb2QsIG1vcmUgdGFyZ2V0ZWQgdGVzdHMgYXJlIGFsd2F5cyB3ZWxjb21lLiBBbmQgdGhlIGNvcnJlc3BvbmRpbmcgZml4IGluIGBsaWIveGFycmF5LmNgIGFkZHJlc3NlcyBhbiBvZmZzZXQgY2FsY3VsYXRpb24gYnVnIGluIGB4YXNfZmluZGAsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aS1vcmRlciBlbnRyaWVzIGluIHRoZSB4YXJyYXkuIFNvdW5kcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGZpeCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBMZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIGNoZWNrbGlzdDoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBOb3BlLCB0aGlzIGlzIGFsbCBpbnRlcm5hbCB4YXJyYXkgbG9naWMgYW5kIHNlbGYtdGVzdGluZy4gTm8gdXNlci1mYWNpbmcga2VybmVsIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkLiBUaGF0JiMzOTtzIGEgcmVsaWVmLgoyLiAgKipCcmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIHRoZSBjb2RlIHVzZXMgc3RhbmRhcmQgeGFycmF5IHRyYXZlcnNhbCBzdGF0ZSBtZW1iZXJzIGxpa2UgYHhhcy0mZ3Q7eGFfb2Zmc2V0YCwgYHhhcy0mZ3Q7eGFfaW5kZXhgLCBgeGFzLSZndDt4YV9ub2RlYCwgZXRjLiBUaGVzZSBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgYnkgYFhBX1NUQVRFYCBvciBgeGFzX3NldGAuIFNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLgozLiAgKipBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24/KiogSSBkb24mIzM5O3Qgc2VlIGFueSBuZXcgYWxsb2NhdGlvbnMgYmVpbmcgaW50cm9kdWNlZCBvciBleGlzdGluZyBhbGxvY2F0aW9ucyBtb2RpZmllZC4gVGhpcyBpcyBhIGZpeCwgbm90IGEgZmVhdHVyZS4gTm8gd29ycmllcyB0aGVyZS4KNC4gICoqQm91bmRzIGNoZWNrcy9idWZmZXIgc2l6ZSBjaGFuZ2VzPyoqIE5vcGUuIFRoZSBjb2RlIGlzbiYjMzk7dCBjaGFuZ2luZyBidWZmZXIgc2l6ZXMgb3IgYWRkaW5nIG5ldyBidWZmZXIgY2hlY2tzLiBOb3RoaW5nIHRvIHdvcnJ5IGFib3V0IGluIHRoYXQgcmVnYXJkLgoKU28sIGluIHN1bW1hcnksIEkgc2VlIG5vIGltbWVkaWF0ZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRvIHVzZXJzcGFjZS4gVGhhdCYjMzk7cyB3aGF0IEkgbGlrZSB0byBzZWUuCgpOb3csIEtNU0FOLiBEb2VzIHRoaXMgbmVlZCBpdD8gTm8uIEtNU0FOIGlzIGZvciBjYXRjaGluZyAqdW5pbml0aWFsaXplZCogcmVhZHMgc3BlY2lmaWNhbGx5LCBidXQgZ2l2ZW4gdGhlIGNoZWNrIGxpc3QsIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2YgdGhvc2UgaGVyZS4gU3RhbmRhcmQgS0FTQU4sIHRoZSB1bml0IHRlc3RzLCBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgc3VmZmljaWVudC4gQW55IG1lbW9yeSBlcnJvcnMgKGlmIGFueSkgd291bGQgYmUgY2F1Z2h0IHdpdGggdGhvc2UuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZCBoZXJlLgoKTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZXF1aXJlbWVudHM6IGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBmYWxzZSwgSSBjYW4gZm9ybXVsYXRlIGRldGFpbGVkIHJlYXNvbmluZyBjb250cmFzdGluZyBLTVNBTiB2ZXJzdXMgS0FTQU4mIzM5O3MgYXBwbGljYWJpbGl0eS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCB0aGUgZml4IGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZHMsIGFuZCB0aHVzIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sLiBOb3csIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBBbGwgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBvZmZzZXQgY2FsY3VsYXRpb24gbG9naWMgaW4geGFzX2ZpbmQoKSB3aXRoaW4gdGhlIFhBcnJheSBkYXRhIHN0cnVjdHVyZSBpbXBsZW1lbnRhdGlvbiAobGliL3hhcnJheS5jKSBhbmQgYWRkcyBhIHRlc3QgY2FzZSB0byB0aGUgWEFycmF5IHNlbGYtdGVzdCBzdWl0ZSAobGliL3Rlc3RfeGFycmF5LmMpLlxuXG5UaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCB0cmVlIHRyYXZlcnNhbCBpbmRleGluZy9vZmZzZXQgYXJpdGhtZXRpYyBmb3IgbXVsdGktaW5kZXggZW50cmllcyAoWEFfU1RBVEUgLyB4YV9ub2RlIG9mZnNldCBjYWxjdWxhdGlvbnMpLiBObyBuZXcgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyByZXN1bHRpbmcgZnJvbSBjb3JydXB0ZWQgb3IgaW5jb3JyZWN0IHRyYXZlcnNhbCBvZmZzZXRzIHdvdWxkIGJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBvZmZzZXQgY2FsY3VsYXRpb24gbG9naWMgaW4geGFzX2ZpbmQoKSB3aXRoaW4gdGhlIFhBcnJheSBkYXRhIHN0cnVjdHVyZSBpbXBsZW1lbnRhdGlvbiAobGliL3hhcnJheS5jKSBhbmQgYWRkcyBhIHRlc3QgY2FzZSB0byB0aGUgWEFycmF5IHNlbGYtdGVzdCBzdWl0ZSAobGliL3Rlc3RfeGFycmF5LmMpLlxuXG5UaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCB0cmVlIHRyYXZlcnNhbCBpbmRleGluZy9vZmZzZXQgYXJpdGhtZXRpYyBmb3IgbXVsdGktaW5kZXggZW50cmllcyAoWEFfU1RBVEUgLyB4YV9ub2RlIG9mZnNldCBjYWxjdWxhdGlvbnMpLiBObyBuZXcgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyByZXN1bHRpbmcgZnJvbSBjb3JydXB0ZWQgb3IgaW5jb3JyZWN0IHRyYXZlcnNhbCBvZmZzZXRzIHdvdWxkIGJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjI6MjIuOTE0ODQxOTAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzNTY2NDI2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEFSUkFZX01VTFRJXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhhc19maW5kXCIsXG4gICAgXCJ4YV9maW5kXCIsXG4gICAgXCJ4YV9maW5kX2FmdGVyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgb2Zmc2V0IGNhbGN1bGF0aW9uIGxvZ2ljIGluIHhhc19maW5kKCkgd2l0aGluIHRoZSBYQXJyYXkgZGF0YSBzdHJ1Y3R1cmUgaW1wbGVtZW50YXRpb24gKGxpYi94YXJyYXkuYykgYW5kIGFkZHMgYSB0ZXN0IGNhc2UgdG8gdGhlIFhBcnJheSBzZWxmLXRlc3Qgc3VpdGUgKGxpYi90ZXN0X3hhcnJheS5jKS5cXG5cXG5UaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCB0cmVlIHRyYXZlcnNhbCBpbmRleGluZy9vZmZzZXQgYXJpdGhtZXRpYyBmb3IgbXVsdGktaW5kZXggZW50cmllcyAoWEFfU1RBVEUgLyB4YV9ub2RlIG9mZnNldCBjYWxjdWxhdGlvbnMpLiBObyBuZXcgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyByZXN1bHRpbmcgZnJvbSBjb3JydXB0ZWQgb3IgaW5jb3JyZWN0IHRyYXZlcnNhbCBvZmZzZXRzIHdvdWxkIGJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXRlcmF0aW9uIG9mZnNldCBjYWxjdWxhdGlvbiBpbiB4YXNfZmluZCgpIHdpdGhpbiBsaWIveGFycmF5LmMgZm9yIG11bHRpLW9yZGVyIG5vZGVzICh3aGVyZSBzaGlmdCBcXHUwMDNlIDApLiBUaGlzIGlzIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgbG9naWMgZXhlcmNpc2VkIGFjcm9zcyBtZW1vcnkgbWFuYWdlbWVudCAocGFnZSBjYWNoZSwgc2htZW0sIGZvbGlvIGxvb2t1cHMpIGFuZCBzdWJzeXN0ZW0gaXRlcmF0b3JzLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMjoyMi45MTQ4NTA5MTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODQ5NDU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM0YTUzMGM0NjA3MzIxYWU1MmFlZjY0NWFiZjgxNDdlY2ZlYzM1MjRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAxNDoyMjoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9saWIvdGVzdF94YXJyYXkuYyBiL2xpYi90ZXN0X3hhcnJheS5jXFxuaW5kZXggNWNhMGFlZmVlOWFhNS4uY2RhNzI0NWU0NzcxNiAxMDA2NDRcXG4tLS0gYS9saWIvdGVzdF94YXJyYXkuY1xcbisrKyBiL2xpYi90ZXN0X3hhcnJheS5jXFxuQEAgLTEyNDcsNiArMTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF80KHN0cnVjdCB4YXJyYXkgKnhhKVxcbit7XFxuKyNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXFxuK1xcdFhBX1NUQVRFKHhhcywgeGEsIDEwMCk7XFxuK1xcdFhBX1NUQVRFX09SREVSKHNwbGl0LCB4YSwgMCwgMCk7XFxuK1xcdHZvaWQgKmVudHJ5O1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuK1xcbitcXHQvKiAoMSkgT3JkZXItNyBlbnRyeSAoMC0xMjcpIHdpdGggYWRqYWNlbnQgZW50cnkgYXQgMTI4LCBzdGFydGluZyBhdCAxMDAgKi9cXG4rXFx0eGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTtcXG4rXFx0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbitcXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcXG4rXFx0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcXG4rXFxuK1xcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG4rXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTtcXG4rXFx0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcXG4rXFxuK1xcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG4rXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHR4YV9lcmFzZV9pbmRleCh4YSwgMTI4KTtcXG4rXFx0eGFfZXJhc2VfaW5kZXgoeGEsIDApO1xcbitcXHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xcbitcXG4rXFx0LyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi9cXG4rXFx0eGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTtcXG4rXFx0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcXG4rXFxuK1xcdHhhc19zZXQoXFx1MDAyNnhhcywgMTAwKTtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCk7XFxuK1xcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xcbitcXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHhhc19zcGxpdF9hbGxvYyhcXHUwMDI2c3BsaXQsIHhhX21rX2luZGV4KDApLCA3LCBHRlBfS0VSTkVMKTtcXG4rXFx0eGFzX2xvY2soXFx1MDAyNnNwbGl0KTtcXG4rXFx0eGFzX3NwbGl0KFxcdTAwMjZzcGxpdCwgeGFfbWtfaW5kZXgoMCksIDcpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMTI4OyBpKyspXFxuK1xcdFxcdF9feGFfc3RvcmUoeGEsIGksIHhhX21rX2luZGV4KGkpLCAwKTtcXG4rXFx0eGFzX3VubG9jayhcXHUwMDI2c3BsaXQpO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCk7XFxuK1xcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7XFxuK1xcbitcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCk7XFxuK1xcdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0eGFfZGVzdHJveSh4YSk7XFxuK1xcdFhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7XFxuKyNlbmRpZlxcbit9XFxuK1xcbiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kXzEoc3RydWN0IHhhcnJheSAqeGEpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBpLCBqLCBrO1xcbkBAIC0xMzcwLDYgKzE0MzEsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kKHN0cnVjdCB4YXJyYXkgKnhhKVxcbiBcXHRcXHRjaGVja19tdWx0aV9maW5kXzEoeGEsIGkpO1xcbiBcXHRjaGVja19tdWx0aV9maW5kXzIoeGEpO1xcbiBcXHRjaGVja19tdWx0aV9maW5kXzMoeGEpO1xcbitcXHRjaGVja19tdWx0aV9maW5kXzQoeGEpO1xcbiB9XFxuIFxcbiAvKiBTZWUgZmluZF9zd2FwX2VudHJ5KCkgaW4gbW0vc2htZW0uYyAqL1xcbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcXG5pbmRleCA5YThiNDkxNjU0MGNmLi45ODAzMjRkNjg2YmQwIDEwMDY0NFxcbi0tLSBhL2xpYi94YXJyYXkuY1xcbisrKyBiL2xpYi94YXJyYXkuY1xcbkBAIC0xNDA2LDkgKzE0MDYsMTEgQEAgdm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxcbiBcXHRcXHRlbnRyeSA9IHhhc19sb2FkKHhhcyk7XFxuIFxcdFxcdGlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLVxcdTAwM2V4YV9ub2RlKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGVudHJ5O1xcbi1cXHR9IGVsc2UgaWYgKCF4YXMtXFx1MDAzZXhhX25vZGUtXFx1MDAzZXNoaWZ0IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICB4YXMtXFx1MDAzZXhhX29mZnNldCAhPSAoeGFzLVxcdTAwM2V4YV9pbmRleCBcXHUwMDI2IFhBX0NIVU5LX01BU0spKSB7XFxuLVxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ID0gKCh4YXMtXFx1MDAzZXhhX2luZGV4IC0gMSkgXFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XFxuK1xcdH0gZWxzZSBpZiAoeGFzLVxcdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXFx1MDAzZXhhX2luZGV4LCB4YXMtXFx1MDAzZXhhX25vZGUpKSB7XFxuK1xcdFxcdGlmICgheGFzLVxcdTAwM2V4YV9ub2RlLVxcdTAwM2VzaGlmdClcXG4rXFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cXHUwMDNleGFfaW5kZXggLSAxKSBcXHUwMDI2IFhBX0NIVU5LX01BU0spICsgMTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgeGFzLVxcdTAwM2V4YV9ub2RlKTtcXG4gXFx0fVxcbiBcXG4gXFx0eGFzX25leHRfb2Zmc2V0KHhhcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjIzLjQ4NDM4MzI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MjQ3NDIwMDAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYQVJSQVlfTVVMVElcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGFzX2ZpbmRcIixcbiAgICBcInhhX2ZpbmRcIixcbiAgICBcInhhX2ZpbmRfYWZ0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXRlcmF0aW9uIG9mZnNldCBjYWxjdWxhdGlvbiBpbiB4YXNfZmluZCgpIHdpdGhpbiBsaWIveGFycmF5LmMgZm9yIG11bHRpLW9yZGVyIG5vZGVzICh3aGVyZSBzaGlmdCBcXHUwMDNlIDApLiBUaGlzIGlzIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgbG9naWMgZXhlcmNpc2VkIGFjcm9zcyBtZW1vcnkgbWFuYWdlbWVudCAocGFnZSBjYWNoZSwgc2htZW0sIGZvbGlvIGxvb2t1cHMpIGFuZCBzdWJzeXN0ZW0gaXRlcmF0b3JzLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM0YTUzMGM0NjA3MzIxYWU1MmFlZjY0NWFiZjgxNDdlY2ZlYzM1MjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE0OjIyOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfeGFycmF5LmMgYi9saWIvdGVzdF94YXJyYXkuY1xuaW5kZXggNWNhMGFlZmVlOWFhNS4uY2RhNzI0NWU0NzcxNiAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X3hhcnJheS5jXG4rKysgYi9saWIvdGVzdF94YXJyYXkuY1xuQEAgLTEyNDcsNiArMTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSlcbit7XG4rI2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbitcdFhBX1NUQVRFKHhhcywgeGEsIDEwMCk7XG4rXHRYQV9TVEFURV9PUkRFUihzcGxpdCwgeGEsIDAsIDApO1xuK1x0dm9pZCAqZW50cnk7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXG4rXHQvKiAoMSkgT3JkZXItNyBlbnRyeSAoMC0xMjcpIHdpdGggYWRqYWNlbnQgZW50cnkgYXQgMTI4LCBzdGFydGluZyBhdCAxMDAgKi9cbitcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XG4rXHRYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcbitcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7XG4rXG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHR4YV9lcmFzZV9pbmRleCh4YSwgMTI4KTtcbitcdHhhX2VyYXNlX2luZGV4KHhhLCAwKTtcbitcdFhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7XG4rXG4rXHQvKiAoMikgU3BsaXR0aW5nIGEgbXVsdGktaW5kZXggZW50cnkgYWZ0ZXIgYSBsb29rdXAgYmVnaW5zIGluc2lkZSBpdCAqL1xuK1x0eGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTtcbitcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XG4rXG4rXHR4YXNfc2V0KFx1MDAyNnhhcywgMTAwKTtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHR4YXNfc3BsaXRfYWxsb2MoXHUwMDI2c3BsaXQsIHhhX21rX2luZGV4KDApLCA3LCBHRlBfS0VSTkVMKTtcbitcdHhhc19sb2NrKFx1MDAyNnNwbGl0KTtcbitcdHhhc19zcGxpdChcdTAwMjZzcGxpdCwgeGFfbWtfaW5kZXgoMCksIDcpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMTI4OyBpKyspXG4rXHRcdF9feGFfc3RvcmUoeGEsIGksIHhhX21rX2luZGV4KGkpLCAwKTtcbitcdHhhc191bmxvY2soXHUwMDI2c3BsaXQpO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcbitcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFfZGVzdHJveSh4YSk7XG4rXHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuKyNlbmRpZlxuK31cbitcbiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kXzEoc3RydWN0IHhhcnJheSAqeGEpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBpLCBqLCBrO1xuQEAgLTEzNzAsNiArMTQzMSw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEpXG4gXHRcdGNoZWNrX211bHRpX2ZpbmRfMSh4YSwgaSk7XG4gXHRjaGVja19tdWx0aV9maW5kXzIoeGEpO1xuIFx0Y2hlY2tfbXVsdGlfZmluZF8zKHhhKTtcbitcdGNoZWNrX211bHRpX2ZpbmRfNCh4YSk7XG4gfVxuIFxuIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovXG5kaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jXG5pbmRleCA5YThiNDkxNjU0MGNmLi45ODAzMjRkNjg2YmQwIDEwMDY0NFxuLS0tIGEvbGliL3hhcnJheS5jXG4rKysgYi9saWIveGFycmF5LmNcbkBAIC0xNDA2LDkgKzE0MDYsMTEgQEAgdm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIFx0XHRlbnRyeSA9IHhhc19sb2FkKHhhcyk7XG4gXHRcdGlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLVx1MDAzZXhhX25vZGUpKVxuIFx0XHRcdHJldHVybiBlbnRyeTtcbi1cdH0gZWxzZSBpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgeGFzLVx1MDAzZXhhX29mZnNldCAhPSAoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAyNiBYQV9DSFVOS19NQVNLKSkge1xuLVx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gKCh4YXMtXHUwMDNleGFfaW5kZXggLSAxKSBcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxO1xuK1x0fSBlbHNlIGlmICh4YXMtXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSkpIHtcbitcdFx0aWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdClcbitcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gKCh4YXMtXHUwMDNleGFfaW5kZXggLSAxKSBcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxO1xuK1x0XHRlbHNlXG4rXHRcdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSk7XG4gXHR9XG4gXG4gXHR4YXNfbmV4dF9vZmZzZXQoeGFzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjIzLjQ4NDM4NTU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjUzODc4NDgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhBcnJheSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgbW9kaWZpY2F0aW9uIGF0IGEgZ3JhbnVsYXIgbGV2ZWwuIEkgc2VlIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFmZmVjdHMgdGhlIGB4YXNfZmluZCgpYCBmdW5jdGlvbiB3aXRoaW4gYGxpYi94YXJyYXkuY2AuICBTcGVjaWZpY2FsbHksIHRoZSBkaWZmIGhpZ2hsaWdodHMgYSBjaGFuZ2UgaW4gdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIGhvdyBgeGFzX29mZnNldGAgaXMgbWFuYWdlZCB3aGVuIHNlYXJjaGluZyB0aGUgWEFycmF5LiBJIG5lZWQgdG8gZnVsbHkgZ3JvayB0aGUgcHVycG9zZSBvZiB0aGlzIGNoYW5nZSwgc28gSSdsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIGNvZGUuXG5cbkJlZm9yZSwgdGhlcmUgd2FzIGFuIGBlbHNlIGlmYCBibG9jayB0aGF0IGFwcGVhcmVkIHRvIGhhbmRsZSBhIHNwZWNpZmljIHNjZW5hcmlvIHdoZXJlIHRoZSBjdXJyZW50IG9mZnNldCB3YXMgbWlzYWxpZ25lZCB3aXRoaW4gYSBjaHVuay4gVGhlIHByZXZpb3VzIGNvZGUgY2hlY2tlZCBpZiB0aGUgYHNoaWZ0YCB3YXMgemVybyBhbmQgYWRqdXN0ZWQgdGhlIG9mZnNldCBpZiB0aGUgbWlzYWxpZ25tZW50IGhhcHBlbmVkLiBUaGUgbmV3IGNvZGUgcmVwbGFjZXMgdGhhdCB3aXRoIGFuIGBlbHNlIGlmYCB0aGF0IGNhbGxzIGBnZXRfb2Zmc2V0KClgIGZ1bmN0aW9uLiBJbiB0aGUgYGVsc2VgIGNhc2UsIGl0IG5vdyBzZWVtcyB3ZSBjaGVjayBmb3IgdGhlIHNoaWZ0IGFnYWluIGJlZm9yZSByZWFkanVzdGluZyB0aGUgb2Zmc2V0LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGdldF9vZmZzZXQoKWAgYW5kIHRoZSBhZGRlZCBgc2hpZnRgIGNoZWNrIGhpbnRzIHRoYXQgdGhpcyBpcyBhIGNoYW5nZSBkZWFsaW5nIHdpdGggdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlIG9yIG9mZnNldCBjYWxjdWxhdGlvbiB3aXRoaW4gdGhlIFhBcnJheS4gVGhpcyBpcyBpbnRlcmVzdGluZy5cblxuVG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGFjdCwgSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGxpYi94YXJyYXkuY2AgdG8gc2VlIGhvdyB0aGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgYW5kIGhvdyB0aGUgWEFycmF5IGRhdGEgc3RydWN0dXJlIGlzIG1hbmFnZWQuIEknbGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBxdWlja2x5IGp1bXAgYXJvdW5kIGFuZCBnZXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gb3B0aW1pemluZyBob3cgdGhlIFhBcnJheSBoYW5kbGVzIGxhcmdlciByYW5nZXMgb3IgZGlmZmVyZW50IG5vZGUgdHlwZXMuIFRoZSBwcmVzZW5jZSBvZiBhIHRlc3QgY2FzZSBpbiBgbGliL3Rlc3RfeGFycmF5LmNgIHN1Z2dlc3RzIGEgc3BlY2lmaWMgYnVnIG9yIGVkZ2UgY2FzZSB0aGlzIHBhdGNoIGlzIHRyeWluZyB0byBhZGRyZXNzLiBHb29kLCBhIHRlc3QgY2FzZSBpcyBhbHdheXMgd2VsY29tZS4gSG9wZWZ1bGx5IGl0J3Mgd2VsbC13cml0dGVuLCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgYW5kIHRoZSBwcm9ibGVtIHRoaXMgcGF0Y2ggc29sdmVzLiBUaGlzIGlzIGEgc29saWQgc3RhcnQsIGJ1dCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjMwLjAyMzE3NDc3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIveGFycmF5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM5MDpcXHQgKlxcbjEzOTE6XFx0ICogUmV0dXJuOiBUaGUgZW50cnksIGlmIGZvdW5kLCBvdGhlcndpc2UgJU5VTEwuXFxuMTM5MjpcXHQgKi9cXG4xMzkzOlxcdHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcXG4xMzk0OlxcdHtcXG4xMzk1OlxcdFxcdHZvaWQgKmVudHJ5O1xcbjEzOTY6XFx0XFxuMTM5NzpcXHRcXHRpZiAoeGFzX2Vycm9yKHhhcykgfHwgeGFzLVxcdTAwM2V4YV9ub2RlID09IFhBU19CT1VORFMpXFxuMTM5ODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzk5OlxcdFxcdGlmICh4YXMtXFx1MDAzZXhhX2luZGV4IFxcdTAwM2UgbWF4KVxcbjE0MDA6XFx0XFx0XFx0cmV0dXJuIHNldF9ib3VuZHMoeGFzKTtcXG4xNDAxOlxcdFxcbjE0MDI6XFx0XFx0aWYgKCF4YXMtXFx1MDAzZXhhX25vZGUpIHtcXG4xNDAzOlxcdFxcdFxcdHhhcy1cXHUwMDNleGFfaW5kZXggPSAxO1xcbjE0MDQ6XFx0XFx0XFx0cmV0dXJuIHNldF9ib3VuZHMoeGFzKTtcXG4xNDA1OlxcdFxcdH0gZWxzZSBpZiAoeGFzLVxcdTAwM2V4YV9ub2RlID09IFhBU19SRVNUQVJUKSB7XFxuMTQwNjpcXHRcXHRcXHRlbnRyeSA9IHhhc19sb2FkKHhhcyk7XFxuMTQwNzpcXHRcXHRcXHRpZiAoZW50cnkgfHwgeGFzX25vdF9ub2RlKHhhcy1cXHUwMDNleGFfbm9kZSkpXFxuMTQwODpcXHRcXHRcXHRcXHRyZXR1cm4gZW50cnk7XFxuMTQwOTpcXHRcXHR9IGVsc2UgaWYgKHhhcy1cXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgeGFzLVxcdTAwM2V4YV9ub2RlKSkge1xcbjE0MTA6XFx0XFx0XFx0aWYgKCF4YXMtXFx1MDAzZXhhX25vZGUtXFx1MDAzZXNoaWZ0KVxcbjE0MTE6XFx0XFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cXHUwMDNleGFfaW5kZXggLSAxKSBcXHUwMDI2IFhBX0NIVU5LX01BU0spICsgMTtcXG4xNDEyOlxcdFxcdFxcdGVsc2VcXG4xNDEzOlxcdFxcdFxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXFx1MDAzZXhhX2luZGV4LCB4YXMtXFx1MDAzZXhhX25vZGUpO1xcbjE0MTQ6XFx0XFx0fVxcbjE0MTU6XFx0XFxuMTQxNjpcXHRcXHR4YXNfbmV4dF9vZmZzZXQoeGFzKTtcXG4xNDE3OlxcdFxcbjE0MTg6XFx0XFx0d2hpbGUgKHhhcy1cXHUwMDNleGFfbm9kZSBcXHUwMDI2XFx1MDAyNiAoeGFzLVxcdTAwM2V4YV9pbmRleCBcXHUwMDNjPSBtYXgpKSB7XFxuMTQxOTpcXHRcXHRcXHRpZiAodW5saWtlbHkoeGFzLVxcdTAwM2V4YV9vZmZzZXQgPT0gWEFfQ0hVTktfU0laRSkpIHtcXG4xNDIwOlxcdFxcdFxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ID0geGFzLVxcdTAwM2V4YV9ub2RlLVxcdTAwM2VvZmZzZXQgKyAxO1xcbjE0MjE6XFx0XFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9ub2RlID0geGFfcGFyZW50KHhhcy1cXHUwMDNleGEsIHhhcy1cXHUwMDNleGFfbm9kZSk7XFxuMTQyMjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xNDIzOlxcdFxcdFxcdH1cXG4xNDI0OlxcdFxcbjE0MjU6XFx0XFx0XFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXFx1MDAzZXhhLCB4YXMtXFx1MDAzZXhhX25vZGUsIHhhcy1cXHUwMDNleGFfb2Zmc2V0KTtcXG4xNDI2OlxcdFxcdFxcdGlmICh4YV9pc19ub2RlKGVudHJ5KSkge1xcbjE0Mjc6XFx0XFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9ub2RlID0geGFfdG9fbm9kZShlbnRyeSk7XFxuMTQyODpcXHRcXHRcXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9IDA7XFxuMTQyOTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xNDMwOlxcdFxcdFxcdH1cXG4xNDMxOlxcdFxcdFxcdGlmIChlbnRyeSBcXHUwMDI2XFx1MDAyNiAheGFfaXNfc2libGluZyhlbnRyeSkpXFxuMTQzMjpcXHRcXHRcXHRcXHRyZXR1cm4gZW50cnk7XFxuMTQzMzpcXHRcXG4xNDM0OlxcdFxcdFxcdHhhc19uZXh0X29mZnNldCh4YXMpO1xcbjE0MzU6XFx0XFx0fVxcbjE0MzY6XFx0XFxuMTQzNzpcXHRcXHRpZiAoIXhhcy1cXHUwMDNleGFfbm9kZSlcXG4xNDM4OlxcdFxcdFxcdHhhcy1cXHUwMDNleGFfbm9kZSA9IFhBU19CT1VORFM7XFxuMTQzOTpcXHRcXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjI6MzAuMDIzNDgwMzY4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc4NDY5MTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhBcnJheSdzIENvcmUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgeGFzX2ZpbmRgLCBhIGNydWNpYWwgZnVuY3Rpb24gcmVzaWRpbmcgd2l0aGluIGBsaWIveGFycmF5LmNgLiBUaGlzIHBsYWNlcyBpdCBmaXJtbHkgd2l0aGluIHRoZSBYQXJyYXkgY29yZSBsaWJyYXJ5IG9mIHRoZSBMaW51eCBrZXJuZWwg4oCTIHRoZSBiZWRyb2NrIGZvciBhIHBsZXRob3JhIG9mIGNyaXRpY2FsIGtlcm5lbCBmdW5jdGlvbmFsaXRpZXMuIFhBcnJheSwgYXMgd2Uga25vdywgaXMgdWJpcXVpdG91cywgaGFuZGxpbmcgZXZlcnl0aGluZyBmcm9tIHRoZSBwYWdlIGNhY2hlIGFuZCBmaWxlbWFwcyB0byBzaG1lbSwgRFJNLCBEQVgsIHN5c2ZzLCBhbmQgSVBDLiBUaGF0J3MgYSBzZXJpb3VzIGZvb3RwcmludC5cblxuU28sIGB4YXNfZmluZGAgaXRzZWxmPyBJdCdzIHRoZSBseW5jaHBpbiBmb3IgaXRlcmF0aW5nIHRocm91Z2ggWEFycmF5IGVudHJpZXMuIEknbSB0aGlua2luZyBtdWx0aS1pbmRleCBlbnRyaWVzLCBzaG1lbSBpbXBsZW1lbnRhdGlvbnMsIGFuZCBmb2xpbyBzZWFyY2hlcyBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQuIEl0J3MgdGhlIHdvcmtob3JzZSBmdW5jdGlvbi4gTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgYHhhc19maW5kYCwgYHhhX2ZpbmRgLCBhbmQgYHhhX2ZpbmRfYWZ0ZXJgIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gU2VlaW5nIHdoZXJlIGFuZCBob3cgdGhlc2UgYXJlIGludm9rZWQgd2lsbCByZXZlYWwgYSB3ZWFsdGggb2YgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBYQXJyYXkgaXMgbGV2ZXJhZ2VkLCBhbmQgcG90ZW50aWFsbHkgaGlnaGxpZ2h0IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gd2l0aGluIHRob3NlIGNyaXRpY2FsIGFyZWFzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSB0ZWxscyBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY3OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjM1LjgwODE3NDQyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI0MDAxMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhhc19maW5kXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTQxNz1oZWxkLCB3aGlsZSBtb3ZpbmcgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgaW5kZXggZG9lcy5cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDE4LVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0MTk6WW91IGNhbiBzZWFyY2ggZm9yIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgdXNpbmcgeGFzX2ZpbmQoKS4gIFRoaXNcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDIwLWlzIHRoZSBlcXVpdmFsZW50IG9mIGJvdGggeGFfZmluZCgpIGFuZCB4YV9maW5kX2FmdGVyKCk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9NDIzPWVudHJ5IGF0IHRoZSBpbmRleCBvZiB0aGUgeGFfc3RhdGUuICBVc2luZyB4YXNfbmV4dF9lbnRyeSgpIHRvXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjQyNDptb3ZlIHRvIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW5zdGVhZCBvZiB4YXNfZmluZCgpIHdpbGwgc2F2ZVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00MjUtYSBmdW5jdGlvbiBjYWxsIGluIHRoZSBtYWpvcml0eSBvZiBjYXNlcyBhdCB0aGUgZXhwZW5zZSBvZiBlbWl0dGluZyBtb3JlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9NDc3PWluIHRoZSB4YV9zdGF0ZSB3aWxsIG5vdCBiZSBjaGFuZ2VkLiAgV2hlbiBpdGVyYXRpbmcgb3ZlciBhbiBYQXJyYXlcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q6NDc4Om9yIGNhbGxpbmcgeGFzX2ZpbmQoKSwgaWYgdGhlIGluaXRpYWwgaW5kZXggaXMgaW4gdGhlIG1pZGRsZVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00Nzktb2YgYSBtdWx0aS1pbmRleCBlbnRyeSwgaXQgd2lsbCBub3QgYmUgYWx0ZXJlZC4gIFN1YnNlcXVlbnQgY2FsbHNcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3Q9MzE1PXhhc19sb2FkKCnkvJrlsL3lj6/og73lnLDlsIZ4YV9zdGF0Zeenu+WKqOWIsOivpeadoeebrumZhOi/keOAguWmguaenOS9oOefpemBk3hhX3N0YXRl5bey57uP56e75Yqo5Yiw5LqG6K+l5p2h55uu77yM5bm25LiU6ZyA6KaB5qOA5p+lXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTMyMS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0OjMyMjrkvaDlj6/ku6Xkvb/nlKh4YXNfZmluZCgp5pCc57Si5LiL5LiA5Liq5b2T5YmN5p2h55uu44CC6L+Z55u45b2T5LqOeGFfZmluZCgp5ZKMeGFfZmluZF9hZnRlcigp77yb5aaC5p6c5YWJ5qCH5bey57uP56e75Yqo5Yiw5LqGXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0zMjMt5LiA5Liq5p2h55uu77yM6YKj5LmI5a6D5bCG5om+5Yiw5b2T5YmN5byV55So55qE5p2h55uu5LmL5ZCO55qE5LiL5LiA5Liq5p2h55uu44CC5aaC5p6c5rKh5pyJ77yM5a6D5bCG6L+U5ZueeGFfc3RhdGXntKLlvJXlpITnmoTmnaHnm67jgILkvb/nlKhcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0OjMyNDp4YXNfbmV4dF9lbnRyeSgp6ICM5LiN5piveGFzX2ZpbmQoKeadpeenu+WKqOWIsOS4i+S4gOS4quW9k+WJjeadoeebru+8jOWcqOWkp+WkmuaVsOaDheWGteS4i+S8muiKguecgeS4gOS4quWHveaVsOiwg+eUqO+8jOS9huS7o+S7t1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzI1LeaYr+WPkeWHuuabtOWkmuWGheiBlOS7o+eggeOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdD0zNDU9WEFycmF55pyJ6IO95Yqb5bCG5aSa5Liq57Si5byV6IGU57O75Zyo5LiA6LW377yM5Zug5q2k5a+55LiA5Liq57Si5byV55qE5pON5L2c5Lya5b2x5ZON5Yiw5omA5pyJ55qE57Si5byV44CC5L6L5aaC77yM5a2Y5YKo5Yiw5Lu75L2V57Si5byV5bCGXFx1ZmZmZFxcdWZmZmQuLi5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzU0LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3Q6MzU1OuWmguaenHhhc19sb2FkKCnpgYfliLDkuIDkuKrlpJrntKLlvJXmnaHnm67vvIx4YV9zdGF0ZeS4reeahHhhX2luZGV45bCG5LiN5Lya6KKr5pS55Y+Y44CC5b2T6YGN5Y6G5LiA5LiqWEFycmF55oiW6ICF6LCD55SoeGFzX2ZpbmQoKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzU2LeaXtu+8jOWmguaenOWIneWni+e0ouW8leWcqOS4gOS4quWkmue0ouW8leadoeebrueahOS4remXtO+8jOWug+WwhuS4jeS8muiiq+aUueWPmOOAgumaj+WQjueahOiwg+eUqOaIlui/reS7o+WwhuaKiue0ouW8leenu+WIsOiMg+WbtOWGheeahOesrFxcdWZmZmRcXHVmZmZkLi4uXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE1NDM9dm9pZCAqeGFzX3N0b3JlKHN0cnVjdCB4YV9zdGF0ZSAqLCB2b2lkICplbnRyeSk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNTQ0OnZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqLCB1bnNpZ25lZCBsb25nIG1heCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNTQ1LXZvaWQgKnhhc19maW5kX2NvbmZsaWN0KHN0cnVjdCB4YV9zdGF0ZSAqKTtcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTcwMT1zdGF0aWMgaW5saW5lIHZvaWQgeGFzX3NldF9scnUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzExLSAqIHhhc19uZXh0X2VudHJ5KCkgaXMgYW4gaW5saW5lIGZ1bmN0aW9uIHRvIG9wdGltaXNlIHhhcnJheSB0cmF2ZXJzYWwgZm9yXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzEyOiAqIHNwZWVkLiAgSXQgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIHhhc19maW5kKCksIGFuZCB3aWxsIGNhbGwgeGFzX2ZpbmQoKVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcxMy0gKiBmb3IgYWxsIHRoZSBoYXJkIGNhc2VzLlxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xNzE3PXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFzX25leHRfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzIzLVxcdFxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ICE9ICh4YXMtXFx1MDAzZXhhX2luZGV4IFxcdTAwMjYgWEFfQ0hVTktfTUFTSykpKVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTcyNDpcXHRcXHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyNS1cXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyNy1cXHRcXHRpZiAodW5saWtlbHkoeGFzLVxcdTAwM2V4YV9pbmRleCBcXHUwMDNlPSBtYXgpKVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTcyODpcXHRcXHRcXHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyOS1cXHRcXHRpZiAodW5saWtlbHkoeGFzLVxcdTAwM2V4YV9vZmZzZXQgPT0gWEFfQ0hVTktfTUFTSykpXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzMwOlxcdFxcdFxcdHJldHVybiB4YXNfZmluZCh4YXMsIG1heCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzMxLVxcdFxcdGVudHJ5ID0geGFfZW50cnkoeGFzLVxcdTAwM2V4YSwgbm9kZSwgeGFzLVxcdTAwM2V4YV9vZmZzZXQgKyAxKTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MzItXFx0XFx0aWYgKHVubGlrZWx5KHhhX2lzX2ludGVybmFsKGVudHJ5KSkpXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzMzOlxcdFxcdFxcdHJldHVybiB4YXNfZmluZCh4YXMsIG1heCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzM0LVxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0Kys7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE4MDA9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4MTctI2RlZmluZSB4YXNfZm9yX2VhY2goeGFzLCBlbnRyeSwgbWF4KSBcXFxcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxODE4OlxcdGZvciAoZW50cnkgPSB4YXNfZmluZCh4YXMsIG1heCk7IGVudHJ5OyBcXFxcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xODE5LVxcdCAgICAgZW50cnkgPSB4YXNfbmV4dF9lbnRyeSh4YXMsIG1heCkpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0xMDI9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfeGFzX3JldHJ5KHN0cnVjdCB4YXJyYXkgKnhhKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTEwLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxMTE6XFx0WEFfQlVHX09OKHhhLCB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpICE9IHhhX21rX3ZhbHVlKDApKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMTItXFx0eGFfZXJhc2VfaW5kZXgoeGEsIDEpO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTI1MD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzQoc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMjYyLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxMjYzOlxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMjY0LVxcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTI2Ni1cXG5saWIvdGVzdF94YXJyYXkuYzoxMjY3OlxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMjY4LVxcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMjcwLVxcbmxpYi90ZXN0X3hhcnJheS5jOjEyNzE6XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbmxpYi90ZXN0X3hhcnJheS5jLTEyNzItXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTEyODQtXFx0cmN1X3JlYWRfbG9jaygpO1xcbmxpYi90ZXN0X3hhcnJheS5jOjEyODU6XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbmxpYi90ZXN0X3hhcnJheS5jLTEyODYtXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMjk3LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxMjk4OlxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMjk5LVxcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMzAxLVxcbmxpYi90ZXN0X3hhcnJheS5jOjEzMDI6XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbmxpYi90ZXN0X3hhcnJheS5jLTEzMDMtXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jPTE1ODY9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbW92ZV9tYXgoc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xNTkxLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxNTkyOlxcdFhBX0JVR19PTih4YSwgeGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKSAhPSB4YV9ta19pbmRleChVTE9OR19NQVgpKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxNTkzOlxcdFhBX0JVR19PTih4YSwgeGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKSAhPSBOVUxMKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xNTk0LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTU5Ny1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubGliL3Rlc3RfeGFycmF5LmM6MTU5ODpcXHRYQV9CVUdfT04oeGEsIHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0geGFfbWtfaW5kZXgoVUxPTkdfTUFYKSk7XFxubGliL3Rlc3RfeGFycmF5LmMtMTU5OS1cXHR4YXNfcGF1c2UoXFx1MDAyNnhhcyk7XFxubGliL3Rlc3RfeGFycmF5LmM6MTYwMDpcXHRYQV9CVUdfT04oeGEsIHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0gTlVMTCk7XFxubGliL3Rlc3RfeGFycmF5LmMtMTYwMS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmxpYi94YXJyYXkuYz0xMzc1PUVYUE9SVF9TWU1CT0xfR1BMKF9feGFzX25leHQpO1xcbi0tXFxubGliL3hhcnJheS5jLTEzNzctLyoqXFxubGliL3hhcnJheS5jOjEzNzg6ICogeGFzX2ZpbmQoKSAtIEZpbmQgdGhlIG5leHQgcHJlc2VudCBlbnRyeSBpbiB0aGUgWEFycmF5LlxcbmxpYi94YXJyYXkuYy0xMzc5LSAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXFxuLS1cXG5saWIveGFycmF5LmMtMTM5Mi0gKi9cXG5saWIveGFycmF5LmM6MTM5Mzp2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXFxubGliL3hhcnJheS5jLTEzOTQte1xcbi0tXFxubGliL3hhcnJheS5jPTIxNzI9RVhQT1JUX1NZTUJPTCh4YV9jbGVhcl9tYXJrKTtcXG4tLVxcbmxpYi94YXJyYXkuYy0yMTg1LSAqIGVudHJpZXMgd2hpY2ggYXJlIGJlaW5nIHNpbXVsdGFuZW91c2x5IGFkZGVkLiAgSXQgd2lsbCBub3QgcmV0dXJuIGFuXFxubGliL3hhcnJheS5jOjIxODY6ICogJVhBX1JFVFJZX0VOVFJZOyBpZiB5b3UgbmVlZCB0byBzZWUgcmV0cnkgZW50cmllcywgdXNlIHhhc19maW5kKCkuXFxubGliL3hhcnJheS5jLTIxODctICpcXG4tLVxcbmxpYi94YXJyYXkuYz0yMTkxPXZvaWQgKnhhX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgKmluZGV4cCxcXG4tLVxcbmxpYi94YXJyYXkuYy0yMjAxLVxcdFxcdGVsc2VcXG5saWIveGFycmF5LmM6MjIwMjpcXHRcXHRcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIG1heCk7XFxubGliL3hhcnJheS5jLTIyMDMtXFx0fSB3aGlsZSAoeGFzX3JldHJ5KFxcdTAwMjZ4YXMsIGVudHJ5KSk7XFxuLS1cXG5saWIveGFycmF5LmM9MjIxMj1zdGF0aWMgYm9vbCB4YXNfc2libGluZyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbmxpYi94YXJyYXkuYy0yMjM1LSAqIHdoaWNoIGFyZSBiZWluZyBzaW11bHRhbmVvdXNseSBhZGRlZC4gIEl0IHdpbGwgbm90IHJldHVybiBhblxcbmxpYi94YXJyYXkuYzoyMjM2OiAqICVYQV9SRVRSWV9FTlRSWTsgaWYgeW91IG5lZWQgdG8gc2VlIHJldHJ5IGVudHJpZXMsIHVzZSB4YXNfZmluZCgpLlxcbmxpYi94YXJyYXkuYy0yMjM3LSAqXFxuLS1cXG5saWIveGFycmF5LmM9MjI0MT12b2lkICp4YV9maW5kX2FmdGVyKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXFxuLS1cXG5saWIveGFycmF5LmMtMjI1NC1cXHRcXHRlbHNlXFxubGliL3hhcnJheS5jOjIyNTU6XFx0XFx0XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBtYXgpO1xcbmxpYi94YXJyYXkuYy0yMjU2LVxcbi0tXFxubW0vZmlsZW1hcC5jPTQ3OT1ib29sIGZpbGVtYXBfcmFuZ2VfaGFzX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9maWxlbWFwLmMtNDkwLVxcdGZvciAoOzspIHtcXG5tbS9maWxlbWFwLmM6NDkxOlxcdFxcdGZvbGlvID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgbWF4KTtcXG5tbS9maWxlbWFwLmMtNDkyLVxcdFxcdGlmICh4YXNfcmV0cnkoXFx1MDAyNnhhcywgZm9saW8pKVxcbi0tXFxubW0vZmlsZW1hcC5jPTIwNzg9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmZpbmRfZ2V0X2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBwZ29mZl90IG1heCxcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yMDg0LVxcdGlmIChtYXJrID09IFhBX1BSRVNFTlQpXFxubW0vZmlsZW1hcC5jOjIwODU6XFx0XFx0Zm9saW8gPSB4YXNfZmluZCh4YXMsIG1heCk7XFxubW0vZmlsZW1hcC5jLTIwODYtXFx0ZWxzZVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yNDM0PWJvb2wga3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NDktXFx0aWYgKCFhdHRycylcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI0NTA6XFx0XFx0cmV0dXJuICF4YXNfZmluZChcXHUwMDI2eGFzLCBlbmQgLSAxKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjM4LjkzMjIxNjM0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1Mjg2MDE4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIFhBcnJheSB1c2FnZS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgcGVydmFzaXZlIHRoZXNlIGZ1bmN0aW9ucyBhcmUuIEknbSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBhdCBob3cgYHhhX2ZpbmRgLCBgeGFfZmluZF9hZnRlcmAsIGB4YXNfZm9yX2VhY2hgLCBhbmQgYHhhc19maW5kYCBhcmUgdXRpbGl6ZWQuXG5cbioqWEFycmF5IEZ1bmN0aW9uIFVzYWdlIERlZXAgRGl2ZSoqXG5cbkl0J3MgaW1tZWRpYXRlbHkgc3RyaWtpbmcgdGhhdCBgeGFzX2Zvcl9lYWNoYCBzZWVtcyB0byBiZSB0aGUgd29ya2hvcnNlIGhlcmUuIEkgc2VlIGl0J3MgaGVhdmlseSBpbnZvbHZlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgZmlsZSBtYXBwaW5nLCBzaGFyZWQgbWVtb3J5LCBLVk0sIGZpbGVzeXN0ZW1zIOKAkyBpdCdzIGFsbCBvdmVyIHRoZSBwbGFjZSEgVGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBzaWduaWZ5aW5nIGl0cyBpbXBvcnRhbmNlIHRvIGNvcmUgZnVuY3Rpb25hbGl0aWVzLlxuXG5UaGVuLCBJIG9ic2VydmUgYHhhX2ZpbmRgIGFuZCBgeGFfZmluZF9hZnRlcmAgYXJlIGVxdWFsbHkgd2lkZXNwcmVhZCwgd2l0aCBhcHBsaWNhdGlvbiBhY3Jvc3Mga2VybmVsIG1vZHVsZXMgYW5kIHdpdGhpbiB0aGUga2VybmVsJ3MgY29yZSBzdWJzeXN0ZW1zLiBUaGVpciBicm9hZCB1c2Ugc3VnZ2VzdHMgdGhleSdyZSBjcnVjaWFsIGZvciBmdW5kYW1lbnRhbCBvcGVyYXRpb25zLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtIHdlbGwuXG5cbkZpbmFsbHksIGB4YXNfZmluZGAgaXMgbG9jYXRlZCByaWdodCBpbiBgbGliL3hhcnJheS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGhvd2V2ZXIsIHRoZSBsb2NhdGlvbiBvZiBhIHNwZWNpZmljIGZ1bmN0aW9uIGRvZXMgbm90IHRlbGwgbWUgZXZlcnl0aGluZyBhYm91dCBpdHMgdXNhZ2UuIFxuXG5Ob3csIEknbGwgcXVpY2tseSBjaGVjayBpZiBgQ09ORklHX1hBUlJBWV9NVUxUSWAgaXMgYSBjb25maWd1cmFibGUgb3B0aW9uLiBUaGlzIHdpbGwgYWZmZWN0IGhvdyBpdCdzIHVzZWQgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgYSBzdGFuZGFyZCBzZXR0aW5nLCBvciBpZiBpdCBpcyBjb25maWd1cmFibGUuIFRoaXMgd2lsbCBkZWZpbmUgdGhlIHJhbmdlIG9mIHN5c3RlbXMgdGhhdCBsZXZlcmFnZSB0aGUgZmVhdHVyZXMgb2YgdGhpcyBhcnJheS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM2OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMjo0Mi40NjA4MjE3ODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NDcxNzcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEFSUkFZX01VTFRJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnPTM0OD1jb25maWcgSU5URVJWQUxfVFJFRV9TUEFOX0lURVJcXG4tLVxcbmxpYi9LY29uZmlnLTM1MS1cXG5saWIvS2NvbmZpZzozNTI6Y29uZmlnIFhBUlJBWV9NVUxUSVxcbmxpYi9LY29uZmlnLTM1My1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjQ1LjA0NTU0NTM3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDcxNzkzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZXNlIHNldHRpbmdzOiB0aGUgYEtjb25maWdgIGZpbGVzLiBHaXZlbiB0aGF0IEknbSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgYXJlYSBvciBmZWF0dXJlLCBhIHRhcmdldGVkIGFwcHJvYWNoIGlzIGJlc3QuIEknbSBob21pbmcgaW4gb24gbGluZSAzNTIgaW4gYGxpYi9LY29uZmlnYC4gVGhpcyBzdWdnZXN0cyBJIGhhdmUgYSBzcGVjaWZpYyBjb250ZXh0IGluIG1pbmQuIFBlcmhhcHMgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgcGFydGljdWxhciBvcHRpb24sIGEgZGVwZW5kZW5jeSBjaGFpbiwgb3IgaG93IGEgZmVhdHVyZSBpcyBjb25kaXRpb25hbGx5IGVuYWJsZWQuIFRoZSBsaW5lIG51bWJlciBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIGV4cGVjdCB0byBzZWUgdGhlIG1lYXQgb2Ygd2hhdCBJJ20gbG9va2luZyBmb3IgdGhlcmUgaW4gdGhlIGBLY29uZmlnYCBmaWxlLiBJJ20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoYXQgc3BlY2lmaWMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBsYW5ndWFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg4NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjQ3LjI5MjczMDc4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ1OlxcdFxcbiAzNDY6XFx0XFx0ICBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gMzQ3OlxcdFxcbiAzNDg6XFx0Y29uZmlnIElOVEVSVkFMX1RSRUVfU1BBTl9JVEVSXFxuIDM0OTpcXHRcXHRib29sXFxuIDM1MDpcXHRcXHRkZXBlbmRzIG9uIElOVEVSVkFMX1RSRUVcXG4gMzUxOlxcdFxcbiAzNTI6XFx0Y29uZmlnIFhBUlJBWV9NVUxUSVxcbiAzNTM6XFx0XFx0Ym9vbFxcbiAzNTQ6XFx0XFx0aGVscFxcbiAzNTU6XFx0XFx0ICBTdXBwb3J0IGVudHJpZXMgd2hpY2ggb2NjdXB5IG11bHRpcGxlIGNvbnNlY3V0aXZlIGluZGljZXMgaW4gdGhlXFxuIDM1NjpcXHRcXHQgIFhBcnJheS5cXG4gMzU3OlxcdFxcbiAzNTg6XFx0Y29uZmlnIEFTU09DSUFUSVZFX0FSUkFZXFxuIDM1OTpcXHRcXHRib29sXFxuIDM2MDpcXHRcXHRoZWxwXFxuIDM2MTpcXHRcXHQgIEdlbmVyaWMgYXNzb2NpYXRpdmUgYXJyYXkuICBDYW4gYmUgc2VhcmNoZWQgYW5kIGl0ZXJhdGVkIG92ZXIgd2hpbHN0XFxuIDM2MjpcXHRcXHQgIGl0IGlzIGJlaW5nIG1vZGlmaWVkLiAgSXQgaXMgYWxzbyByZWFzb25hYmx5IHF1aWNrIHRvIHNlYXJjaCBhbmRcXG4gMzYzOlxcdFxcdCAgbW9kaWZ5LiAgVGhlIGFsZ29yaXRobXMgYXJlIG5vbi1yZWN1cnNpdmUsIGFuZCB0aGUgdHJlZXMgYXJlIGhpZ2hseVxcbiAzNjQ6XFx0XFx0ICBjYXBhY2lvdXMuXFxuIDM2NTpcXHRcXG4gMzY2OlxcdFxcdCAgU2VlOlxcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRcXHREb2N1bWVudGF0aW9uL2NvcmUtYXBpL2Fzc29jX2FycmF5LnJzdFxcbiAzNjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjQ3LjI5Mjg3NTM3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQ1NjAwMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBYQVJSQVlfTVVMVElgIFNlbGVjdGlvbiBpbiB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCdzIGNob29zaW5nIGBYQVJSQVlfTVVMVElgIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gSSB3YW50IGEgaG9saXN0aWMgdmlldywgYSBtYXAsIG9mIHdoZXJlIGFuZCBob3cgdGhpcyBmbGFnIGlzIGJlaW5nIHRyaWdnZXJlZC4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMsIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgYW5kIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBpdHMgc2VsZWN0aW9uLiBJdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBoZXJlIGlzIGdvaW5nIHRvIGluZm9ybSBteSBuZXh0IHN0ZXBzLiBUaGlzIGtpbmQgb2Yga2VybmVsLWxldmVsIGludmVzdGlnYXRpb24gaXMgc2Vjb25kIG5hdHVyZSwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSdtIHByZWNpc2UgYW5kIGNvbXByZWhlbnNpdmUuIExldCdzIHNlZSB3aGF0IHdlIHVuY292ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDE4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMjo0OS45Mzg0Nzg1NjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTU5NTQxMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFhBUlJBWV9NVUxUSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTE4Mjc9Y29uZmlnIFg4Nl9TR1hcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTgzMi1cXHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQVxcbmFyY2gveDg2L0tjb25maWc6MTgzMzpcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuYXJjaC94ODYvS2NvbmZpZy0xODM0LVxcdGhlbHBcXG4tLVxcbmZzL0tjb25maWc9MjczPWNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI3NTpcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuZnMvS2NvbmZpZy0yNzYtXFxuLS1cXG5tbS9LY29uZmlnPTg0Nj1tZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuLS1cXG5tbS9LY29uZmlnLTg0OS1cXHRzZWxlY3QgQ09NUEFDVElPTlxcbm1tL0tjb25maWc6ODUwOlxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG5tbS9LY29uZmlnLTg1MS1cXHRzZWxlY3QgTU1fSURcXG4tLVxcbm1tL0tjb25maWc9MTIzNj1jb25maWcgWk9ORV9ERVZJQ0VcXG4tLVxcbm1tL0tjb25maWctMTI0MC1cXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxubW0vS2NvbmZpZzoxMjQxOlxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG5tbS9LY29uZmlnLTEyNDItXFxuLS1cXG5zb3VuZC9jb3JlL0tjb25maWc9MTgxPWNvbmZpZyBTTkRfQ1RMX0ZBU1RfTE9PS1VQXFxuLS1cXG5zb3VuZC9jb3JlL0tjb25maWctMTgzLVxcdGRlZmF1bHQgeVxcbnNvdW5kL2NvcmUvS2NvbmZpZzoxODQ6XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbnNvdW5kL2NvcmUvS2NvbmZpZy0xODUtXFx0aGVscFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz0xMDY9Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxcbnZpcnQva3ZtL0tjb25maWc6MTA3OiAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXFxudmlydC9rdm0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjI6NTIuNDM0NDQyNzY5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NTE3Njk2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06XG5cbioqWEFycmF5IEludmVzdGlnYXRpb24gLSBJbml0aWFsIFRob3VnaHRzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgWEFSUkFZX01VTFRJYCBpcyBnZXR0aW5nIHB1bGxlZCBpbiBieSBhIGZldyBkaWZmZXJlbnQgb3B0aW9ucywgbmFtZWx5IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBIVUdFVExCX1BBR0VgLCBhbmQgYFNORF9DVExfRkFTVF9MT09LVVBgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJdCdzIGEga2V5IGNvbXBvbmVudCwgb2J2aW91c2x5LCBpZiBpdCdzIGRlcGVuZGVudCBvbiB0aG9zZSBjb21tb25seSB1c2VkIGZlYXR1cmVzLiBBbmQsIEkgYWxzbyBrbm93IHRoYXQgYHhhcnJheS5jYCBpcyBhbHdheXMgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUgdm1saW51eCBpbWFnZS4gVGhhdCBtZWFucyBpdCdzIHByZXR0eSBmdW5kYW1lbnRhbCwgYSBjb3JlIHBhcnQgb2YgdGhlIGtlcm5lbCdzIGluZnJhc3RydWN0dXJlLiBJdCdzIG5vdCBhIG1vZHVsYXIgY29tcG9uZW50IHRoYXQgY2FuIGJlIGVhc2lseSBzd2FwcGVkIG91dC5cblxuR2l2ZW4gdGhhdCwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBsaWIvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYHhhcnJheS5vYCBpcyBjb21waWxlZC4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoYXQgaW5mbHVlbmNlcyBpdHMgaW5jbHVzaW9uLiBUaGlzIHNob3VsZCBhbHNvIGhlbHAgZXN0YWJsaXNoIHRoZSBjb250ZXh0IGZvciBgWEFSUkFZX01VTFRJYCdzIHJvbGUgaW4gcmVsYXRpb24gdG8gdGhvc2Ugb3RoZXIgdmFyaWFibGVzIGFuZCB1bHRpbWF0ZWx5LCB0byBnYWluIGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDUzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjI6NTUuMzg2MjE3MDQ3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjE3NDY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4YXJyYXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9NYWtlZmlsZT0zNj1saWIteSA6PSBjdHlwZS5vIHN0cmluZy5vIHZzcHJpbnRmLm8gY21kbGluZS5vIFxcXFxcXG5saWIvTWFrZWZpbGU6Mzc6XFx0IHJidHJlZS5vIHJhZGl4LXRyZWUubyB0aW1lcnF1ZXVlLm8geGFycmF5Lm8gXFxcXFxcbmxpYi9NYWtlZmlsZS0zOC1cXHQgbWFwbGVfdHJlZS5vIGlkci5vIGV4dGFibGUubyBpcnFfcmVncy5vIGFyZ3Zfc3BsaXQubyBcXFxcXFxuLS1cXG5saWIvTWFrZWZpbGU9OTI9ZW5kaWZcXG5saWIvTWFrZWZpbGUtOTMtXFxubGliL01ha2VmaWxlOjk0Om9iai0kKENPTkZJR19URVNUX1hBUlJBWSkgKz0gdGVzdF94YXJyYXkub1xcbmxpYi9NYWtlZmlsZS05NS1vYmotJChDT05GSUdfVEVTVF9NQVBMRV9UUkVFKSArPSB0ZXN0X21hcGxlX3RyZWUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMjo1NS40NTIzOTgyNTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkxMDMyMTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHhhcnJheSBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYHhhc19maW5kYCB3aXRoaW4gYGxpYi94YXJyYXkuY2AsIGEgY3JpdGljYWwgZnVuY3Rpb24gd2l0aGluIHRoZSB4YXJyYXkgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIGhhbmRsaW5nIHRoZSBgeGFzLVx1MDAzZXhhX29mZnNldGAgY2FsY3VsYXRpb24gd2hlbiBkZWFsaW5nIHdpdGggbm9uLWxlYWYgbm9kZXMgKGB4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdCAhPSAwYCkuIEJlZm9yZSwgdGhpcyBzcGVjaWZpYyBjb25kaXRpb24gd2Fzbid0IGNvcnJlY3RseSBhZGRyZXNzZWQsIGJ1dCBub3cgaXQgY2hlY2tzIGB4YXMtXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSlgIGFuZCBhZGp1c3RzIGFjY29yZGluZ2x5LiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgY2hhbmdlIHRvIGhvdyB0aGUgeGFycmF5IHRyYXZlcnNlcyBpdHMgc3RydWN0dXJlLlxuXG5Ob3csIGlzIHRoaXMgY29kZSBwYXRoIGFjdHVhbGx5ICpyZWFjaGFibGUqIGluIGEgcnVubmluZyBrZXJuZWw/IEFic29sdXRlbHkuIGB4YXNfZmluZGAgaXMgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbiwgdXNlZCBleHRlbnNpdmVseSBpbiB0aGluZ3MgbGlrZSB0aGUgcGFnZSBjYWNoZSwgc2hhcmVkIG1lbW9yeSBsb29rdXBzIChzaG1lbSksIEtWTSwgc291bmQgY29udHJvbCwgYW5kIGZpbGUgbWFwcGluZy4gSXQncyBwYXJ0IG9mIHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBkYXRhIHN0cnVjdHVyZXMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5HaXZlbiB0aGUgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGlmIHNvbWV0aGluZyBpcyB3b3J0aCBmdXp6aW5nLCB0aGlzIGlzIGEgY2xlYXIgeWVzLiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIHN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSBtZW1vcnkgbWFuYWdlbWVudCB0aHJvdWdoIHRoZSB4YXJyYXksIGFuZCBpdCBpbnZvbHZlcyByZXN0cnVjdHVyaW5nIG9mIGEgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlLiBUaGlzIHRpY2tzIGFsbCB0aGUgYm94ZXMuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBDbGVhcmx5LCBgeGFzX2ZpbmRgIGl0c2VsZiBpcyBhIHByaW1lIGNhbmRpZGF0ZSwgZ2l2ZW4gaXQgd2FzIGRpcmVjdGx5IG1vZGlmaWVkLiBCdXQgbGV0J3MgbG9vayBmb3IgZGlyZWN0IHdyYXBwZXJzOiBgeGFfZmluZGAgYW5kIGB4YV9maW5kX2FmdGVyYCBhcmUgcmlnaHQgdGhlcmUgYW5kIGNhbGwgYHhhc19maW5kYC4gVGhleSBhcmUgaW1tZWRpYXRlbHkgcmVsZXZhbnQuIFRpbWUgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBlbnRyeXBvaW50cyBpbiBgbGliL3hhcnJheS5jYCB0aGF0IGNhbGwgYHhhc19maW5kYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjM6MDAuMzYyNzI0NDcyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDUzNjA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4YXNfZmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIveGFycmF5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3hhcnJheS5jPTEzNzU9RVhQT1JUX1NZTUJPTF9HUEwoX194YXNfbmV4dCk7XFxuLS1cXG5saWIveGFycmF5LmMtMTM3Ny0vKipcXG5saWIveGFycmF5LmM6MTM3ODogKiB4YXNfZmluZCgpIC0gRmluZCB0aGUgbmV4dCBwcmVzZW50IGVudHJ5IGluIHRoZSBYQXJyYXkuXFxubGliL3hhcnJheS5jLTEzNzktICogQHhhczogWEFycmF5IG9wZXJhdGlvbiBzdGF0ZS5cXG4tLVxcbmxpYi94YXJyYXkuYy0xMzkyLSAqL1xcbmxpYi94YXJyYXkuYzoxMzkzOnZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcXG5saWIveGFycmF5LmMtMTM5NC17XFxuLS1cXG5saWIveGFycmF5LmMtMTQ0MC19XFxubGliL3hhcnJheS5jOjE0NDE6RVhQT1JUX1NZTUJPTF9HUEwoeGFzX2ZpbmQpO1xcbmxpYi94YXJyYXkuYy0xNDQyLVxcbmxpYi94YXJyYXkuYy0xNDQzLS8qKlxcbmxpYi94YXJyYXkuYzoxNDQ0OiAqIHhhc19maW5kX21hcmtlZCgpIC0gRmluZCB0aGUgbmV4dCBtYXJrZWQgZW50cnkgaW4gdGhlIFhBcnJheS5cXG5saWIveGFycmF5LmMtMTQ0NS0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxcbi0tXFxubGliL3hhcnJheS5jLTE0NjMtICovXFxubGliL3hhcnJheS5jOjE0NjQ6dm9pZCAqeGFzX2ZpbmRfbWFya2VkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCwgeGFfbWFya190IG1hcmspXFxubGliL3hhcnJheS5jLTE0NjUte1xcbi0tXFxubGliL3hhcnJheS5jLTE1MTEtXFxubGliL3hhcnJheS5jOjE1MTI6XFx0XFx0b2Zmc2V0ID0geGFzX2ZpbmRfY2h1bmsoeGFzLCBhZHZhbmNlLCBtYXJrKTtcXG5saWIveGFycmF5LmMtMTUxMy1cXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2UgeGFzLVxcdTAwM2V4YV9vZmZzZXQpIHtcXG4tLVxcbmxpYi94YXJyYXkuYy0xNTQyLX1cXG5saWIveGFycmF5LmM6MTU0MzpFWFBPUlRfU1lNQk9MX0dQTCh4YXNfZmluZF9tYXJrZWQpO1xcbmxpYi94YXJyYXkuYy0xNTQ0LVxcbmxpYi94YXJyYXkuYy0xNTQ1LS8qKlxcbmxpYi94YXJyYXkuYzoxNTQ2OiAqIHhhc19maW5kX2NvbmZsaWN0KCkgLSBGaW5kIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW4gYSByYW5nZS5cXG5saWIveGFycmF5LmMtMTU0Ny0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxcbi0tXFxubGliL3hhcnJheS5jLTE1NTMtICovXFxubGliL3hhcnJheS5jOjE1NTQ6dm9pZCAqeGFzX2ZpbmRfY29uZmxpY3Qoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxubGliL3hhcnJheS5jLTE1NTUte1xcbi0tXFxubGliL3hhcnJheS5jLTE2MDMtfVxcbmxpYi94YXJyYXkuYzoxNjA0OkVYUE9SVF9TWU1CT0xfR1BMKHhhc19maW5kX2NvbmZsaWN0KTtcXG5saWIveGFycmF5LmMtMTYwNS1cXG4tLVxcbmxpYi94YXJyYXkuYz0xOTg3PWludCBfX3hhX2FsbG9jKHN0cnVjdCB4YXJyYXkgKnhhLCB1MzIgKmlkLCB2b2lkICplbnRyeSxcXG4tLVxcbmxpYi94YXJyYXkuYy0yMDAxLVxcdFxcdHhhcy54YV9pbmRleCA9IGxpbWl0Lm1pbjtcXG5saWIveGFycmF5LmM6MjAwMjpcXHRcXHR4YXNfZmluZF9tYXJrZWQoXFx1MDAyNnhhcywgbGltaXQubWF4LCBYQV9GUkVFX01BUkspO1xcbmxpYi94YXJyYXkuYy0yMDAzLVxcdFxcdGlmICh4YXMueGFfbm9kZSA9PSBYQVNfUkVTVEFSVClcXG4tLVxcbmxpYi94YXJyYXkuYz0yMTcyPUVYUE9SVF9TWU1CT0woeGFfY2xlYXJfbWFyayk7XFxuLS1cXG5saWIveGFycmF5LmMtMjE4NS0gKiBlbnRyaWVzIHdoaWNoIGFyZSBiZWluZyBzaW11bHRhbmVvdXNseSBhZGRlZC4gIEl0IHdpbGwgbm90IHJldHVybiBhblxcbmxpYi94YXJyYXkuYzoyMTg2OiAqICVYQV9SRVRSWV9FTlRSWTsgaWYgeW91IG5lZWQgdG8gc2VlIHJldHJ5IGVudHJpZXMsIHVzZSB4YXNfZmluZCgpLlxcbmxpYi94YXJyYXkuYy0yMTg3LSAqXFxuLS1cXG5saWIveGFycmF5LmM9MjE5MT12b2lkICp4YV9maW5kKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXFxuLS1cXG5saWIveGFycmF5LmMtMjE5OS1cXHRcXHRpZiAoKF9fZm9yY2UgdW5zaWduZWQgaW50KWZpbHRlciBcXHUwMDNjIFhBX01BWF9NQVJLUylcXG5saWIveGFycmF5LmM6MjIwMDpcXHRcXHRcXHRlbnRyeSA9IHhhc19maW5kX21hcmtlZChcXHUwMDI2eGFzLCBtYXgsIGZpbHRlcik7XFxubGliL3hhcnJheS5jLTIyMDEtXFx0XFx0ZWxzZVxcbmxpYi94YXJyYXkuYzoyMjAyOlxcdFxcdFxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgbWF4KTtcXG5saWIveGFycmF5LmMtMjIwMy1cXHR9IHdoaWxlICh4YXNfcmV0cnkoXFx1MDAyNnhhcywgZW50cnkpKTtcXG4tLVxcbmxpYi94YXJyYXkuYz0yMjEyPXN0YXRpYyBib29sIHhhc19zaWJsaW5nKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubGliL3hhcnJheS5jLTIyMzUtICogd2hpY2ggYXJlIGJlaW5nIHNpbXVsdGFuZW91c2x5IGFkZGVkLiAgSXQgd2lsbCBub3QgcmV0dXJuIGFuXFxubGliL3hhcnJheS5jOjIyMzY6ICogJVhBX1JFVFJZX0VOVFJZOyBpZiB5b3UgbmVlZCB0byBzZWUgcmV0cnkgZW50cmllcywgdXNlIHhhc19maW5kKCkuXFxubGliL3hhcnJheS5jLTIyMzctICpcXG4tLVxcbmxpYi94YXJyYXkuYz0yMjQxPXZvaWQgKnhhX2ZpbmRfYWZ0ZXIoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgKmluZGV4cCxcXG4tLVxcbmxpYi94YXJyYXkuYy0yMjUyLVxcdFxcdGlmICgoX19mb3JjZSB1bnNpZ25lZCBpbnQpZmlsdGVyIFxcdTAwM2MgWEFfTUFYX01BUktTKVxcbmxpYi94YXJyYXkuYzoyMjUzOlxcdFxcdFxcdGVudHJ5ID0geGFzX2ZpbmRfbWFya2VkKFxcdTAwMjZ4YXMsIG1heCwgZmlsdGVyKTtcXG5saWIveGFycmF5LmMtMjI1NC1cXHRcXHRlbHNlXFxubGliL3hhcnJheS5jOjIyNTU6XFx0XFx0XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBtYXgpO1xcbmxpYi94YXJyYXkuYy0yMjU2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMzowMC40NTc0NDc1MjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxNTY4NDQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYYXJyYXkgTW9kdWxlIFRlc3RpbmcgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHhhcnJheSB0ZXN0IHNpdHVhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBjb21wcmVoZW5zaXZlbHkgY292ZXJpbmcgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgc28gSSdsbCBjaGVjayBgdGVzdF94YXJyYXkuY2AgYXMgd2VsbC4gUmlnaHQsIHRoZSB0ZXN0cyBpbiBgbGliL3Rlc3RfeGFycmF5LmNgIGFyZSB0aWVkIHRvIHRoYXQgYENPTkZJR19URVNUX1hBUlJBWWAgbW9kdWxlLCBzbyB0aGF0J3Mgd2hlcmUgdGhlIHByaW1hcnkgc2VsZi1jaGVja3MgYXJlIGhhcHBlbmluZy5cblxuTXkgZm9jdXMgZm9yIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBkZWZpbml0ZWx5IGJlIG9uOlxuKiAgIGB4YXNfZmluZGBcbiogICBgeGFfZmluZGBcbiogICBgeGFfZmluZF9hZnRlcmBcblxuQnV0IEkgZG9uJ3Qgd2FudCB0byBtaXNzIGFueXRoaW5nLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrLCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcml0aWNhbCB0byBjb3Zlcj9cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgYnJvYWRlciBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFBlcmhhcHMgSSBuZWVkIHRvIGNoZWNrIGlmIGBmaWxlbWFwX3JhbmdlX2hhc19wYWdlYCBvciBgZmluZF9zd2FwX2VudHJ5YCB1dGlsaXplIGB4YXNfZmluZGAuIFRoYXQgd291bGQgYmUgYW4gaW1wb3J0YW50IGFkZGl0aW9uIHRvIG15IHVuZGVyc3RhbmRpbmcuXG5cbkEgcXVpY2sgYW5kIGRpcnR5IGNoZWNrIHdvdWxkIGJlIHRvIHNpbXBseSBgZ3JlcGAgYWNyb3NzIHRoZSBgbW0vYCBkaXJlY3RvcnkgZm9yIGFueSBjYWxscyB0byBgeGFzX2ZpbmRgLiBUaGF0IHNob3VsZCBxdWlja2x5IHVuY292ZXIgYW55IHVzYWdlcyB0aGF0IEkgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IGF3YXJlIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAwNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMzowMy4xNzMxMzU4ODFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNTA1MDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhhc19maW5kXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZpbGVtYXAuYz00Nzk9Ym9vbCBmaWxlbWFwX3JhbmdlX2hhc19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vZmlsZW1hcC5jLTQ5MC1cXHRmb3IgKDs7KSB7XFxubW0vZmlsZW1hcC5jOjQ5MTpcXHRcXHRmb2xpbyA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIG1heCk7XFxubW0vZmlsZW1hcC5jLTQ5Mi1cXHRcXHRpZiAoeGFzX3JldHJ5KFxcdTAwMjZ4YXMsIGZvbGlvKSlcXG4tLVxcbm1tL2ZpbGVtYXAuYz0yMDc4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmaW5kX2dldF9lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgcGdvZmZfdCBtYXgsXFxuLS1cXG5tbS9maWxlbWFwLmMtMjA4NC1cXHRpZiAobWFyayA9PSBYQV9QUkVTRU5UKVxcbm1tL2ZpbGVtYXAuYzoyMDg1OlxcdFxcdGZvbGlvID0geGFzX2ZpbmQoeGFzLCBtYXgpO1xcbm1tL2ZpbGVtYXAuYy0yMDg2LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjM6MDMuMjU2NjQ2ODg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzQxNzUzMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFNlYXJjaCBUZXJtcyBmb3IgYHhhX2ZpbmRgIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoZXNlIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgd2UncmUgdGFyZ2V0aW5nIHRoZSBYQXJyYXkgZGF0YSBzdHJ1Y3R1cmUgYW5kIGl0cyBzZWFyY2ggZnVuY3Rpb25hbGl0aWVzLlwiIFRoZSBmYWN0IHRoYXQgd2UncmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGB4YV9maW5kKGAgYW5kIGB4YV9maW5kX2FmdGVyKGAgc3Ryb25nbHkgc3VnZ2VzdHMgd2UncmUgZGlnZ2luZyBpbnRvIHRoZSBjb3JlIHNlYXJjaCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIFhBcnJheSBjb2RlIGJhc2UuXG5cbldlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiBvdGhlciBgeGFfYCBmdW5jdGlvbnMsIGFuZCBvbmx5IHRob3NlIHdoaWNoIHBlcnRhaW4gdG8gZmluZGluZyBhcmUgb2YgaW50ZXJlc3QuIFRoaXMgdGVsbHMgbWUgdGhhdCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBlaXRoZXIgYSBmdW5jdGlvbiBjYWxsIG9yIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHNlYXJjaCBmdW5jdGlvbmFsaXRpZXMuIFxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYzMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIzOjA1LjI5MDgyNTAzMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxMDU4NDgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcYnhhX2ZpbmRcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9ODg9YnkgY2FsbGluZyB4YV9mb3JfZWFjaCgpLCB4YV9mb3JfZWFjaF9zdGFydCgpIG9yIHhhX2Zvcl9lYWNoX3JhbmdlKCkuXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0Ojg5OllvdSBtYXkgcHJlZmVyIHRvIHVzZSB4YV9maW5kKCkgb3IgeGFfZmluZF9hZnRlcigpIHRvIG1vdmUgdG8gdGhlIG5leHRcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtOTAtcHJlc2VudCBlbnRyeSBpbiB0aGUgWEFycmF5Llxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTE5NT1UYWtlcyBSQ1UgcmVhZCBsb2NrOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0LTE5OS0gKiB4YV9mb3JfZWFjaF9yYW5nZSgpXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjIwMDogKiB4YV9maW5kKClcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtMjAxLSAqIHhhX2ZpbmRfYWZ0ZXIoKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTQxOT1Zb3UgY2FuIHNlYXJjaCBmb3IgdGhlIG5leHQgcHJlc2VudCBlbnRyeSB1c2luZyB4YXNfZmluZCgpLiAgVGhpc1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0MjA6aXMgdGhlIGVxdWl2YWxlbnQgb2YgYm90aCB4YV9maW5kKCkgYW5kIHhhX2ZpbmRfYWZ0ZXIoKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDIxLWlmIHRoZSBjdXJzb3IgaGFzIGJlZW4gd2Fsa2VkIHRvIGFuIGVudHJ5LCB0aGVuIGl0IHdpbGwgZmluZCB0aGUgbmV4dFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdD03Nj14YV9mb3JfZWFjaCgp44CBeGFfZm9yX2VhY2hfc3RhcnQoKeaIlnhhX2Zvcl9lYWNoX3JhbmdlKCnmnaXpgY3ljoZYQXJyYXnkuK3nmoTnjrDmnInmnaHnm67jgILkvaBcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0Ojc3OuWPr+iDveabtOWWnOasouS9v+eUqHhhX2ZpbmQoKeaIlnhhX2ZpbmRfYWZ0ZXIoKeadpeenu+WKqOWIsFhBcnJheeS4reeahOS4i+S4gOS4quW9k+WJjeadoeebruOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtNzgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0PTEzNT14YV9zdG9yZSgpLCB4YV9jbXB4Y2hnKCksIHhhX2FsbG9jKCksIHhhX3Jlc2VydmUoKeWSjHhhX2luc2VydCgp5Ye95pWw5o6l5Y+X5LiA5LiqZ2ZwX3Tlj4LmlbDvvIzku6VcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMTU2LSAqIHhhX2Zvcl9lYWNoX3JhbmdlKClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0OjE1NzogKiB4YV9maW5kKClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTE1OC0gKiB4YV9maW5kX2FmdGVyKClcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3Q9MzE1PXhhc19sb2FkKCnkvJrlsL3lj6/og73lnLDlsIZ4YV9zdGF0Zeenu+WKqOWIsOivpeadoeebrumZhOi/keOAguWmguaenOS9oOefpemBk3hhX3N0YXRl5bey57uP56e75Yqo5Yiw5LqG6K+l5p2h55uu77yM5bm25LiU6ZyA6KaB5qOA5p+lXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTMyMS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0OjMyMjrkvaDlj6/ku6Xkvb/nlKh4YXNfZmluZCgp5pCc57Si5LiL5LiA5Liq5b2T5YmN5p2h55uu44CC6L+Z55u45b2T5LqOeGFfZmluZCgp5ZKMeGFfZmluZF9hZnRlcigp77yb5aaC5p6c5YWJ5qCH5bey57uP56e75Yqo5Yiw5LqGXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0zMjMt5LiA5Liq5p2h55uu77yM6YKj5LmI5a6D5bCG5om+5Yiw5b2T5YmN5byV55So55qE5p2h55uu5LmL5ZCO55qE5LiL5LiA5Liq5p2h55uu44CC5aaC5p6c5rKh5pyJ77yM5a6D5bCG6L+U5ZueeGFfc3RhdGXntKLlvJXlpITnmoTmnaHnm67jgILkvb/nlKhcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz0zNTA9c3RydWN0IGRwbGxfcGluX3JlZiAqZHBsbF94YV9yZWZfZHBsbF9maXJzdChzdHJ1Y3QgeGFycmF5ICp4YV9yZWZzKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM1NC1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzU1OlxcdHJlZiA9IHhhX2ZpbmQoeGFfcmVmcywgXFx1MDAyNmksIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM1Ni1cXHRXQVJOX09OKCFyZWYpO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTIwLSNkZWZpbmUgeGFfZm9yX2VhY2hfbWFya2VkX3N0YXJ0KHhhLCBpbmRleCwgZW50cnksIGZpbHRlciwgc3RhcnQpIFxcXFxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MjE6XFx0Zm9yIChpbmRleCA9IHN0YXJ0LCBlbnRyeSA9IHhhX2ZpbmQoeGEsIFxcdTAwMjZpbmRleCwgVUxPTkdfTUFYLCBmaWx0ZXIpOyBcXFxcXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTIyLVxcdCAgICAgZW50cnk7IGVudHJ5ID0geGFfZmluZF9hZnRlcih4YSwgXFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIGZpbHRlcikpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTI0MD1kcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTI1My1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTI1NDpcXHRyZWZfc3luY19waW4gPSB4YV9maW5kKFxcdTAwMjZwaW4tXFx1MDAzZXJlZl9zeW5jX3BpbnMsIFxcdTAwMjZyZWZfc3luY19waW5faWR4LFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjU1LVxcdFxcdFxcdCAgICAgICBVTE9OR19NQVgsIFhBX1BSRVNFTlQpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3VzZXJxLmM9MTIyNz12b2lkIGFtZGdwdV91c2VycV9tZ3JfZmluaShzdHJ1Y3QgYW1kZ3B1X3VzZXJxX21nciAqdXNlcnFfbWdyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3VzZXJxLmMtMTIzMy1cXHRcXHR4YV9sb2NrKFxcdTAwMjZ1c2VycV9tZ3ItXFx1MDAzZXVzZXJxX3hhKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdXNlcnEuYzoxMjM0OlxcdFxcdHF1ZXVlID0geGFfZmluZChcXHUwMDI2dXNlcnFfbWdyLVxcdTAwM2V1c2VycV94YSwgXFx1MDAyNnF1ZXVlX2lkLCBVTE9OR19NQVgsXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3VzZXJxLmMtMTIzNS1cXHRcXHRcXHRcXHRYQV9QUkVTRU5UKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYz0zODI0PXN0YXRpYyBzdHJ1Y3QgcGFudGhvcl9ncm91cCAqZ3JvdXBfZnJvbV9oYW5kbGUoc3RydWN0IHBhbnRob3JfZ3JvdXBfcG9vbCAqcG9vbCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYy0zODI5LVxcdHhhX2xvY2soXFx1MDAyNnBvb2wtXFx1MDAzZXhhKTtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX3NjaGVkLmM6MzgzMDpcXHRncm91cCA9IGdyb3VwX2dldCh4YV9maW5kKFxcdTAwMjZwb29sLVxcdTAwM2V4YSwgXFx1MDAyNmdyb3VwX2hhbmRsZSwgZ3JvdXBfaGFuZGxlLCBHUk9VUF9SRUdJU1RFUkVEKSk7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9zY2hlZC5jLTM4MzEtXFx0eGFfdW5sb2NrKFxcdTAwMjZwb29sLVxcdTAwM2V4YSk7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9uZXRkZXZfcnguYz00Nzc9dm9pZCAqaGZpMV9uZXRkZXZfZ2V0X2ZpcnN0X2RhdGEoc3RydWN0IGhmaTFfZGV2ZGF0YSAqZGQsIGludCAqc3RhcnRfaWQpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9uZXRkZXZfcnguYy00ODItXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvbmV0ZGV2X3J4LmM6NDgzOlxcdHJldCA9IHhhX2ZpbmQoXFx1MDAyNnJ4LVxcdTAwM2VkZXZfdGJsLCBcXHUwMDI2aW5kZXgsIFVJTlRfTUFYLCBYQV9QUkVTRU5UKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9uZXRkZXZfcnguYy00ODQtXFx0KnN0YXJ0X2lkID0gKGludClpbmRleDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lc3dpdGNoLmg9NzUwPXZvaWQgbWx4NWVfdGNfY2xlYW5fZmRiX3BlZXJfZmxvd3Moc3RydWN0IG1seDVfZXN3aXRjaCAqZXN3KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lc3dpdGNoLmgtNzY5LSNkZWZpbmUgbWx4NV9lc3dfZm9yX2VhY2hfZW50cnlfbWFya2VkKHhhLCBpbmRleCwgZW50cnksIGxhc3QsIGZpbHRlcilcXHRcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guaDo3NzA6XFx0Zm9yIChpbmRleCA9IDAsIGVudHJ5ID0geGFfZmluZCh4YSwgXFx1MDAyNmluZGV4LCBsYXN0LCBmaWx0ZXIpOyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guaC03NzEtXFx0ICAgICBlbnRyeTsgZW50cnkgPSB4YV9maW5kX2FmdGVyKHhhLCBcXHUwMDI2aW5kZXgsIGxhc3QsIGZpbHRlcikpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5jPTM4MD1zdGF0aWMgaW50IG1seDVfbGFnX2dldF9tYXN0ZXJfaWR4KHN0cnVjdCBtbHg1X2xhZyAqbGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmMtMzg3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmM6Mzg4OlxcdGVudHJ5ID0geGFfZmluZChcXHUwMDI2bGRldi1cXHUwMDNlcGZzLCBcXHUwMDI2aWR4LCBVOF9NQVgsIE1MWDVfTEFHX1hBX01BUktfTUFTVEVSKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5jLTM4OS1cXHRpZiAoIWVudHJ5KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9sYWcuYz01NjI9c3RhdGljIHZvaWQgbWx4NV9sYWdfY2xlYXJfbWFzdGVyKHN0cnVjdCBtbHg1X2xhZyAqbGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmMtNTY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmM6NTY3OlxcdGVudHJ5ID0geGFfZmluZChcXHUwMDI2bGRldi1cXHUwMDNlcGZzLCBcXHUwMDI2aWR4LCBVOF9NQVgsIE1MWDVfTEFHX1hBX01BUktfTUFTVEVSKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5jLTU2OC1cXHRpZiAoIWVudHJ5KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9sYWcuaC0yMi0jZGVmaW5lIHhhX2Zvcl9lYWNoX21hcmtlZF9zdGFydCh4YSwgaW5kZXgsIGVudHJ5LCBmaWx0ZXIsIHN0YXJ0KVxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5oOjIzOlxcdGZvciAoaW5kZXggPSBzdGFydCwgZW50cnkgPSB4YV9maW5kKHhhLCBcXHUwMDI2aW5kZXgsIFVMT05HX01BWCwgZmlsdGVyKTsgXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmgtMjQtXFx0ICAgICBlbnRyeTsgZW50cnkgPSB4YV9maW5kX2FmdGVyKHhhLCBcXHUwMDI2aW5kZXgsIFVMT05HX01BWCwgZmlsdGVyKSlcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsL3BtdC90ZWxlbWV0cnkuYz0xNzI9c3RydWN0IHRlbGVtX2VuZHBvaW50ICpwbXRfdGVsZW1fcmVnaXN0ZXJfZW5kcG9pbnQoaW50IGRldmlkKVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWwvcG10L3RlbGVtZXRyeS5jLTE3Ny1cXHRtdXRleF9sb2NrKFxcdTAwMjZlcF9sb2NrKTtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbC9wbXQvdGVsZW1ldHJ5LmM6MTc4OlxcdGVudHJ5ID0geGFfZmluZChcXHUwMDI2dGVsZW1fYXJyYXksIFxcdTAwMjZpbmRleCwgaW5kZXgsIFhBX1BSRVNFTlQpO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsL3BtdC90ZWxlbWV0cnkuYy0xNzktXFx0aWYgKCFlbnRyeSkge1xcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWwvcG10L3RlbGVtZXRyeS5jPTE5Nz1pbnQgcG10X3RlbGVtX2dldF9lbmRwb2ludF9pbmZvKGludCBkZXZpZCwgc3RydWN0IHRlbGVtX2VuZHBvaW50X2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbC9wbXQvdGVsZW1ldHJ5LmMtMjA2LVxcdG11dGV4X2xvY2soXFx1MDAyNmVwX2xvY2spO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsL3BtdC90ZWxlbWV0cnkuYzoyMDc6XFx0ZW50cnkgPSB4YV9maW5kKFxcdTAwMjZ0ZWxlbV9hcnJheSwgXFx1MDAyNmluZGV4LCBpbmRleCwgWEFfUFJFU0VOVCk7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWwvcG10L3RlbGVtZXRyeS5jLTIwOC1cXHRpZiAoIWVudHJ5KSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9OTI3PXN0YXRpYyBpbnQgdmhvc3RfdnFfYXR0YWNoX3dvcmtlcihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy05MzYtXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjkzNzpcXHR3b3JrZXIgPSB4YV9maW5kKFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtlcl94YSwgXFx1MDAyNmluZGV4LCBVSU5UX01BWCwgWEFfUFJFU0VOVCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTkzOC1cXHRpZiAoIXdvcmtlciB8fCB3b3JrZXItXFx1MDAzZWlkICE9IGluZm8tXFx1MDAzZXdvcmtlcl9pZClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz05NjA9c3RhdGljIGludCB2aG9zdF9mcmVlX3dvcmtlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtOTY1LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzo5NjY6XFx0d29ya2VyID0geGFfZmluZChcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrZXJfeGEsIFxcdTAwMjZpbmRleCwgVUlOVF9NQVgsIFhBX1BSRVNFTlQpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy05NjctXFx0aWYgKCF3b3JrZXIgfHwgd29ya2VyLVxcdTAwM2VpZCAhPSBpbmZvLVxcdTAwM2V3b3JrZXJfaWQpXFxuLS1cXG5mcy9idHJmcy9kZWxheWVkLXJlZi5jPTM2Nz1zdGF0aWMgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX2hlYWQgKmZpbmRfZmlyc3RfcmVmX2hlYWQoXFxuLS1cXG5mcy9idHJmcy9kZWxheWVkLXJlZi5jLTM3My1cXG5mcy9idHJmcy9kZWxheWVkLXJlZi5jOjM3NDpcXHRyZXR1cm4geGFfZmluZChcXHUwMDI2ZHItXFx1MDAzZWhlYWRfcmVmcywgXFx1MDAyNmZyb20sIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XFxuZnMvYnRyZnMvZGVsYXllZC1yZWYuYy0zNzUtfVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X21hcC5jPTEyMDY9c3RhdGljIHN0cnVjdCBidHJmc19pbm9kZSAqZmluZF9maXJzdF9pbm9kZV90b19zaHJpbmsoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsXFxuLS1cXG5mcy9idHJmcy9leHRlbnRfbWFwLmMtMTIxNS1cXG5mcy9idHJmcy9leHRlbnRfbWFwLmM6MTIxNjpcXHRcXHRpbm9kZSA9IHhhX2ZpbmQoXFx1MDAyNnJvb3QtXFx1MDAzZWlub2RlcywgXFx1MDAyNmZyb20sIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XFxuZnMvYnRyZnMvZXh0ZW50X21hcC5jLTEyMTctXFx0XFx0aWYgKCFpbm9kZSlcXG4tLVxcbmZzL2J0cmZzL2lub2RlLmM9MTA2NzQ9c3RydWN0IGJ0cmZzX2lub2RlICpidHJmc19maW5kX2ZpcnN0X2lub2RlKHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgbWluX2lubylcXG4tLVxcbmZzL2J0cmZzL2lub2RlLmMtMTA2ODAtXFx0d2hpbGUgKHRydWUpIHtcXG5mcy9idHJmcy9pbm9kZS5jOjEwNjgxOlxcdFxcdGlub2RlID0geGFfZmluZChcXHUwMDI2cm9vdC1cXHUwMDNlaW5vZGVzLCBcXHUwMDI2ZnJvbSwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKTtcXG5mcy9idHJmcy9pbm9kZS5jLTEwNjgyLVxcdFxcdGlmICghaW5vZGUpXFxuLS1cXG5mcy94ZnMvbGlieGZzL3hmc19ncm91cC5jPTEyMT14ZnNfZ3JvdXBfZ3JhYl9uZXh0X21hcmsoXFxuLS1cXG5mcy94ZnMvbGlieGZzL3hmc19ncm91cC5jLTEzNC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZnMveGZzL2xpYnhmcy94ZnNfZ3JvdXAuYzoxMzU6XFx0eGcgPSB4YV9maW5kKFxcdTAwMjZtcC1cXHUwMDNlbV9ncm91cHNbdHlwZV0ueGEsIFxcdTAwMjZpbmRleCwgVUxPTkdfTUFYLCBtYXJrKTtcXG5mcy94ZnMvbGlieGZzL3hmc19ncm91cC5jLTEzNi1cXHRpZiAoeGcpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MzM1OT1pbnQgY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzX2luZm8odW5zaWduZWQgbG9uZyB2YWwsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMzODItI2RlZmluZSBmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGQsIGlmaW5kZXgpXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzM4MzpcXHRmb3IgKDsgKGQgPSB4YV9maW5kKFxcdTAwMjYobmV0KS1cXHUwMDNlZGV2X2J5X2luZGV4LCBcXHUwMDI2aWZpbmRleCxcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMzg0LVxcdFxcdFxcdCAgICBVTE9OR19NQVgsIFhBX1BSRVNFTlQpKTsgaWZpbmRleCsrKVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0zNjI9dm9pZCB4YV9jbGVhcl9tYXJrKHN0cnVjdCB4YXJyYXkgKiwgdW5zaWduZWQgbG9uZyBpbmRleCwgeGFfbWFya190KTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjM2Mzp2b2lkICp4YV9maW5kKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleCxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTM2NC1cXHRcXHR1bnNpZ25lZCBsb25nIG1heCwgeGFfbWFya190KSBfX2F0dHJpYnV0ZV9fKChub25udWxsKDIpKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTQyMj1zdGF0aWMgaW5saW5lIGJvb2wgeGFfbWFya2VkKGNvbnN0IHN0cnVjdCB4YXJyYXkgKnhhLCB4YV9tYXJrX3QgbWFyaylcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNDUyLVxcdGZvciAoaW5kZXggPSBzdGFydCxcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo0NTM6XFx0ICAgICBlbnRyeSA9IHhhX2ZpbmQoeGEsIFxcdTAwMjZpbmRleCwgbGFzdCwgWEFfUFJFU0VOVCk7XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNDU0LVxcdCAgICAgZW50cnk7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC01MzEtI2RlZmluZSB4YV9mb3JfZWFjaF9tYXJrZWQoeGEsIGluZGV4LCBlbnRyeSwgZmlsdGVyKSBcXFxcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo1MzI6XFx0Zm9yIChpbmRleCA9IDAsIGVudHJ5ID0geGFfZmluZCh4YSwgXFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIGZpbHRlcik7IFxcXFxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTUzMy1cXHQgICAgIGVudHJ5OyBlbnRyeSA9IHhhX2ZpbmRfYWZ0ZXIoeGEsIFxcdTAwMjZpbmRleCwgVUxPTkdfTUFYLCBmaWx0ZXIpKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jPTQ2OD12b2lkIGlvX2Rlc3Ryb3lfYnVmZmVycyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy00NzUtXFx0XFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2Y3R4LVxcdTAwM2VtbWFwX2xvY2spIHtcXG5pb191cmluZy9rYnVmLmM6NDc2OlxcdFxcdFxcdGJsID0geGFfZmluZChcXHUwMDI2Y3R4LVxcdTAwM2Vpb19ibF94YSwgXFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIFhBX1BSRVNFTlQpO1xcbmlvX3VyaW5nL2tidWYuYy00NzctXFx0XFx0XFx0aWYgKGJsKVxcbi0tXFxuaW9fdXJpbmcvemNyeC5jPTEwMzE9dm9pZCBpb190ZXJtaW5hdGVfemNyeChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0xMDM5LVxcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNmN0eC1cXHUwMDNlbW1hcF9sb2NrKVxcbmlvX3VyaW5nL3pjcnguYzoxMDQwOlxcdFxcdFxcdGlmcSA9IHhhX2ZpbmQoXFx1MDAyNmN0eC1cXHUwMDNlemNyeF9jdHhzLCBcXHUwMDI2aWQsIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XFxuaW9fdXJpbmcvemNyeC5jLTEwNDEtXFx0XFx0aWYgKCFpZnEpXFxuLS1cXG5pb191cmluZy96Y3J4LmM9MTA1MT12b2lkIGlvX3VucmVnaXN0ZXJfemNyeChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0xMDYwLVxcbmlvX3VyaW5nL3pjcnguYzoxMDYxOlxcdFxcdFxcdGlmcSA9IHhhX2ZpbmQoXFx1MDAyNmN0eC1cXHUwMDNlemNyeF9jdHhzLCBcXHUwMDI2aWQsIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XFxuaW9fdXJpbmcvemNyeC5jLTEwNjItXFx0XFx0XFx0aWYgKGlmcSkge1xcbi0tXFxubGliL2lkci5jPTQ5Mz1pbnQgaWRhX2ZpbmRfZmlyc3RfcmFuZ2Uoc3RydWN0IGlkYSAqaWRhLCB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4KVxcbi0tXFxubGliL2lkci5jLTUwOS1cXG5saWIvaWRyLmM6NTEwOlxcdGVudHJ5ID0geGFfZmluZChcXHUwMDI2aWRhLVxcdTAwM2V4YSwgXFx1MDAyNmluZGV4LCBtYXggLyBJREFfQklUTUFQX0JJVFMsIFhBX1BSRVNFTlQpO1xcbmxpYi9pZHIuYy01MTEtXFx0aWYgKCFlbnRyeSkge1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTE4MD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzEoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIG9yZGVyKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTE5MS1cXHRpbmRleCA9IDA7XFxubGliL3Rlc3RfeGFycmF5LmM6MTE5MjpcXHRYQV9CVUdfT04oeGEsIHhhX2ZpbmQoeGEsIFxcdTAwMjZpbmRleCwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKSAhPVxcbmxpYi90ZXN0X3hhcnJheS5jLTExOTMtXFx0XFx0XFx0eGFfbWtfdmFsdWUobXVsdGkpKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTExOTUtXFx0aW5kZXggPSBtdWx0aSArIDE7XFxubGliL3Rlc3RfeGFycmF5LmM6MTE5NjpcXHRYQV9CVUdfT04oeGEsIHhhX2ZpbmQoeGEsIFxcdTAwMjZpbmRleCwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKSAhPVxcbmxpYi90ZXN0X3hhcnJheS5jLTExOTctXFx0XFx0XFx0eGFfbWtfdmFsdWUobXVsdGkpKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jPTEzMTE9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZF8xKHN0cnVjdCB4YXJyYXkgKnhhKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTMyOS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gaztcXG5saWIvdGVzdF94YXJyYXkuYzoxMzMwOlxcdFxcdFxcdFxcdHZvaWQgKmVudHJ5ID0geGFfZmluZCh4YSwgXFx1MDAyNmluZGV4LCBVTE9OR19NQVgsXFxubGliL3Rlc3RfeGFycmF5LmMtMTMzMS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRYQV9QUkVTRU5UKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTEzMzktXFx0XFx0XFx0XFx0aW5kZXggPSBrO1xcbmxpYi90ZXN0X3hhcnJheS5jOjEzNDA6XFx0XFx0XFx0XFx0ZW50cnkgPSB4YV9maW5kKHhhLCBcXHUwMDI2aW5kZXgsIFVMT05HX01BWCxcXG5saWIvdGVzdF94YXJyYXkuYy0xMzQxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFhBX01BUktfMCk7XFxuLS1cXG5saWIveGFycmF5LmM9MjE3Mj1FWFBPUlRfU1lNQk9MKHhhX2NsZWFyX21hcmspO1xcbi0tXFxubGliL3hhcnJheS5jLTIxNzQtLyoqXFxubGliL3hhcnJheS5jOjIxNzU6ICogeGFfZmluZCgpIC0gU2VhcmNoIHRoZSBYQXJyYXkgZm9yIGFuIGVudHJ5LlxcbmxpYi94YXJyYXkuYy0yMTc2LSAqIEB4YTogWEFycmF5Llxcbi0tXFxubGliL3hhcnJheS5jLTIxOTAtICovXFxubGliL3hhcnJheS5jOjIxOTE6dm9pZCAqeGFfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyAqaW5kZXhwLFxcbmxpYi94YXJyYXkuYy0yMTkyLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4LCB4YV9tYXJrX3QgZmlsdGVyKVxcbi0tXFxubW0vc2htZW0uYz0xODY0PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL3NobWVtLmMtMTg5MS1cXHRcXHQgKi9cXG5tbS9zaG1lbS5jOjE4OTI6XFx0XFx0aWYgKCF4YV9maW5kKFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzLCBcXHUwMDI2YWxpZ25lZF9pbmRleCxcXG5tbS9zaG1lbS5jLTE4OTMtXFx0XFx0XFx0ICAgICBhbGlnbmVkX2luZGV4ICsgcGFnZXMgLSAxLCBYQV9QUkVTRU5UKSlcXG4tLVxcbm1tL3NobWVtLmM9MTkyMz1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9hbGxvY19hbmRfYWRkX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc2htZW0uYy0xOTcwLVxcdGlmIChlcnJvcikge1xcbm1tL3NobWVtLmM6MTk3MTpcXHRcXHRpZiAoeGFfZmluZChcXHUwMDI2bWFwcGluZy1cXHUwMDNlaV9wYWdlcywgXFx1MDAyNmluZGV4LFxcbm1tL3NobWVtLmMtMTk3Mi1cXHRcXHRcXHRcXHRpbmRleCArIHBhZ2VzIC0gMSwgWEFfUFJFU0VOVCkpIHtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExMjc9bmV0ZGV2X3hhX2ZpbmRfbG9jayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMTM0LVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9kZXYuYzoxMTM1OlxcdFxcdGRldiA9IHhhX2ZpbmQoXFx1MDAyNm5ldC1cXHUwMDNlZGV2X2J5X2luZGV4LCBpbmRleCwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKTtcXG5uZXQvY29yZS9kZXYuYy0xMTM2LVxcdFxcdGlmICghZGV2KSB7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMTUyPW5ldGRldl94YV9maW5kX2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMTU5LVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9kZXYuYzoxMTYwOlxcdFxcdGRldiA9IHhhX2ZpbmQoXFx1MDAyNm5ldC1cXHUwMDNlZGV2X2J5X2luZGV4LCBpbmRleCwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKTtcXG5uZXQvY29yZS9kZXYuYy0xMTYxLVxcdFxcdGlmICghZGV2KSB7XFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmM9MTk9c3RhdGljIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rc194YV9nZXQodW5zaWduZWQgbG9uZyBpbmRleClcXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMy1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2RldmxpbmsvY29yZS5jOjI0OlxcdGRldmxpbmsgPSB4YV9maW5kKFxcdTAwMjZkZXZsaW5rcywgXFx1MDAyNmluZGV4LCBpbmRleCwgREVWTElOS19SRUdJU1RFUkVEKTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMjUtXFx0aWYgKCFkZXZsaW5rIHx8ICFkZXZsaW5rX3RyeV9nZXQoZGV2bGluaykpXFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmM9MTkyPXN0YXRpYyBzdHJ1Y3QgZGV2bGlua19yZWwgKmRldmxpbmtfcmVsX2ZpbmQodW5zaWduZWQgbG9uZyByZWxfaW5kZXgpXFxubmV0L2RldmxpbmsvY29yZS5jLTE5My17XFxubmV0L2RldmxpbmsvY29yZS5jOjE5NDpcXHRyZXR1cm4geGFfZmluZChcXHUwMDI2ZGV2bGlua19yZWxzLCBcXHUwMDI2cmVsX2luZGV4LCByZWxfaW5kZXgsXFxubmV0L2RldmxpbmsvY29yZS5jLTE5NS1cXHRcXHQgICAgICAgREVWTElOS19SRUxfSU5fVVNFKTtcXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYz0zNDU9c3RhdGljIHN0cnVjdCBkZXZsaW5rICpfX2RldmxpbmtzX3hhX2ZpbmRfZ2V0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0zNTItcmV0cnk6XFxubmV0L2RldmxpbmsvY29yZS5jOjM1MzpcXHRkZXZsaW5rID0geGFfZmluZChcXHUwMDI2ZGV2bGlua3MsIGluZGV4cCwgZW5kLCBERVZMSU5LX1JFR0lTVEVSRUQpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0zNTQtXFx0aWYgKCFkZXZsaW5rKVxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmM9NDQxPXJzc19kdW1wX29uZV9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmMtNDU2LVxcbm5ldC9ldGh0b29sL3Jzcy5jOjQ1NzpcXHRmb3IgKDsgeGFfZmluZChcXHUwMDI2ZGV2LVxcdTAwM2VldGh0b29sLVxcdTAwM2Vyc3NfY3R4LCBcXHUwMDI2Y3R4LVxcdTAwM2VjdHhfaWR4LFxcbm5ldC9ldGh0b29sL3Jzcy5jLTQ1OC1cXHRcXHQgICAgICAgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKTsgY3R4LVxcdTAwM2VjdHhfaWR4KyspIHtcXG4tLVxcbm5ldC9zaGFwZXIvc2hhcGVyLmM9ODUzPWludCBuZXRfc2hhcGVyX25sX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zaGFwZXIvc2hhcGVyLmMtODcwLVxcbm5ldC9zaGFwZXIvc2hhcGVyLmM6ODcxOlxcdGZvciAoOyAoc2hhcGVyID0geGFfZmluZChcXHUwMDI2aGllcmFyY2h5LVxcdTAwM2VzaGFwZXJzLCBcXHUwMDI2Y3R4LVxcdTAwM2VzdGFydF9pbmRleCxcXG5uZXQvc2hhcGVyL3NoYXBlci5jLTg3Mi1cXHRcXHRcXHRcXHQgVTMyX01BWCwgWEFfUFJFU0VOVCkpO1xcbi0tXFxucnVzdC9rZXJuZWwveGFycmF5LnJzPTExMT0gICAgZm4gaXRlcihcXHUwMDI2c2VsZikgLVxcdTAwM2UgaW1wbCBJdGVyYXRvclxcdTAwM2NJdGVtID0gTm9uTnVsbFxcdTAwM2NjX3ZvaWRcXHUwMDNlXFx1MDAzZSArICdfIHtcXG4tLVxcbnJ1c3Qva2VybmVsL3hhcnJheS5ycy0xMTUtICAgICAgICBpdGVyOjpvbmNlKHVuc2FmZSB7XFxucnVzdC9rZXJuZWwveGFycmF5LnJzOjExNjogICAgICAgICAgICBiaW5kaW5nczo6eGFfZmluZChzZWxmLnhhLmdldCgpLCBcXHUwMDI2bXV0IGluZGV4LCB1c2l6ZTo6TUFYLCBiaW5kaW5nczo6WEFfUFJFU0VOVClcXG5ydXN0L2tlcm5lbC94YXJyYXkucnMtMTE3LSAgICAgICAgfSlcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tdWx0aW9yZGVyLmM9MjQwPXN0YXRpYyB2b2lkICpsb2FkX3dvcmtlcih2b2lkICpwdHIpXFxuLS1cXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbXVsdGlvcmRlci5jLTI0OC1cXHRcXHRhc3NlcnQoIXhhX2lzX2ludGVybmFsKGl0ZW0pKTtcXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbXVsdGlvcmRlci5jOjI0OTpcXHRcXHRpdGVtID0geGFfZmluZChwdHIsIFxcdTAwMjZmaW5kX2luZGV4LCBpbmRleCwgWEFfTUFSS18xKTtcXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbXVsdGlvcmRlci5jLTI1MC1cXHRcXHRhc3NlcnQoIXhhX2lzX2ludGVybmFsKGl0ZW0pKTtcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9MjA5PXN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMjEzLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6MjE0OlxcdGlmICh4YV9maW5kKFxcdTAwMjZmLVxcdTAwM2ViaW5kaW5ncywgXFx1MDAyNnN0YXJ0LCBlbmQgLSAxLCBYQV9QUkVTRU5UKSkge1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMjE1LVxcdFxcdEtWTV9NTVVfTE9DSyhrdm0pO1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz02NDM9aW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02NzctXFx0aWYgKCF4YV9lbXB0eShcXHUwMDI2Zi1cXHUwMDNlYmluZGluZ3MpIFxcdTAwMjZcXHUwMDI2XFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo2Nzg6XFx0ICAgIHhhX2ZpbmQoXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBcXHUwMDI2c3RhcnQsIGVuZCAtIDEsIFhBX1BSRVNFTlQpKSB7XFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02NzktXFx0XFx0ciA9IC1FRVhJU1Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIzOjA3LjkwMTQyMTg2NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3OTI5NzQyOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgeGFzX2ZpbmRgIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUga2V5IHN5bWJvbHMgaGVyZSBhcmUgY2xlYXJseSBgeGFzX2ZpbmRgLCBgeGFfZmluZGAsIGFuZCBgeGFfZmluZF9hZnRlcmAuIExldCdzIHplcm8gaW4gb24gdGhvc2UuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgaGFuZGxpbmcgbXVsdGktb3JkZXIgWEFycmF5cywgYW5kIHNwZWNpZmljYWxseSBob3cgYHhhc19maW5kYCBkZWFscyB3aXRoIHRoZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBFbmFibGVDb25maWdzIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLlxuXG5JIHNlZSBgWEFSUkFZX01VTFRJYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnIGFzIGl0J3Mgc2VsZWN0ZWQgYnkgc2V2ZXJhbCwgbGlrZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYEhVR0VUTEJfUEFHRWAuIEJ1dCwgaW1wb3J0YW50bHksIGB4YXNfZmluZGAgaXMgY29tcGlsZWQgaW50byBgeGFycmF5Lm9gLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29yZS4gVGhhdCBtYWtlcyB0aGlzIHBvdGVudGlhbGx5IHZlcnkgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBsb2dpYyB0aGF0IGhhbmRsZXMgdGhlc2UgbXVsdGktb3JkZXIgY2FzZXMgYXBwZWFycyB0byBiZSBpbiB0aGUgY2hlY2s6IGBpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0KWAgdnMgYHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCguLi4pYC4gU2VlbXMgbGlrZSB0aGUgY29kZSBpcyB0cnlpbmcgdG8gaGFuZGxlIHRoZSBgc2hpZnQgXHUwMDNlIDBgIHBhdGhzIGFuZCBtdWx0aS1pbmRleCBYQXJyYXlzIGNvcnJlY3RseS5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBgWEFSUkFZX01VTFRJYCByZWxhdGlvbnNoaXAuIEl0J3MgdmlzaWJsZSBpbiBgbGliL0tjb25maWdgLCBidXQgbm90IGRpcmVjdGx5IHVzZXItc2VsZWN0YWJsZSB2aWEgYG1lbnVjb25maWdgLCB1bmxlc3MgaXQncyBzZWxlY3RlZCBieSBvdGhlciBzeW1ib2xzLCBidXQgaXQgY2FuIGJlIHNldCBieSBjb25maWdzIHN1Y2ggYXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgb3IgYEhVR0VUTEJGU2AgLiBTbywgc3BlY2lmeWluZyB0aG9zZSBtaWdodCBiZSB0aGUgcmlnaHQgYXBwcm9hY2guIEl0IHNlZW1zIHRvIGVuYWJsZSB0aG9zZSBtdWx0aS1vcmRlciB4YXJyYXkgcGF0aHMgd2hlcmUgYHNoaWZ0IFx1MDAzZSAwYC5cblxuT2theSwgSSdtIHByZXR0eSBjb25maWRlbnQgaW4gdGhvc2UgY29uZmlndXJhdGlvbnMuIExldCdzIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBzZXQtcmVzdWx0cyBwYXJhbWV0ZXJzIGNvcnJlY3QuIFRoZSBmdXp6aW5nIHZlcmRpY3QgaXMsIG9mIGNvdXJzZSwgXCJXb3J0aEZ1enppbmdcIiBiZWNhdXNlIHRoZSBwYXRjaCBjaGFuZ2VzIGB4YXNfZmluZGAgaW4gYGxpYi94YXJyYXkuY2AgdG8gaGFuZGxlIHRoZSBgeGFzLVx1MDAzZXhhX29mZnNldGAgcHJvcGVybHkgd2hlbiB0cmF2ZXJzaW5nIG11bHRpLW9yZGVyIFhBcnJheSBlbnRyaWVzIHdoZXJlIGB4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdGAgaXMgbm9uLXplcm8uIEFuZCB0aGlzIGlzIGluIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgbG9naWMgdGhhdCdzIGhpdCBkdXJpbmcgcGFnZSBjYWNoZSBvcGVyYXRpb25zLCBzaG1lbSBsb29rdXBzLCBldGMuIFNvdW5kcyBsaWtlIGEgZ29vZCB0YXJnZXQuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY29ycmVjdDogYHhhc19maW5kYCwgYHhhX2ZpbmRgLCBgeGFfZmluZF9hZnRlcmAuIEFuZCBiYXNlZCBvbiBldmVyeXRoaW5nIGFib3ZlLCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGBYQVJSQVlfTVVMVElgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIHRoaW5rIEkndmUgZ290IHRoaXMuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGFnYWluc3QgdGhlIGluc3RydWN0aW9ucyBhbmQgdGhlbiBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDU3LCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMzoxNS44MzExNzA5OTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc0MDkzMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhBUlJBWV9NVUxUSVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4YXNfZmluZFwiLFxuICAgIFwieGFfZmluZFwiLFxuICAgIFwieGFfZmluZF9hZnRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpdGVyYXRpb24gb2Zmc2V0IGNhbGN1bGF0aW9uIGluIHhhc19maW5kKCkgd2l0aGluIGxpYi94YXJyYXkuYyBmb3IgbXVsdGktb3JkZXIgbm9kZXMgKHdoZXJlIHNoaWZ0IFxcdTAwM2UgMCkuIFRoaXMgaXMgY29yZSBkYXRhIHN0cnVjdHVyZSBsb2dpYyBleGVyY2lzZWQgYWNyb3NzIG1lbW9yeSBtYW5hZ2VtZW50IChwYWdlIGNhY2hlLCBzaG1lbSwgZm9saW8gbG9va3VwcykgYW5kIHN1YnN5c3RlbSBpdGVyYXRvcnMsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEFSUkFZX01VTFRJXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhhc19maW5kXCIsXG4gICAgXCJ4YV9maW5kXCIsXG4gICAgXCJ4YV9maW5kX2FmdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl0ZXJhdGlvbiBvZmZzZXQgY2FsY3VsYXRpb24gaW4geGFzX2ZpbmQoKSB3aXRoaW4gbGliL3hhcnJheS5jIGZvciBtdWx0aS1vcmRlciBub2RlcyAod2hlcmUgc2hpZnQgXFx1MDAzZSAwKS4gVGhpcyBpcyBjb3JlIGRhdGEgc3RydWN0dXJlIGxvZ2ljIGV4ZXJjaXNlZCBhY3Jvc3MgbWVtb3J5IG1hbmFnZW1lbnQgKHBhZ2UgY2FjaGUsIHNobWVtLCBmb2xpbyBsb29rdXBzKSBhbmQgc3Vic3lzdGVtIGl0ZXJhdG9ycywgbWFraW5nIGl0IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjM6MTUuOTU4NTg3NDRaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzEyODgyMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjM6MTUuOTU5MDM1NTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTMxMjQyNjkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG9mZnNldCBjYWxjdWxhdGlvbiBsb2dpYyBpbiB4YXNfZmluZCgpIHdpdGhpbiB0aGUgWEFycmF5IGRhdGEgc3RydWN0dXJlIGltcGxlbWVudGF0aW9uIChsaWIveGFycmF5LmMpIGFuZCBhZGRzIGEgdGVzdCBjYXNlIHRvIHRoZSBYQXJyYXkgc2VsZi10ZXN0IHN1aXRlIChsaWIvdGVzdF94YXJyYXkuYykuXFxuXFxuVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgdHJlZSB0cmF2ZXJzYWwgaW5kZXhpbmcvb2Zmc2V0IGFyaXRobWV0aWMgZm9yIG11bHRpLWluZGV4IGVudHJpZXMgKFhBX1NUQVRFIC8geGFfbm9kZSBvZmZzZXQgY2FsY3VsYXRpb25zKS4gTm8gbmV3IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gY29ycnVwdGVkIG9yIGluY29ycmVjdCB0cmF2ZXJzYWwgb2Zmc2V0cyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzRhNTMwYzQ2MDczMjFhZTUyYWVmNjQ1YWJmODE0N2VjZmVjMzUyNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTQ6MjI6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9saWIvdGVzdF94YXJyYXkuYyBiL2xpYi90ZXN0X3hhcnJheS5jXG5pbmRleCA1Y2EwYWVmZWU5YWE1Li5jZGE3MjQ1ZTQ3NzE2IDEwMDY0NFxuLS0tIGEvbGliL3Rlc3RfeGFycmF5LmNcbisrKyBiL2xpYi90ZXN0X3hhcnJheS5jXG5AQCAtMTI0Nyw2ICsxMjQ3LDY3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfMyhzdHJ1Y3QgeGFycmF5ICp4YSlcbiBcdH1cbiB9XG4gXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF80KHN0cnVjdCB4YXJyYXkgKnhhKVxuK3tcbisjaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxuK1x0WEFfU1RBVEUoeGFzLCB4YSwgMTAwKTtcbitcdFhBX1NUQVRFX09SREVSKHNwbGl0LCB4YSwgMCwgMCk7XG4rXHR2b2lkICplbnRyeTtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdC8qICgxKSBPcmRlci03IGVudHJ5ICgwLTEyNykgd2l0aCBhZGphY2VudCBlbnRyeSBhdCAxMjgsIHN0YXJ0aW5nIGF0IDEwMCAqL1xuK1x0eGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTtcbitcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcbitcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTtcbitcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7XG4rXG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHhhX2VyYXNlX2luZGV4KHhhLCAxMjgpO1xuK1x0eGFfZXJhc2VfaW5kZXgoeGEsIDApO1xuK1x0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcbitcbitcdC8qICgyKSBTcGxpdHRpbmcgYSBtdWx0aS1pbmRleCBlbnRyeSBhZnRlciBhIGxvb2t1cCBiZWdpbnMgaW5zaWRlIGl0ICovXG4rXHR4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpO1xuK1x0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcbitcbitcdHhhc19zZXQoXHUwMDI2eGFzLCAxMDApO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcbitcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHhhc19zcGxpdF9hbGxvYyhcdTAwMjZzcGxpdCwgeGFfbWtfaW5kZXgoMCksIDcsIEdGUF9LRVJORUwpO1xuK1x0eGFzX2xvY2soXHUwMDI2c3BsaXQpO1xuK1x0eGFzX3NwbGl0KFx1MDAyNnNwbGl0LCB4YV9ta19pbmRleCgwKSwgNyk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMjg7IGkrKylcbitcdFx0X194YV9zdG9yZSh4YSwgaSwgeGFfbWtfaW5kZXgoaSksIDApO1xuK1x0eGFzX3VubG9jayhcdTAwMjZzcGxpdCk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHR4YV9kZXN0cm95KHhhKTtcbitcdFhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGksIGosIGs7XG5AQCAtMTM3MCw2ICsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSlcbiBcdFx0Y2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTtcbiBcdGNoZWNrX211bHRpX2ZpbmRfMih4YSk7XG4gXHRjaGVja19tdWx0aV9maW5kXzMoeGEpO1xuK1x0Y2hlY2tfbXVsdGlfZmluZF80KHhhKTtcbiB9XG4gXG4gLyogU2VlIGZpbmRfc3dhcF9lbnRyeSgpIGluIG1tL3NobWVtLmMgKi9cbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcbmluZGV4IDlhOGI0OTE2NTQwY2YuLjk4MDMyNGQ2ODZiZDAgMTAwNjQ0XG4tLS0gYS9saWIveGFycmF5LmNcbisrKyBiL2xpYi94YXJyYXkuY1xuQEAgLTE0MDYsOSArMTQwNiwxMSBAQCB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXG4gXHRcdGVudHJ5ID0geGFzX2xvYWQoeGFzKTtcbiBcdFx0aWYgKGVudHJ5IHx8IHhhc19ub3Rfbm9kZSh4YXMtXHUwMDNleGFfbm9kZSkpXG4gXHRcdFx0cmV0dXJuIGVudHJ5O1xuLVx0fSBlbHNlIGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICB4YXMtXHUwMDNleGFfb2Zmc2V0ICE9ICh4YXMtXHUwMDNleGFfaW5kZXggXHUwMDI2IFhBX0NIVU5LX01BU0spKSB7XG4tXHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHR9IGVsc2UgaWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSkge1xuK1x0XHRpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0KVxuK1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHRcdGVsc2VcbitcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbiBcdH1cbiBcbiBcdHhhc19uZXh0X29mZnNldCh4YXMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjM6MTUuOTU5MDM2NjRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg4NzMwNjM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYSBQYXRjaDogRm9jdXMgb24gWGFycmF5IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIFRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gaWRlbnRpZnkgdGhlIHNjb3BlLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIGltcGFjdGluZyBgbGliL3Rlc3RfeGFycmF5LmNgIGFuZCBgbGliL3hhcnJheS5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBjaGFuZ2VzIHRvIHRoZSB4YXJyYXkgaW1wbGVtZW50YXRpb24gaXRzZWxmLCBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgdGVzdHMuIEdpdmVuIHRoZSBmaWxlIG5hbWVzLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGUgY29yZSBvZiB0aGUgeGFycmF5IGRhdGEgc3RydWN0dXJlIGlzIGxpa2VseSB0aGUgdGFyZ2V0IG9mIHRoaXMgcGF0Y2gsIHdoaWNoIGlzIGNvbW1vbi5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIGBsaWIveGFycmF5LmNgLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgZGlmZiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE0MDYsIHNvIEnigJlsbCB1c2UgbXkgdHJ1c3R5IGByZWFkLWZpbGVgIHRvIGdldCBhIGRpcmVjdCB2aWV3IGludG8gdGhlIGNvZGUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBpbW1lZGlhdGVseSBleGFtaW5lIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIExpbmUgMTQwNiBpc24ndCBwYXJ0aWN1bGFybHkgaW5mb3JtYXRpdmUgd2l0aG91dCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgc28gSSdsbCBiZSBzdXJlIHRvIGV4YW1pbmUgdGhlIGxpbmVzIGltbWVkaWF0ZWx5IGFib3ZlIGFuZCBiZWxvdyB0byBmb3JtIGFuIGluaXRpYWwgaHlwb3RoZXNpcyByZWdhcmRpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGNoYW5nZS4gSXMgdGhpcyBhIGJ1ZyBmaXg/IEFuIG9wdGltaXphdGlvbj8gQSBmZWF0dXJlIGFkZGl0aW9uPyBUaGUgY29kZSB3aWxsIHJldmVhbCB0aGUgYW5zd2Vycy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgdGhpcyBpcyBhIHRlc3QgYW5kIGEgbWFpbiB4YXJyYXkgbGlicmFyeSBmaWxlIC0gdGhpcyBtYXkgYmUgYSBzaW1wbGUgdGVzdCBjaGFuZ2UsIG9yIGEgbW9yZSBpbnZhc2l2ZSB4YXJyYXkgY2hhbmdlLiBJJ2xsIG5lZWQgdG8gcmVhZCB0aGUgY29kZSB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMzoyMi44NDYzNDc3NDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi94YXJyYXkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzkwOlxcdCAqXFxuMTM5MTpcXHQgKiBSZXR1cm46IFRoZSBlbnRyeSwgaWYgZm91bmQsIG90aGVyd2lzZSAlTlVMTC5cXG4xMzkyOlxcdCAqL1xcbjEzOTM6XFx0dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxcbjEzOTQ6XFx0e1xcbjEzOTU6XFx0XFx0dm9pZCAqZW50cnk7XFxuMTM5NjpcXHRcXG4xMzk3OlxcdFxcdGlmICh4YXNfZXJyb3IoeGFzKSB8fCB4YXMtXFx1MDAzZXhhX25vZGUgPT0gWEFTX0JPVU5EUylcXG4xMzk4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjEzOTk6XFx0XFx0aWYgKHhhcy1cXHUwMDNleGFfaW5kZXggXFx1MDAzZSBtYXgpXFxuMTQwMDpcXHRcXHRcXHRyZXR1cm4gc2V0X2JvdW5kcyh4YXMpO1xcbjE0MDE6XFx0XFxuMTQwMjpcXHRcXHRpZiAoIXhhcy1cXHUwMDNleGFfbm9kZSkge1xcbjE0MDM6XFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9pbmRleCA9IDE7XFxuMTQwNDpcXHRcXHRcXHRyZXR1cm4gc2V0X2JvdW5kcyh4YXMpO1xcbjE0MDU6XFx0XFx0fSBlbHNlIGlmICh4YXMtXFx1MDAzZXhhX25vZGUgPT0gWEFTX1JFU1RBUlQpIHtcXG4xNDA2OlxcdFxcdFxcdGVudHJ5ID0geGFzX2xvYWQoeGFzKTtcXG4xNDA3OlxcdFxcdFxcdGlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLVxcdTAwM2V4YV9ub2RlKSlcXG4xNDA4OlxcdFxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG4xNDA5OlxcdFxcdH0gZWxzZSBpZiAoeGFzLVxcdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXFx1MDAzZXhhX2luZGV4LCB4YXMtXFx1MDAzZXhhX25vZGUpKSB7XFxuMTQxMDpcXHRcXHRcXHRpZiAoIXhhcy1cXHUwMDNleGFfbm9kZS1cXHUwMDNlc2hpZnQpXFxuMTQxMTpcXHRcXHRcXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVxcdTAwM2V4YV9pbmRleCAtIDEpIFxcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxO1xcbjE0MTI6XFx0XFx0XFx0ZWxzZVxcbjE0MTM6XFx0XFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cXHUwMDNleGFfaW5kZXgsIHhhcy1cXHUwMDNleGFfbm9kZSk7XFxuMTQxNDpcXHRcXHR9XFxuMTQxNTpcXHRcXG4xNDE2OlxcdFxcdHhhc19uZXh0X29mZnNldCh4YXMpO1xcbjE0MTc6XFx0XFxuMTQxODpcXHRcXHR3aGlsZSAoeGFzLVxcdTAwM2V4YV9ub2RlIFxcdTAwMjZcXHUwMDI2ICh4YXMtXFx1MDAzZXhhX2luZGV4IFxcdTAwM2M9IG1heCkpIHtcXG4xNDE5OlxcdFxcdFxcdGlmICh1bmxpa2VseSh4YXMtXFx1MDAzZXhhX29mZnNldCA9PSBYQV9DSFVOS19TSVpFKSkge1xcbjE0MjA6XFx0XFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQgPSB4YXMtXFx1MDAzZXhhX25vZGUtXFx1MDAzZW9mZnNldCArIDE7XFxuMTQyMTpcXHRcXHRcXHRcXHR4YXMtXFx1MDAzZXhhX25vZGUgPSB4YV9wYXJlbnQoeGFzLVxcdTAwM2V4YSwgeGFzLVxcdTAwM2V4YV9ub2RlKTtcXG4xNDIyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE0MjM6XFx0XFx0XFx0fVxcbjE0MjQ6XFx0XFxuMTQyNTpcXHRcXHRcXHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIHhhcy1cXHUwMDNleGFfbm9kZSwgeGFzLVxcdTAwM2V4YV9vZmZzZXQpO1xcbjE0MjY6XFx0XFx0XFx0aWYgKHhhX2lzX25vZGUoZW50cnkpKSB7XFxuMTQyNzpcXHRcXHRcXHRcXHR4YXMtXFx1MDAzZXhhX25vZGUgPSB4YV90b19ub2RlKGVudHJ5KTtcXG4xNDI4OlxcdFxcdFxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ID0gMDtcXG4xNDI5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE0MzA6XFx0XFx0XFx0fVxcbjE0MzE6XFx0XFx0XFx0aWYgKGVudHJ5IFxcdTAwMjZcXHUwMDI2ICF4YV9pc19zaWJsaW5nKGVudHJ5KSlcXG4xNDMyOlxcdFxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG4xNDMzOlxcdFxcbjE0MzQ6XFx0XFx0XFx0eGFzX25leHRfb2Zmc2V0KHhhcyk7XFxuMTQzNTpcXHRcXHR9XFxuMTQzNjpcXHRcXG4xNDM3OlxcdFxcdGlmICgheGFzLVxcdTAwM2V4YV9ub2RlKVxcbjE0Mzg6XFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9ub2RlID0gWEFTX0JPVU5EUztcXG4xNDM5OlxcdFxcdHJldHVybiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMzoyMi44NDY1MDQ0OTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYxOTI3NDM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGxpYi94YXJyYXkuYyBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBpbXBhY3Qgb2YgdGhlIG1vZGlmaWNhdGlvbiBpbiBgbGliL3hhcnJheS5jYC4gVGhlIGNvcmUgZGlmZmVyZW5jZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBob3cgYHhhcy1cdTAwM2V4YV9vZmZzZXRgIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB1bmRlciB0aGUgY29uZGl0aW9uIHdoZXJlIHRoZSBub2RlIGlzbid0IGEgc2hpZnQgbm9kZSAqYW5kKiB0aGUgb2Zmc2V0IGRvZXNuJ3QgbWF0Y2ggdGhlIGNodW5rIG1hc2suXG5cbkJlZm9yZSB0aGUgY2hhbmdlLCBpdCBhcHBlYXJzIHdlIHdlcmUgc2V0dGluZyBgeGFzLVx1MDAzZXhhX29mZnNldGAgdG8gYSBjYWxjdWxhdGVkIHZhbHVlOiBgKCh4YXMtXHUwMDNleGFfaW5kZXggLSAxKSBcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxYC4gTm93LCB0aGUgY29uZGl0aW9uIHNlZW1zIG1vcmUgaW52b2x2ZWQuIEl0IGNoZWNrcyBpZiBgeGFzLVx1MDAzZXhhX29mZnNldGAgaXMgKm5vdCBlcXVhbCB0byogdGhlIHJlc3VsdCBvZiBhIGNhbGwgdG8gYGdldF9vZmZzZXQoKWAgd2l0aCBgeGFzLVx1MDAzZXhhX2luZGV4YCBhbmQgYHhhcy1cdTAwM2V4YV9ub2RlYCBhcyBwYXJhbWV0ZXJzLiBJZiB0aGF0IGNvbmRpdGlvbiBob2xkcywgd2UgaGF2ZSBhIGNvbmRpdGlvbmFsIHdpdGhpbiB0aGF0IGNvbmRpdGlvbmFsOiBJZiBgIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0YCB0aGUgb2xkIGFwcHJvYWNoIGlzIHVzZWQgYnV0IGlmIHRoZSBub2RlICppcyogYSBzaGlmdCBub2RlLCBgeGFzLVx1MDAzZXhhX29mZnNldGAgaXMgbm93IGFzc2lnbmVkIHRoZSByZXN1bHQgb2YgYGdldF9vZmZzZXQoKWAuXG5cblRoaXMgc3VnZ2VzdHMgdGhhdCBgZ2V0X29mZnNldGAgaXMgYmVjb21pbmcgdGhlIHByaW1hcnkgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgb2Zmc2V0LiBJdCBhbHNvIHNlZW1zIHRoZXJlJ3MgYSBkaXN0aW5jdGlvbiBpbiBob3cgd2UgaGFuZGxlIG5vbi1zaGlmdCBhbmQgc2hpZnQgbm9kZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBnZXRfb2Zmc2V0YCB0byBmdWxseSBncmFzcCB0aGlzLiBJdCdzIGxpa2VseSB0aGUga2V5IHRvIHdoYXQncyBnb2luZyBvbiBoZXJlLiBJIG5lZWQgdG8gY2hlY2sgaXRzIGRlZmluaXRpb24gdG8gc2VlIGhvdyBpdCdzIGNhbGN1bGF0aW5nIHRoZSBvZmZzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMzoyNi40NjU3ODM4MjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTcyMTAxNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X29mZnNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIveGFycmF5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIzOjI2Ljk0NzUxOTYyNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzM2MDIyNzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBqdXN0IGhhcHBlbmVkOlxuXG4qKkZpbmRpbmcgdGhlIGBnZXRfb2Zmc2V0YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoZSBgZ2V0X29mZnNldGAgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgdXNlZCwgbW9zdCBsaWtlbHkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgY29kZS4gR2l2ZW4gaXRzIGxpa2VseSByZWxhdGlvbiB0byBvZmZzZXRzLCBJJ20gYmV0dGluZyBpdCdzIGFzc29jaWF0ZWQgd2l0aCBgeGFycmF5YCwgc28gdGhhdCBkaXJlY3RzIG1lIHRvIHRoZSBgbGliL2AgZGlyZWN0b3J5LCB3aGljaCBob3VzZXMga2VybmVsIGxpYnJhcmllcywgb3IgcGVyaGFwcyB3aXRoaW4gdGhlIGBpbmNsdWRlL2xpbnV4L2AgZGlyZWN0b3J5LCB3aGVyZSB3ZSBjYW4gZmluZCBtYW55IGtleSBoZWFkZXJzLCBwb3RlbnRpYWxseSBpbiBgeGFycmF5LmhgLiBMZXQncyBzdGFydCB0aGUgaHVudCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEwNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIzOjI4LjY4MzU0NTU2M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIwNDUzNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X29mZnNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIveGFycmF5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3hhcnJheS5jPTEyNj1zdGF0aWMgdm9pZCB4YXNfc3F1YXNoX21hcmtzKGNvbnN0IHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubGliL3hhcnJheS5jLTE0NC0vKiBleHRyYWN0cyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGlzIG5vZGUgZnJvbSB0aGUgaW5kZXggKi9cXG5saWIveGFycmF5LmM6MTQ1OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X29mZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCBzdHJ1Y3QgeGFfbm9kZSAqbm9kZSlcXG5saWIveGFycmF5LmMtMTQ2LXtcXG4tLVxcbmxpYi94YXJyYXkuYz0xNTA9c3RhdGljIHZvaWQgeGFzX3NldF9vZmZzZXQoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxubGliL3hhcnJheS5jLTE1MS17XFxubGliL3hhcnJheS5jOjE1MjpcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgeGFzLVxcdTAwM2V4YV9ub2RlKTtcXG5saWIveGFycmF5LmMtMTUzLX1cXG4tLVxcbmxpYi94YXJyYXkuYz0yMDQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICp4YXNfZGVzY2VuZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4tLVxcbmxpYi94YXJyYXkuYy0yMDYte1xcbmxpYi94YXJyYXkuYzoyMDc6XFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgbm9kZSk7XFxubGliL3hhcnJheS5jLTIwOC1cXHR2b2lkICplbnRyeSA9IHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XFxuLS1cXG5saWIveGFycmF5LmM9MTMwNj12b2lkICpfX3hhc19wcmV2KHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubGliL3hhcnJheS5jLTEzMTYtXFxubGliL3hhcnJheS5jOjEzMTc6XFx0aWYgKHhhcy1cXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgeGFzLVxcdTAwM2V4YV9ub2RlKSlcXG5saWIveGFycmF5LmMtMTMxOC1cXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldC0tO1xcbi0tXFxubGliL3hhcnJheS5jPTEzNDU9dm9pZCAqX194YXNfbmV4dChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbmxpYi94YXJyYXkuYy0xMzU1LVxcbmxpYi94YXJyYXkuYzoxMzU2OlxcdGlmICh4YXMtXFx1MDAzZXhhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy1cXHUwMDNleGFfaW5kZXgsIHhhcy1cXHUwMDNleGFfbm9kZSkpXFxubGliL3hhcnJheS5jLTEzNTctXFx0XFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQrKztcXG4tLVxcbmxpYi94YXJyYXkuYz0xMzkzPXZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcXG4tLVxcbmxpYi94YXJyYXkuYy0xNDA4LVxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG5saWIveGFycmF5LmM6MTQwOTpcXHR9IGVsc2UgaWYgKHhhcy1cXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgeGFzLVxcdTAwM2V4YV9ub2RlKSkge1xcbmxpYi94YXJyYXkuYy0xNDEwLVxcdFxcdGlmICgheGFzLVxcdTAwM2V4YV9ub2RlLVxcdTAwM2VzaGlmdClcXG4tLVxcbmxpYi94YXJyYXkuYy0xNDEyLVxcdFxcdGVsc2VcXG5saWIveGFycmF5LmM6MTQxMzpcXHRcXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgeGFzLVxcdTAwM2V4YV9ub2RlKTtcXG5saWIveGFycmF5LmMtMTQxNC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIzOjI4Ljc1NTU5NjUyOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTE1ODMzMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhhcnJheSBNdWx0aS1JbmRleCBGaXgqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdGVzdF94YXJyYXkuY2AgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBuZXcgdW5pdCB0ZXN0LCBgY2hlY2tfbXVsdGlfZmluZF80YCwgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgbXVsdGktaW5kZXggZmluZCBhbmQgc3BsaXQgb3BlcmF0aW9ucyB3aXRoaW4geGFycmF5LiBUaGF0J3MgZ29vZCwgbW9yZSB0YXJnZXRlZCB0ZXN0cyBhcmUgYWx3YXlzIHdlbGNvbWUuIEFuZCB0aGUgY29ycmVzcG9uZGluZyBmaXggaW4gYGxpYi94YXJyYXkuY2AgYWRkcmVzc2VzIGFuIG9mZnNldCBjYWxjdWxhdGlvbiBidWcgaW4gYHhhc19maW5kYCwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLW9yZGVyIGVudHJpZXMgaW4gdGhlIHhhcnJheS4gU291bmRzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBmaXggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBMZXQncyBydW4gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZSwgdGhpcyBpcyBhbGwgaW50ZXJuYWwgeGFycmF5IGxvZ2ljIGFuZCBzZWxmLXRlc3RpbmcuIE5vIHVzZXItZmFjaW5nIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZC4gVGhhdCdzIGEgcmVsaWVmLlxuMi4gICoqQnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCB0aGUgY29kZSB1c2VzIHN0YW5kYXJkIHhhcnJheSB0cmF2ZXJzYWwgc3RhdGUgbWVtYmVycyBsaWtlIGB4YXMtXHUwMDNleGFfb2Zmc2V0YCwgYHhhcy1cdTAwM2V4YV9pbmRleGAsIGB4YXMtXHUwMDNleGFfbm9kZWAsIGV0Yy4gVGhlc2UgYXJlIGluaXRpYWxpemVkIHByb3Blcmx5IGJ5IGBYQV9TVEFURWAgb3IgYHhhc19zZXRgLiBTbyB3ZSdyZSBnb29kIHRoZXJlLlxuMy4gICoqQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRob3V0IGluaXRpYWxpemF0aW9uPyoqIEkgZG9uJ3Qgc2VlIGFueSBuZXcgYWxsb2NhdGlvbnMgYmVpbmcgaW50cm9kdWNlZCBvciBleGlzdGluZyBhbGxvY2F0aW9ucyBtb2RpZmllZC4gVGhpcyBpcyBhIGZpeCwgbm90IGEgZmVhdHVyZS4gTm8gd29ycmllcyB0aGVyZS5cbjQuICAqKkJvdW5kcyBjaGVja3MvYnVmZmVyIHNpemUgY2hhbmdlcz8qKiBOb3BlLiBUaGUgY29kZSBpc24ndCBjaGFuZ2luZyBidWZmZXIgc2l6ZXMgb3IgYWRkaW5nIG5ldyBidWZmZXIgY2hlY2tzLiBOb3RoaW5nIHRvIHdvcnJ5IGFib3V0IGluIHRoYXQgcmVnYXJkLlxuXG5TbywgaW4gc3VtbWFyeSwgSSBzZWUgbm8gaW1tZWRpYXRlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgdG8gdXNlcnNwYWNlLiBUaGF0J3Mgd2hhdCBJIGxpa2UgdG8gc2VlLlxuXG5Ob3csIEtNU0FOLiBEb2VzIHRoaXMgbmVlZCBpdD8gTm8uIEtNU0FOIGlzIGZvciBjYXRjaGluZyAqdW5pbml0aWFsaXplZCogcmVhZHMgc3BlY2lmaWNhbGx5LCBidXQgZ2l2ZW4gdGhlIGNoZWNrIGxpc3QsIEkgZG9uJ3Qgc2VlIGFueSBvZiB0aG9zZSBoZXJlLiBTdGFuZGFyZCBLQVNBTiwgdGhlIHVuaXQgdGVzdHMsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50LiBBbnkgbWVtb3J5IGVycm9ycyAoaWYgYW55KSB3b3VsZCBiZSBjYXVnaHQgd2l0aCB0aG9zZS4gVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGludHJvZHVjZWQgaGVyZS5cblxuTGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHJlcXVpcmVtZW50czogYE5lZWRzS01TQU5gIHNob3VsZCBkZWZpbml0ZWx5IGJlIGZhbHNlLCBJIGNhbiBmb3JtdWxhdGUgZGV0YWlsZWQgcmVhc29uaW5nIGNvbnRyYXN0aW5nIEtNU0FOIHZlcnN1cyBLQVNBTidzIGFwcGxpY2FiaWxpdHkuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCB0aGUgZml4IGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZHMsIGFuZCB0aHVzIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sLiBOb3csIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBBbGwgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzQsIk91dHB1dFRva2VucyI6MTY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIzOjM1LjI3MTQzMzI1N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG9mZnNldCBjYWxjdWxhdGlvbiBsb2dpYyBpbiB4YXNfZmluZCgpIHdpdGhpbiB0aGUgWEFycmF5IGRhdGEgc3RydWN0dXJlIGltcGxlbWVudGF0aW9uIChsaWIveGFycmF5LmMpIGFuZCBhZGRzIGEgdGVzdCBjYXNlIHRvIHRoZSBYQXJyYXkgc2VsZi10ZXN0IHN1aXRlIChsaWIvdGVzdF94YXJyYXkuYykuXFxuXFxuVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgdHJlZSB0cmF2ZXJzYWwgaW5kZXhpbmcvb2Zmc2V0IGFyaXRobWV0aWMgZm9yIG11bHRpLWluZGV4IGVudHJpZXMgKFhBX1NUQVRFIC8geGFfbm9kZSBvZmZzZXQgY2FsY3VsYXRpb25zKS4gTm8gbmV3IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gY29ycnVwdGVkIG9yIGluY29ycmVjdCB0cmF2ZXJzYWwgb2Zmc2V0cyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG9mZnNldCBjYWxjdWxhdGlvbiBsb2dpYyBpbiB4YXNfZmluZCgpIHdpdGhpbiB0aGUgWEFycmF5IGRhdGEgc3RydWN0dXJlIGltcGxlbWVudGF0aW9uIChsaWIveGFycmF5LmMpIGFuZCBhZGRzIGEgdGVzdCBjYXNlIHRvIHRoZSBYQXJyYXkgc2VsZi10ZXN0IHN1aXRlIChsaWIvdGVzdF94YXJyYXkuYykuXFxuXFxuVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgdHJlZSB0cmF2ZXJzYWwgaW5kZXhpbmcvb2Zmc2V0IGFyaXRobWV0aWMgZm9yIG11bHRpLWluZGV4IGVudHJpZXMgKFhBX1NUQVRFIC8geGFfbm9kZSBvZmZzZXQgY2FsY3VsYXRpb25zKS4gTm8gbmV3IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gY29ycnVwdGVkIG9yIGluY29ycmVjdCB0cmF2ZXJzYWwgb2Zmc2V0cyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsss4f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 14:19:53 +0000 UTC FinishedAt: 2026-09-03 14:23:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XARRAY_MULTI", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XARRAY_MULTI", "TRANSPARENT_HUGEPAGE" ], "series_id": "a0f55a0d-19d3-47cb-b831-32aaf125825e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "xas_find", "xa_find", "xa_find_after" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hBUlJBWV9NVUxUSSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDssCiAgICAmIzM0O3hhX2ZpbmQmIzM0OywKICAgICYjMzQ7eGFfZmluZF9hZnRlciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBvZmZzZXQgY2FsY3VsYXRpb24gbG9naWMgaW4geGFzX2ZpbmQoKSB3aXRoaW4gdGhlIFhBcnJheSBkYXRhIHN0cnVjdHVyZSBpbXBsZW1lbnRhdGlvbiAobGliL3hhcnJheS5jKSBhbmQgYWRkcyBhIHRlc3QgY2FzZSB0byB0aGUgWEFycmF5IHNlbGYtdGVzdCBzdWl0ZSAobGliL3Rlc3RfeGFycmF5LmMpLlxuXG5UaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCB0cmVlIHRyYXZlcnNhbCBpbmRleGluZy9vZmZzZXQgYXJpdGhtZXRpYyBmb3IgbXVsdGktaW5kZXggZW50cmllcyAoWEFfU1RBVEUgLyB4YV9ub2RlIG9mZnNldCBjYWxjdWxhdGlvbnMpLiBObyBuZXcgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyByZXN1bHRpbmcgZnJvbSBjb3JydXB0ZWQgb3IgaW5jb3JyZWN0IHRyYXZlcnNhbCBvZmZzZXRzIHdvdWxkIGJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl0ZXJhdGlvbiBvZmZzZXQgY2FsY3VsYXRpb24gaW4geGFzX2ZpbmQoKSB3aXRoaW4gbGliL3hhcnJheS5jIGZvciBtdWx0aS1vcmRlciBub2RlcyAod2hlcmUgc2hpZnQgXHUwMDNlIDApLiBUaGlzIGlzIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgbG9naWMgZXhlcmNpc2VkIGFjcm9zcyBtZW1vcnkgbWFuYWdlbWVudCAocGFnZSBjYWNoZSwgc2htZW0sIGZvbGlvIGxvb2t1cHMpIGFuZCBzdWJzeXN0ZW0gaXRlcmF0b3JzLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzRhNTMwYzQ2MDczMjFhZTUyYWVmNjQ1YWJmODE0N2VjZmVjMzUyNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTQ6MjI6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfeGFycmF5LmMgYi9saWIvdGVzdF94YXJyYXkuY1xuaW5kZXggNWNhMGFlZmVlOWFhNS4uY2RhNzI0NWU0NzcxNiAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X3hhcnJheS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF94YXJyYXkuY1xuQEAgLTEyNDcsNiAmIzQzOzEyNDcsNjcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8zKHN0cnVjdCB4YXJyYXkgKnhhKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF80KHN0cnVjdCB4YXJyYXkgKnhhKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG4mIzQzO1x0WEFfU1RBVEUoeGFzLCB4YSwgMTAwKTtcbiYjNDM7XHRYQV9TVEFURV9PUkRFUihzcGxpdCwgeGEsIDAsIDApO1xuJiM0MztcdHZvaWQgKmVudHJ5O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XG4mIzQzO1x0LyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovXG4mIzQzO1x0eGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcbiYjNDM7XG4mIzQzO1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xuJiM0MztcbiYjNDM7XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHR4YV9lcmFzZV9pbmRleCh4YSwgMTI4KTtcbiYjNDM7XHR4YV9lcmFzZV9pbmRleCh4YSwgMCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcbiYjNDM7XG4mIzQzO1x0LyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi9cbiYjNDM7XHR4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XG4mIzQzO1xuJiM0MztcdHhhc19zZXQoXHUwMDI2eGFzLCAxMDApO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHR4YXNfc3BsaXRfYWxsb2MoXHUwMDI2c3BsaXQsIHhhX21rX2luZGV4KDApLCA3LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR4YXNfbG9jayhcdTAwMjZzcGxpdCk7XG4mIzQzO1x0eGFzX3NwbGl0KFx1MDAyNnNwbGl0LCB4YV9ta19pbmRleCgwKSwgNyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMTI4OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdF9feGFfc3RvcmUoeGEsIGksIHhhX21rX2luZGV4KGkpLCAwKTtcbiYjNDM7XHR4YXNfdW5sb2NrKFx1MDAyNnNwbGl0KTtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcbiYjNDM7XG4mIzQzO1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0eGFfZGVzdHJveSh4YSk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZF8xKHN0cnVjdCB4YXJyYXkgKnhhKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgaiwgaztcbkBAIC0xMzcwLDYgJiM0MzsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSlcbiBcdFx0Y2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTtcbiBcdGNoZWNrX211bHRpX2ZpbmRfMih4YSk7XG4gXHRjaGVja19tdWx0aV9maW5kXzMoeGEpO1xuJiM0MztcdGNoZWNrX211bHRpX2ZpbmRfNCh4YSk7XG4gfVxuIFxuIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovXG5kaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jXG5pbmRleCA5YThiNDkxNjU0MGNmLi45ODAzMjRkNjg2YmQwIDEwMDY0NFxuLS0tIGEvbGliL3hhcnJheS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIveGFycmF5LmNcbkBAIC0xNDA2LDkgJiM0MzsxNDA2LDExIEBAIHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcbiBcdFx0ZW50cnkgPSB4YXNfbG9hZCh4YXMpO1xuIFx0XHRpZiAoZW50cnkgfHwgeGFzX25vdF9ub2RlKHhhcy1cdTAwM2V4YV9ub2RlKSlcbiBcdFx0XHRyZXR1cm4gZW50cnk7XG4tXHR9IGVsc2UgaWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gKHhhcy1cdTAwM2V4YV9pbmRleCBcdTAwMjYgWEFfQ0hVTktfTUFTSykpIHtcbi1cdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVx1MDAzZXhhX2luZGV4IC0gMSkgXHUwMDI2IFhBX0NIVU5LX01BU0spICYjNDM7IDE7XG4mIzQzO1x0fSBlbHNlIGlmICh4YXMtXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSkpIHtcbiYjNDM7XHRcdGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQpXG4mIzQzO1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSAmIzQzOyAxO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbiBcdH1cbiBcbiBcdHhhc19uZXh0X29mZnNldCh4YXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hBUlJBWV9NVUxUSSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDssCiAgICAmIzM0O3hhX2ZpbmQmIzM0OywKICAgICYjMzQ7eGFfZmluZF9hZnRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXRlcmF0aW9uIG9mZnNldCBjYWxjdWxhdGlvbiBpbiB4YXNfZmluZCgpIHdpdGhpbiBsaWIveGFycmF5LmMgZm9yIG11bHRpLW9yZGVyIG5vZGVzICh3aGVyZSBzaGlmdCBcdTAwM2UgMCkuIFRoaXMgaXMgY29yZSBkYXRhIHN0cnVjdHVyZSBsb2dpYyBleGVyY2lzZWQgYWNyb3NzIG1lbW9yeSBtYW5hZ2VtZW50IChwYWdlIGNhY2hlLCBzaG1lbSwgZm9saW8gbG9va3VwcykgYW5kIHN1YnN5c3RlbSBpdGVyYXRvcnMsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNGE1MzBjNDYwNzMyMWFlNTJhZWY2NDVhYmY4MTQ3ZWNmZWMzNTI0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAxNDoyMjoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3hhcnJheS5jIGIvbGliL3Rlc3RfeGFycmF5LmMKaW5kZXggNWNhMGFlZmVlOWFhNS4uY2RhNzI0NWU0NzcxNiAxMDA2NDQKLS0tIGEvbGliL3Rlc3RfeGFycmF5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RfeGFycmF5LmMKQEAgLTEyNDcsNiAmIzQzOzEyNDcsNjcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8zKHN0cnVjdCB4YXJyYXkgKnhhKQogCX0KIH0KIAomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVEkKJiM0MzsJWEFfU1RBVEUoeGFzLCB4YSwgMTAwKTsKJiM0MzsJWEFfU1RBVEVfT1JERVIoc3BsaXQsIHhhLCAwLCAwKTsKJiM0MzsJdm9pZCAqZW50cnk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJLyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovCiYjNDM7CXhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7CiYjNDM7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7CiYjNDM7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwl4YV9lcmFzZV9pbmRleCh4YSwgMTI4KTsKJiM0MzsJeGFfZXJhc2VfaW5kZXgoeGEsIDApOwomIzQzOwlYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpOwomIzQzOwomIzQzOwkvKiAoMikgU3BsaXR0aW5nIGEgbXVsdGktaW5kZXggZW50cnkgYWZ0ZXIgYSBsb29rdXAgYmVnaW5zIGluc2lkZSBpdCAqLwomIzQzOwl4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpOwomIzQzOwomIzQzOwl4YXNfc2V0KCZhbXA7eGFzLCAxMDApOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJeGFzX3NwbGl0X2FsbG9jKCZhbXA7c3BsaXQsIHhhX21rX2luZGV4KDApLCA3LCBHRlBfS0VSTkVMKTsKJiM0MzsJeGFzX2xvY2soJmFtcDtzcGxpdCk7CiYjNDM7CXhhc19zcGxpdCgmYW1wO3NwbGl0LCB4YV9ta19pbmRleCgwKSwgNyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAxMjg7IGkmIzQzOyYjNDM7KQomIzQzOwkJX194YV9zdG9yZSh4YSwgaSwgeGFfbWtfaW5kZXgoaSksIDApOwomIzQzOwl4YXNfdW5sb2NrKCZhbXA7c3BsaXQpOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7CiYjNDM7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwl4YV9kZXN0cm95KHhhKTsKJiM0MzsJWEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kXzEoc3RydWN0IHhhcnJheSAqeGEpCiB7CiAJdW5zaWduZWQgbG9uZyBpLCBqLCBrOwpAQCAtMTM3MCw2ICYjNDM7MTQzMSw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEpCiAJCWNoZWNrX211bHRpX2ZpbmRfMSh4YSwgaSk7CiAJY2hlY2tfbXVsdGlfZmluZF8yKHhhKTsKIAljaGVja19tdWx0aV9maW5kXzMoeGEpOwomIzQzOwljaGVja19tdWx0aV9maW5kXzQoeGEpOwogfQogCiAvKiBTZWUgZmluZF9zd2FwX2VudHJ5KCkgaW4gbW0vc2htZW0uYyAqLwpkaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jCmluZGV4IDlhOGI0OTE2NTQwY2YuLjk4MDMyNGQ2ODZiZDAgMTAwNjQ0Ci0tLSBhL2xpYi94YXJyYXkuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIveGFycmF5LmMKQEAgLTE0MDYsOSAmIzQzOzE0MDYsMTEgQEAgdm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KQogCQllbnRyeSA9IHhhc19sb2FkKHhhcyk7CiAJCWlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLSZndDt4YV9ub2RlKSkKIAkJCXJldHVybiBlbnRyeTsKLQl9IGVsc2UgaWYgKCF4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0ICZhbXA7JmFtcDsKLQkJICAgIHhhcy0mZ3Q7eGFfb2Zmc2V0ICE9ICh4YXMtJmd0O3hhX2luZGV4ICZhbXA7IFhBX0NIVU5LX01BU0spKSB7Ci0JCXhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKJiM0MzsJfSBlbHNlIGlmICh4YXMtJmd0O3hhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy0mZ3Q7eGFfaW5kZXgsIHhhcy0mZ3Q7eGFfbm9kZSkpIHsKJiM0MzsJCWlmICgheGFzLSZndDt4YV9ub2RlLSZndDtzaGlmdCkKJiM0MzsJCQl4YXMtJmd0O3hhX29mZnNldCA9ICgoeGFzLSZndDt4YV9pbmRleCAtIDEpICZhbXA7IFhBX0NIVU5LX01BU0spICYjNDM7IDE7CiYjNDM7CQllbHNlCiYjNDM7CQkJeGFzLSZndDt4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy0mZ3Q7eGFfaW5kZXgsIHhhcy0mZ3Q7eGFfbm9kZSk7CiAJfQogCiAJeGFzX25leHRfb2Zmc2V0KHhhcyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwOTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYQXJyYXkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgbW9kaWZpY2F0aW9uIGF0IGEgZ3JhbnVsYXIgbGV2ZWwuIEkgc2VlIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZmZlY3RzIHRoZSBgeGFzX2ZpbmQoKWAgZnVuY3Rpb24gd2l0aGluIGBsaWIveGFycmF5LmNgLiAgU3BlY2lmaWNhbGx5LCB0aGUgZGlmZiBoaWdobGlnaHRzIGEgY2hhbmdlIGluIHRoZSBsb2dpYyBzdXJyb3VuZGluZyBob3cgYHhhc19vZmZzZXRgIGlzIG1hbmFnZWQgd2hlbiBzZWFyY2hpbmcgdGhlIFhBcnJheS4gSSBuZWVkIHRvIGZ1bGx5IGdyb2sgdGhlIHB1cnBvc2Ugb2YgdGhpcyBjaGFuZ2UsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgY29kZS4KCkJlZm9yZSwgdGhlcmUgd2FzIGFuIGBlbHNlIGlmYCBibG9jayB0aGF0IGFwcGVhcmVkIHRvIGhhbmRsZSBhIHNwZWNpZmljIHNjZW5hcmlvIHdoZXJlIHRoZSBjdXJyZW50IG9mZnNldCB3YXMgbWlzYWxpZ25lZCB3aXRoaW4gYSBjaHVuay4gVGhlIHByZXZpb3VzIGNvZGUgY2hlY2tlZCBpZiB0aGUgYHNoaWZ0YCB3YXMgemVybyBhbmQgYWRqdXN0ZWQgdGhlIG9mZnNldCBpZiB0aGUgbWlzYWxpZ25tZW50IGhhcHBlbmVkLiBUaGUgbmV3IGNvZGUgcmVwbGFjZXMgdGhhdCB3aXRoIGFuIGBlbHNlIGlmYCB0aGF0IGNhbGxzIGBnZXRfb2Zmc2V0KClgIGZ1bmN0aW9uLiBJbiB0aGUgYGVsc2VgIGNhc2UsIGl0IG5vdyBzZWVtcyB3ZSBjaGVjayBmb3IgdGhlIHNoaWZ0IGFnYWluIGJlZm9yZSByZWFkanVzdGluZyB0aGUgb2Zmc2V0LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBnZXRfb2Zmc2V0KClgIGFuZCB0aGUgYWRkZWQgYHNoaWZ0YCBjaGVjayBoaW50cyB0aGF0IHRoaXMgaXMgYSBjaGFuZ2UgZGVhbGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZSBvciBvZmZzZXQgY2FsY3VsYXRpb24gd2l0aGluIHRoZSBYQXJyYXkuIFRoaXMgaXMgaW50ZXJlc3RpbmcuCgpUbyBmdWxseSBncmFzcCB0aGUgaW1wYWN0LCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGxpYi94YXJyYXkuY2AgdG8gc2VlIGhvdyB0aGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgYW5kIGhvdyB0aGUgWEFycmF5IGRhdGEgc3RydWN0dXJlIGlzIG1hbmFnZWQuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcXVpY2tseSBqdW1wIGFyb3VuZCBhbmQgZ2V0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBvcHRpbWl6aW5nIGhvdyB0aGUgWEFycmF5IGhhbmRsZXMgbGFyZ2VyIHJhbmdlcyBvciBkaWZmZXJlbnQgbm9kZSB0eXBlcy4gVGhlIHByZXNlbmNlIG9mIGEgdGVzdCBjYXNlIGluIGBsaWIvdGVzdF94YXJyYXkuY2Agc3VnZ2VzdHMgYSBzcGVjaWZpYyBidWcgb3IgZWRnZSBjYXNlIHRoaXMgcGF0Y2ggaXMgdHJ5aW5nIHRvIGFkZHJlc3MuIEdvb2QsIGEgdGVzdCBjYXNlIGlzIGFsd2F5cyB3ZWxjb21lLiBIb3BlZnVsbHkgaXQmIzM5O3Mgd2VsbC13cml0dGVuLCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgYW5kIHRoZSBwcm9ibGVtIHRoaXMgcGF0Y2ggc29sdmVzLiBUaGlzIGlzIGEgc29saWQgc3RhcnQsIGJ1dCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi94YXJyYXkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM5MDpcdCAqXG4xMzkxOlx0ICogUmV0dXJuOiBUaGUgZW50cnksIGlmIGZvdW5kLCBvdGhlcndpc2UgJU5VTEwuXG4xMzkyOlx0ICovXG4xMzkzOlx0dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuMTM5NDpcdHtcbjEzOTU6XHRcdHZvaWQgKmVudHJ5O1xuMTM5NjpcdFxuMTM5NzpcdFx0aWYgKHhhc19lcnJvcih4YXMpIHx8IHhhcy1cdTAwM2V4YV9ub2RlID09IFhBU19CT1VORFMpXG4xMzk4Olx0XHRcdHJldHVybiBOVUxMO1xuMTM5OTpcdFx0aWYgKHhhcy1cdTAwM2V4YV9pbmRleCBcdTAwM2UgbWF4KVxuMTQwMDpcdFx0XHRyZXR1cm4gc2V0X2JvdW5kcyh4YXMpO1xuMTQwMTpcdFxuMTQwMjpcdFx0aWYgKCF4YXMtXHUwMDNleGFfbm9kZSkge1xuMTQwMzpcdFx0XHR4YXMtXHUwMDNleGFfaW5kZXggPSAxO1xuMTQwNDpcdFx0XHRyZXR1cm4gc2V0X2JvdW5kcyh4YXMpO1xuMTQwNTpcdFx0fSBlbHNlIGlmICh4YXMtXHUwMDNleGFfbm9kZSA9PSBYQVNfUkVTVEFSVCkge1xuMTQwNjpcdFx0XHRlbnRyeSA9IHhhc19sb2FkKHhhcyk7XG4xNDA3Olx0XHRcdGlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLVx1MDAzZXhhX25vZGUpKVxuMTQwODpcdFx0XHRcdHJldHVybiBlbnRyeTtcbjE0MDk6XHRcdH0gZWxzZSBpZiAoeGFzLVx1MDAzZXhhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpKSB7XG4xNDEwOlx0XHRcdGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQpXG4xNDExOlx0XHRcdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVx1MDAzZXhhX2luZGV4IC0gMSkgXHUwMDI2IFhBX0NIVU5LX01BU0spICYjNDM7IDE7XG4xNDEyOlx0XHRcdGVsc2VcbjE0MTM6XHRcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbjE0MTQ6XHRcdH1cbjE0MTU6XHRcbjE0MTY6XHRcdHhhc19uZXh0X29mZnNldCh4YXMpO1xuMTQxNzpcdFxuMTQxODpcdFx0d2hpbGUgKHhhcy1cdTAwM2V4YV9ub2RlIFx1MDAyNlx1MDAyNiAoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAzYz0gbWF4KSkge1xuMTQxOTpcdFx0XHRpZiAodW5saWtlbHkoeGFzLVx1MDAzZXhhX29mZnNldCA9PSBYQV9DSFVOS19TSVpFKSkge1xuMTQyMDpcdFx0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSB4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VvZmZzZXQgJiM0MzsgMTtcbjE0MjE6XHRcdFx0XHR4YXMtXHUwMDNleGFfbm9kZSA9IHhhX3BhcmVudCh4YXMtXHUwMDNleGEsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbjE0MjI6XHRcdFx0XHRjb250aW51ZTtcbjE0MjM6XHRcdFx0fVxuMTQyNDpcdFxuMTQyNTpcdFx0XHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cdTAwM2V4YSwgeGFzLVx1MDAzZXhhX25vZGUsIHhhcy1cdTAwM2V4YV9vZmZzZXQpO1xuMTQyNjpcdFx0XHRpZiAoeGFfaXNfbm9kZShlbnRyeSkpIHtcbjE0Mjc6XHRcdFx0XHR4YXMtXHUwMDNleGFfbm9kZSA9IHhhX3RvX25vZGUoZW50cnkpO1xuMTQyODpcdFx0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAwO1xuMTQyOTpcdFx0XHRcdGNvbnRpbnVlO1xuMTQzMDpcdFx0XHR9XG4xNDMxOlx0XHRcdGlmIChlbnRyeSBcdTAwMjZcdTAwMjYgIXhhX2lzX3NpYmxpbmcoZW50cnkpKVxuMTQzMjpcdFx0XHRcdHJldHVybiBlbnRyeTtcbjE0MzM6XHRcbjE0MzQ6XHRcdFx0eGFzX25leHRfb2Zmc2V0KHhhcyk7XG4xNDM1Olx0XHR9XG4xNDM2Olx0XG4xNDM3Olx0XHRpZiAoIXhhcy1cdTAwM2V4YV9ub2RlKVxuMTQzODpcdFx0XHR4YXMtXHUwMDNleGFfbm9kZSA9IFhBU19CT1VORFM7XG4xNDM5Olx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njc5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWEFycmF5JiMzOTtzIENvcmUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGB4YXNfZmluZGAsIGEgY3J1Y2lhbCBmdW5jdGlvbiByZXNpZGluZyB3aXRoaW4gYGxpYi94YXJyYXkuY2AuIFRoaXMgcGxhY2VzIGl0IGZpcm1seSB3aXRoaW4gdGhlIFhBcnJheSBjb3JlIGxpYnJhcnkgb2YgdGhlIExpbnV4IGtlcm5lbCDigJMgdGhlIGJlZHJvY2sgZm9yIGEgcGxldGhvcmEgb2YgY3JpdGljYWwga2VybmVsIGZ1bmN0aW9uYWxpdGllcy4gWEFycmF5LCBhcyB3ZSBrbm93LCBpcyB1YmlxdWl0b3VzLCBoYW5kbGluZyBldmVyeXRoaW5nIGZyb20gdGhlIHBhZ2UgY2FjaGUgYW5kIGZpbGVtYXBzIHRvIHNobWVtLCBEUk0sIERBWCwgc3lzZnMsIGFuZCBJUEMuIFRoYXQmIzM5O3MgYSBzZXJpb3VzIGZvb3RwcmludC4KClNvLCBgeGFzX2ZpbmRgIGl0c2VsZj8gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciBpdGVyYXRpbmcgdGhyb3VnaCBYQXJyYXkgZW50cmllcy4gSSYjMzk7bSB0aGlua2luZyBtdWx0aS1pbmRleCBlbnRyaWVzLCBzaG1lbSBpbXBsZW1lbnRhdGlvbnMsIGFuZCBmb2xpbyBzZWFyY2hlcyBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQuIEl0JiMzOTtzIHRoZSB3b3JraG9yc2UgZnVuY3Rpb24uIE5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGB4YXNfZmluZGAsIGB4YV9maW5kYCwgYW5kIGB4YV9maW5kX2FmdGVyYCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIFNlZWluZyB3aGVyZSBhbmQgaG93IHRoZXNlIGFyZSBpbnZva2VkIHdpbGwgcmV2ZWFsIGEgd2VhbHRoIG9mIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgWEFycmF5IGlzIGxldmVyYWdlZCwgYW5kIHBvdGVudGlhbGx5IGhpZ2hsaWdodCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIHdpdGhpbiB0aG9zZSBjcml0aWNhbCBhcmVhcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHRlbGxzIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hhc19maW5kXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdD00MTc9aGVsZCwgd2hpbGUgbW92aW5nIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIGluZGV4IGRvZXMuXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDE4LVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjQxOTpZb3UgY2FuIHNlYXJjaCBmb3IgdGhlIG5leHQgcHJlc2VudCBlbnRyeSB1c2luZyB4YXNfZmluZCgpLiAgVGhpc1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0LTQyMC1pcyB0aGUgZXF1aXZhbGVudCBvZiBib3RoIHhhX2ZpbmQoKSBhbmQgeGFfZmluZF9hZnRlcigpO1xuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdD00MjM9ZW50cnkgYXQgdGhlIGluZGV4IG9mIHRoZSB4YV9zdGF0ZS4gIFVzaW5nIHhhc19uZXh0X2VudHJ5KCkgdG9cbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0MjQ6bW92ZSB0byB0aGUgbmV4dCBwcmVzZW50IGVudHJ5IGluc3RlYWQgb2YgeGFzX2ZpbmQoKSB3aWxsIHNhdmVcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00MjUtYSBmdW5jdGlvbiBjYWxsIGluIHRoZSBtYWpvcml0eSBvZiBjYXNlcyBhdCB0aGUgZXhwZW5zZSBvZiBlbWl0dGluZyBtb3JlXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTQ3Nz1pbiB0aGUgeGFfc3RhdGUgd2lsbCBub3QgYmUgY2hhbmdlZC4gIFdoZW4gaXRlcmF0aW5nIG92ZXIgYW4gWEFycmF5XG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q6NDc4Om9yIGNhbGxpbmcgeGFzX2ZpbmQoKSwgaWYgdGhlIGluaXRpYWwgaW5kZXggaXMgaW4gdGhlIG1pZGRsZVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0LTQ3OS1vZiBhIG11bHRpLWluZGV4IGVudHJ5LCBpdCB3aWxsIG5vdCBiZSBhbHRlcmVkLiAgU3Vic2VxdWVudCBjYWxsc1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3Q9MzE1PXhhc19sb2FkKCnkvJrlsL3lj6/og73lnLDlsIZ4YV9zdGF0Zeenu+WKqOWIsOivpeadoeebrumZhOi/keOAguWmguaenOS9oOefpemBk3hhX3N0YXRl5bey57uP56e75Yqo5Yiw5LqG6K+l5p2h55uu77yM5bm25LiU6ZyA6KaB5qOA5p+lXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0zMjEtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0OjMyMjrkvaDlj6/ku6Xkvb/nlKh4YXNfZmluZCgp5pCc57Si5LiL5LiA5Liq5b2T5YmN5p2h55uu44CC6L+Z55u45b2T5LqOeGFfZmluZCgp5ZKMeGFfZmluZF9hZnRlcigp77yb5aaC5p6c5YWJ5qCH5bey57uP56e75Yqo5Yiw5LqGXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTMyMy3kuIDkuKrmnaHnm67vvIzpgqPkuYjlroPlsIbmib7liLDlvZPliY3lvJXnlKjnmoTmnaHnm67kuYvlkI7nmoTkuIvkuIDkuKrmnaHnm67jgILlpoLmnpzmsqHmnInvvIzlroPlsIbov5Tlm554YV9zdGF0Zee0ouW8leWkhOeahOadoeebruOAguS9v+eUqFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdDozMjQ6eGFzX25leHRfZW50cnkoKeiAjOS4jeaYr3hhc19maW5kKCnmnaXnp7vliqjliLDkuIvkuIDkuKrlvZPliY3mnaHnm67vvIzlnKjlpKflpJrmlbDmg4XlhrXkuIvkvJroioLnnIHkuIDkuKrlh73mlbDosIPnlKjvvIzkvYbku6Pku7dcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzI1LeaYr+WPkeWHuuabtOWkmuWGheiBlOS7o+eggeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3Q9MzQ1PVhBcnJheeacieiDveWKm+WwhuWkmuS4que0ouW8leiBlOezu+WcqOS4gOi1t++8jOWboOatpOWvueS4gOS4que0ouW8leeahOaTjeS9nOS8muW9seWTjeWIsOaJgOacieeahOe0ouW8leOAguS+i+Wmgu+8jOWtmOWCqOWIsOS7u+S9lee0ouW8leWwhlx1ZmZmZFx1ZmZmZC4uLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzU0LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdDozNTU65aaC5p6ceGFzX2xvYWQoKemBh+WIsOS4gOS4quWkmue0ouW8leadoeebru+8jHhhX3N0YXRl5Lit55qEeGFfaW5kZXjlsIbkuI3kvJrooqvmlLnlj5jjgILlvZPpgY3ljobkuIDkuKpYQXJyYXnmiJbogIXosIPnlKh4YXNfZmluZCgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTM1Ni3ml7bvvIzlpoLmnpzliJ3lp4vntKLlvJXlnKjkuIDkuKrlpJrntKLlvJXmnaHnm67nmoTkuK3pl7TvvIzlroPlsIbkuI3kvJrooqvmlLnlj5jjgILpmo/lkI7nmoTosIPnlKjmiJbov63ku6PlsIbmiorntKLlvJXnp7vliLDojIPlm7TlhoXnmoTnrKxcdWZmZmRcdWZmZmQuLi5cbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE1NDM9dm9pZCAqeGFzX3N0b3JlKHN0cnVjdCB4YV9zdGF0ZSAqLCB2b2lkICplbnRyeSk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE1NDQ6dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICosIHVuc2lnbmVkIGxvbmcgbWF4KTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTU0NS12b2lkICp4YXNfZmluZF9jb25mbGljdChzdHJ1Y3QgeGFfc3RhdGUgKik7XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xNzAxPXN0YXRpYyBpbmxpbmUgdm9pZCB4YXNfc2V0X2xydShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzExLSAqIHhhc19uZXh0X2VudHJ5KCkgaXMgYW4gaW5saW5lIGZ1bmN0aW9uIHRvIG9wdGltaXNlIHhhcnJheSB0cmF2ZXJzYWwgZm9yXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE3MTI6ICogc3BlZWQuICBJdCBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgeGFzX2ZpbmQoKSwgYW5kIHdpbGwgY2FsbCB4YXNfZmluZCgpXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MTMtICogZm9yIGFsbCB0aGUgaGFyZCBjYXNlcy5cbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE3MTc9c3RhdGljIGlubGluZSB2b2lkICp4YXNfbmV4dF9lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzIzLVx0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gKHhhcy1cdTAwM2V4YV9pbmRleCBcdTAwMjYgWEFfQ0hVTktfTUFTSykpKVxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzI0Olx0XHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzI1LVxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyNy1cdFx0aWYgKHVubGlrZWx5KHhhcy1cdTAwM2V4YV9pbmRleCBcdTAwM2U9IG1heCkpXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE3Mjg6XHRcdFx0cmV0dXJuIHhhc19maW5kKHhhcywgbWF4KTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyOS1cdFx0aWYgKHVubGlrZWx5KHhhcy1cdTAwM2V4YV9vZmZzZXQgPT0gWEFfQ0hVTktfTUFTSykpXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE3MzA6XHRcdFx0cmV0dXJuIHhhc19maW5kKHhhcywgbWF4KTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTczMS1cdFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIHhhcy1cdTAwM2V4YV9vZmZzZXQgJiM0MzsgMSk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MzItXHRcdGlmICh1bmxpa2VseSh4YV9pc19pbnRlcm5hbChlbnRyeSkpKVxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzMzOlx0XHRcdHJldHVybiB4YXNfZmluZCh4YXMsIG1heCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MzQtXHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQmIzQzOyYjNDM7O1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTgwMD1lbnVtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4MTctI2RlZmluZSB4YXNfZm9yX2VhY2goeGFzLCBlbnRyeSwgbWF4KSBcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxODE4Olx0Zm9yIChlbnRyeSA9IHhhc19maW5kKHhhcywgbWF4KTsgZW50cnk7IFxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4MTktXHQgICAgIGVudHJ5ID0geGFzX25leHRfZW50cnkoeGFzLCBtYXgpKVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTEwMj1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja194YXNfcmV0cnkoc3RydWN0IHhhcnJheSAqeGEpXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTEwLVx0cmN1X3JlYWRfbG9jaygpO1xubGliL3Rlc3RfeGFycmF5LmM6MTExOlx0WEFfQlVHX09OKHhhLCB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0geGFfbWtfdmFsdWUoMCkpO1xubGliL3Rlc3RfeGFycmF5LmMtMTEyLVx0eGFfZXJhc2VfaW5kZXgoeGEsIDEpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTEyNTA9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF80KHN0cnVjdCB4YXJyYXkgKnhhKVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTEyNjItXHRyY3VfcmVhZF9sb2NrKCk7XG5saWIvdGVzdF94YXJyYXkuYzoxMjYzOlx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG5saWIvdGVzdF94YXJyYXkuYy0xMjY0LVx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTI2Ni1cbmxpYi90ZXN0X3hhcnJheS5jOjEyNjc6XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbmxpYi90ZXN0X3hhcnJheS5jLTEyNjgtXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTEyNzAtXG5saWIvdGVzdF94YXJyYXkuYzoxMjcxOlx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG5saWIvdGVzdF94YXJyYXkuYy0xMjcyLVx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0xMjg0LVx0cmN1X3JlYWRfbG9jaygpO1xubGliL3Rlc3RfeGFycmF5LmM6MTI4NTpcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xubGliL3Rlc3RfeGFycmF5LmMtMTI4Ni1cdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTEyOTctXHRyY3VfcmVhZF9sb2NrKCk7XG5saWIvdGVzdF94YXJyYXkuYzoxMjk4Olx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG5saWIvdGVzdF94YXJyYXkuYy0xMjk5LVx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTtcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0xMzAxLVxubGliL3Rlc3RfeGFycmF5LmM6MTMwMjpcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xubGliL3Rlc3RfeGFycmF5LmMtMTMwMy1cdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MTU4Nj1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tb3ZlX21heChzdHJ1Y3QgeGFycmF5ICp4YSlcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0xNTkxLVx0cmN1X3JlYWRfbG9jaygpO1xubGliL3Rlc3RfeGFycmF5LmM6MTU5MjpcdFhBX0JVR19PTih4YSwgeGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpICE9IHhhX21rX2luZGV4KFVMT05HX01BWCkpO1xubGliL3Rlc3RfeGFycmF5LmM6MTU5MzpcdFhBX0JVR19PTih4YSwgeGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpICE9IE5VTEwpO1xubGliL3Rlc3RfeGFycmF5LmMtMTU5NC1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTE1OTctXHRyY3VfcmVhZF9sb2NrKCk7XG5saWIvdGVzdF94YXJyYXkuYzoxNTk4Olx0WEFfQlVHX09OKHhhLCB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0geGFfbWtfaW5kZXgoVUxPTkdfTUFYKSk7XG5saWIvdGVzdF94YXJyYXkuYy0xNTk5LVx0eGFzX3BhdXNlKFx1MDAyNnhhcyk7XG5saWIvdGVzdF94YXJyYXkuYzoxNjAwOlx0WEFfQlVHX09OKHhhLCB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0gTlVMTCk7XG5saWIvdGVzdF94YXJyYXkuYy0xNjAxLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubGliL3hhcnJheS5jPTEzNzU9RVhQT1JUX1NZTUJPTF9HUEwoX194YXNfbmV4dCk7XG4tLVxubGliL3hhcnJheS5jLTEzNzctLyoqXG5saWIveGFycmF5LmM6MTM3ODogKiB4YXNfZmluZCgpIC0gRmluZCB0aGUgbmV4dCBwcmVzZW50IGVudHJ5IGluIHRoZSBYQXJyYXkuXG5saWIveGFycmF5LmMtMTM3OS0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxuLS1cbmxpYi94YXJyYXkuYy0xMzkyLSAqL1xubGliL3hhcnJheS5jOjEzOTM6dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxubGliL3hhcnJheS5jLTEzOTQte1xuLS1cbmxpYi94YXJyYXkuYz0yMTcyPUVYUE9SVF9TWU1CT0woeGFfY2xlYXJfbWFyayk7XG4tLVxubGliL3hhcnJheS5jLTIxODUtICogZW50cmllcyB3aGljaCBhcmUgYmVpbmcgc2ltdWx0YW5lb3VzbHkgYWRkZWQuICBJdCB3aWxsIG5vdCByZXR1cm4gYW5cbmxpYi94YXJyYXkuYzoyMTg2OiAqICVYQV9SRVRSWV9FTlRSWTsgaWYgeW91IG5lZWQgdG8gc2VlIHJldHJ5IGVudHJpZXMsIHVzZSB4YXNfZmluZCgpLlxubGliL3hhcnJheS5jLTIxODctICpcbi0tXG5saWIveGFycmF5LmM9MjE5MT12b2lkICp4YV9maW5kKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXG4tLVxubGliL3hhcnJheS5jLTIyMDEtXHRcdGVsc2VcbmxpYi94YXJyYXkuYzoyMjAyOlx0XHRcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBtYXgpO1xubGliL3hhcnJheS5jLTIyMDMtXHR9IHdoaWxlICh4YXNfcmV0cnkoXHUwMDI2eGFzLCBlbnRyeSkpO1xuLS1cbmxpYi94YXJyYXkuYz0yMjEyPXN0YXRpYyBib29sIHhhc19zaWJsaW5nKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbmxpYi94YXJyYXkuYy0yMjM1LSAqIHdoaWNoIGFyZSBiZWluZyBzaW11bHRhbmVvdXNseSBhZGRlZC4gIEl0IHdpbGwgbm90IHJldHVybiBhblxubGliL3hhcnJheS5jOjIyMzY6ICogJVhBX1JFVFJZX0VOVFJZOyBpZiB5b3UgbmVlZCB0byBzZWUgcmV0cnkgZW50cmllcywgdXNlIHhhc19maW5kKCkuXG5saWIveGFycmF5LmMtMjIzNy0gKlxuLS1cbmxpYi94YXJyYXkuYz0yMjQxPXZvaWQgKnhhX2ZpbmRfYWZ0ZXIoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgKmluZGV4cCxcbi0tXG5saWIveGFycmF5LmMtMjI1NC1cdFx0ZWxzZVxubGliL3hhcnJheS5jOjIyNTU6XHRcdFx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIG1heCk7XG5saWIveGFycmF5LmMtMjI1Ni1cbi0tXG5tbS9maWxlbWFwLmM9NDc5PWJvb2wgZmlsZW1hcF9yYW5nZV9oYXNfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtNDkwLVx0Zm9yICg7Oykge1xubW0vZmlsZW1hcC5jOjQ5MTpcdFx0Zm9saW8gPSB4YXNfZmluZChcdTAwMjZ4YXMsIG1heCk7XG5tbS9maWxlbWFwLmMtNDkyLVx0XHRpZiAoeGFzX3JldHJ5KFx1MDAyNnhhcywgZm9saW8pKVxuLS1cbm1tL2ZpbGVtYXAuYz0yMDc4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmaW5kX2dldF9lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgcGdvZmZfdCBtYXgsXG4tLVxubW0vZmlsZW1hcC5jLTIwODQtXHRpZiAobWFyayA9PSBYQV9QUkVTRU5UKVxubW0vZmlsZW1hcC5jOjIwODU6XHRcdGZvbGlvID0geGFzX2ZpbmQoeGFzLCBtYXgpO1xubW0vZmlsZW1hcC5jLTIwODYtXHRlbHNlXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0yNDM0PWJvb2wga3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yNDQ5LVx0aWYgKCFhdHRycylcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjQ1MDpcdFx0cmV0dXJuICF4YXNfZmluZChcdTAwMjZ4YXMsIGVuZCAtIDEpO1xudmlydC9rdm0va3ZtX21haW4uYy0yNDUxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNjgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBYQXJyYXkgdXNhZ2UuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHBlcnZhc2l2ZSB0aGVzZSBmdW5jdGlvbnMgYXJlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGF0IGhvdyBgeGFfZmluZGAsIGB4YV9maW5kX2FmdGVyYCwgYHhhc19mb3JfZWFjaGAsIGFuZCBgeGFzX2ZpbmRgIGFyZSB1dGlsaXplZC4KCioqWEFycmF5IEZ1bmN0aW9uIFVzYWdlIERlZXAgRGl2ZSoqCgpJdCYjMzk7cyBpbW1lZGlhdGVseSBzdHJpa2luZyB0aGF0IGB4YXNfZm9yX2VhY2hgIHNlZW1zIHRvIGJlIHRoZSB3b3JraG9yc2UgaGVyZS4gSSBzZWUgaXQmIzM5O3MgaGVhdmlseSBpbnZvbHZlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgZmlsZSBtYXBwaW5nLCBzaGFyZWQgbWVtb3J5LCBLVk0sIGZpbGVzeXN0ZW1zIOKAkyBpdCYjMzk7cyBhbGwgb3ZlciB0aGUgcGxhY2UhIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIHNpZ25pZnlpbmcgaXRzIGltcG9ydGFuY2UgdG8gY29yZSBmdW5jdGlvbmFsaXRpZXMuCgpUaGVuLCBJIG9ic2VydmUgYHhhX2ZpbmRgIGFuZCBgeGFfZmluZF9hZnRlcmAgYXJlIGVxdWFsbHkgd2lkZXNwcmVhZCwgd2l0aCBhcHBsaWNhdGlvbiBhY3Jvc3Mga2VybmVsIG1vZHVsZXMgYW5kIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGNvcmUgc3Vic3lzdGVtcy4gVGhlaXIgYnJvYWQgdXNlIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGNydWNpYWwgZm9yIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZW0gd2VsbC4KCkZpbmFsbHksIGB4YXNfZmluZGAgaXMgbG9jYXRlZCByaWdodCBpbiBgbGliL3hhcnJheS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGhvd2V2ZXIsIHRoZSBsb2NhdGlvbiBvZiBhIHNwZWNpZmljIGZ1bmN0aW9uIGRvZXMgbm90IHRlbGwgbWUgZXZlcnl0aGluZyBhYm91dCBpdHMgdXNhZ2UuIAoKTm93LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIGBDT05GSUdfWEFSUkFZX01VTFRJYCBpcyBhIGNvbmZpZ3VyYWJsZSBvcHRpb24uIFRoaXMgd2lsbCBhZmZlY3QgaG93IGl0JiMzOTtzIHVzZWQgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgYSBzdGFuZGFyZCBzZXR0aW5nLCBvciBpZiBpdCBpcyBjb25maWd1cmFibGUuIFRoaXMgd2lsbCBkZWZpbmUgdGhlIHJhbmdlIG9mIHN5c3RlbXMgdGhhdCBsZXZlcmFnZSB0aGUgZmVhdHVyZXMgb2YgdGhpcyBhcnJheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEFSUkFZX01VTFRJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnPTM0OD1jb25maWcgSU5URVJWQUxfVFJFRV9TUEFOX0lURVJcbi0tXG5saWIvS2NvbmZpZy0zNTEtXG5saWIvS2NvbmZpZzozNTI6Y29uZmlnIFhBUlJBWV9NVUxUSVxubGliL0tjb25maWctMzUzLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4ODYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlc2Ugc2V0dGluZ3M6IHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEdpdmVuIHRoYXQgSSYjMzk7bSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgYXJlYSBvciBmZWF0dXJlLCBhIHRhcmdldGVkIGFwcHJvYWNoIGlzIGJlc3QuIEkmIzM5O20gaG9taW5nIGluIG9uIGxpbmUgMzUyIGluIGBsaWIvS2NvbmZpZ2AuIFRoaXMgc3VnZ2VzdHMgSSBoYXZlIGEgc3BlY2lmaWMgY29udGV4dCBpbiBtaW5kLiBQZXJoYXBzIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIG9wdGlvbiwgYSBkZXBlbmRlbmN5IGNoYWluLCBvciBob3cgYSBmZWF0dXJlIGlzIGNvbmRpdGlvbmFsbHkgZW5hYmxlZC4gVGhlIGxpbmUgbnVtYmVyIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEkgZXhwZWN0IHRvIHNlZSB0aGUgbWVhdCBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgdGhlcmUgaW4gdGhlIGBLY29uZmlnYCBmaWxlLiBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0IHNwZWNpZmljIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZ3VhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0NTpcdFxuIDM0NjpcdFx0ICBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAzNDc6XHRcbiAzNDg6XHRjb25maWcgSU5URVJWQUxfVFJFRV9TUEFOX0lURVJcbiAzNDk6XHRcdGJvb2xcbiAzNTA6XHRcdGRlcGVuZHMgb24gSU5URVJWQUxfVFJFRVxuIDM1MTpcdFxuIDM1MjpcdGNvbmZpZyBYQVJSQVlfTVVMVElcbiAzNTM6XHRcdGJvb2xcbiAzNTQ6XHRcdGhlbHBcbiAzNTU6XHRcdCAgU3VwcG9ydCBlbnRyaWVzIHdoaWNoIG9jY3VweSBtdWx0aXBsZSBjb25zZWN1dGl2ZSBpbmRpY2VzIGluIHRoZVxuIDM1NjpcdFx0ICBYQXJyYXkuXG4gMzU3Olx0XG4gMzU4Olx0Y29uZmlnIEFTU09DSUFUSVZFX0FSUkFZXG4gMzU5Olx0XHRib29sXG4gMzYwOlx0XHRoZWxwXG4gMzYxOlx0XHQgIEdlbmVyaWMgYXNzb2NpYXRpdmUgYXJyYXkuICBDYW4gYmUgc2VhcmNoZWQgYW5kIGl0ZXJhdGVkIG92ZXIgd2hpbHN0XG4gMzYyOlx0XHQgIGl0IGlzIGJlaW5nIG1vZGlmaWVkLiAgSXQgaXMgYWxzbyByZWFzb25hYmx5IHF1aWNrIHRvIHNlYXJjaCBhbmRcbiAzNjM6XHRcdCAgbW9kaWZ5LiAgVGhlIGFsZ29yaXRobXMgYXJlIG5vbi1yZWN1cnNpdmUsIGFuZCB0aGUgdHJlZXMgYXJlIGhpZ2hseVxuIDM2NDpcdFx0ICBjYXBhY2lvdXMuXG4gMzY1Olx0XG4gMzY2Olx0XHQgIFNlZTpcbiAzNjc6XHRcbiAzNjg6XHRcdFx0RG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9hc3NvY19hcnJheS5yc3RcbiAzNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MTgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYFhBUlJBWV9NVUxUSWAgU2VsZWN0aW9uIGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCYjMzk7cyBjaG9vc2luZyBgWEFSUkFZX01VTFRJYCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIEkgd2FudCBhIGhvbGlzdGljIHZpZXcsIGEgbWFwLCBvZiB3aGVyZSBhbmQgaG93IHRoaXMgZmxhZyBpcyBiZWluZyB0cmlnZ2VyZWQuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBsb2dpYywgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgcGlucG9pbnQgdGhlIHNwZWNpZmljIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGl0cyBzZWxlY3Rpb24uIEl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBoZXJlIGlzIGdvaW5nIHRvIGluZm9ybSBteSBuZXh0IHN0ZXBzLiBUaGlzIGtpbmQgb2Yga2VybmVsLWxldmVsIGludmVzdGlnYXRpb24gaXMgc2Vjb25kIG5hdHVyZSwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBwcmVjaXNlIGFuZCBjb21wcmVoZW5zaXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgdW5jb3Zlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFhBUlJBWV9NVUxUSSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTE4Mjc9Y29uZmlnIFg4Nl9TR1hcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE4MzItXHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQVxuYXJjaC94ODYvS2NvbmZpZzoxODMzOlx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuYXJjaC94ODYvS2NvbmZpZy0xODM0LVx0aGVscFxuLS1cbmZzL0tjb25maWc9MjczPWNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI3NTpcdHNlbGVjdCBYQVJSQVlfTVVMVElcbmZzL0tjb25maWctMjc2LVxuLS1cbm1tL0tjb25maWc9ODQ2PW1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbi0tXG5tbS9LY29uZmlnLTg0OS1cdHNlbGVjdCBDT01QQUNUSU9OXG5tbS9LY29uZmlnOjg1MDpcdHNlbGVjdCBYQVJSQVlfTVVMVElcbm1tL0tjb25maWctODUxLVx0c2VsZWN0IE1NX0lEXG4tLVxubW0vS2NvbmZpZz0xMjM2PWNvbmZpZyBaT05FX0RFVklDRVxuLS1cbm1tL0tjb25maWctMTI0MC1cdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWc6MTI0MTpcdHNlbGVjdCBYQVJSQVlfTVVMVElcbm1tL0tjb25maWctMTI0Mi1cbi0tXG5zb3VuZC9jb3JlL0tjb25maWc9MTgxPWNvbmZpZyBTTkRfQ1RMX0ZBU1RfTE9PS1VQXG4tLVxuc291bmQvY29yZS9LY29uZmlnLTE4My1cdGRlZmF1bHQgeVxuc291bmQvY29yZS9LY29uZmlnOjE4NDpcdHNlbGVjdCBYQVJSQVlfTVVMVElcbnNvdW5kL2NvcmUvS2NvbmZpZy0xODUtXHRoZWxwXG4tLVxudmlydC9rdm0vS2NvbmZpZz0xMDY9Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZzoxMDc6ICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbnZpcnQva3ZtL0tjb25maWctMTA4LSAgICAgICBib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDUzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipYQXJyYXkgSW52ZXN0aWdhdGlvbiAtIEluaXRpYWwgVGhvdWdodHMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgWEFSUkFZX01VTFRJYCBpcyBnZXR0aW5nIHB1bGxlZCBpbiBieSBhIGZldyBkaWZmZXJlbnQgb3B0aW9ucywgbmFtZWx5IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBIVUdFVExCX1BBR0VgLCBhbmQgYFNORF9DVExfRkFTVF9MT09LVVBgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSXQmIzM5O3MgYSBrZXkgY29tcG9uZW50LCBvYnZpb3VzbHksIGlmIGl0JiMzOTtzIGRlcGVuZGVudCBvbiB0aG9zZSBjb21tb25seSB1c2VkIGZlYXR1cmVzLiBBbmQsIEkgYWxzbyBrbm93IHRoYXQgYHhhcnJheS5jYCBpcyBhbHdheXMgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUgdm1saW51eCBpbWFnZS4gVGhhdCBtZWFucyBpdCYjMzk7cyBwcmV0dHkgZnVuZGFtZW50YWwsIGEgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgaW5mcmFzdHJ1Y3R1cmUuIEl0JiMzOTtzIG5vdCBhIG1vZHVsYXIgY29tcG9uZW50IHRoYXQgY2FuIGJlIGVhc2lseSBzd2FwcGVkIG91dC4KCkdpdmVuIHRoYXQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbGliL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGB4YXJyYXkub2AgaXMgY29tcGlsZWQuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGluZmx1ZW5jZXMgaXRzIGluY2x1c2lvbi4gVGhpcyBzaG91bGQgYWxzbyBoZWxwIGVzdGFibGlzaCB0aGUgY29udGV4dCBmb3IgYFhBUlJBWV9NVUxUSWAmIzM5O3Mgcm9sZSBpbiByZWxhdGlvbiB0byB0aG9zZSBvdGhlciB2YXJpYWJsZXMgYW5kIHVsdGltYXRlbHksIHRvIGdhaW4gaW5zaWdodCBpbnRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGFycmF5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9NYWtlZmlsZT0zNj1saWIteSA6PSBjdHlwZS5vIHN0cmluZy5vIHZzcHJpbnRmLm8gY21kbGluZS5vIFxcXG5saWIvTWFrZWZpbGU6Mzc6XHQgcmJ0cmVlLm8gcmFkaXgtdHJlZS5vIHRpbWVycXVldWUubyB4YXJyYXkubyBcXFxubGliL01ha2VmaWxlLTM4LVx0IG1hcGxlX3RyZWUubyBpZHIubyBleHRhYmxlLm8gaXJxX3JlZ3MubyBhcmd2X3NwbGl0Lm8gXFxcbi0tXG5saWIvTWFrZWZpbGU9OTI9ZW5kaWZcbmxpYi9NYWtlZmlsZS05My1cbmxpYi9NYWtlZmlsZTo5NDpvYmotJChDT05GSUdfVEVTVF9YQVJSQVkpICYjNDM7PSB0ZXN0X3hhcnJheS5vXG5saWIvTWFrZWZpbGUtOTUtb2JqLSQoQ09ORklHX1RFU1RfTUFQTEVfVFJFRSkgJiM0Mzs9IHRlc3RfbWFwbGVfdHJlZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTg0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgeGFycmF5IFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB4YXNfZmluZGAgd2l0aGluIGBsaWIveGFycmF5LmNgLCBhIGNyaXRpY2FsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgeGFycmF5IGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgaGFuZGxpbmcgdGhlIGB4YXMtJmd0O3hhX29mZnNldGAgY2FsY3VsYXRpb24gd2hlbiBkZWFsaW5nIHdpdGggbm9uLWxlYWYgbm9kZXMgKGB4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0ICE9IDBgKS4gQmVmb3JlLCB0aGlzIHNwZWNpZmljIGNvbmRpdGlvbiB3YXNuJiMzOTt0IGNvcnJlY3RseSBhZGRyZXNzZWQsIGJ1dCBub3cgaXQgY2hlY2tzIGB4YXMtJmd0O3hhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy0mZ3Q7eGFfaW5kZXgsIHhhcy0mZ3Q7eGFfbm9kZSlgIGFuZCBhZGp1c3RzIGFjY29yZGluZ2x5LiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgY2hhbmdlIHRvIGhvdyB0aGUgeGFycmF5IHRyYXZlcnNlcyBpdHMgc3RydWN0dXJlLgoKTm93LCBpcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSAqcmVhY2hhYmxlKiBpbiBhIHJ1bm5pbmcga2VybmVsPyBBYnNvbHV0ZWx5LiBgeGFzX2ZpbmRgIGlzIGEgZnVuZGFtZW50YWwgZnVuY3Rpb24sIHVzZWQgZXh0ZW5zaXZlbHkgaW4gdGhpbmdzIGxpa2UgdGhlIHBhZ2UgY2FjaGUsIHNoYXJlZCBtZW1vcnkgbG9va3VwcyAoc2htZW0pLCBLVk0sIHNvdW5kIGNvbnRyb2wsIGFuZCBmaWxlIG1hcHBpbmcuIEl0JiMzOTtzIHBhcnQgb2YgdGhlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGRhdGEgc3RydWN0dXJlcyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuCgpHaXZlbiB0aGUgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGlmIHNvbWV0aGluZyBpcyB3b3J0aCBmdXp6aW5nLCB0aGlzIGlzIGEgY2xlYXIgeWVzLiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIHN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSBtZW1vcnkgbWFuYWdlbWVudCB0aHJvdWdoIHRoZSB4YXJyYXksIGFuZCBpdCBpbnZvbHZlcyByZXN0cnVjdHVyaW5nIG9mIGEgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlLiBUaGlzIHRpY2tzIGFsbCB0aGUgYm94ZXMuCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy4gQ2xlYXJseSwgYHhhc19maW5kYCBpdHNlbGYgaXMgYSBwcmltZSBjYW5kaWRhdGUsIGdpdmVuIGl0IHdhcyBkaXJlY3RseSBtb2RpZmllZC4gQnV0IGxldCYjMzk7cyBsb29rIGZvciBkaXJlY3Qgd3JhcHBlcnM6IGB4YV9maW5kYCBhbmQgYHhhX2ZpbmRfYWZ0ZXJgIGFyZSByaWdodCB0aGVyZSBhbmQgY2FsbCBgeGFzX2ZpbmRgLiBUaGV5IGFyZSBpbW1lZGlhdGVseSByZWxldmFudC4gVGltZSB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGVudHJ5cG9pbnRzIGluIGBsaWIveGFycmF5LmNgIHRoYXQgY2FsbCBgeGFzX2ZpbmRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4YXNfZmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi94YXJyYXkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIveGFycmF5LmM9MTM3NT1FWFBPUlRfU1lNQk9MX0dQTChfX3hhc19uZXh0KTtcbi0tXG5saWIveGFycmF5LmMtMTM3Ny0vKipcbmxpYi94YXJyYXkuYzoxMzc4OiAqIHhhc19maW5kKCkgLSBGaW5kIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW4gdGhlIFhBcnJheS5cbmxpYi94YXJyYXkuYy0xMzc5LSAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXG4tLVxubGliL3hhcnJheS5jLTEzOTItICovXG5saWIveGFycmF5LmM6MTM5Mzp2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXG5saWIveGFycmF5LmMtMTM5NC17XG4tLVxubGliL3hhcnJheS5jLTE0NDAtfVxubGliL3hhcnJheS5jOjE0NDE6RVhQT1JUX1NZTUJPTF9HUEwoeGFzX2ZpbmQpO1xubGliL3hhcnJheS5jLTE0NDItXG5saWIveGFycmF5LmMtMTQ0My0vKipcbmxpYi94YXJyYXkuYzoxNDQ0OiAqIHhhc19maW5kX21hcmtlZCgpIC0gRmluZCB0aGUgbmV4dCBtYXJrZWQgZW50cnkgaW4gdGhlIFhBcnJheS5cbmxpYi94YXJyYXkuYy0xNDQ1LSAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXG4tLVxubGliL3hhcnJheS5jLTE0NjMtICovXG5saWIveGFycmF5LmM6MTQ2NDp2b2lkICp4YXNfZmluZF9tYXJrZWQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4LCB4YV9tYXJrX3QgbWFyaylcbmxpYi94YXJyYXkuYy0xNDY1LXtcbi0tXG5saWIveGFycmF5LmMtMTUxMS1cbmxpYi94YXJyYXkuYzoxNTEyOlx0XHRvZmZzZXQgPSB4YXNfZmluZF9jaHVuayh4YXMsIGFkdmFuY2UsIG1hcmspO1xubGliL3hhcnJheS5jLTE1MTMtXHRcdGlmIChvZmZzZXQgXHUwMDNlIHhhcy1cdTAwM2V4YV9vZmZzZXQpIHtcbi0tXG5saWIveGFycmF5LmMtMTU0Mi19XG5saWIveGFycmF5LmM6MTU0MzpFWFBPUlRfU1lNQk9MX0dQTCh4YXNfZmluZF9tYXJrZWQpO1xubGliL3hhcnJheS5jLTE1NDQtXG5saWIveGFycmF5LmMtMTU0NS0vKipcbmxpYi94YXJyYXkuYzoxNTQ2OiAqIHhhc19maW5kX2NvbmZsaWN0KCkgLSBGaW5kIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW4gYSByYW5nZS5cbmxpYi94YXJyYXkuYy0xNTQ3LSAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXG4tLVxubGliL3hhcnJheS5jLTE1NTMtICovXG5saWIveGFycmF5LmM6MTU1NDp2b2lkICp4YXNfZmluZF9jb25mbGljdChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbmxpYi94YXJyYXkuYy0xNTU1LXtcbi0tXG5saWIveGFycmF5LmMtMTYwMy19XG5saWIveGFycmF5LmM6MTYwNDpFWFBPUlRfU1lNQk9MX0dQTCh4YXNfZmluZF9jb25mbGljdCk7XG5saWIveGFycmF5LmMtMTYwNS1cbi0tXG5saWIveGFycmF5LmM9MTk4Nz1pbnQgX194YV9hbGxvYyhzdHJ1Y3QgeGFycmF5ICp4YSwgdTMyICppZCwgdm9pZCAqZW50cnksXG4tLVxubGliL3hhcnJheS5jLTIwMDEtXHRcdHhhcy54YV9pbmRleCA9IGxpbWl0Lm1pbjtcbmxpYi94YXJyYXkuYzoyMDAyOlx0XHR4YXNfZmluZF9tYXJrZWQoXHUwMDI2eGFzLCBsaW1pdC5tYXgsIFhBX0ZSRUVfTUFSSyk7XG5saWIveGFycmF5LmMtMjAwMy1cdFx0aWYgKHhhcy54YV9ub2RlID09IFhBU19SRVNUQVJUKVxuLS1cbmxpYi94YXJyYXkuYz0yMTcyPUVYUE9SVF9TWU1CT0woeGFfY2xlYXJfbWFyayk7XG4tLVxubGliL3hhcnJheS5jLTIxODUtICogZW50cmllcyB3aGljaCBhcmUgYmVpbmcgc2ltdWx0YW5lb3VzbHkgYWRkZWQuICBJdCB3aWxsIG5vdCByZXR1cm4gYW5cbmxpYi94YXJyYXkuYzoyMTg2OiAqICVYQV9SRVRSWV9FTlRSWTsgaWYgeW91IG5lZWQgdG8gc2VlIHJldHJ5IGVudHJpZXMsIHVzZSB4YXNfZmluZCgpLlxubGliL3hhcnJheS5jLTIxODctICpcbi0tXG5saWIveGFycmF5LmM9MjE5MT12b2lkICp4YV9maW5kKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXG4tLVxubGliL3hhcnJheS5jLTIxOTktXHRcdGlmICgoX19mb3JjZSB1bnNpZ25lZCBpbnQpZmlsdGVyIFx1MDAzYyBYQV9NQVhfTUFSS1MpXG5saWIveGFycmF5LmM6MjIwMDpcdFx0XHRlbnRyeSA9IHhhc19maW5kX21hcmtlZChcdTAwMjZ4YXMsIG1heCwgZmlsdGVyKTtcbmxpYi94YXJyYXkuYy0yMjAxLVx0XHRlbHNlXG5saWIveGFycmF5LmM6MjIwMjpcdFx0XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgbWF4KTtcbmxpYi94YXJyYXkuYy0yMjAzLVx0fSB3aGlsZSAoeGFzX3JldHJ5KFx1MDAyNnhhcywgZW50cnkpKTtcbi0tXG5saWIveGFycmF5LmM9MjIxMj1zdGF0aWMgYm9vbCB4YXNfc2libGluZyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5saWIveGFycmF5LmMtMjIzNS0gKiB3aGljaCBhcmUgYmVpbmcgc2ltdWx0YW5lb3VzbHkgYWRkZWQuICBJdCB3aWxsIG5vdCByZXR1cm4gYW5cbmxpYi94YXJyYXkuYzoyMjM2OiAqICVYQV9SRVRSWV9FTlRSWTsgaWYgeW91IG5lZWQgdG8gc2VlIHJldHJ5IGVudHJpZXMsIHVzZSB4YXNfZmluZCgpLlxubGliL3hhcnJheS5jLTIyMzctICpcbi0tXG5saWIveGFycmF5LmM9MjI0MT12b2lkICp4YV9maW5kX2FmdGVyKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXG4tLVxubGliL3hhcnJheS5jLTIyNTItXHRcdGlmICgoX19mb3JjZSB1bnNpZ25lZCBpbnQpZmlsdGVyIFx1MDAzYyBYQV9NQVhfTUFSS1MpXG5saWIveGFycmF5LmM6MjI1MzpcdFx0XHRlbnRyeSA9IHhhc19maW5kX21hcmtlZChcdTAwMjZ4YXMsIG1heCwgZmlsdGVyKTtcbmxpYi94YXJyYXkuYy0yMjU0LVx0XHRlbHNlXG5saWIveGFycmF5LmM6MjI1NTpcdFx0XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgbWF4KTtcbmxpYi94YXJyYXkuYy0yMjU2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAwNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYYXJyYXkgTW9kdWxlIFRlc3RpbmcgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgeGFycmF5IHRlc3Qgc2l0dWF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBjb21wcmVoZW5zaXZlbHkgY292ZXJpbmcgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgc28gSSYjMzk7bGwgY2hlY2sgYHRlc3RfeGFycmF5LmNgIGFzIHdlbGwuIFJpZ2h0LCB0aGUgdGVzdHMgaW4gYGxpYi90ZXN0X3hhcnJheS5jYCBhcmUgdGllZCB0byB0aGF0IGBDT05GSUdfVEVTVF9YQVJSQVlgIG1vZHVsZSwgc28gdGhhdCYjMzk7cyB3aGVyZSB0aGUgcHJpbWFyeSBzZWxmLWNoZWNrcyBhcmUgaGFwcGVuaW5nLgoKTXkgZm9jdXMgZm9yIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBkZWZpbml0ZWx5IGJlIG9uOgoqICAgYHhhc19maW5kYAoqICAgYHhhX2ZpbmRgCiogICBgeGFfZmluZF9hZnRlcmAKCkJ1dCBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrLCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcml0aWNhbCB0byBjb3Zlcj8KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBicm9hZGVyIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gUGVyaGFwcyBJIG5lZWQgdG8gY2hlY2sgaWYgYGZpbGVtYXBfcmFuZ2VfaGFzX3BhZ2VgIG9yIGBmaW5kX3N3YXBfZW50cnlgIHV0aWxpemUgYHhhc19maW5kYC4gVGhhdCB3b3VsZCBiZSBhbiBpbXBvcnRhbnQgYWRkaXRpb24gdG8gbXkgdW5kZXJzdGFuZGluZy4KCkEgcXVpY2sgYW5kIGRpcnR5IGNoZWNrIHdvdWxkIGJlIHRvIHNpbXBseSBgZ3JlcGAgYWNyb3NzIHRoZSBgbW0vYCBkaXJlY3RvcnkgZm9yIGFueSBjYWxscyB0byBgeGFzX2ZpbmRgLiBUaGF0IHNob3VsZCBxdWlja2x5IHVuY292ZXIgYW55IHVzYWdlcyB0aGF0IEkgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4YXNfZmluZFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmM9NDc5PWJvb2wgZmlsZW1hcF9yYW5nZV9oYXNfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtNDkwLVx0Zm9yICg7Oykge1xubW0vZmlsZW1hcC5jOjQ5MTpcdFx0Zm9saW8gPSB4YXNfZmluZChcdTAwMjZ4YXMsIG1heCk7XG5tbS9maWxlbWFwLmMtNDkyLVx0XHRpZiAoeGFzX3JldHJ5KFx1MDAyNnhhcywgZm9saW8pKVxuLS1cbm1tL2ZpbGVtYXAuYz0yMDc4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmaW5kX2dldF9lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgcGdvZmZfdCBtYXgsXG4tLVxubW0vZmlsZW1hcC5jLTIwODQtXHRpZiAobWFyayA9PSBYQV9QUkVTRU5UKVxubW0vZmlsZW1hcC5jOjIwODU6XHRcdGZvbGlvID0geGFzX2ZpbmQoeGFzLCBtYXgpO1xubW0vZmlsZW1hcC5jLTIwODYtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjMzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgU2VhcmNoIFRlcm1zIGZvciBgeGFfZmluZGAgRnVuY3Rpb25zKioKClJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGVzZSBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdlJiMzOTtyZSB0YXJnZXRpbmcgdGhlIFhBcnJheSBkYXRhIHN0cnVjdHVyZSBhbmQgaXRzIHNlYXJjaCBmdW5jdGlvbmFsaXRpZXMuJiMzNDsgVGhlIGZhY3QgdGhhdCB3ZSYjMzk7cmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGB4YV9maW5kKGAgYW5kIGB4YV9maW5kX2FmdGVyKGAgc3Ryb25nbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIGRpZ2dpbmcgaW50byB0aGUgY29yZSBzZWFyY2ggaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBYQXJyYXkgY29kZSBiYXNlLgoKV2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIG90aGVyIGB4YV9gIGZ1bmN0aW9ucywgYW5kIG9ubHkgdGhvc2Ugd2hpY2ggcGVydGFpbiB0byBmaW5kaW5nIGFyZSBvZiBpbnRlcmVzdC4gVGhpcyB0ZWxscyBtZSB0aGF0IHdlIGFyZSBpbnRlcmVzdGVkIGluIGVpdGhlciBhIGZ1bmN0aW9uIGNhbGwgb3IgaW1wbGVtZW50YXRpb24gb2YgdGhvc2Ugc2VhcmNoIGZ1bmN0aW9uYWxpdGllcy4gCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcYnhhX2ZpbmRcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTg4PWJ5IGNhbGxpbmcgeGFfZm9yX2VhY2goKSwgeGFfZm9yX2VhY2hfc3RhcnQoKSBvciB4YV9mb3JfZWFjaF9yYW5nZSgpLlxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0Ojg5OllvdSBtYXkgcHJlZmVyIHRvIHVzZSB4YV9maW5kKCkgb3IgeGFfZmluZF9hZnRlcigpIHRvIG1vdmUgdG8gdGhlIG5leHRcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC05MC1wcmVzZW50IGVudHJ5IGluIHRoZSBYQXJyYXkuXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTE5NT1UYWtlcyBSQ1UgcmVhZCBsb2NrOlxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC0xOTktICogeGFfZm9yX2VhY2hfcmFuZ2UoKVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjIwMDogKiB4YV9maW5kKClcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC0yMDEtICogeGFfZmluZF9hZnRlcigpXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTQxOT1Zb3UgY2FuIHNlYXJjaCBmb3IgdGhlIG5leHQgcHJlc2VudCBlbnRyeSB1c2luZyB4YXNfZmluZCgpLiAgVGhpc1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjQyMDppcyB0aGUgZXF1aXZhbGVudCBvZiBib3RoIHhhX2ZpbmQoKSBhbmQgeGFfZmluZF9hZnRlcigpO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0LTQyMS1pZiB0aGUgY3Vyc29yIGhhcyBiZWVuIHdhbGtlZCB0byBhbiBlbnRyeSwgdGhlbiBpdCB3aWxsIGZpbmQgdGhlIG5leHRcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0PTc2PXhhX2Zvcl9lYWNoKCnjgIF4YV9mb3JfZWFjaF9zdGFydCgp5oiWeGFfZm9yX2VhY2hfcmFuZ2UoKeadpemBjeWOhlhBcnJheeS4reeahOeOsOacieadoeebruOAguS9oFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdDo3Nzrlj6/og73mm7TllpzmrKLkvb/nlKh4YV9maW5kKCnmiJZ4YV9maW5kX2FmdGVyKCnmnaXnp7vliqjliLBYQXJyYXnkuK3nmoTkuIvkuIDkuKrlvZPliY3mnaHnm67jgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtNzgtXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdD0xMzU9eGFfc3RvcmUoKSwgeGFfY21weGNoZygpLCB4YV9hbGxvYygpLCB4YV9yZXNlcnZlKCnlkox4YV9pbnNlcnQoKeWHveaVsOaOpeWPl+S4gOS4qmdmcF905Y+C5pWw77yM5LulXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0xNTYtICogeGFfZm9yX2VhY2hfcmFuZ2UoKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdDoxNTc6ICogeGFfZmluZCgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTE1OC0gKiB4YV9maW5kX2FmdGVyKClcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0PTMxNT14YXNfbG9hZCgp5Lya5bC95Y+v6IO95Zyw5bCGeGFfc3RhdGXnp7vliqjliLDor6XmnaHnm67pmYTov5HjgILlpoLmnpzkvaDnn6XpgZN4YV9zdGF0ZeW3sue7j+enu+WKqOWIsOS6huivpeadoeebru+8jOW5tuS4lOmcgOimgeajgOafpVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzIxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdDozMjI65L2g5Y+v5Lul5L2/55SoeGFzX2ZpbmQoKeaQnOe0ouS4i+S4gOS4quW9k+WJjeadoeebruOAgui/meebuOW9k+S6jnhhX2ZpbmQoKeWSjHhhX2ZpbmRfYWZ0ZXIoKe+8m+WmguaenOWFieagh+W3sue7j+enu+WKqOWIsOS6hlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0zMjMt5LiA5Liq5p2h55uu77yM6YKj5LmI5a6D5bCG5om+5Yiw5b2T5YmN5byV55So55qE5p2h55uu5LmL5ZCO55qE5LiL5LiA5Liq5p2h55uu44CC5aaC5p6c5rKh5pyJ77yM5a6D5bCG6L+U5ZueeGFfc3RhdGXntKLlvJXlpITnmoTmnaHnm67jgILkvb/nlKhcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MzUwPXN0cnVjdCBkcGxsX3Bpbl9yZWYgKmRwbGxfeGFfcmVmX2RwbGxfZmlyc3Qoc3RydWN0IHhhcnJheSAqeGFfcmVmcylcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzU0LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM1NTpcdHJlZiA9IHhhX2ZpbmQoeGFfcmVmcywgXHUwMDI2aSwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNTYtXHRXQVJOX09OKCFyZWYpO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yMC0jZGVmaW5lIHhhX2Zvcl9lYWNoX21hcmtlZF9zdGFydCh4YSwgaW5kZXgsIGVudHJ5LCBmaWx0ZXIsIHN0YXJ0KSBcXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjIxOlx0Zm9yIChpbmRleCA9IHN0YXJ0LCBlbnRyeSA9IHhhX2ZpbmQoeGEsIFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIGZpbHRlcik7IFxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMjItXHQgICAgIGVudHJ5OyBlbnRyeSA9IHhhX2ZpbmRfYWZ0ZXIoeGEsIFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIGZpbHRlcikpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTEyNDA9ZHBsbF9waW5fcmVmX3N5bmNfc3RhdGVfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjUzLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEyNTQ6XHRyZWZfc3luY19waW4gPSB4YV9maW5kKFx1MDAyNnBpbi1cdTAwM2VyZWZfc3luY19waW5zLCBcdTAwMjZyZWZfc3luY19waW5faWR4LFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEyNTUtXHRcdFx0ICAgICAgIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3VzZXJxLmM9MTIyNz12b2lkIGFtZGdwdV91c2VycV9tZ3JfZmluaShzdHJ1Y3QgYW1kZ3B1X3VzZXJxX21nciAqdXNlcnFfbWdyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV91c2VycS5jLTEyMzMtXHRcdHhhX2xvY2soXHUwMDI2dXNlcnFfbWdyLVx1MDAzZXVzZXJxX3hhKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV91c2VycS5jOjEyMzQ6XHRcdHF1ZXVlID0geGFfZmluZChcdTAwMjZ1c2VycV9tZ3ItXHUwMDNldXNlcnFfeGEsIFx1MDAyNnF1ZXVlX2lkLCBVTE9OR19NQVgsXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdXNlcnEuYy0xMjM1LVx0XHRcdFx0WEFfUFJFU0VOVCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9zY2hlZC5jPTM4MjQ9c3RhdGljIHN0cnVjdCBwYW50aG9yX2dyb3VwICpncm91cF9mcm9tX2hhbmRsZShzdHJ1Y3QgcGFudGhvcl9ncm91cF9wb29sICpwb29sLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYy0zODI5LVx0eGFfbG9jayhcdTAwMjZwb29sLVx1MDAzZXhhKTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYzozODMwOlx0Z3JvdXAgPSBncm91cF9nZXQoeGFfZmluZChcdTAwMjZwb29sLVx1MDAzZXhhLCBcdTAwMjZncm91cF9oYW5kbGUsIGdyb3VwX2hhbmRsZSwgR1JPVVBfUkVHSVNURVJFRCkpO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9zY2hlZC5jLTM4MzEtXHR4YV91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2V4YSk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvbmV0ZGV2X3J4LmM9NDc3PXZvaWQgKmhmaTFfbmV0ZGV2X2dldF9maXJzdF9kYXRhKHN0cnVjdCBoZmkxX2RldmRhdGEgKmRkLCBpbnQgKnN0YXJ0X2lkKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL25ldGRldl9yeC5jLTQ4Mi1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL25ldGRldl9yeC5jOjQ4MzpcdHJldCA9IHhhX2ZpbmQoXHUwMDI2cngtXHUwMDNlZGV2X3RibCwgXHUwMDI2aW5kZXgsIFVJTlRfTUFYLCBYQV9QUkVTRU5UKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL25ldGRldl9yeC5jLTQ4NC1cdCpzdGFydF9pZCA9IChpbnQpaW5kZXg7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guaD03NTA9dm9pZCBtbHg1ZV90Y19jbGVhbl9mZGJfcGVlcl9mbG93cyhzdHJ1Y3QgbWx4NV9lc3dpdGNoICplc3cpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lc3dpdGNoLmgtNzY5LSNkZWZpbmUgbWx4NV9lc3dfZm9yX2VhY2hfZW50cnlfbWFya2VkKHhhLCBpbmRleCwgZW50cnksIGxhc3QsIGZpbHRlcilcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZXN3aXRjaC5oOjc3MDpcdGZvciAoaW5kZXggPSAwLCBlbnRyeSA9IHhhX2ZpbmQoeGEsIFx1MDAyNmluZGV4LCBsYXN0LCBmaWx0ZXIpOyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guaC03NzEtXHQgICAgIGVudHJ5OyBlbnRyeSA9IHhhX2ZpbmRfYWZ0ZXIoeGEsIFx1MDAyNmluZGV4LCBsYXN0LCBmaWx0ZXIpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmM9MzgwPXN0YXRpYyBpbnQgbWx4NV9sYWdfZ2V0X21hc3Rlcl9pZHgoc3RydWN0IG1seDVfbGFnICpsZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmMtMzg3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9sYWcuYzozODg6XHRlbnRyeSA9IHhhX2ZpbmQoXHUwMDI2bGRldi1cdTAwM2VwZnMsIFx1MDAyNmlkeCwgVThfTUFYLCBNTFg1X0xBR19YQV9NQVJLX01BU1RFUik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5jLTM4OS1cdGlmICghZW50cnkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9sYWcuYz01NjI9c3RhdGljIHZvaWQgbWx4NV9sYWdfY2xlYXJfbWFzdGVyKHN0cnVjdCBtbHg1X2xhZyAqbGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5jLTU2Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmM6NTY3Olx0ZW50cnkgPSB4YV9maW5kKFx1MDAyNmxkZXYtXHUwMDNlcGZzLCBcdTAwMjZpZHgsIFU4X01BWCwgTUxYNV9MQUdfWEFfTUFSS19NQVNURVIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9sYWcuYy01NjgtXHRpZiAoIWVudHJ5KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmgtMjItI2RlZmluZSB4YV9mb3JfZWFjaF9tYXJrZWRfc3RhcnQoeGEsIGluZGV4LCBlbnRyeSwgZmlsdGVyLCBzdGFydClcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5oOjIzOlx0Zm9yIChpbmRleCA9IHN0YXJ0LCBlbnRyeSA9IHhhX2ZpbmQoeGEsIFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIGZpbHRlcik7IFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5oLTI0LVx0ICAgICBlbnRyeTsgZW50cnkgPSB4YV9maW5kX2FmdGVyKHhhLCBcdTAwMjZpbmRleCwgVUxPTkdfTUFYLCBmaWx0ZXIpKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsL3BtdC90ZWxlbWV0cnkuYz0xNzI9c3RydWN0IHRlbGVtX2VuZHBvaW50ICpwbXRfdGVsZW1fcmVnaXN0ZXJfZW5kcG9pbnQoaW50IGRldmlkKVxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsL3BtdC90ZWxlbWV0cnkuYy0xNzctXHRtdXRleF9sb2NrKFx1MDAyNmVwX2xvY2spO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWwvcG10L3RlbGVtZXRyeS5jOjE3ODpcdGVudHJ5ID0geGFfZmluZChcdTAwMjZ0ZWxlbV9hcnJheSwgXHUwMDI2aW5kZXgsIGluZGV4LCBYQV9QUkVTRU5UKTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsL3BtdC90ZWxlbWV0cnkuYy0xNzktXHRpZiAoIWVudHJ5KSB7XG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWwvcG10L3RlbGVtZXRyeS5jPTE5Nz1pbnQgcG10X3RlbGVtX2dldF9lbmRwb2ludF9pbmZvKGludCBkZXZpZCwgc3RydWN0IHRlbGVtX2VuZHBvaW50X2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWwvcG10L3RlbGVtZXRyeS5jLTIwNi1cdG11dGV4X2xvY2soXHUwMDI2ZXBfbG9jayk7XG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbC9wbXQvdGVsZW1ldHJ5LmM6MjA3Olx0ZW50cnkgPSB4YV9maW5kKFx1MDAyNnRlbGVtX2FycmF5LCBcdTAwMjZpbmRleCwgaW5kZXgsIFhBX1BSRVNFTlQpO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWwvcG10L3RlbGVtZXRyeS5jLTIwOC1cdGlmICghZW50cnkpIHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9OTI3PXN0YXRpYyBpbnQgdmhvc3RfdnFfYXR0YWNoX3dvcmtlcihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtOTM2LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjkzNzpcdHdvcmtlciA9IHhhX2ZpbmQoXHUwMDI2ZGV2LVx1MDAzZXdvcmtlcl94YSwgXHUwMDI2aW5kZXgsIFVJTlRfTUFYLCBYQV9QUkVTRU5UKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy05MzgtXHRpZiAoIXdvcmtlciB8fCB3b3JrZXItXHUwMDNlaWQgIT0gaW5mby1cdTAwM2V3b3JrZXJfaWQpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTk2MD1zdGF0aWMgaW50IHZob3N0X2ZyZWVfd29ya2VyKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtOTY1LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjk2NjpcdHdvcmtlciA9IHhhX2ZpbmQoXHUwMDI2ZGV2LVx1MDAzZXdvcmtlcl94YSwgXHUwMDI2aW5kZXgsIFVJTlRfTUFYLCBYQV9QUkVTRU5UKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy05NjctXHRpZiAoIXdvcmtlciB8fCB3b3JrZXItXHUwMDNlaWQgIT0gaW5mby1cdTAwM2V3b3JrZXJfaWQpXG4tLVxuZnMvYnRyZnMvZGVsYXllZC1yZWYuYz0zNjc9c3RhdGljIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9oZWFkICpmaW5kX2ZpcnN0X3JlZl9oZWFkKFxuLS1cbmZzL2J0cmZzL2RlbGF5ZWQtcmVmLmMtMzczLVxuZnMvYnRyZnMvZGVsYXllZC1yZWYuYzozNzQ6XHRyZXR1cm4geGFfZmluZChcdTAwMjZkci1cdTAwM2VoZWFkX3JlZnMsIFx1MDAyNmZyb20sIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XG5mcy9idHJmcy9kZWxheWVkLXJlZi5jLTM3NS19XG4tLVxuZnMvYnRyZnMvZXh0ZW50X21hcC5jPTEyMDY9c3RhdGljIHN0cnVjdCBidHJmc19pbm9kZSAqZmluZF9maXJzdF9pbm9kZV90b19zaHJpbmsoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsXG4tLVxuZnMvYnRyZnMvZXh0ZW50X21hcC5jLTEyMTUtXG5mcy9idHJmcy9leHRlbnRfbWFwLmM6MTIxNjpcdFx0aW5vZGUgPSB4YV9maW5kKFx1MDAyNnJvb3QtXHUwMDNlaW5vZGVzLCBcdTAwMjZmcm9tLCBVTE9OR19NQVgsIFhBX1BSRVNFTlQpO1xuZnMvYnRyZnMvZXh0ZW50X21hcC5jLTEyMTctXHRcdGlmICghaW5vZGUpXG4tLVxuZnMvYnRyZnMvaW5vZGUuYz0xMDY3ND1zdHJ1Y3QgYnRyZnNfaW5vZGUgKmJ0cmZzX2ZpbmRfZmlyc3RfaW5vZGUoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBtaW5faW5vKVxuLS1cbmZzL2J0cmZzL2lub2RlLmMtMTA2ODAtXHR3aGlsZSAodHJ1ZSkge1xuZnMvYnRyZnMvaW5vZGUuYzoxMDY4MTpcdFx0aW5vZGUgPSB4YV9maW5kKFx1MDAyNnJvb3QtXHUwMDNlaW5vZGVzLCBcdTAwMjZmcm9tLCBVTE9OR19NQVgsIFhBX1BSRVNFTlQpO1xuZnMvYnRyZnMvaW5vZGUuYy0xMDY4Mi1cdFx0aWYgKCFpbm9kZSlcbi0tXG5mcy94ZnMvbGlieGZzL3hmc19ncm91cC5jPTEyMT14ZnNfZ3JvdXBfZ3JhYl9uZXh0X21hcmsoXG4tLVxuZnMveGZzL2xpYnhmcy94ZnNfZ3JvdXAuYy0xMzQtXHRyY3VfcmVhZF9sb2NrKCk7XG5mcy94ZnMvbGlieGZzL3hmc19ncm91cC5jOjEzNTpcdHhnID0geGFfZmluZChcdTAwMjZtcC1cdTAwM2VtX2dyb3Vwc1t0eXBlXS54YSwgXHUwMDI2aW5kZXgsIFVMT05HX01BWCwgbWFyayk7XG5mcy94ZnMvbGlieGZzL3hmc19ncm91cC5jLTEzNi1cdGlmICh4Zykge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MzM1OT1pbnQgY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzX2luZm8odW5zaWduZWQgbG9uZyB2YWwsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMzgyLSNkZWZpbmUgZm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkLCBpZmluZGV4KVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzM4MzpcdGZvciAoOyAoZCA9IHhhX2ZpbmQoXHUwMDI2KG5ldCktXHUwMDNlZGV2X2J5X2luZGV4LCBcdTAwMjZpZmluZGV4LFx0XHRcXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMzg0LVx0XHRcdCAgICBVTE9OR19NQVgsIFhBX1BSRVNFTlQpKTsgaWZpbmRleCYjNDM7JiM0MzspXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0zNjI9dm9pZCB4YV9jbGVhcl9tYXJrKHN0cnVjdCB4YXJyYXkgKiwgdW5zaWduZWQgbG9uZyBpbmRleCwgeGFfbWFya190KTtcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MzYzOnZvaWQgKnhhX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgKmluZGV4LFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0zNjQtXHRcdHVuc2lnbmVkIGxvbmcgbWF4LCB4YV9tYXJrX3QpIF9fYXR0cmlidXRlX18oKG5vbm51bGwoMikpKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTQyMj1zdGF0aWMgaW5saW5lIGJvb2wgeGFfbWFya2VkKGNvbnN0IHN0cnVjdCB4YXJyYXkgKnhhLCB4YV9tYXJrX3QgbWFyaylcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTQ1Mi1cdGZvciAoaW5kZXggPSBzdGFydCxcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo0NTM6XHQgICAgIGVudHJ5ID0geGFfZmluZCh4YSwgXHUwMDI2aW5kZXgsIGxhc3QsIFhBX1BSRVNFTlQpO1x0XHRcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC00NTQtXHQgICAgIGVudHJ5O1x0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTUzMS0jZGVmaW5lIHhhX2Zvcl9lYWNoX21hcmtlZCh4YSwgaW5kZXgsIGVudHJ5LCBmaWx0ZXIpIFxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjUzMjpcdGZvciAoaW5kZXggPSAwLCBlbnRyeSA9IHhhX2ZpbmQoeGEsIFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIGZpbHRlcik7IFxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTUzMy1cdCAgICAgZW50cnk7IGVudHJ5ID0geGFfZmluZF9hZnRlcih4YSwgXHUwMDI2aW5kZXgsIFVMT05HX01BWCwgZmlsdGVyKSlcbi0tXG5pb191cmluZy9rYnVmLmM9NDY4PXZvaWQgaW9fZGVzdHJveV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuLS1cbmlvX3VyaW5nL2tidWYuYy00NzUtXHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2Y3R4LVx1MDAzZW1tYXBfbG9jaykge1xuaW9fdXJpbmcva2J1Zi5jOjQ3NjpcdFx0XHRibCA9IHhhX2ZpbmQoXHUwMDI2Y3R4LVx1MDAzZWlvX2JsX3hhLCBcdTAwMjZpbmRleCwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKTtcbmlvX3VyaW5nL2tidWYuYy00NzctXHRcdFx0aWYgKGJsKVxuLS1cbmlvX3VyaW5nL3pjcnguYz0xMDMxPXZvaWQgaW9fdGVybWluYXRlX3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvemNyeC5jLTEwMzktXHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2Y3R4LVx1MDAzZW1tYXBfbG9jaylcbmlvX3VyaW5nL3pjcnguYzoxMDQwOlx0XHRcdGlmcSA9IHhhX2ZpbmQoXHUwMDI2Y3R4LVx1MDAzZXpjcnhfY3R4cywgXHUwMDI2aWQsIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XG5pb191cmluZy96Y3J4LmMtMTA0MS1cdFx0aWYgKCFpZnEpXG4tLVxuaW9fdXJpbmcvemNyeC5jPTEwNTE9dm9pZCBpb191bnJlZ2lzdGVyX3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvemNyeC5jLTEwNjAtXG5pb191cmluZy96Y3J4LmM6MTA2MTpcdFx0XHRpZnEgPSB4YV9maW5kKFx1MDAyNmN0eC1cdTAwM2V6Y3J4X2N0eHMsIFx1MDAyNmlkLCBVTE9OR19NQVgsIFhBX1BSRVNFTlQpO1xuaW9fdXJpbmcvemNyeC5jLTEwNjItXHRcdFx0aWYgKGlmcSkge1xuLS1cbmxpYi9pZHIuYz00OTM9aW50IGlkYV9maW5kX2ZpcnN0X3JhbmdlKHN0cnVjdCBpZGEgKmlkYSwgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heClcbi0tXG5saWIvaWRyLmMtNTA5LVxubGliL2lkci5jOjUxMDpcdGVudHJ5ID0geGFfZmluZChcdTAwMjZpZGEtXHUwMDNleGEsIFx1MDAyNmluZGV4LCBtYXggLyBJREFfQklUTUFQX0JJVFMsIFhBX1BSRVNFTlQpO1xubGliL2lkci5jLTUxMS1cdGlmICghZW50cnkpIHtcbi0tXG5saWIvdGVzdF94YXJyYXkuYz0xMTgwPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgb3JkZXIpXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTE5MS1cdGluZGV4ID0gMDtcbmxpYi90ZXN0X3hhcnJheS5jOjExOTI6XHRYQV9CVUdfT04oeGEsIHhhX2ZpbmQoeGEsIFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIFhBX1BSRVNFTlQpICE9XG5saWIvdGVzdF94YXJyYXkuYy0xMTkzLVx0XHRcdHhhX21rX3ZhbHVlKG11bHRpKSk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTE5NS1cdGluZGV4ID0gbXVsdGkgJiM0MzsgMTtcbmxpYi90ZXN0X3hhcnJheS5jOjExOTY6XHRYQV9CVUdfT04oeGEsIHhhX2ZpbmQoeGEsIFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIFhBX1BSRVNFTlQpICE9XG5saWIvdGVzdF94YXJyYXkuYy0xMTk3LVx0XHRcdHhhX21rX3ZhbHVlKG11bHRpKSk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MTMxMT1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kXzEoc3RydWN0IHhhcnJheSAqeGEpXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTMyOS1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBrO1xubGliL3Rlc3RfeGFycmF5LmM6MTMzMDpcdFx0XHRcdHZvaWQgKmVudHJ5ID0geGFfZmluZCh4YSwgXHUwMDI2aW5kZXgsIFVMT05HX01BWCxcbmxpYi90ZXN0X3hhcnJheS5jLTEzMzEtXHRcdFx0XHRcdFx0XHRcdFhBX1BSRVNFTlQpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTEzMzktXHRcdFx0XHRpbmRleCA9IGs7XG5saWIvdGVzdF94YXJyYXkuYzoxMzQwOlx0XHRcdFx0ZW50cnkgPSB4YV9maW5kKHhhLCBcdTAwMjZpbmRleCwgVUxPTkdfTUFYLFxubGliL3Rlc3RfeGFycmF5LmMtMTM0MS1cdFx0XHRcdFx0XHRcdFx0WEFfTUFSS18wKTtcbi0tXG5saWIveGFycmF5LmM9MjE3Mj1FWFBPUlRfU1lNQk9MKHhhX2NsZWFyX21hcmspO1xuLS1cbmxpYi94YXJyYXkuYy0yMTc0LS8qKlxubGliL3hhcnJheS5jOjIxNzU6ICogeGFfZmluZCgpIC0gU2VhcmNoIHRoZSBYQXJyYXkgZm9yIGFuIGVudHJ5LlxubGliL3hhcnJheS5jLTIxNzYtICogQHhhOiBYQXJyYXkuXG4tLVxubGliL3hhcnJheS5jLTIxOTAtICovXG5saWIveGFycmF5LmM6MjE5MTp2b2lkICp4YV9maW5kKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXG5saWIveGFycmF5LmMtMjE5Mi1cdFx0XHR1bnNpZ25lZCBsb25nIG1heCwgeGFfbWFya190IGZpbHRlcilcbi0tXG5tbS9zaG1lbS5jPTE4NjQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3NobWVtLmMtMTg5MS1cdFx0ICovXG5tbS9zaG1lbS5jOjE4OTI6XHRcdGlmICgheGFfZmluZChcdTAwMjZtYXBwaW5nLVx1MDAzZWlfcGFnZXMsIFx1MDAyNmFsaWduZWRfaW5kZXgsXG5tbS9zaG1lbS5jLTE4OTMtXHRcdFx0ICAgICBhbGlnbmVkX2luZGV4ICYjNDM7IHBhZ2VzIC0gMSwgWEFfUFJFU0VOVCkpXG4tLVxubW0vc2htZW0uYz0xOTIzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX2FsbG9jX2FuZF9hZGRfZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc2htZW0uYy0xOTcwLVx0aWYgKGVycm9yKSB7XG5tbS9zaG1lbS5jOjE5NzE6XHRcdGlmICh4YV9maW5kKFx1MDAyNm1hcHBpbmctXHUwMDNlaV9wYWdlcywgXHUwMDI2aW5kZXgsXG5tbS9zaG1lbS5jLTE5NzItXHRcdFx0XHRpbmRleCAmIzQzOyBwYWdlcyAtIDEsIFhBX1BSRVNFTlQpKSB7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTEyNz1uZXRkZXZfeGFfZmluZF9sb2NrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuYy0xMTM0LVx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvY29yZS9kZXYuYzoxMTM1Olx0XHRkZXYgPSB4YV9maW5kKFx1MDAyNm5ldC1cdTAwM2VkZXZfYnlfaW5kZXgsIGluZGV4LCBVTE9OR19NQVgsIFhBX1BSRVNFTlQpO1xubmV0L2NvcmUvZGV2LmMtMTEzNi1cdFx0aWYgKCFkZXYpIHtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMTUyPW5ldGRldl94YV9maW5kX2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTE1OS1cdFx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2NvcmUvZGV2LmM6MTE2MDpcdFx0ZGV2ID0geGFfZmluZChcdTAwMjZuZXQtXHUwMDNlZGV2X2J5X2luZGV4LCBpbmRleCwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKTtcbm5ldC9jb3JlL2Rldi5jLTExNjEtXHRcdGlmICghZGV2KSB7XG4tLVxubmV0L2RldmxpbmsvY29yZS5jPTE5PXN0YXRpYyBzdHJ1Y3QgZGV2bGluayAqZGV2bGlua3NfeGFfZ2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTIzLVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2RldmxpbmsvY29yZS5jOjI0Olx0ZGV2bGluayA9IHhhX2ZpbmQoXHUwMDI2ZGV2bGlua3MsIFx1MDAyNmluZGV4LCBpbmRleCwgREVWTElOS19SRUdJU1RFUkVEKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNS1cdGlmICghZGV2bGluayB8fCAhZGV2bGlua190cnlfZ2V0KGRldmxpbmspKVxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYz0xOTI9c3RhdGljIHN0cnVjdCBkZXZsaW5rX3JlbCAqZGV2bGlua19yZWxfZmluZCh1bnNpZ25lZCBsb25nIHJlbF9pbmRleClcbm5ldC9kZXZsaW5rL2NvcmUuYy0xOTMte1xubmV0L2RldmxpbmsvY29yZS5jOjE5NDpcdHJldHVybiB4YV9maW5kKFx1MDAyNmRldmxpbmtfcmVscywgXHUwMDI2cmVsX2luZGV4LCByZWxfaW5kZXgsXG5uZXQvZGV2bGluay9jb3JlLmMtMTk1LVx0XHQgICAgICAgREVWTElOS19SRUxfSU5fVVNFKTtcbi0tXG5uZXQvZGV2bGluay9jb3JlLmM9MzQ1PXN0YXRpYyBzdHJ1Y3QgZGV2bGluayAqX19kZXZsaW5rc194YV9maW5kX2dldChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTM1Mi1yZXRyeTpcbm5ldC9kZXZsaW5rL2NvcmUuYzozNTM6XHRkZXZsaW5rID0geGFfZmluZChcdTAwMjZkZXZsaW5rcywgaW5kZXhwLCBlbmQsIERFVkxJTktfUkVHSVNURVJFRCk7XG5uZXQvZGV2bGluay9jb3JlLmMtMzU0LVx0aWYgKCFkZXZsaW5rKVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jPTQ0MT1yc3NfZHVtcF9vbmVfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbi0tXG5uZXQvZXRodG9vbC9yc3MuYy00NTYtXG5uZXQvZXRodG9vbC9yc3MuYzo0NTc6XHRmb3IgKDsgeGFfZmluZChcdTAwMjZkZXYtXHUwMDNlZXRodG9vbC1cdTAwM2Vyc3NfY3R4LCBcdTAwMjZjdHgtXHUwMDNlY3R4X2lkeCxcbm5ldC9ldGh0b29sL3Jzcy5jLTQ1OC1cdFx0ICAgICAgIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7IGN0eC1cdTAwM2VjdHhfaWR4JiM0MzsmIzQzOykge1xuLS1cbm5ldC9zaGFwZXIvc2hhcGVyLmM9ODUzPWludCBuZXRfc2hhcGVyX25sX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvc2hhcGVyL3NoYXBlci5jLTg3MC1cbm5ldC9zaGFwZXIvc2hhcGVyLmM6ODcxOlx0Zm9yICg7IChzaGFwZXIgPSB4YV9maW5kKFx1MDAyNmhpZXJhcmNoeS1cdTAwM2VzaGFwZXJzLCBcdTAwMjZjdHgtXHUwMDNlc3RhcnRfaW5kZXgsXG5uZXQvc2hhcGVyL3NoYXBlci5jLTg3Mi1cdFx0XHRcdCBVMzJfTUFYLCBYQV9QUkVTRU5UKSk7XG4tLVxucnVzdC9rZXJuZWwveGFycmF5LnJzPTExMT0gICAgZm4gaXRlcihcdTAwMjZzZWxmKSAtXHUwMDNlIGltcGwgSXRlcmF0b3JcdTAwM2NJdGVtID0gTm9uTnVsbFx1MDAzY2Nfdm9pZFx1MDAzZVx1MDAzZSAmIzQzOyAmIzM5O18ge1xuLS1cbnJ1c3Qva2VybmVsL3hhcnJheS5ycy0xMTUtICAgICAgICBpdGVyOjpvbmNlKHVuc2FmZSB7XG5ydXN0L2tlcm5lbC94YXJyYXkucnM6MTE2OiAgICAgICAgICAgIGJpbmRpbmdzOjp4YV9maW5kKHNlbGYueGEuZ2V0KCksIFx1MDAyNm11dCBpbmRleCwgdXNpemU6Ok1BWCwgYmluZGluZ3M6OlhBX1BSRVNFTlQpXG5ydXN0L2tlcm5lbC94YXJyYXkucnMtMTE3LSAgICAgICAgfSlcbi0tXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbXVsdGlvcmRlci5jPTI0MD1zdGF0aWMgdm9pZCAqbG9hZF93b3JrZXIodm9pZCAqcHRyKVxuLS1cbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tdWx0aW9yZGVyLmMtMjQ4LVx0XHRhc3NlcnQoIXhhX2lzX2ludGVybmFsKGl0ZW0pKTtcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tdWx0aW9yZGVyLmM6MjQ5Olx0XHRpdGVtID0geGFfZmluZChwdHIsIFx1MDAyNmZpbmRfaW5kZXgsIGluZGV4LCBYQV9NQVJLXzEpO1xudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL211bHRpb3JkZXIuYy0yNTAtXHRcdGFzc2VydCgheGFfaXNfaW50ZXJuYWwoaXRlbSkpO1xuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9MjA5PXN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTIxMy1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6MjE0Olx0aWYgKHhhX2ZpbmQoXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgXHUwMDI2c3RhcnQsIGVuZCAtIDEsIFhBX1BSRVNFTlQpKSB7XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTIxNS1cdFx0S1ZNX01NVV9MT0NLKGt2bSk7XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz02NDM9aW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjc3LVx0aWYgKCF4YV9lbXB0eShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzKSBcdTAwMjZcdTAwMjZcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6Njc4Olx0ICAgIHhhX2ZpbmQoXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgXHUwMDI2c3RhcnQsIGVuZCAtIDEsIFhBX1BSRVNFTlQpKSB7XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY3OS1cdFx0ciA9IC1FRVhJU1Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDU3CgkJCQkJCQlvdXRwdXQ6IDEzMgoJCQkJCQkJdGhvdWdodHM6IDU3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHhhc19maW5kYCBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIHRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBjbGVhcmx5IGB4YXNfZmluZGAsIGB4YV9maW5kYCwgYW5kIGB4YV9maW5kX2FmdGVyYC4gTGV0JiMzOTtzIHplcm8gaW4gb24gdGhvc2UuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgaGFuZGxpbmcgbXVsdGktb3JkZXIgWEFycmF5cywgYW5kIHNwZWNpZmljYWxseSBob3cgYHhhc19maW5kYCBkZWFscyB3aXRoIHRoZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBFbmFibGVDb25maWdzIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLgoKSSBzZWUgYFhBUlJBWV9NVUxUSWAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZyBhcyBpdCYjMzk7cyBzZWxlY3RlZCBieSBzZXZlcmFsLCBsaWtlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgSFVHRVRMQl9QQUdFYC4gQnV0LCBpbXBvcnRhbnRseSwgYHhhc19maW5kYCBpcyBjb21waWxlZCBpbnRvIGB4YXJyYXkub2AsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGtlcm5lbCBjb3JlLiBUaGF0IG1ha2VzIHRoaXMgcG90ZW50aWFsbHkgdmVyeSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIGxvZ2ljIHRoYXQgaGFuZGxlcyB0aGVzZSBtdWx0aS1vcmRlciBjYXNlcyBhcHBlYXJzIHRvIGJlIGluIHRoZSBjaGVjazogYGlmICgheGFzLSZndDt4YV9ub2RlLSZndDtzaGlmdClgIHZzIGB4YXMtJmd0O3hhX29mZnNldCAhPSBnZXRfb2Zmc2V0KC4uLilgLiBTZWVtcyBsaWtlIHRoZSBjb2RlIGlzIHRyeWluZyB0byBoYW5kbGUgdGhlIGBzaGlmdCAmZ3Q7IDBgIHBhdGhzIGFuZCBtdWx0aS1pbmRleCBYQXJyYXlzIGNvcnJlY3RseS4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGBYQVJSQVlfTVVMVElgIHJlbGF0aW9uc2hpcC4gSXQmIzM5O3MgdmlzaWJsZSBpbiBgbGliL0tjb25maWdgLCBidXQgbm90IGRpcmVjdGx5IHVzZXItc2VsZWN0YWJsZSB2aWEgYG1lbnVjb25maWdgLCB1bmxlc3MgaXQmIzM5O3Mgc2VsZWN0ZWQgYnkgb3RoZXIgc3ltYm9scywgYnV0IGl0IGNhbiBiZSBzZXQgYnkgY29uZmlncyBzdWNoIGFzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIG9yIGBIVUdFVExCRlNgIC4gU28sIHNwZWNpZnlpbmcgdGhvc2UgbWlnaHQgYmUgdGhlIHJpZ2h0IGFwcHJvYWNoLiBJdCBzZWVtcyB0byBlbmFibGUgdGhvc2UgbXVsdGktb3JkZXIgeGFycmF5IHBhdGhzIHdoZXJlIGBzaGlmdCAmZ3Q7IDBgLgoKT2theSwgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IGluIHRob3NlIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIHNldC1yZXN1bHRzIHBhcmFtZXRlcnMgY29ycmVjdC4gVGhlIGZ1enppbmcgdmVyZGljdCBpcywgb2YgY291cnNlLCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGJlY2F1c2UgdGhlIHBhdGNoIGNoYW5nZXMgYHhhc19maW5kYCBpbiBgbGliL3hhcnJheS5jYCB0byBoYW5kbGUgdGhlIGB4YXMtJmd0O3hhX29mZnNldGAgcHJvcGVybHkgd2hlbiB0cmF2ZXJzaW5nIG11bHRpLW9yZGVyIFhBcnJheSBlbnRyaWVzIHdoZXJlIGB4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0YCBpcyBub24temVyby4gQW5kIHRoaXMgaXMgaW4gY29yZSBkYXRhIHN0cnVjdHVyZSBsb2dpYyB0aGF0JiMzOTtzIGhpdCBkdXJpbmcgcGFnZSBjYWNoZSBvcGVyYXRpb25zLCBzaG1lbSBsb29rdXBzLCBldGMuIFNvdW5kcyBsaWtlIGEgZ29vZCB0YXJnZXQuCgpUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNvcnJlY3Q6IGB4YXNfZmluZGAsIGB4YV9maW5kYCwgYHhhX2ZpbmRfYWZ0ZXJgLiBBbmQgYmFzZWQgb24gZXZlcnl0aGluZyBhYm92ZSwgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBgWEFSUkFZX01VTFRJYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSB0aGluayBJJiMzOTt2ZSBnb3QgdGhpcy4gVGltZSB0byBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGVuIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hBUlJBWV9NVUxUSSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDssCiAgICAmIzM0O3hhX2ZpbmQmIzM0OywKICAgICYjMzQ7eGFfZmluZF9hZnRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXRlcmF0aW9uIG9mZnNldCBjYWxjdWxhdGlvbiBpbiB4YXNfZmluZCgpIHdpdGhpbiBsaWIveGFycmF5LmMgZm9yIG11bHRpLW9yZGVyIG5vZGVzICh3aGVyZSBzaGlmdCBcdTAwM2UgMCkuIFRoaXMgaXMgY29yZSBkYXRhIHN0cnVjdHVyZSBsb2dpYyBleGVyY2lzZWQgYWNyb3NzIG1lbW9yeSBtYW5hZ2VtZW50IChwYWdlIGNhY2hlLCBzaG1lbSwgZm9saW8gbG9va3VwcykgYW5kIHN1YnN5c3RlbSBpdGVyYXRvcnMsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hBUlJBWV9NVUxUSSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDssCiAgICAmIzM0O3hhX2ZpbmQmIzM0OywKICAgICYjMzQ7eGFfZmluZF9hZnRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXRlcmF0aW9uIG9mZnNldCBjYWxjdWxhdGlvbiBpbiB4YXNfZmluZCgpIHdpdGhpbiBsaWIveGFycmF5LmMgZm9yIG11bHRpLW9yZGVyIG5vZGVzICh3aGVyZSBzaGlmdCBcdTAwM2UgMCkuIFRoaXMgaXMgY29yZSBkYXRhIHN0cnVjdHVyZSBsb2dpYyBleGVyY2lzZWQgYWNyb3NzIG1lbW9yeSBtYW5hZ2VtZW50IChwYWdlIGNhY2hlLCBzaG1lbSwgZm9saW8gbG9va3VwcykgYW5kIHN1YnN5c3RlbSBpdGVyYXRvcnMsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgb2Zmc2V0IGNhbGN1bGF0aW9uIGxvZ2ljIGluIHhhc19maW5kKCkgd2l0aGluIHRoZSBYQXJyYXkgZGF0YSBzdHJ1Y3R1cmUgaW1wbGVtZW50YXRpb24gKGxpYi94YXJyYXkuYykgYW5kIGFkZHMgYSB0ZXN0IGNhc2UgdG8gdGhlIFhBcnJheSBzZWxmLXRlc3Qgc3VpdGUgKGxpYi90ZXN0X3hhcnJheS5jKS5cblxuVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgdHJlZSB0cmF2ZXJzYWwgaW5kZXhpbmcvb2Zmc2V0IGFyaXRobWV0aWMgZm9yIG11bHRpLWluZGV4IGVudHJpZXMgKFhBX1NUQVRFIC8geGFfbm9kZSBvZmZzZXQgY2FsY3VsYXRpb25zKS4gTm8gbmV3IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gY29ycnVwdGVkIG9yIGluY29ycmVjdCB0cmF2ZXJzYWwgb2Zmc2V0cyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNGE1MzBjNDYwNzMyMWFlNTJhZWY2NDVhYmY4MTQ3ZWNmZWMzNTI0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAxNDoyMjoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3hhcnJheS5jIGIvbGliL3Rlc3RfeGFycmF5LmMKaW5kZXggNWNhMGFlZmVlOWFhNS4uY2RhNzI0NWU0NzcxNiAxMDA2NDQKLS0tIGEvbGliL3Rlc3RfeGFycmF5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RfeGFycmF5LmMKQEAgLTEyNDcsNiAmIzQzOzEyNDcsNjcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8zKHN0cnVjdCB4YXJyYXkgKnhhKQogCX0KIH0KIAomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVEkKJiM0MzsJWEFfU1RBVEUoeGFzLCB4YSwgMTAwKTsKJiM0MzsJWEFfU1RBVEVfT1JERVIoc3BsaXQsIHhhLCAwLCAwKTsKJiM0MzsJdm9pZCAqZW50cnk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJLyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovCiYjNDM7CXhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7CiYjNDM7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7CiYjNDM7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwl4YV9lcmFzZV9pbmRleCh4YSwgMTI4KTsKJiM0MzsJeGFfZXJhc2VfaW5kZXgoeGEsIDApOwomIzQzOwlYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpOwomIzQzOwomIzQzOwkvKiAoMikgU3BsaXR0aW5nIGEgbXVsdGktaW5kZXggZW50cnkgYWZ0ZXIgYSBsb29rdXAgYmVnaW5zIGluc2lkZSBpdCAqLwomIzQzOwl4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpOwomIzQzOwomIzQzOwl4YXNfc2V0KCZhbXA7eGFzLCAxMDApOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJeGFzX3NwbGl0X2FsbG9jKCZhbXA7c3BsaXQsIHhhX21rX2luZGV4KDApLCA3LCBHRlBfS0VSTkVMKTsKJiM0MzsJeGFzX2xvY2soJmFtcDtzcGxpdCk7CiYjNDM7CXhhc19zcGxpdCgmYW1wO3NwbGl0LCB4YV9ta19pbmRleCgwKSwgNyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAxMjg7IGkmIzQzOyYjNDM7KQomIzQzOwkJX194YV9zdG9yZSh4YSwgaSwgeGFfbWtfaW5kZXgoaSksIDApOwomIzQzOwl4YXNfdW5sb2NrKCZhbXA7c3BsaXQpOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7CiYjNDM7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwl4YV9kZXN0cm95KHhhKTsKJiM0MzsJWEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kXzEoc3RydWN0IHhhcnJheSAqeGEpCiB7CiAJdW5zaWduZWQgbG9uZyBpLCBqLCBrOwpAQCAtMTM3MCw2ICYjNDM7MTQzMSw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEpCiAJCWNoZWNrX211bHRpX2ZpbmRfMSh4YSwgaSk7CiAJY2hlY2tfbXVsdGlfZmluZF8yKHhhKTsKIAljaGVja19tdWx0aV9maW5kXzMoeGEpOwomIzQzOwljaGVja19tdWx0aV9maW5kXzQoeGEpOwogfQogCiAvKiBTZWUgZmluZF9zd2FwX2VudHJ5KCkgaW4gbW0vc2htZW0uYyAqLwpkaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jCmluZGV4IDlhOGI0OTE2NTQwY2YuLjk4MDMyNGQ2ODZiZDAgMTAwNjQ0Ci0tLSBhL2xpYi94YXJyYXkuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIveGFycmF5LmMKQEAgLTE0MDYsOSAmIzQzOzE0MDYsMTEgQEAgdm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KQogCQllbnRyeSA9IHhhc19sb2FkKHhhcyk7CiAJCWlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLSZndDt4YV9ub2RlKSkKIAkJCXJldHVybiBlbnRyeTsKLQl9IGVsc2UgaWYgKCF4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0ICZhbXA7JmFtcDsKLQkJICAgIHhhcy0mZ3Q7eGFfb2Zmc2V0ICE9ICh4YXMtJmd0O3hhX2luZGV4ICZhbXA7IFhBX0NIVU5LX01BU0spKSB7Ci0JCXhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKJiM0MzsJfSBlbHNlIGlmICh4YXMtJmd0O3hhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy0mZ3Q7eGFfaW5kZXgsIHhhcy0mZ3Q7eGFfbm9kZSkpIHsKJiM0MzsJCWlmICgheGFzLSZndDt4YV9ub2RlLSZndDtzaGlmdCkKJiM0MzsJCQl4YXMtJmd0O3hhX29mZnNldCA9ICgoeGFzLSZndDt4YV9pbmRleCAtIDEpICZhbXA7IFhBX0NIVU5LX01BU0spICYjNDM7IDE7CiYjNDM7CQllbHNlCiYjNDM7CQkJeGFzLSZndDt4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy0mZ3Q7eGFfaW5kZXgsIHhhcy0mZ3Q7eGFfbm9kZSk7CiAJfQogCiAJeGFzX25leHRfb2Zmc2V0KHhhcyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzA5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYSBQYXRjaDogRm9jdXMgb24gWGFycmF5IEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIGNydWNpYWwgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBpZGVudGlmeSB0aGUgc2NvcGUuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIGltcGFjdGluZyBgbGliL3Rlc3RfeGFycmF5LmNgIGFuZCBgbGliL3hhcnJheS5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBjaGFuZ2VzIHRvIHRoZSB4YXJyYXkgaW1wbGVtZW50YXRpb24gaXRzZWxmLCBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgdGVzdHMuIEdpdmVuIHRoZSBmaWxlIG5hbWVzLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhlIGNvcmUgb2YgdGhlIHhhcnJheSBkYXRhIHN0cnVjdHVyZSBpcyBsaWtlbHkgdGhlIHRhcmdldCBvZiB0aGlzIHBhdGNoLCB3aGljaCBpcyBjb21tb24uCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBsaWIveGFycmF5LmNgLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGRpZmYsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNDA2LCBzbyBJ4oCZbGwgdXNlIG15IHRydXN0eSBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBpbnRvIHRoZSBjb2RlLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gaW1tZWRpYXRlbHkgZXhhbWluZSB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlLiBMaW5lIDE0MDYgaXNuJiMzOTt0IHBhcnRpY3VsYXJseSBpbmZvcm1hdGl2ZSB3aXRob3V0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIGV4YW1pbmUgdGhlIGxpbmVzIGltbWVkaWF0ZWx5IGFib3ZlIGFuZCBiZWxvdyB0byBmb3JtIGFuIGluaXRpYWwgaHlwb3RoZXNpcyByZWdhcmRpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGNoYW5nZS4gSXMgdGhpcyBhIGJ1ZyBmaXg/IEFuIG9wdGltaXphdGlvbj8gQSBmZWF0dXJlIGFkZGl0aW9uPyBUaGUgY29kZSB3aWxsIHJldmVhbCB0aGUgYW5zd2Vycy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgdGhpcyBpcyBhIHRlc3QgYW5kIGEgbWFpbiB4YXJyYXkgbGlicmFyeSBmaWxlIC0gdGhpcyBtYXkgYmUgYSBzaW1wbGUgdGVzdCBjaGFuZ2UsIG9yIGEgbW9yZSBpbnZhc2l2ZSB4YXJyYXkgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHJlYWQgdGhlIGNvZGUgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIveGFycmF5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzOTA6XHQgKlxuMTM5MTpcdCAqIFJldHVybjogVGhlIGVudHJ5LCBpZiBmb3VuZCwgb3RoZXJ3aXNlICVOVUxMLlxuMTM5MjpcdCAqL1xuMTM5MzpcdHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcbjEzOTQ6XHR7XG4xMzk1Olx0XHR2b2lkICplbnRyeTtcbjEzOTY6XHRcbjEzOTc6XHRcdGlmICh4YXNfZXJyb3IoeGFzKSB8fCB4YXMtXHUwMDNleGFfbm9kZSA9PSBYQVNfQk9VTkRTKVxuMTM5ODpcdFx0XHRyZXR1cm4gTlVMTDtcbjEzOTk6XHRcdGlmICh4YXMtXHUwMDNleGFfaW5kZXggXHUwMDNlIG1heClcbjE0MDA6XHRcdFx0cmV0dXJuIHNldF9ib3VuZHMoeGFzKTtcbjE0MDE6XHRcbjE0MDI6XHRcdGlmICgheGFzLVx1MDAzZXhhX25vZGUpIHtcbjE0MDM6XHRcdFx0eGFzLVx1MDAzZXhhX2luZGV4ID0gMTtcbjE0MDQ6XHRcdFx0cmV0dXJuIHNldF9ib3VuZHMoeGFzKTtcbjE0MDU6XHRcdH0gZWxzZSBpZiAoeGFzLVx1MDAzZXhhX25vZGUgPT0gWEFTX1JFU1RBUlQpIHtcbjE0MDY6XHRcdFx0ZW50cnkgPSB4YXNfbG9hZCh4YXMpO1xuMTQwNzpcdFx0XHRpZiAoZW50cnkgfHwgeGFzX25vdF9ub2RlKHhhcy1cdTAwM2V4YV9ub2RlKSlcbjE0MDg6XHRcdFx0XHRyZXR1cm4gZW50cnk7XG4xNDA5Olx0XHR9IGVsc2UgaWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSkge1xuMTQxMDpcdFx0XHRpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0KVxuMTQxMTpcdFx0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSAmIzQzOyAxO1xuMTQxMjpcdFx0XHRlbHNlXG4xNDEzOlx0XHRcdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSk7XG4xNDE0Olx0XHR9XG4xNDE1Olx0XG4xNDE2Olx0XHR4YXNfbmV4dF9vZmZzZXQoeGFzKTtcbjE0MTc6XHRcbjE0MTg6XHRcdHdoaWxlICh4YXMtXHUwMDNleGFfbm9kZSBcdTAwMjZcdTAwMjYgKHhhcy1cdTAwM2V4YV9pbmRleCBcdTAwM2M9IG1heCkpIHtcbjE0MTk6XHRcdFx0aWYgKHVubGlrZWx5KHhhcy1cdTAwM2V4YV9vZmZzZXQgPT0gWEFfQ0hVTktfU0laRSkpIHtcbjE0MjA6XHRcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0geGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlb2Zmc2V0ICYjNDM7IDE7XG4xNDIxOlx0XHRcdFx0eGFzLVx1MDAzZXhhX25vZGUgPSB4YV9wYXJlbnQoeGFzLVx1MDAzZXhhLCB4YXMtXHUwMDNleGFfbm9kZSk7XG4xNDIyOlx0XHRcdFx0Y29udGludWU7XG4xNDIzOlx0XHRcdH1cbjE0MjQ6XHRcbjE0MjU6XHRcdFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIHhhcy1cdTAwM2V4YV9ub2RlLCB4YXMtXHUwMDNleGFfb2Zmc2V0KTtcbjE0MjY6XHRcdFx0aWYgKHhhX2lzX25vZGUoZW50cnkpKSB7XG4xNDI3Olx0XHRcdFx0eGFzLVx1MDAzZXhhX25vZGUgPSB4YV90b19ub2RlKGVudHJ5KTtcbjE0Mjg6XHRcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gMDtcbjE0Mjk6XHRcdFx0XHRjb250aW51ZTtcbjE0MzA6XHRcdFx0fVxuMTQzMTpcdFx0XHRpZiAoZW50cnkgXHUwMDI2XHUwMDI2ICF4YV9pc19zaWJsaW5nKGVudHJ5KSlcbjE0MzI6XHRcdFx0XHRyZXR1cm4gZW50cnk7XG4xNDMzOlx0XG4xNDM0Olx0XHRcdHhhc19uZXh0X29mZnNldCh4YXMpO1xuMTQzNTpcdFx0fVxuMTQzNjpcdFxuMTQzNzpcdFx0aWYgKCF4YXMtXHUwMDNleGFfbm9kZSlcbjE0Mzg6XHRcdFx0eGFzLVx1MDAzZXhhX25vZGUgPSBYQVNfQk9VTkRTO1xuMTQzOTpcdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBsaWIveGFycmF5LmMgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBpbXBhY3Qgb2YgdGhlIG1vZGlmaWNhdGlvbiBpbiBgbGliL3hhcnJheS5jYC4gVGhlIGNvcmUgZGlmZmVyZW5jZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBob3cgYHhhcy0mZ3Q7eGFfb2Zmc2V0YCBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdW5kZXIgdGhlIGNvbmRpdGlvbiB3aGVyZSB0aGUgbm9kZSBpc24mIzM5O3QgYSBzaGlmdCBub2RlICphbmQqIHRoZSBvZmZzZXQgZG9lc24mIzM5O3QgbWF0Y2ggdGhlIGNodW5rIG1hc2suCgpCZWZvcmUgdGhlIGNoYW5nZSwgaXQgYXBwZWFycyB3ZSB3ZXJlIHNldHRpbmcgYHhhcy0mZ3Q7eGFfb2Zmc2V0YCB0byBhIGNhbGN1bGF0ZWQgdmFsdWU6IGAoKHhhcy0mZ3Q7eGFfaW5kZXggLSAxKSAmYW1wOyBYQV9DSFVOS19NQVNLKSAmIzQzOyAxYC4gTm93LCB0aGUgY29uZGl0aW9uIHNlZW1zIG1vcmUgaW52b2x2ZWQuIEl0IGNoZWNrcyBpZiBgeGFzLSZndDt4YV9vZmZzZXRgIGlzICpub3QgZXF1YWwgdG8qIHRoZSByZXN1bHQgb2YgYSBjYWxsIHRvIGBnZXRfb2Zmc2V0KClgIHdpdGggYHhhcy0mZ3Q7eGFfaW5kZXhgIGFuZCBgeGFzLSZndDt4YV9ub2RlYCBhcyBwYXJhbWV0ZXJzLiBJZiB0aGF0IGNvbmRpdGlvbiBob2xkcywgd2UgaGF2ZSBhIGNvbmRpdGlvbmFsIHdpdGhpbiB0aGF0IGNvbmRpdGlvbmFsOiBJZiBgIXhhcy0mZ3Q7eGFfbm9kZS0mZ3Q7c2hpZnRgIHRoZSBvbGQgYXBwcm9hY2ggaXMgdXNlZCBidXQgaWYgdGhlIG5vZGUgKmlzKiBhIHNoaWZ0IG5vZGUsIGB4YXMtJmd0O3hhX29mZnNldGAgaXMgbm93IGFzc2lnbmVkIHRoZSByZXN1bHQgb2YgYGdldF9vZmZzZXQoKWAuCgpUaGlzIHN1Z2dlc3RzIHRoYXQgYGdldF9vZmZzZXRgIGlzIGJlY29taW5nIHRoZSBwcmltYXJ5IG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIG9mZnNldC4gSXQgYWxzbyBzZWVtcyB0aGVyZSYjMzk7cyBhIGRpc3RpbmN0aW9uIGluIGhvdyB3ZSBoYW5kbGUgbm9uLXNoaWZ0IGFuZCBzaGlmdCBub2Rlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYGdldF9vZmZzZXRgIHRvIGZ1bGx5IGdyYXNwIHRoaXMuIEl0JiMzOTtzIGxpa2VseSB0aGUga2V5IHRvIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gSSBuZWVkIHRvIGNoZWNrIGl0cyBkZWZpbml0aW9uIHRvIHNlZSBob3cgaXQmIzM5O3MgY2FsY3VsYXRpbmcgdGhlIG9mZnNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfb2Zmc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL3hhcnJheS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEwNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQganVzdCBoYXBwZW5lZDoKCioqRmluZGluZyB0aGUgYGdldF9vZmZzZXRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoZSBgZ2V0X29mZnNldGAgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgdXNlZCwgbW9zdCBsaWtlbHkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgY29kZS4gR2l2ZW4gaXRzIGxpa2VseSByZWxhdGlvbiB0byBvZmZzZXRzLCBJJiMzOTttIGJldHRpbmcgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoIGB4YXJyYXlgLCBzbyB0aGF0IGRpcmVjdHMgbWUgdG8gdGhlIGBsaWIvYCBkaXJlY3RvcnksIHdoaWNoIGhvdXNlcyBrZXJuZWwgbGlicmFyaWVzLCBvciBwZXJoYXBzIHdpdGhpbiB0aGUgYGluY2x1ZGUvbGludXgvYCBkaXJlY3RvcnksIHdoZXJlIHdlIGNhbiBmaW5kIG1hbnkga2V5IGhlYWRlcnMsIHBvdGVudGlhbGx5IGluIGB4YXJyYXkuaGAuIExldCYjMzk7cyBzdGFydCB0aGUgaHVudCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X29mZnNldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi94YXJyYXkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIveGFycmF5LmM9MTI2PXN0YXRpYyB2b2lkIHhhc19zcXVhc2hfbWFya3MoY29uc3Qgc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubGliL3hhcnJheS5jLTE0NC0vKiBleHRyYWN0cyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGlzIG5vZGUgZnJvbSB0aGUgaW5kZXggKi9cbmxpYi94YXJyYXkuYzoxNDU6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHN0cnVjdCB4YV9ub2RlICpub2RlKVxubGliL3hhcnJheS5jLTE0Ni17XG4tLVxubGliL3hhcnJheS5jPTE1MD1zdGF0aWMgdm9pZCB4YXNfc2V0X29mZnNldChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbmxpYi94YXJyYXkuYy0xNTEte1xubGliL3hhcnJheS5jOjE1MjpcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpO1xubGliL3hhcnJheS5jLTE1My19XG4tLVxubGliL3hhcnJheS5jPTIwND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKnhhc19kZXNjZW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuLS1cbmxpYi94YXJyYXkuYy0yMDYte1xubGliL3hhcnJheS5jOjIwNzpcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgbm9kZSk7XG5saWIveGFycmF5LmMtMjA4LVx0dm9pZCAqZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XG4tLVxubGliL3hhcnJheS5jPTEzMDY9dm9pZCAqX194YXNfcHJldihzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5saWIveGFycmF5LmMtMTMxNi1cbmxpYi94YXJyYXkuYzoxMzE3Olx0aWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSlcbmxpYi94YXJyYXkuYy0xMzE4LVx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0LS07XG4tLVxubGliL3hhcnJheS5jPTEzNDU9dm9pZCAqX194YXNfbmV4dChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5saWIveGFycmF5LmMtMTM1NS1cbmxpYi94YXJyYXkuYzoxMzU2Olx0aWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSlcbmxpYi94YXJyYXkuYy0xMzU3LVx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0JiM0MzsmIzQzOztcbi0tXG5saWIveGFycmF5LmM9MTM5Mz12b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXG4tLVxubGliL3hhcnJheS5jLTE0MDgtXHRcdFx0cmV0dXJuIGVudHJ5O1xubGliL3hhcnJheS5jOjE0MDk6XHR9IGVsc2UgaWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSkge1xubGliL3hhcnJheS5jLTE0MTAtXHRcdGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQpXG4tLVxubGliL3hhcnJheS5jLTE0MTItXHRcdGVsc2VcbmxpYi94YXJyYXkuYzoxNDEzOlx0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpO1xubGliL3hhcnJheS5jLTE0MTQtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzQKCQkJCQkJCW91dHB1dDogMTY1CgkJCQkJCQl0aG91Z2h0czogMzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhhcnJheSBNdWx0aS1JbmRleCBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB0ZXN0X3hhcnJheS5jYCBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBuZXcgdW5pdCB0ZXN0LCBgY2hlY2tfbXVsdGlfZmluZF80YCwgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgbXVsdGktaW5kZXggZmluZCBhbmQgc3BsaXQgb3BlcmF0aW9ucyB3aXRoaW4geGFycmF5LiBUaGF0JiMzOTtzIGdvb2QsIG1vcmUgdGFyZ2V0ZWQgdGVzdHMgYXJlIGFsd2F5cyB3ZWxjb21lLiBBbmQgdGhlIGNvcnJlc3BvbmRpbmcgZml4IGluIGBsaWIveGFycmF5LmNgIGFkZHJlc3NlcyBhbiBvZmZzZXQgY2FsY3VsYXRpb24gYnVnIGluIGB4YXNfZmluZGAsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aS1vcmRlciBlbnRyaWVzIGluIHRoZSB4YXJyYXkuIFNvdW5kcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGZpeCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBMZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIGNoZWNrbGlzdDoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBOb3BlLCB0aGlzIGlzIGFsbCBpbnRlcm5hbCB4YXJyYXkgbG9naWMgYW5kIHNlbGYtdGVzdGluZy4gTm8gdXNlci1mYWNpbmcga2VybmVsIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkLiBUaGF0JiMzOTtzIGEgcmVsaWVmLgoyLiAgKipCcmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIHRoZSBjb2RlIHVzZXMgc3RhbmRhcmQgeGFycmF5IHRyYXZlcnNhbCBzdGF0ZSBtZW1iZXJzIGxpa2UgYHhhcy0mZ3Q7eGFfb2Zmc2V0YCwgYHhhcy0mZ3Q7eGFfaW5kZXhgLCBgeGFzLSZndDt4YV9ub2RlYCwgZXRjLiBUaGVzZSBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgYnkgYFhBX1NUQVRFYCBvciBgeGFzX3NldGAuIFNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLgozLiAgKipBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24/KiogSSBkb24mIzM5O3Qgc2VlIGFueSBuZXcgYWxsb2NhdGlvbnMgYmVpbmcgaW50cm9kdWNlZCBvciBleGlzdGluZyBhbGxvY2F0aW9ucyBtb2RpZmllZC4gVGhpcyBpcyBhIGZpeCwgbm90IGEgZmVhdHVyZS4gTm8gd29ycmllcyB0aGVyZS4KNC4gICoqQm91bmRzIGNoZWNrcy9idWZmZXIgc2l6ZSBjaGFuZ2VzPyoqIE5vcGUuIFRoZSBjb2RlIGlzbiYjMzk7dCBjaGFuZ2luZyBidWZmZXIgc2l6ZXMgb3IgYWRkaW5nIG5ldyBidWZmZXIgY2hlY2tzLiBOb3RoaW5nIHRvIHdvcnJ5IGFib3V0IGluIHRoYXQgcmVnYXJkLgoKU28sIGluIHN1bW1hcnksIEkgc2VlIG5vIGltbWVkaWF0ZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRvIHVzZXJzcGFjZS4gVGhhdCYjMzk7cyB3aGF0IEkgbGlrZSB0byBzZWUuCgpOb3csIEtNU0FOLiBEb2VzIHRoaXMgbmVlZCBpdD8gTm8uIEtNU0FOIGlzIGZvciBjYXRjaGluZyAqdW5pbml0aWFsaXplZCogcmVhZHMgc3BlY2lmaWNhbGx5LCBidXQgZ2l2ZW4gdGhlIGNoZWNrIGxpc3QsIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2YgdGhvc2UgaGVyZS4gU3RhbmRhcmQgS0FTQU4sIHRoZSB1bml0IHRlc3RzLCBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgc3VmZmljaWVudC4gQW55IG1lbW9yeSBlcnJvcnMgKGlmIGFueSkgd291bGQgYmUgY2F1Z2h0IHdpdGggdGhvc2UuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaW50cm9kdWNlZCBoZXJlLgoKTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZXF1aXJlbWVudHM6IGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBmYWxzZSwgSSBjYW4gZm9ybXVsYXRlIGRldGFpbGVkIHJlYXNvbmluZyBjb250cmFzdGluZyBLTVNBTiB2ZXJzdXMgS0FTQU4mIzM5O3MgYXBwbGljYWJpbGl0eS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCB0aGUgZml4IGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZHMsIGFuZCB0aHVzIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sLiBOb3csIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBBbGwgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBvZmZzZXQgY2FsY3VsYXRpb24gbG9naWMgaW4geGFzX2ZpbmQoKSB3aXRoaW4gdGhlIFhBcnJheSBkYXRhIHN0cnVjdHVyZSBpbXBsZW1lbnRhdGlvbiAobGliL3hhcnJheS5jKSBhbmQgYWRkcyBhIHRlc3QgY2FzZSB0byB0aGUgWEFycmF5IHNlbGYtdGVzdCBzdWl0ZSAobGliL3Rlc3RfeGFycmF5LmMpLlxuXG5UaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCB0cmVlIHRyYXZlcnNhbCBpbmRleGluZy9vZmZzZXQgYXJpdGhtZXRpYyBmb3IgbXVsdGktaW5kZXggZW50cmllcyAoWEFfU1RBVEUgLyB4YV9ub2RlIG9mZnNldCBjYWxjdWxhdGlvbnMpLiBObyBuZXcgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyByZXN1bHRpbmcgZnJvbSBjb3JydXB0ZWQgb3IgaW5jb3JyZWN0IHRyYXZlcnNhbCBvZmZzZXRzIHdvdWxkIGJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBvZmZzZXQgY2FsY3VsYXRpb24gbG9naWMgaW4geGFzX2ZpbmQoKSB3aXRoaW4gdGhlIFhBcnJheSBkYXRhIHN0cnVjdHVyZSBpbXBsZW1lbnRhdGlvbiAobGliL3hhcnJheS5jKSBhbmQgYWRkcyBhIHRlc3QgY2FzZSB0byB0aGUgWEFycmF5IHNlbGYtdGVzdCBzdWl0ZSAobGliL3Rlc3RfeGFycmF5LmMpLlxuXG5UaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCB0cmVlIHRyYXZlcnNhbCBpbmRleGluZy9vZmZzZXQgYXJpdGhtZXRpYyBmb3IgbXVsdGktaW5kZXggZW50cmllcyAoWEFfU1RBVEUgLyB4YV9ub2RlIG9mZnNldCBjYWxjdWxhdGlvbnMpLiBObyBuZXcgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyByZXN1bHRpbmcgZnJvbSBjb3JydXB0ZWQgb3IgaW5jb3JyZWN0IHRyYXZlcnNhbCBvZmZzZXRzIHdvdWxkIGJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjI6MjIuOTE0ODQxOTAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzNTY2NDI2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEFSUkFZX01VTFRJXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhhc19maW5kXCIsXG4gICAgXCJ4YV9maW5kXCIsXG4gICAgXCJ4YV9maW5kX2FmdGVyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgb2Zmc2V0IGNhbGN1bGF0aW9uIGxvZ2ljIGluIHhhc19maW5kKCkgd2l0aGluIHRoZSBYQXJyYXkgZGF0YSBzdHJ1Y3R1cmUgaW1wbGVtZW50YXRpb24gKGxpYi94YXJyYXkuYykgYW5kIGFkZHMgYSB0ZXN0IGNhc2UgdG8gdGhlIFhBcnJheSBzZWxmLXRlc3Qgc3VpdGUgKGxpYi90ZXN0X3hhcnJheS5jKS5cXG5cXG5UaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBpbnRlcm5hbCB0cmVlIHRyYXZlcnNhbCBpbmRleGluZy9vZmZzZXQgYXJpdGhtZXRpYyBmb3IgbXVsdGktaW5kZXggZW50cmllcyAoWEFfU1RBVEUgLyB4YV9ub2RlIG9mZnNldCBjYWxjdWxhdGlvbnMpLiBObyBuZXcgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyByZXN1bHRpbmcgZnJvbSBjb3JydXB0ZWQgb3IgaW5jb3JyZWN0IHRyYXZlcnNhbCBvZmZzZXRzIHdvdWxkIGJlIGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXRlcmF0aW9uIG9mZnNldCBjYWxjdWxhdGlvbiBpbiB4YXNfZmluZCgpIHdpdGhpbiBsaWIveGFycmF5LmMgZm9yIG11bHRpLW9yZGVyIG5vZGVzICh3aGVyZSBzaGlmdCBcXHUwMDNlIDApLiBUaGlzIGlzIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgbG9naWMgZXhlcmNpc2VkIGFjcm9zcyBtZW1vcnkgbWFuYWdlbWVudCAocGFnZSBjYWNoZSwgc2htZW0sIGZvbGlvIGxvb2t1cHMpIGFuZCBzdWJzeXN0ZW0gaXRlcmF0b3JzLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMjoyMi45MTQ4NTA5MTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODQ5NDU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM0YTUzMGM0NjA3MzIxYWU1MmFlZjY0NWFiZjgxNDdlY2ZlYzM1MjRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAxNDoyMjoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9saWIvdGVzdF94YXJyYXkuYyBiL2xpYi90ZXN0X3hhcnJheS5jXFxuaW5kZXggNWNhMGFlZmVlOWFhNS4uY2RhNzI0NWU0NzcxNiAxMDA2NDRcXG4tLS0gYS9saWIvdGVzdF94YXJyYXkuY1xcbisrKyBiL2xpYi90ZXN0X3hhcnJheS5jXFxuQEAgLTEyNDcsNiArMTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF80KHN0cnVjdCB4YXJyYXkgKnhhKVxcbit7XFxuKyNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXFxuK1xcdFhBX1NUQVRFKHhhcywgeGEsIDEwMCk7XFxuK1xcdFhBX1NUQVRFX09SREVSKHNwbGl0LCB4YSwgMCwgMCk7XFxuK1xcdHZvaWQgKmVudHJ5O1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuK1xcbitcXHQvKiAoMSkgT3JkZXItNyBlbnRyeSAoMC0xMjcpIHdpdGggYWRqYWNlbnQgZW50cnkgYXQgMTI4LCBzdGFydGluZyBhdCAxMDAgKi9cXG4rXFx0eGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTtcXG4rXFx0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbitcXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcXG4rXFx0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcXG4rXFxuK1xcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG4rXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTtcXG4rXFx0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcXG4rXFxuK1xcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG4rXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHR4YV9lcmFzZV9pbmRleCh4YSwgMTI4KTtcXG4rXFx0eGFfZXJhc2VfaW5kZXgoeGEsIDApO1xcbitcXHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xcbitcXG4rXFx0LyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi9cXG4rXFx0eGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTtcXG4rXFx0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcXG4rXFxuK1xcdHhhc19zZXQoXFx1MDAyNnhhcywgMTAwKTtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCk7XFxuK1xcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xcbitcXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHhhc19zcGxpdF9hbGxvYyhcXHUwMDI2c3BsaXQsIHhhX21rX2luZGV4KDApLCA3LCBHRlBfS0VSTkVMKTtcXG4rXFx0eGFzX2xvY2soXFx1MDAyNnNwbGl0KTtcXG4rXFx0eGFzX3NwbGl0KFxcdTAwMjZzcGxpdCwgeGFfbWtfaW5kZXgoMCksIDcpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMTI4OyBpKyspXFxuK1xcdFxcdF9feGFfc3RvcmUoeGEsIGksIHhhX21rX2luZGV4KGkpLCAwKTtcXG4rXFx0eGFzX3VubG9jayhcXHUwMDI2c3BsaXQpO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCk7XFxuK1xcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7XFxuK1xcbitcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCk7XFxuK1xcdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0eGFfZGVzdHJveSh4YSk7XFxuK1xcdFhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7XFxuKyNlbmRpZlxcbit9XFxuK1xcbiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kXzEoc3RydWN0IHhhcnJheSAqeGEpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBpLCBqLCBrO1xcbkBAIC0xMzcwLDYgKzE0MzEsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kKHN0cnVjdCB4YXJyYXkgKnhhKVxcbiBcXHRcXHRjaGVja19tdWx0aV9maW5kXzEoeGEsIGkpO1xcbiBcXHRjaGVja19tdWx0aV9maW5kXzIoeGEpO1xcbiBcXHRjaGVja19tdWx0aV9maW5kXzMoeGEpO1xcbitcXHRjaGVja19tdWx0aV9maW5kXzQoeGEpO1xcbiB9XFxuIFxcbiAvKiBTZWUgZmluZF9zd2FwX2VudHJ5KCkgaW4gbW0vc2htZW0uYyAqL1xcbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcXG5pbmRleCA5YThiNDkxNjU0MGNmLi45ODAzMjRkNjg2YmQwIDEwMDY0NFxcbi0tLSBhL2xpYi94YXJyYXkuY1xcbisrKyBiL2xpYi94YXJyYXkuY1xcbkBAIC0xNDA2LDkgKzE0MDYsMTEgQEAgdm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxcbiBcXHRcXHRlbnRyeSA9IHhhc19sb2FkKHhhcyk7XFxuIFxcdFxcdGlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLVxcdTAwM2V4YV9ub2RlKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGVudHJ5O1xcbi1cXHR9IGVsc2UgaWYgKCF4YXMtXFx1MDAzZXhhX25vZGUtXFx1MDAzZXNoaWZ0IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICB4YXMtXFx1MDAzZXhhX29mZnNldCAhPSAoeGFzLVxcdTAwM2V4YV9pbmRleCBcXHUwMDI2IFhBX0NIVU5LX01BU0spKSB7XFxuLVxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ID0gKCh4YXMtXFx1MDAzZXhhX2luZGV4IC0gMSkgXFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XFxuK1xcdH0gZWxzZSBpZiAoeGFzLVxcdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXFx1MDAzZXhhX2luZGV4LCB4YXMtXFx1MDAzZXhhX25vZGUpKSB7XFxuK1xcdFxcdGlmICgheGFzLVxcdTAwM2V4YV9ub2RlLVxcdTAwM2VzaGlmdClcXG4rXFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cXHUwMDNleGFfaW5kZXggLSAxKSBcXHUwMDI2IFhBX0NIVU5LX01BU0spICsgMTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgeGFzLVxcdTAwM2V4YV9ub2RlKTtcXG4gXFx0fVxcbiBcXG4gXFx0eGFzX25leHRfb2Zmc2V0KHhhcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjIzLjQ4NDM4MzI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MjQ3NDIwMDAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYQVJSQVlfTVVMVElcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGFzX2ZpbmRcIixcbiAgICBcInhhX2ZpbmRcIixcbiAgICBcInhhX2ZpbmRfYWZ0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXRlcmF0aW9uIG9mZnNldCBjYWxjdWxhdGlvbiBpbiB4YXNfZmluZCgpIHdpdGhpbiBsaWIveGFycmF5LmMgZm9yIG11bHRpLW9yZGVyIG5vZGVzICh3aGVyZSBzaGlmdCBcXHUwMDNlIDApLiBUaGlzIGlzIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgbG9naWMgZXhlcmNpc2VkIGFjcm9zcyBtZW1vcnkgbWFuYWdlbWVudCAocGFnZSBjYWNoZSwgc2htZW0sIGZvbGlvIGxvb2t1cHMpIGFuZCBzdWJzeXN0ZW0gaXRlcmF0b3JzLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM0YTUzMGM0NjA3MzIxYWU1MmFlZjY0NWFiZjgxNDdlY2ZlYzM1MjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE0OjIyOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfeGFycmF5LmMgYi9saWIvdGVzdF94YXJyYXkuY1xuaW5kZXggNWNhMGFlZmVlOWFhNS4uY2RhNzI0NWU0NzcxNiAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X3hhcnJheS5jXG4rKysgYi9saWIvdGVzdF94YXJyYXkuY1xuQEAgLTEyNDcsNiArMTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSlcbit7XG4rI2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbitcdFhBX1NUQVRFKHhhcywgeGEsIDEwMCk7XG4rXHRYQV9TVEFURV9PUkRFUihzcGxpdCwgeGEsIDAsIDApO1xuK1x0dm9pZCAqZW50cnk7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXG4rXHQvKiAoMSkgT3JkZXItNyBlbnRyeSAoMC0xMjcpIHdpdGggYWRqYWNlbnQgZW50cnkgYXQgMTI4LCBzdGFydGluZyBhdCAxMDAgKi9cbitcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XG4rXHRYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcbitcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7XG4rXG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHR4YV9lcmFzZV9pbmRleCh4YSwgMTI4KTtcbitcdHhhX2VyYXNlX2luZGV4KHhhLCAwKTtcbitcdFhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7XG4rXG4rXHQvKiAoMikgU3BsaXR0aW5nIGEgbXVsdGktaW5kZXggZW50cnkgYWZ0ZXIgYSBsb29rdXAgYmVnaW5zIGluc2lkZSBpdCAqL1xuK1x0eGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTtcbitcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XG4rXG4rXHR4YXNfc2V0KFx1MDAyNnhhcywgMTAwKTtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHR4YXNfc3BsaXRfYWxsb2MoXHUwMDI2c3BsaXQsIHhhX21rX2luZGV4KDApLCA3LCBHRlBfS0VSTkVMKTtcbitcdHhhc19sb2NrKFx1MDAyNnNwbGl0KTtcbitcdHhhc19zcGxpdChcdTAwMjZzcGxpdCwgeGFfbWtfaW5kZXgoMCksIDcpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMTI4OyBpKyspXG4rXHRcdF9feGFfc3RvcmUoeGEsIGksIHhhX21rX2luZGV4KGkpLCAwKTtcbitcdHhhc191bmxvY2soXHUwMDI2c3BsaXQpO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcbitcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFfZGVzdHJveSh4YSk7XG4rXHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuKyNlbmRpZlxuK31cbitcbiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kXzEoc3RydWN0IHhhcnJheSAqeGEpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBpLCBqLCBrO1xuQEAgLTEzNzAsNiArMTQzMSw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEpXG4gXHRcdGNoZWNrX211bHRpX2ZpbmRfMSh4YSwgaSk7XG4gXHRjaGVja19tdWx0aV9maW5kXzIoeGEpO1xuIFx0Y2hlY2tfbXVsdGlfZmluZF8zKHhhKTtcbitcdGNoZWNrX211bHRpX2ZpbmRfNCh4YSk7XG4gfVxuIFxuIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovXG5kaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jXG5pbmRleCA5YThiNDkxNjU0MGNmLi45ODAzMjRkNjg2YmQwIDEwMDY0NFxuLS0tIGEvbGliL3hhcnJheS5jXG4rKysgYi9saWIveGFycmF5LmNcbkBAIC0xNDA2LDkgKzE0MDYsMTEgQEAgdm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIFx0XHRlbnRyeSA9IHhhc19sb2FkKHhhcyk7XG4gXHRcdGlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLVx1MDAzZXhhX25vZGUpKVxuIFx0XHRcdHJldHVybiBlbnRyeTtcbi1cdH0gZWxzZSBpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgeGFzLVx1MDAzZXhhX29mZnNldCAhPSAoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAyNiBYQV9DSFVOS19NQVNLKSkge1xuLVx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gKCh4YXMtXHUwMDNleGFfaW5kZXggLSAxKSBcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxO1xuK1x0fSBlbHNlIGlmICh4YXMtXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSkpIHtcbitcdFx0aWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdClcbitcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gKCh4YXMtXHUwMDNleGFfaW5kZXggLSAxKSBcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxO1xuK1x0XHRlbHNlXG4rXHRcdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSk7XG4gXHR9XG4gXG4gXHR4YXNfbmV4dF9vZmZzZXQoeGFzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjIzLjQ4NDM4NTU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjUzODc4NDgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhBcnJheSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgbW9kaWZpY2F0aW9uIGF0IGEgZ3JhbnVsYXIgbGV2ZWwuIEkgc2VlIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFmZmVjdHMgdGhlIGB4YXNfZmluZCgpYCBmdW5jdGlvbiB3aXRoaW4gYGxpYi94YXJyYXkuY2AuICBTcGVjaWZpY2FsbHksIHRoZSBkaWZmIGhpZ2hsaWdodHMgYSBjaGFuZ2UgaW4gdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIGhvdyBgeGFzX29mZnNldGAgaXMgbWFuYWdlZCB3aGVuIHNlYXJjaGluZyB0aGUgWEFycmF5LiBJIG5lZWQgdG8gZnVsbHkgZ3JvayB0aGUgcHVycG9zZSBvZiB0aGlzIGNoYW5nZSwgc28gSSdsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIGNvZGUuXG5cbkJlZm9yZSwgdGhlcmUgd2FzIGFuIGBlbHNlIGlmYCBibG9jayB0aGF0IGFwcGVhcmVkIHRvIGhhbmRsZSBhIHNwZWNpZmljIHNjZW5hcmlvIHdoZXJlIHRoZSBjdXJyZW50IG9mZnNldCB3YXMgbWlzYWxpZ25lZCB3aXRoaW4gYSBjaHVuay4gVGhlIHByZXZpb3VzIGNvZGUgY2hlY2tlZCBpZiB0aGUgYHNoaWZ0YCB3YXMgemVybyBhbmQgYWRqdXN0ZWQgdGhlIG9mZnNldCBpZiB0aGUgbWlzYWxpZ25tZW50IGhhcHBlbmVkLiBUaGUgbmV3IGNvZGUgcmVwbGFjZXMgdGhhdCB3aXRoIGFuIGBlbHNlIGlmYCB0aGF0IGNhbGxzIGBnZXRfb2Zmc2V0KClgIGZ1bmN0aW9uLiBJbiB0aGUgYGVsc2VgIGNhc2UsIGl0IG5vdyBzZWVtcyB3ZSBjaGVjayBmb3IgdGhlIHNoaWZ0IGFnYWluIGJlZm9yZSByZWFkanVzdGluZyB0aGUgb2Zmc2V0LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGdldF9vZmZzZXQoKWAgYW5kIHRoZSBhZGRlZCBgc2hpZnRgIGNoZWNrIGhpbnRzIHRoYXQgdGhpcyBpcyBhIGNoYW5nZSBkZWFsaW5nIHdpdGggdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlIG9yIG9mZnNldCBjYWxjdWxhdGlvbiB3aXRoaW4gdGhlIFhBcnJheS4gVGhpcyBpcyBpbnRlcmVzdGluZy5cblxuVG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGFjdCwgSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGxpYi94YXJyYXkuY2AgdG8gc2VlIGhvdyB0aGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgYW5kIGhvdyB0aGUgWEFycmF5IGRhdGEgc3RydWN0dXJlIGlzIG1hbmFnZWQuIEknbGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBxdWlja2x5IGp1bXAgYXJvdW5kIGFuZCBnZXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gb3B0aW1pemluZyBob3cgdGhlIFhBcnJheSBoYW5kbGVzIGxhcmdlciByYW5nZXMgb3IgZGlmZmVyZW50IG5vZGUgdHlwZXMuIFRoZSBwcmVzZW5jZSBvZiBhIHRlc3QgY2FzZSBpbiBgbGliL3Rlc3RfeGFycmF5LmNgIHN1Z2dlc3RzIGEgc3BlY2lmaWMgYnVnIG9yIGVkZ2UgY2FzZSB0aGlzIHBhdGNoIGlzIHRyeWluZyB0byBhZGRyZXNzLiBHb29kLCBhIHRlc3QgY2FzZSBpcyBhbHdheXMgd2VsY29tZS4gSG9wZWZ1bGx5IGl0J3Mgd2VsbC13cml0dGVuLCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgYW5kIHRoZSBwcm9ibGVtIHRoaXMgcGF0Y2ggc29sdmVzLiBUaGlzIGlzIGEgc29saWQgc3RhcnQsIGJ1dCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjMwLjAyMzE3NDc3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIveGFycmF5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM5MDpcXHQgKlxcbjEzOTE6XFx0ICogUmV0dXJuOiBUaGUgZW50cnksIGlmIGZvdW5kLCBvdGhlcndpc2UgJU5VTEwuXFxuMTM5MjpcXHQgKi9cXG4xMzkzOlxcdHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcXG4xMzk0OlxcdHtcXG4xMzk1OlxcdFxcdHZvaWQgKmVudHJ5O1xcbjEzOTY6XFx0XFxuMTM5NzpcXHRcXHRpZiAoeGFzX2Vycm9yKHhhcykgfHwgeGFzLVxcdTAwM2V4YV9ub2RlID09IFhBU19CT1VORFMpXFxuMTM5ODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzk5OlxcdFxcdGlmICh4YXMtXFx1MDAzZXhhX2luZGV4IFxcdTAwM2UgbWF4KVxcbjE0MDA6XFx0XFx0XFx0cmV0dXJuIHNldF9ib3VuZHMoeGFzKTtcXG4xNDAxOlxcdFxcbjE0MDI6XFx0XFx0aWYgKCF4YXMtXFx1MDAzZXhhX25vZGUpIHtcXG4xNDAzOlxcdFxcdFxcdHhhcy1cXHUwMDNleGFfaW5kZXggPSAxO1xcbjE0MDQ6XFx0XFx0XFx0cmV0dXJuIHNldF9ib3VuZHMoeGFzKTtcXG4xNDA1OlxcdFxcdH0gZWxzZSBpZiAoeGFzLVxcdTAwM2V4YV9ub2RlID09IFhBU19SRVNUQVJUKSB7XFxuMTQwNjpcXHRcXHRcXHRlbnRyeSA9IHhhc19sb2FkKHhhcyk7XFxuMTQwNzpcXHRcXHRcXHRpZiAoZW50cnkgfHwgeGFzX25vdF9ub2RlKHhhcy1cXHUwMDNleGFfbm9kZSkpXFxuMTQwODpcXHRcXHRcXHRcXHRyZXR1cm4gZW50cnk7XFxuMTQwOTpcXHRcXHR9IGVsc2UgaWYgKHhhcy1cXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgeGFzLVxcdTAwM2V4YV9ub2RlKSkge1xcbjE0MTA6XFx0XFx0XFx0aWYgKCF4YXMtXFx1MDAzZXhhX25vZGUtXFx1MDAzZXNoaWZ0KVxcbjE0MTE6XFx0XFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cXHUwMDNleGFfaW5kZXggLSAxKSBcXHUwMDI2IFhBX0NIVU5LX01BU0spICsgMTtcXG4xNDEyOlxcdFxcdFxcdGVsc2VcXG4xNDEzOlxcdFxcdFxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXFx1MDAzZXhhX2luZGV4LCB4YXMtXFx1MDAzZXhhX25vZGUpO1xcbjE0MTQ6XFx0XFx0fVxcbjE0MTU6XFx0XFxuMTQxNjpcXHRcXHR4YXNfbmV4dF9vZmZzZXQoeGFzKTtcXG4xNDE3OlxcdFxcbjE0MTg6XFx0XFx0d2hpbGUgKHhhcy1cXHUwMDNleGFfbm9kZSBcXHUwMDI2XFx1MDAyNiAoeGFzLVxcdTAwM2V4YV9pbmRleCBcXHUwMDNjPSBtYXgpKSB7XFxuMTQxOTpcXHRcXHRcXHRpZiAodW5saWtlbHkoeGFzLVxcdTAwM2V4YV9vZmZzZXQgPT0gWEFfQ0hVTktfU0laRSkpIHtcXG4xNDIwOlxcdFxcdFxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ID0geGFzLVxcdTAwM2V4YV9ub2RlLVxcdTAwM2VvZmZzZXQgKyAxO1xcbjE0MjE6XFx0XFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9ub2RlID0geGFfcGFyZW50KHhhcy1cXHUwMDNleGEsIHhhcy1cXHUwMDNleGFfbm9kZSk7XFxuMTQyMjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xNDIzOlxcdFxcdFxcdH1cXG4xNDI0OlxcdFxcbjE0MjU6XFx0XFx0XFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXFx1MDAzZXhhLCB4YXMtXFx1MDAzZXhhX25vZGUsIHhhcy1cXHUwMDNleGFfb2Zmc2V0KTtcXG4xNDI2OlxcdFxcdFxcdGlmICh4YV9pc19ub2RlKGVudHJ5KSkge1xcbjE0Mjc6XFx0XFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9ub2RlID0geGFfdG9fbm9kZShlbnRyeSk7XFxuMTQyODpcXHRcXHRcXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9IDA7XFxuMTQyOTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xNDMwOlxcdFxcdFxcdH1cXG4xNDMxOlxcdFxcdFxcdGlmIChlbnRyeSBcXHUwMDI2XFx1MDAyNiAheGFfaXNfc2libGluZyhlbnRyeSkpXFxuMTQzMjpcXHRcXHRcXHRcXHRyZXR1cm4gZW50cnk7XFxuMTQzMzpcXHRcXG4xNDM0OlxcdFxcdFxcdHhhc19uZXh0X29mZnNldCh4YXMpO1xcbjE0MzU6XFx0XFx0fVxcbjE0MzY6XFx0XFxuMTQzNzpcXHRcXHRpZiAoIXhhcy1cXHUwMDNleGFfbm9kZSlcXG4xNDM4OlxcdFxcdFxcdHhhcy1cXHUwMDNleGFfbm9kZSA9IFhBU19CT1VORFM7XFxuMTQzOTpcXHRcXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjI6MzAuMDIzNDgwMzY4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc4NDY5MTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhBcnJheSdzIENvcmUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgeGFzX2ZpbmRgLCBhIGNydWNpYWwgZnVuY3Rpb24gcmVzaWRpbmcgd2l0aGluIGBsaWIveGFycmF5LmNgLiBUaGlzIHBsYWNlcyBpdCBmaXJtbHkgd2l0aGluIHRoZSBYQXJyYXkgY29yZSBsaWJyYXJ5IG9mIHRoZSBMaW51eCBrZXJuZWwg4oCTIHRoZSBiZWRyb2NrIGZvciBhIHBsZXRob3JhIG9mIGNyaXRpY2FsIGtlcm5lbCBmdW5jdGlvbmFsaXRpZXMuIFhBcnJheSwgYXMgd2Uga25vdywgaXMgdWJpcXVpdG91cywgaGFuZGxpbmcgZXZlcnl0aGluZyBmcm9tIHRoZSBwYWdlIGNhY2hlIGFuZCBmaWxlbWFwcyB0byBzaG1lbSwgRFJNLCBEQVgsIHN5c2ZzLCBhbmQgSVBDLiBUaGF0J3MgYSBzZXJpb3VzIGZvb3RwcmludC5cblxuU28sIGB4YXNfZmluZGAgaXRzZWxmPyBJdCdzIHRoZSBseW5jaHBpbiBmb3IgaXRlcmF0aW5nIHRocm91Z2ggWEFycmF5IGVudHJpZXMuIEknbSB0aGlua2luZyBtdWx0aS1pbmRleCBlbnRyaWVzLCBzaG1lbSBpbXBsZW1lbnRhdGlvbnMsIGFuZCBmb2xpbyBzZWFyY2hlcyBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQuIEl0J3MgdGhlIHdvcmtob3JzZSBmdW5jdGlvbi4gTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgYHhhc19maW5kYCwgYHhhX2ZpbmRgLCBhbmQgYHhhX2ZpbmRfYWZ0ZXJgIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gU2VlaW5nIHdoZXJlIGFuZCBob3cgdGhlc2UgYXJlIGludm9rZWQgd2lsbCByZXZlYWwgYSB3ZWFsdGggb2YgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBYQXJyYXkgaXMgbGV2ZXJhZ2VkLCBhbmQgcG90ZW50aWFsbHkgaGlnaGxpZ2h0IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gd2l0aGluIHRob3NlIGNyaXRpY2FsIGFyZWFzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSB0ZWxscyBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY3OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjM1LjgwODE3NDQyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI0MDAxMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhhc19maW5kXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTQxNz1oZWxkLCB3aGlsZSBtb3ZpbmcgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgaW5kZXggZG9lcy5cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDE4LVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0MTk6WW91IGNhbiBzZWFyY2ggZm9yIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgdXNpbmcgeGFzX2ZpbmQoKS4gIFRoaXNcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDIwLWlzIHRoZSBlcXVpdmFsZW50IG9mIGJvdGggeGFfZmluZCgpIGFuZCB4YV9maW5kX2FmdGVyKCk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9NDIzPWVudHJ5IGF0IHRoZSBpbmRleCBvZiB0aGUgeGFfc3RhdGUuICBVc2luZyB4YXNfbmV4dF9lbnRyeSgpIHRvXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjQyNDptb3ZlIHRvIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW5zdGVhZCBvZiB4YXNfZmluZCgpIHdpbGwgc2F2ZVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00MjUtYSBmdW5jdGlvbiBjYWxsIGluIHRoZSBtYWpvcml0eSBvZiBjYXNlcyBhdCB0aGUgZXhwZW5zZSBvZiBlbWl0dGluZyBtb3JlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9NDc3PWluIHRoZSB4YV9zdGF0ZSB3aWxsIG5vdCBiZSBjaGFuZ2VkLiAgV2hlbiBpdGVyYXRpbmcgb3ZlciBhbiBYQXJyYXlcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q6NDc4Om9yIGNhbGxpbmcgeGFzX2ZpbmQoKSwgaWYgdGhlIGluaXRpYWwgaW5kZXggaXMgaW4gdGhlIG1pZGRsZVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00Nzktb2YgYSBtdWx0aS1pbmRleCBlbnRyeSwgaXQgd2lsbCBub3QgYmUgYWx0ZXJlZC4gIFN1YnNlcXVlbnQgY2FsbHNcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3Q9MzE1PXhhc19sb2FkKCnkvJrlsL3lj6/og73lnLDlsIZ4YV9zdGF0Zeenu+WKqOWIsOivpeadoeebrumZhOi/keOAguWmguaenOS9oOefpemBk3hhX3N0YXRl5bey57uP56e75Yqo5Yiw5LqG6K+l5p2h55uu77yM5bm25LiU6ZyA6KaB5qOA5p+lXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTMyMS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0OjMyMjrkvaDlj6/ku6Xkvb/nlKh4YXNfZmluZCgp5pCc57Si5LiL5LiA5Liq5b2T5YmN5p2h55uu44CC6L+Z55u45b2T5LqOeGFfZmluZCgp5ZKMeGFfZmluZF9hZnRlcigp77yb5aaC5p6c5YWJ5qCH5bey57uP56e75Yqo5Yiw5LqGXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0zMjMt5LiA5Liq5p2h55uu77yM6YKj5LmI5a6D5bCG5om+5Yiw5b2T5YmN5byV55So55qE5p2h55uu5LmL5ZCO55qE5LiL5LiA5Liq5p2h55uu44CC5aaC5p6c5rKh5pyJ77yM5a6D5bCG6L+U5ZueeGFfc3RhdGXntKLlvJXlpITnmoTmnaHnm67jgILkvb/nlKhcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0OjMyNDp4YXNfbmV4dF9lbnRyeSgp6ICM5LiN5piveGFzX2ZpbmQoKeadpeenu+WKqOWIsOS4i+S4gOS4quW9k+WJjeadoeebru+8jOWcqOWkp+WkmuaVsOaDheWGteS4i+S8muiKguecgeS4gOS4quWHveaVsOiwg+eUqO+8jOS9huS7o+S7t1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzI1LeaYr+WPkeWHuuabtOWkmuWGheiBlOS7o+eggeOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdD0zNDU9WEFycmF55pyJ6IO95Yqb5bCG5aSa5Liq57Si5byV6IGU57O75Zyo5LiA6LW377yM5Zug5q2k5a+55LiA5Liq57Si5byV55qE5pON5L2c5Lya5b2x5ZON5Yiw5omA5pyJ55qE57Si5byV44CC5L6L5aaC77yM5a2Y5YKo5Yiw5Lu75L2V57Si5byV5bCGXFx1ZmZmZFxcdWZmZmQuLi5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzU0LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3Q6MzU1OuWmguaenHhhc19sb2FkKCnpgYfliLDkuIDkuKrlpJrntKLlvJXmnaHnm67vvIx4YV9zdGF0ZeS4reeahHhhX2luZGV45bCG5LiN5Lya6KKr5pS55Y+Y44CC5b2T6YGN5Y6G5LiA5LiqWEFycmF55oiW6ICF6LCD55SoeGFzX2ZpbmQoKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzU2LeaXtu+8jOWmguaenOWIneWni+e0ouW8leWcqOS4gOS4quWkmue0ouW8leadoeebrueahOS4remXtO+8jOWug+WwhuS4jeS8muiiq+aUueWPmOOAgumaj+WQjueahOiwg+eUqOaIlui/reS7o+WwhuaKiue0ouW8leenu+WIsOiMg+WbtOWGheeahOesrFxcdWZmZmRcXHVmZmZkLi4uXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE1NDM9dm9pZCAqeGFzX3N0b3JlKHN0cnVjdCB4YV9zdGF0ZSAqLCB2b2lkICplbnRyeSk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNTQ0OnZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqLCB1bnNpZ25lZCBsb25nIG1heCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNTQ1LXZvaWQgKnhhc19maW5kX2NvbmZsaWN0KHN0cnVjdCB4YV9zdGF0ZSAqKTtcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTcwMT1zdGF0aWMgaW5saW5lIHZvaWQgeGFzX3NldF9scnUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzExLSAqIHhhc19uZXh0X2VudHJ5KCkgaXMgYW4gaW5saW5lIGZ1bmN0aW9uIHRvIG9wdGltaXNlIHhhcnJheSB0cmF2ZXJzYWwgZm9yXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzEyOiAqIHNwZWVkLiAgSXQgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIHhhc19maW5kKCksIGFuZCB3aWxsIGNhbGwgeGFzX2ZpbmQoKVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcxMy0gKiBmb3IgYWxsIHRoZSBoYXJkIGNhc2VzLlxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xNzE3PXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFzX25leHRfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzIzLVxcdFxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ICE9ICh4YXMtXFx1MDAzZXhhX2luZGV4IFxcdTAwMjYgWEFfQ0hVTktfTUFTSykpKVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTcyNDpcXHRcXHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyNS1cXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyNy1cXHRcXHRpZiAodW5saWtlbHkoeGFzLVxcdTAwM2V4YV9pbmRleCBcXHUwMDNlPSBtYXgpKVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTcyODpcXHRcXHRcXHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyOS1cXHRcXHRpZiAodW5saWtlbHkoeGFzLVxcdTAwM2V4YV9vZmZzZXQgPT0gWEFfQ0hVTktfTUFTSykpXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzMwOlxcdFxcdFxcdHJldHVybiB4YXNfZmluZCh4YXMsIG1heCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzMxLVxcdFxcdGVudHJ5ID0geGFfZW50cnkoeGFzLVxcdTAwM2V4YSwgbm9kZSwgeGFzLVxcdTAwM2V4YV9vZmZzZXQgKyAxKTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MzItXFx0XFx0aWYgKHVubGlrZWx5KHhhX2lzX2ludGVybmFsKGVudHJ5KSkpXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzMzOlxcdFxcdFxcdHJldHVybiB4YXNfZmluZCh4YXMsIG1heCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzM0LVxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0Kys7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE4MDA9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4MTctI2RlZmluZSB4YXNfZm9yX2VhY2goeGFzLCBlbnRyeSwgbWF4KSBcXFxcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxODE4OlxcdGZvciAoZW50cnkgPSB4YXNfZmluZCh4YXMsIG1heCk7IGVudHJ5OyBcXFxcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xODE5LVxcdCAgICAgZW50cnkgPSB4YXNfbmV4dF9lbnRyeSh4YXMsIG1heCkpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0xMDI9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfeGFzX3JldHJ5KHN0cnVjdCB4YXJyYXkgKnhhKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTEwLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxMTE6XFx0WEFfQlVHX09OKHhhLCB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpICE9IHhhX21rX3ZhbHVlKDApKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMTItXFx0eGFfZXJhc2VfaW5kZXgoeGEsIDEpO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTI1MD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzQoc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMjYyLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxMjYzOlxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMjY0LVxcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTI2Ni1cXG5saWIvdGVzdF94YXJyYXkuYzoxMjY3OlxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMjY4LVxcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMjcwLVxcbmxpYi90ZXN0X3hhcnJheS5jOjEyNzE6XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbmxpYi90ZXN0X3hhcnJheS5jLTEyNzItXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTEyODQtXFx0cmN1X3JlYWRfbG9jaygpO1xcbmxpYi90ZXN0X3hhcnJheS5jOjEyODU6XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbmxpYi90ZXN0X3hhcnJheS5jLTEyODYtXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMjk3LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxMjk4OlxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMjk5LVxcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMzAxLVxcbmxpYi90ZXN0X3hhcnJheS5jOjEzMDI6XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbmxpYi90ZXN0X3hhcnJheS5jLTEzMDMtXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jPTE1ODY9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbW92ZV9tYXgoc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xNTkxLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxNTkyOlxcdFhBX0JVR19PTih4YSwgeGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKSAhPSB4YV9ta19pbmRleChVTE9OR19NQVgpKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxNTkzOlxcdFhBX0JVR19PTih4YSwgeGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKSAhPSBOVUxMKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xNTk0LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTU5Ny1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubGliL3Rlc3RfeGFycmF5LmM6MTU5ODpcXHRYQV9CVUdfT04oeGEsIHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0geGFfbWtfaW5kZXgoVUxPTkdfTUFYKSk7XFxubGliL3Rlc3RfeGFycmF5LmMtMTU5OS1cXHR4YXNfcGF1c2UoXFx1MDAyNnhhcyk7XFxubGliL3Rlc3RfeGFycmF5LmM6MTYwMDpcXHRYQV9CVUdfT04oeGEsIHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0gTlVMTCk7XFxubGliL3Rlc3RfeGFycmF5LmMtMTYwMS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmxpYi94YXJyYXkuYz0xMzc1PUVYUE9SVF9TWU1CT0xfR1BMKF9feGFzX25leHQpO1xcbi0tXFxubGliL3hhcnJheS5jLTEzNzctLyoqXFxubGliL3hhcnJheS5jOjEzNzg6ICogeGFzX2ZpbmQoKSAtIEZpbmQgdGhlIG5leHQgcHJlc2VudCBlbnRyeSBpbiB0aGUgWEFycmF5LlxcbmxpYi94YXJyYXkuYy0xMzc5LSAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXFxuLS1cXG5saWIveGFycmF5LmMtMTM5Mi0gKi9cXG5saWIveGFycmF5LmM6MTM5Mzp2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXFxubGliL3hhcnJheS5jLTEzOTQte1xcbi0tXFxubGliL3hhcnJheS5jPTIxNzI9RVhQT1JUX1NZTUJPTCh4YV9jbGVhcl9tYXJrKTtcXG4tLVxcbmxpYi94YXJyYXkuYy0yMTg1LSAqIGVudHJpZXMgd2hpY2ggYXJlIGJlaW5nIHNpbXVsdGFuZW91c2x5IGFkZGVkLiAgSXQgd2lsbCBub3QgcmV0dXJuIGFuXFxubGliL3hhcnJheS5jOjIxODY6ICogJVhBX1JFVFJZX0VOVFJZOyBpZiB5b3UgbmVlZCB0byBzZWUgcmV0cnkgZW50cmllcywgdXNlIHhhc19maW5kKCkuXFxubGliL3hhcnJheS5jLTIxODctICpcXG4tLVxcbmxpYi94YXJyYXkuYz0yMTkxPXZvaWQgKnhhX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgKmluZGV4cCxcXG4tLVxcbmxpYi94YXJyYXkuYy0yMjAxLVxcdFxcdGVsc2VcXG5saWIveGFycmF5LmM6MjIwMjpcXHRcXHRcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIG1heCk7XFxubGliL3hhcnJheS5jLTIyMDMtXFx0fSB3aGlsZSAoeGFzX3JldHJ5KFxcdTAwMjZ4YXMsIGVudHJ5KSk7XFxuLS1cXG5saWIveGFycmF5LmM9MjIxMj1zdGF0aWMgYm9vbCB4YXNfc2libGluZyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbmxpYi94YXJyYXkuYy0yMjM1LSAqIHdoaWNoIGFyZSBiZWluZyBzaW11bHRhbmVvdXNseSBhZGRlZC4gIEl0IHdpbGwgbm90IHJldHVybiBhblxcbmxpYi94YXJyYXkuYzoyMjM2OiAqICVYQV9SRVRSWV9FTlRSWTsgaWYgeW91IG5lZWQgdG8gc2VlIHJldHJ5IGVudHJpZXMsIHVzZSB4YXNfZmluZCgpLlxcbmxpYi94YXJyYXkuYy0yMjM3LSAqXFxuLS1cXG5saWIveGFycmF5LmM9MjI0MT12b2lkICp4YV9maW5kX2FmdGVyKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXFxuLS1cXG5saWIveGFycmF5LmMtMjI1NC1cXHRcXHRlbHNlXFxubGliL3hhcnJheS5jOjIyNTU6XFx0XFx0XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBtYXgpO1xcbmxpYi94YXJyYXkuYy0yMjU2LVxcbi0tXFxubW0vZmlsZW1hcC5jPTQ3OT1ib29sIGZpbGVtYXBfcmFuZ2VfaGFzX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9maWxlbWFwLmMtNDkwLVxcdGZvciAoOzspIHtcXG5tbS9maWxlbWFwLmM6NDkxOlxcdFxcdGZvbGlvID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgbWF4KTtcXG5tbS9maWxlbWFwLmMtNDkyLVxcdFxcdGlmICh4YXNfcmV0cnkoXFx1MDAyNnhhcywgZm9saW8pKVxcbi0tXFxubW0vZmlsZW1hcC5jPTIwNzg9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmZpbmRfZ2V0X2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBwZ29mZl90IG1heCxcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yMDg0LVxcdGlmIChtYXJrID09IFhBX1BSRVNFTlQpXFxubW0vZmlsZW1hcC5jOjIwODU6XFx0XFx0Zm9saW8gPSB4YXNfZmluZCh4YXMsIG1heCk7XFxubW0vZmlsZW1hcC5jLTIwODYtXFx0ZWxzZVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yNDM0PWJvb2wga3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NDktXFx0aWYgKCFhdHRycylcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI0NTA6XFx0XFx0cmV0dXJuICF4YXNfZmluZChcXHUwMDI2eGFzLCBlbmQgLSAxKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjM4LjkzMjIxNjM0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1Mjg2MDE4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIFhBcnJheSB1c2FnZS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgcGVydmFzaXZlIHRoZXNlIGZ1bmN0aW9ucyBhcmUuIEknbSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBhdCBob3cgYHhhX2ZpbmRgLCBgeGFfZmluZF9hZnRlcmAsIGB4YXNfZm9yX2VhY2hgLCBhbmQgYHhhc19maW5kYCBhcmUgdXRpbGl6ZWQuXG5cbioqWEFycmF5IEZ1bmN0aW9uIFVzYWdlIERlZXAgRGl2ZSoqXG5cbkl0J3MgaW1tZWRpYXRlbHkgc3RyaWtpbmcgdGhhdCBgeGFzX2Zvcl9lYWNoYCBzZWVtcyB0byBiZSB0aGUgd29ya2hvcnNlIGhlcmUuIEkgc2VlIGl0J3MgaGVhdmlseSBpbnZvbHZlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgZmlsZSBtYXBwaW5nLCBzaGFyZWQgbWVtb3J5LCBLVk0sIGZpbGVzeXN0ZW1zIOKAkyBpdCdzIGFsbCBvdmVyIHRoZSBwbGFjZSEgVGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBzaWduaWZ5aW5nIGl0cyBpbXBvcnRhbmNlIHRvIGNvcmUgZnVuY3Rpb25hbGl0aWVzLlxuXG5UaGVuLCBJIG9ic2VydmUgYHhhX2ZpbmRgIGFuZCBgeGFfZmluZF9hZnRlcmAgYXJlIGVxdWFsbHkgd2lkZXNwcmVhZCwgd2l0aCBhcHBsaWNhdGlvbiBhY3Jvc3Mga2VybmVsIG1vZHVsZXMgYW5kIHdpdGhpbiB0aGUga2VybmVsJ3MgY29yZSBzdWJzeXN0ZW1zLiBUaGVpciBicm9hZCB1c2Ugc3VnZ2VzdHMgdGhleSdyZSBjcnVjaWFsIGZvciBmdW5kYW1lbnRhbCBvcGVyYXRpb25zLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtIHdlbGwuXG5cbkZpbmFsbHksIGB4YXNfZmluZGAgaXMgbG9jYXRlZCByaWdodCBpbiBgbGliL3hhcnJheS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGhvd2V2ZXIsIHRoZSBsb2NhdGlvbiBvZiBhIHNwZWNpZmljIGZ1bmN0aW9uIGRvZXMgbm90IHRlbGwgbWUgZXZlcnl0aGluZyBhYm91dCBpdHMgdXNhZ2UuIFxuXG5Ob3csIEknbGwgcXVpY2tseSBjaGVjayBpZiBgQ09ORklHX1hBUlJBWV9NVUxUSWAgaXMgYSBjb25maWd1cmFibGUgb3B0aW9uLiBUaGlzIHdpbGwgYWZmZWN0IGhvdyBpdCdzIHVzZWQgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgYSBzdGFuZGFyZCBzZXR0aW5nLCBvciBpZiBpdCBpcyBjb25maWd1cmFibGUuIFRoaXMgd2lsbCBkZWZpbmUgdGhlIHJhbmdlIG9mIHN5c3RlbXMgdGhhdCBsZXZlcmFnZSB0aGUgZmVhdHVyZXMgb2YgdGhpcyBhcnJheS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM2OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMjo0Mi40NjA4MjE3ODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NDcxNzcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEFSUkFZX01VTFRJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnPTM0OD1jb25maWcgSU5URVJWQUxfVFJFRV9TUEFOX0lURVJcXG4tLVxcbmxpYi9LY29uZmlnLTM1MS1cXG5saWIvS2NvbmZpZzozNTI6Y29uZmlnIFhBUlJBWV9NVUxUSVxcbmxpYi9LY29uZmlnLTM1My1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjQ1LjA0NTU0NTM3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDcxNzkzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZXNlIHNldHRpbmdzOiB0aGUgYEtjb25maWdgIGZpbGVzLiBHaXZlbiB0aGF0IEknbSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgYXJlYSBvciBmZWF0dXJlLCBhIHRhcmdldGVkIGFwcHJvYWNoIGlzIGJlc3QuIEknbSBob21pbmcgaW4gb24gbGluZSAzNTIgaW4gYGxpYi9LY29uZmlnYC4gVGhpcyBzdWdnZXN0cyBJIGhhdmUgYSBzcGVjaWZpYyBjb250ZXh0IGluIG1pbmQuIFBlcmhhcHMgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgcGFydGljdWxhciBvcHRpb24sIGEgZGVwZW5kZW5jeSBjaGFpbiwgb3IgaG93IGEgZmVhdHVyZSBpcyBjb25kaXRpb25hbGx5IGVuYWJsZWQuIFRoZSBsaW5lIG51bWJlciBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIGV4cGVjdCB0byBzZWUgdGhlIG1lYXQgb2Ygd2hhdCBJJ20gbG9va2luZyBmb3IgdGhlcmUgaW4gdGhlIGBLY29uZmlnYCBmaWxlLiBJJ20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoYXQgc3BlY2lmaWMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBsYW5ndWFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg4NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjQ3LjI5MjczMDc4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ1OlxcdFxcbiAzNDY6XFx0XFx0ICBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gMzQ3OlxcdFxcbiAzNDg6XFx0Y29uZmlnIElOVEVSVkFMX1RSRUVfU1BBTl9JVEVSXFxuIDM0OTpcXHRcXHRib29sXFxuIDM1MDpcXHRcXHRkZXBlbmRzIG9uIElOVEVSVkFMX1RSRUVcXG4gMzUxOlxcdFxcbiAzNTI6XFx0Y29uZmlnIFhBUlJBWV9NVUxUSVxcbiAzNTM6XFx0XFx0Ym9vbFxcbiAzNTQ6XFx0XFx0aGVscFxcbiAzNTU6XFx0XFx0ICBTdXBwb3J0IGVudHJpZXMgd2hpY2ggb2NjdXB5IG11bHRpcGxlIGNvbnNlY3V0aXZlIGluZGljZXMgaW4gdGhlXFxuIDM1NjpcXHRcXHQgIFhBcnJheS5cXG4gMzU3OlxcdFxcbiAzNTg6XFx0Y29uZmlnIEFTU09DSUFUSVZFX0FSUkFZXFxuIDM1OTpcXHRcXHRib29sXFxuIDM2MDpcXHRcXHRoZWxwXFxuIDM2MTpcXHRcXHQgIEdlbmVyaWMgYXNzb2NpYXRpdmUgYXJyYXkuICBDYW4gYmUgc2VhcmNoZWQgYW5kIGl0ZXJhdGVkIG92ZXIgd2hpbHN0XFxuIDM2MjpcXHRcXHQgIGl0IGlzIGJlaW5nIG1vZGlmaWVkLiAgSXQgaXMgYWxzbyByZWFzb25hYmx5IHF1aWNrIHRvIHNlYXJjaCBhbmRcXG4gMzYzOlxcdFxcdCAgbW9kaWZ5LiAgVGhlIGFsZ29yaXRobXMgYXJlIG5vbi1yZWN1cnNpdmUsIGFuZCB0aGUgdHJlZXMgYXJlIGhpZ2hseVxcbiAzNjQ6XFx0XFx0ICBjYXBhY2lvdXMuXFxuIDM2NTpcXHRcXG4gMzY2OlxcdFxcdCAgU2VlOlxcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRcXHREb2N1bWVudGF0aW9uL2NvcmUtYXBpL2Fzc29jX2FycmF5LnJzdFxcbiAzNjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIyOjQ3LjI5Mjg3NTM3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQ1NjAwMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBYQVJSQVlfTVVMVElgIFNlbGVjdGlvbiBpbiB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCdzIGNob29zaW5nIGBYQVJSQVlfTVVMVElgIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gSSB3YW50IGEgaG9saXN0aWMgdmlldywgYSBtYXAsIG9mIHdoZXJlIGFuZCBob3cgdGhpcyBmbGFnIGlzIGJlaW5nIHRyaWdnZXJlZC4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMsIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgYW5kIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBpdHMgc2VsZWN0aW9uLiBJdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBoZXJlIGlzIGdvaW5nIHRvIGluZm9ybSBteSBuZXh0IHN0ZXBzLiBUaGlzIGtpbmQgb2Yga2VybmVsLWxldmVsIGludmVzdGlnYXRpb24gaXMgc2Vjb25kIG5hdHVyZSwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSdtIHByZWNpc2UgYW5kIGNvbXByZWhlbnNpdmUuIExldCdzIHNlZSB3aGF0IHdlIHVuY292ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDE4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMjo0OS45Mzg0Nzg1NjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTU5NTQxMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFhBUlJBWV9NVUxUSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTE4Mjc9Y29uZmlnIFg4Nl9TR1hcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTgzMi1cXHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQVxcbmFyY2gveDg2L0tjb25maWc6MTgzMzpcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuYXJjaC94ODYvS2NvbmZpZy0xODM0LVxcdGhlbHBcXG4tLVxcbmZzL0tjb25maWc9MjczPWNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI3NTpcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuZnMvS2NvbmZpZy0yNzYtXFxuLS1cXG5tbS9LY29uZmlnPTg0Nj1tZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuLS1cXG5tbS9LY29uZmlnLTg0OS1cXHRzZWxlY3QgQ09NUEFDVElPTlxcbm1tL0tjb25maWc6ODUwOlxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG5tbS9LY29uZmlnLTg1MS1cXHRzZWxlY3QgTU1fSURcXG4tLVxcbm1tL0tjb25maWc9MTIzNj1jb25maWcgWk9ORV9ERVZJQ0VcXG4tLVxcbm1tL0tjb25maWctMTI0MC1cXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxubW0vS2NvbmZpZzoxMjQxOlxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG5tbS9LY29uZmlnLTEyNDItXFxuLS1cXG5zb3VuZC9jb3JlL0tjb25maWc9MTgxPWNvbmZpZyBTTkRfQ1RMX0ZBU1RfTE9PS1VQXFxuLS1cXG5zb3VuZC9jb3JlL0tjb25maWctMTgzLVxcdGRlZmF1bHQgeVxcbnNvdW5kL2NvcmUvS2NvbmZpZzoxODQ6XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbnNvdW5kL2NvcmUvS2NvbmZpZy0xODUtXFx0aGVscFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz0xMDY9Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxcbnZpcnQva3ZtL0tjb25maWc6MTA3OiAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXFxudmlydC9rdm0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjI6NTIuNDM0NDQyNzY5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NTE3Njk2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06XG5cbioqWEFycmF5IEludmVzdGlnYXRpb24gLSBJbml0aWFsIFRob3VnaHRzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgWEFSUkFZX01VTFRJYCBpcyBnZXR0aW5nIHB1bGxlZCBpbiBieSBhIGZldyBkaWZmZXJlbnQgb3B0aW9ucywgbmFtZWx5IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBIVUdFVExCX1BBR0VgLCBhbmQgYFNORF9DVExfRkFTVF9MT09LVVBgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJdCdzIGEga2V5IGNvbXBvbmVudCwgb2J2aW91c2x5LCBpZiBpdCdzIGRlcGVuZGVudCBvbiB0aG9zZSBjb21tb25seSB1c2VkIGZlYXR1cmVzLiBBbmQsIEkgYWxzbyBrbm93IHRoYXQgYHhhcnJheS5jYCBpcyBhbHdheXMgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUgdm1saW51eCBpbWFnZS4gVGhhdCBtZWFucyBpdCdzIHByZXR0eSBmdW5kYW1lbnRhbCwgYSBjb3JlIHBhcnQgb2YgdGhlIGtlcm5lbCdzIGluZnJhc3RydWN0dXJlLiBJdCdzIG5vdCBhIG1vZHVsYXIgY29tcG9uZW50IHRoYXQgY2FuIGJlIGVhc2lseSBzd2FwcGVkIG91dC5cblxuR2l2ZW4gdGhhdCwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBsaWIvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYHhhcnJheS5vYCBpcyBjb21waWxlZC4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoYXQgaW5mbHVlbmNlcyBpdHMgaW5jbHVzaW9uLiBUaGlzIHNob3VsZCBhbHNvIGhlbHAgZXN0YWJsaXNoIHRoZSBjb250ZXh0IGZvciBgWEFSUkFZX01VTFRJYCdzIHJvbGUgaW4gcmVsYXRpb24gdG8gdGhvc2Ugb3RoZXIgdmFyaWFibGVzIGFuZCB1bHRpbWF0ZWx5LCB0byBnYWluIGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDUzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjI6NTUuMzg2MjE3MDQ3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjE3NDY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4YXJyYXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9NYWtlZmlsZT0zNj1saWIteSA6PSBjdHlwZS5vIHN0cmluZy5vIHZzcHJpbnRmLm8gY21kbGluZS5vIFxcXFxcXG5saWIvTWFrZWZpbGU6Mzc6XFx0IHJidHJlZS5vIHJhZGl4LXRyZWUubyB0aW1lcnF1ZXVlLm8geGFycmF5Lm8gXFxcXFxcbmxpYi9NYWtlZmlsZS0zOC1cXHQgbWFwbGVfdHJlZS5vIGlkci5vIGV4dGFibGUubyBpcnFfcmVncy5vIGFyZ3Zfc3BsaXQubyBcXFxcXFxuLS1cXG5saWIvTWFrZWZpbGU9OTI9ZW5kaWZcXG5saWIvTWFrZWZpbGUtOTMtXFxubGliL01ha2VmaWxlOjk0Om9iai0kKENPTkZJR19URVNUX1hBUlJBWSkgKz0gdGVzdF94YXJyYXkub1xcbmxpYi9NYWtlZmlsZS05NS1vYmotJChDT05GSUdfVEVTVF9NQVBMRV9UUkVFKSArPSB0ZXN0X21hcGxlX3RyZWUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMjo1NS40NTIzOTgyNTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkxMDMyMTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHhhcnJheSBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYHhhc19maW5kYCB3aXRoaW4gYGxpYi94YXJyYXkuY2AsIGEgY3JpdGljYWwgZnVuY3Rpb24gd2l0aGluIHRoZSB4YXJyYXkgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIGhhbmRsaW5nIHRoZSBgeGFzLVx1MDAzZXhhX29mZnNldGAgY2FsY3VsYXRpb24gd2hlbiBkZWFsaW5nIHdpdGggbm9uLWxlYWYgbm9kZXMgKGB4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdCAhPSAwYCkuIEJlZm9yZSwgdGhpcyBzcGVjaWZpYyBjb25kaXRpb24gd2Fzbid0IGNvcnJlY3RseSBhZGRyZXNzZWQsIGJ1dCBub3cgaXQgY2hlY2tzIGB4YXMtXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSlgIGFuZCBhZGp1c3RzIGFjY29yZGluZ2x5LiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgY2hhbmdlIHRvIGhvdyB0aGUgeGFycmF5IHRyYXZlcnNlcyBpdHMgc3RydWN0dXJlLlxuXG5Ob3csIGlzIHRoaXMgY29kZSBwYXRoIGFjdHVhbGx5ICpyZWFjaGFibGUqIGluIGEgcnVubmluZyBrZXJuZWw/IEFic29sdXRlbHkuIGB4YXNfZmluZGAgaXMgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbiwgdXNlZCBleHRlbnNpdmVseSBpbiB0aGluZ3MgbGlrZSB0aGUgcGFnZSBjYWNoZSwgc2hhcmVkIG1lbW9yeSBsb29rdXBzIChzaG1lbSksIEtWTSwgc291bmQgY29udHJvbCwgYW5kIGZpbGUgbWFwcGluZy4gSXQncyBwYXJ0IG9mIHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBkYXRhIHN0cnVjdHVyZXMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5HaXZlbiB0aGUgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGlmIHNvbWV0aGluZyBpcyB3b3J0aCBmdXp6aW5nLCB0aGlzIGlzIGEgY2xlYXIgeWVzLiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIHN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSBtZW1vcnkgbWFuYWdlbWVudCB0aHJvdWdoIHRoZSB4YXJyYXksIGFuZCBpdCBpbnZvbHZlcyByZXN0cnVjdHVyaW5nIG9mIGEgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlLiBUaGlzIHRpY2tzIGFsbCB0aGUgYm94ZXMuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBDbGVhcmx5LCBgeGFzX2ZpbmRgIGl0c2VsZiBpcyBhIHByaW1lIGNhbmRpZGF0ZSwgZ2l2ZW4gaXQgd2FzIGRpcmVjdGx5IG1vZGlmaWVkLiBCdXQgbGV0J3MgbG9vayBmb3IgZGlyZWN0IHdyYXBwZXJzOiBgeGFfZmluZGAgYW5kIGB4YV9maW5kX2FmdGVyYCBhcmUgcmlnaHQgdGhlcmUgYW5kIGNhbGwgYHhhc19maW5kYC4gVGhleSBhcmUgaW1tZWRpYXRlbHkgcmVsZXZhbnQuIFRpbWUgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBlbnRyeXBvaW50cyBpbiBgbGliL3hhcnJheS5jYCB0aGF0IGNhbGwgYHhhc19maW5kYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjM6MDAuMzYyNzI0NDcyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDUzNjA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4YXNfZmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIveGFycmF5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3hhcnJheS5jPTEzNzU9RVhQT1JUX1NZTUJPTF9HUEwoX194YXNfbmV4dCk7XFxuLS1cXG5saWIveGFycmF5LmMtMTM3Ny0vKipcXG5saWIveGFycmF5LmM6MTM3ODogKiB4YXNfZmluZCgpIC0gRmluZCB0aGUgbmV4dCBwcmVzZW50IGVudHJ5IGluIHRoZSBYQXJyYXkuXFxubGliL3hhcnJheS5jLTEzNzktICogQHhhczogWEFycmF5IG9wZXJhdGlvbiBzdGF0ZS5cXG4tLVxcbmxpYi94YXJyYXkuYy0xMzkyLSAqL1xcbmxpYi94YXJyYXkuYzoxMzkzOnZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcXG5saWIveGFycmF5LmMtMTM5NC17XFxuLS1cXG5saWIveGFycmF5LmMtMTQ0MC19XFxubGliL3hhcnJheS5jOjE0NDE6RVhQT1JUX1NZTUJPTF9HUEwoeGFzX2ZpbmQpO1xcbmxpYi94YXJyYXkuYy0xNDQyLVxcbmxpYi94YXJyYXkuYy0xNDQzLS8qKlxcbmxpYi94YXJyYXkuYzoxNDQ0OiAqIHhhc19maW5kX21hcmtlZCgpIC0gRmluZCB0aGUgbmV4dCBtYXJrZWQgZW50cnkgaW4gdGhlIFhBcnJheS5cXG5saWIveGFycmF5LmMtMTQ0NS0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxcbi0tXFxubGliL3hhcnJheS5jLTE0NjMtICovXFxubGliL3hhcnJheS5jOjE0NjQ6dm9pZCAqeGFzX2ZpbmRfbWFya2VkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCwgeGFfbWFya190IG1hcmspXFxubGliL3hhcnJheS5jLTE0NjUte1xcbi0tXFxubGliL3hhcnJheS5jLTE1MTEtXFxubGliL3hhcnJheS5jOjE1MTI6XFx0XFx0b2Zmc2V0ID0geGFzX2ZpbmRfY2h1bmsoeGFzLCBhZHZhbmNlLCBtYXJrKTtcXG5saWIveGFycmF5LmMtMTUxMy1cXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2UgeGFzLVxcdTAwM2V4YV9vZmZzZXQpIHtcXG4tLVxcbmxpYi94YXJyYXkuYy0xNTQyLX1cXG5saWIveGFycmF5LmM6MTU0MzpFWFBPUlRfU1lNQk9MX0dQTCh4YXNfZmluZF9tYXJrZWQpO1xcbmxpYi94YXJyYXkuYy0xNTQ0LVxcbmxpYi94YXJyYXkuYy0xNTQ1LS8qKlxcbmxpYi94YXJyYXkuYzoxNTQ2OiAqIHhhc19maW5kX2NvbmZsaWN0KCkgLSBGaW5kIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW4gYSByYW5nZS5cXG5saWIveGFycmF5LmMtMTU0Ny0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxcbi0tXFxubGliL3hhcnJheS5jLTE1NTMtICovXFxubGliL3hhcnJheS5jOjE1NTQ6dm9pZCAqeGFzX2ZpbmRfY29uZmxpY3Qoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxubGliL3hhcnJheS5jLTE1NTUte1xcbi0tXFxubGliL3hhcnJheS5jLTE2MDMtfVxcbmxpYi94YXJyYXkuYzoxNjA0OkVYUE9SVF9TWU1CT0xfR1BMKHhhc19maW5kX2NvbmZsaWN0KTtcXG5saWIveGFycmF5LmMtMTYwNS1cXG4tLVxcbmxpYi94YXJyYXkuYz0xOTg3PWludCBfX3hhX2FsbG9jKHN0cnVjdCB4YXJyYXkgKnhhLCB1MzIgKmlkLCB2b2lkICplbnRyeSxcXG4tLVxcbmxpYi94YXJyYXkuYy0yMDAxLVxcdFxcdHhhcy54YV9pbmRleCA9IGxpbWl0Lm1pbjtcXG5saWIveGFycmF5LmM6MjAwMjpcXHRcXHR4YXNfZmluZF9tYXJrZWQoXFx1MDAyNnhhcywgbGltaXQubWF4LCBYQV9GUkVFX01BUkspO1xcbmxpYi94YXJyYXkuYy0yMDAzLVxcdFxcdGlmICh4YXMueGFfbm9kZSA9PSBYQVNfUkVTVEFSVClcXG4tLVxcbmxpYi94YXJyYXkuYz0yMTcyPUVYUE9SVF9TWU1CT0woeGFfY2xlYXJfbWFyayk7XFxuLS1cXG5saWIveGFycmF5LmMtMjE4NS0gKiBlbnRyaWVzIHdoaWNoIGFyZSBiZWluZyBzaW11bHRhbmVvdXNseSBhZGRlZC4gIEl0IHdpbGwgbm90IHJldHVybiBhblxcbmxpYi94YXJyYXkuYzoyMTg2OiAqICVYQV9SRVRSWV9FTlRSWTsgaWYgeW91IG5lZWQgdG8gc2VlIHJldHJ5IGVudHJpZXMsIHVzZSB4YXNfZmluZCgpLlxcbmxpYi94YXJyYXkuYy0yMTg3LSAqXFxuLS1cXG5saWIveGFycmF5LmM9MjE5MT12b2lkICp4YV9maW5kKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXFxuLS1cXG5saWIveGFycmF5LmMtMjE5OS1cXHRcXHRpZiAoKF9fZm9yY2UgdW5zaWduZWQgaW50KWZpbHRlciBcXHUwMDNjIFhBX01BWF9NQVJLUylcXG5saWIveGFycmF5LmM6MjIwMDpcXHRcXHRcXHRlbnRyeSA9IHhhc19maW5kX21hcmtlZChcXHUwMDI2eGFzLCBtYXgsIGZpbHRlcik7XFxubGliL3hhcnJheS5jLTIyMDEtXFx0XFx0ZWxzZVxcbmxpYi94YXJyYXkuYzoyMjAyOlxcdFxcdFxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgbWF4KTtcXG5saWIveGFycmF5LmMtMjIwMy1cXHR9IHdoaWxlICh4YXNfcmV0cnkoXFx1MDAyNnhhcywgZW50cnkpKTtcXG4tLVxcbmxpYi94YXJyYXkuYz0yMjEyPXN0YXRpYyBib29sIHhhc19zaWJsaW5nKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubGliL3hhcnJheS5jLTIyMzUtICogd2hpY2ggYXJlIGJlaW5nIHNpbXVsdGFuZW91c2x5IGFkZGVkLiAgSXQgd2lsbCBub3QgcmV0dXJuIGFuXFxubGliL3hhcnJheS5jOjIyMzY6ICogJVhBX1JFVFJZX0VOVFJZOyBpZiB5b3UgbmVlZCB0byBzZWUgcmV0cnkgZW50cmllcywgdXNlIHhhc19maW5kKCkuXFxubGliL3hhcnJheS5jLTIyMzctICpcXG4tLVxcbmxpYi94YXJyYXkuYz0yMjQxPXZvaWQgKnhhX2ZpbmRfYWZ0ZXIoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgKmluZGV4cCxcXG4tLVxcbmxpYi94YXJyYXkuYy0yMjUyLVxcdFxcdGlmICgoX19mb3JjZSB1bnNpZ25lZCBpbnQpZmlsdGVyIFxcdTAwM2MgWEFfTUFYX01BUktTKVxcbmxpYi94YXJyYXkuYzoyMjUzOlxcdFxcdFxcdGVudHJ5ID0geGFzX2ZpbmRfbWFya2VkKFxcdTAwMjZ4YXMsIG1heCwgZmlsdGVyKTtcXG5saWIveGFycmF5LmMtMjI1NC1cXHRcXHRlbHNlXFxubGliL3hhcnJheS5jOjIyNTU6XFx0XFx0XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBtYXgpO1xcbmxpYi94YXJyYXkuYy0yMjU2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMzowMC40NTc0NDc1MjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxNTY4NDQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYYXJyYXkgTW9kdWxlIFRlc3RpbmcgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHhhcnJheSB0ZXN0IHNpdHVhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBjb21wcmVoZW5zaXZlbHkgY292ZXJpbmcgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgc28gSSdsbCBjaGVjayBgdGVzdF94YXJyYXkuY2AgYXMgd2VsbC4gUmlnaHQsIHRoZSB0ZXN0cyBpbiBgbGliL3Rlc3RfeGFycmF5LmNgIGFyZSB0aWVkIHRvIHRoYXQgYENPTkZJR19URVNUX1hBUlJBWWAgbW9kdWxlLCBzbyB0aGF0J3Mgd2hlcmUgdGhlIHByaW1hcnkgc2VsZi1jaGVja3MgYXJlIGhhcHBlbmluZy5cblxuTXkgZm9jdXMgZm9yIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBkZWZpbml0ZWx5IGJlIG9uOlxuKiAgIGB4YXNfZmluZGBcbiogICBgeGFfZmluZGBcbiogICBgeGFfZmluZF9hZnRlcmBcblxuQnV0IEkgZG9uJ3Qgd2FudCB0byBtaXNzIGFueXRoaW5nLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrLCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcml0aWNhbCB0byBjb3Zlcj9cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgYnJvYWRlciBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFBlcmhhcHMgSSBuZWVkIHRvIGNoZWNrIGlmIGBmaWxlbWFwX3JhbmdlX2hhc19wYWdlYCBvciBgZmluZF9zd2FwX2VudHJ5YCB1dGlsaXplIGB4YXNfZmluZGAuIFRoYXQgd291bGQgYmUgYW4gaW1wb3J0YW50IGFkZGl0aW9uIHRvIG15IHVuZGVyc3RhbmRpbmcuXG5cbkEgcXVpY2sgYW5kIGRpcnR5IGNoZWNrIHdvdWxkIGJlIHRvIHNpbXBseSBgZ3JlcGAgYWNyb3NzIHRoZSBgbW0vYCBkaXJlY3RvcnkgZm9yIGFueSBjYWxscyB0byBgeGFzX2ZpbmRgLiBUaGF0IHNob3VsZCBxdWlja2x5IHVuY292ZXIgYW55IHVzYWdlcyB0aGF0IEkgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IGF3YXJlIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAwNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMzowMy4xNzMxMzU4ODFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNTA1MDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhhc19maW5kXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZpbGVtYXAuYz00Nzk9Ym9vbCBmaWxlbWFwX3JhbmdlX2hhc19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vZmlsZW1hcC5jLTQ5MC1cXHRmb3IgKDs7KSB7XFxubW0vZmlsZW1hcC5jOjQ5MTpcXHRcXHRmb2xpbyA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIG1heCk7XFxubW0vZmlsZW1hcC5jLTQ5Mi1cXHRcXHRpZiAoeGFzX3JldHJ5KFxcdTAwMjZ4YXMsIGZvbGlvKSlcXG4tLVxcbm1tL2ZpbGVtYXAuYz0yMDc4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmaW5kX2dldF9lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgcGdvZmZfdCBtYXgsXFxuLS1cXG5tbS9maWxlbWFwLmMtMjA4NC1cXHRpZiAobWFyayA9PSBYQV9QUkVTRU5UKVxcbm1tL2ZpbGVtYXAuYzoyMDg1OlxcdFxcdGZvbGlvID0geGFzX2ZpbmQoeGFzLCBtYXgpO1xcbm1tL2ZpbGVtYXAuYy0yMDg2LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjM6MDMuMjU2NjQ2ODg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzQxNzUzMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFNlYXJjaCBUZXJtcyBmb3IgYHhhX2ZpbmRgIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoZXNlIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgd2UncmUgdGFyZ2V0aW5nIHRoZSBYQXJyYXkgZGF0YSBzdHJ1Y3R1cmUgYW5kIGl0cyBzZWFyY2ggZnVuY3Rpb25hbGl0aWVzLlwiIFRoZSBmYWN0IHRoYXQgd2UncmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGB4YV9maW5kKGAgYW5kIGB4YV9maW5kX2FmdGVyKGAgc3Ryb25nbHkgc3VnZ2VzdHMgd2UncmUgZGlnZ2luZyBpbnRvIHRoZSBjb3JlIHNlYXJjaCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIFhBcnJheSBjb2RlIGJhc2UuXG5cbldlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiBvdGhlciBgeGFfYCBmdW5jdGlvbnMsIGFuZCBvbmx5IHRob3NlIHdoaWNoIHBlcnRhaW4gdG8gZmluZGluZyBhcmUgb2YgaW50ZXJlc3QuIFRoaXMgdGVsbHMgbWUgdGhhdCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBlaXRoZXIgYSBmdW5jdGlvbiBjYWxsIG9yIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHNlYXJjaCBmdW5jdGlvbmFsaXRpZXMuIFxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYzMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIzOjA1LjI5MDgyNTAzMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxMDU4NDgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcYnhhX2ZpbmRcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9ODg9YnkgY2FsbGluZyB4YV9mb3JfZWFjaCgpLCB4YV9mb3JfZWFjaF9zdGFydCgpIG9yIHhhX2Zvcl9lYWNoX3JhbmdlKCkuXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0Ojg5OllvdSBtYXkgcHJlZmVyIHRvIHVzZSB4YV9maW5kKCkgb3IgeGFfZmluZF9hZnRlcigpIHRvIG1vdmUgdG8gdGhlIG5leHRcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtOTAtcHJlc2VudCBlbnRyeSBpbiB0aGUgWEFycmF5Llxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTE5NT1UYWtlcyBSQ1UgcmVhZCBsb2NrOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0LTE5OS0gKiB4YV9mb3JfZWFjaF9yYW5nZSgpXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjIwMDogKiB4YV9maW5kKClcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtMjAxLSAqIHhhX2ZpbmRfYWZ0ZXIoKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTQxOT1Zb3UgY2FuIHNlYXJjaCBmb3IgdGhlIG5leHQgcHJlc2VudCBlbnRyeSB1c2luZyB4YXNfZmluZCgpLiAgVGhpc1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0MjA6aXMgdGhlIGVxdWl2YWxlbnQgb2YgYm90aCB4YV9maW5kKCkgYW5kIHhhX2ZpbmRfYWZ0ZXIoKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDIxLWlmIHRoZSBjdXJzb3IgaGFzIGJlZW4gd2Fsa2VkIHRvIGFuIGVudHJ5LCB0aGVuIGl0IHdpbGwgZmluZCB0aGUgbmV4dFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdD03Nj14YV9mb3JfZWFjaCgp44CBeGFfZm9yX2VhY2hfc3RhcnQoKeaIlnhhX2Zvcl9lYWNoX3JhbmdlKCnmnaXpgY3ljoZYQXJyYXnkuK3nmoTnjrDmnInmnaHnm67jgILkvaBcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0Ojc3OuWPr+iDveabtOWWnOasouS9v+eUqHhhX2ZpbmQoKeaIlnhhX2ZpbmRfYWZ0ZXIoKeadpeenu+WKqOWIsFhBcnJheeS4reeahOS4i+S4gOS4quW9k+WJjeadoeebruOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtNzgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0PTEzNT14YV9zdG9yZSgpLCB4YV9jbXB4Y2hnKCksIHhhX2FsbG9jKCksIHhhX3Jlc2VydmUoKeWSjHhhX2luc2VydCgp5Ye95pWw5o6l5Y+X5LiA5LiqZ2ZwX3Tlj4LmlbDvvIzku6VcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMTU2LSAqIHhhX2Zvcl9lYWNoX3JhbmdlKClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0OjE1NzogKiB4YV9maW5kKClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTE1OC0gKiB4YV9maW5kX2FmdGVyKClcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3Q9MzE1PXhhc19sb2FkKCnkvJrlsL3lj6/og73lnLDlsIZ4YV9zdGF0Zeenu+WKqOWIsOivpeadoeebrumZhOi/keOAguWmguaenOS9oOefpemBk3hhX3N0YXRl5bey57uP56e75Yqo5Yiw5LqG6K+l5p2h55uu77yM5bm25LiU6ZyA6KaB5qOA5p+lXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTMyMS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0OjMyMjrkvaDlj6/ku6Xkvb/nlKh4YXNfZmluZCgp5pCc57Si5LiL5LiA5Liq5b2T5YmN5p2h55uu44CC6L+Z55u45b2T5LqOeGFfZmluZCgp5ZKMeGFfZmluZF9hZnRlcigp77yb5aaC5p6c5YWJ5qCH5bey57uP56e75Yqo5Yiw5LqGXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0zMjMt5LiA5Liq5p2h55uu77yM6YKj5LmI5a6D5bCG5om+5Yiw5b2T5YmN5byV55So55qE5p2h55uu5LmL5ZCO55qE5LiL5LiA5Liq5p2h55uu44CC5aaC5p6c5rKh5pyJ77yM5a6D5bCG6L+U5ZueeGFfc3RhdGXntKLlvJXlpITnmoTmnaHnm67jgILkvb/nlKhcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz0zNTA9c3RydWN0IGRwbGxfcGluX3JlZiAqZHBsbF94YV9yZWZfZHBsbF9maXJzdChzdHJ1Y3QgeGFycmF5ICp4YV9yZWZzKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM1NC1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzU1OlxcdHJlZiA9IHhhX2ZpbmQoeGFfcmVmcywgXFx1MDAyNmksIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM1Ni1cXHRXQVJOX09OKCFyZWYpO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTIwLSNkZWZpbmUgeGFfZm9yX2VhY2hfbWFya2VkX3N0YXJ0KHhhLCBpbmRleCwgZW50cnksIGZpbHRlciwgc3RhcnQpIFxcXFxcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MjE6XFx0Zm9yIChpbmRleCA9IHN0YXJ0LCBlbnRyeSA9IHhhX2ZpbmQoeGEsIFxcdTAwMjZpbmRleCwgVUxPTkdfTUFYLCBmaWx0ZXIpOyBcXFxcXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTIyLVxcdCAgICAgZW50cnk7IGVudHJ5ID0geGFfZmluZF9hZnRlcih4YSwgXFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIGZpbHRlcikpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTI0MD1kcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTI1My1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTI1NDpcXHRyZWZfc3luY19waW4gPSB4YV9maW5kKFxcdTAwMjZwaW4tXFx1MDAzZXJlZl9zeW5jX3BpbnMsIFxcdTAwMjZyZWZfc3luY19waW5faWR4LFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMjU1LVxcdFxcdFxcdCAgICAgICBVTE9OR19NQVgsIFhBX1BSRVNFTlQpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3VzZXJxLmM9MTIyNz12b2lkIGFtZGdwdV91c2VycV9tZ3JfZmluaShzdHJ1Y3QgYW1kZ3B1X3VzZXJxX21nciAqdXNlcnFfbWdyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3VzZXJxLmMtMTIzMy1cXHRcXHR4YV9sb2NrKFxcdTAwMjZ1c2VycV9tZ3ItXFx1MDAzZXVzZXJxX3hhKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdXNlcnEuYzoxMjM0OlxcdFxcdHF1ZXVlID0geGFfZmluZChcXHUwMDI2dXNlcnFfbWdyLVxcdTAwM2V1c2VycV94YSwgXFx1MDAyNnF1ZXVlX2lkLCBVTE9OR19NQVgsXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3VzZXJxLmMtMTIzNS1cXHRcXHRcXHRcXHRYQV9QUkVTRU5UKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYz0zODI0PXN0YXRpYyBzdHJ1Y3QgcGFudGhvcl9ncm91cCAqZ3JvdXBfZnJvbV9oYW5kbGUoc3RydWN0IHBhbnRob3JfZ3JvdXBfcG9vbCAqcG9vbCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYy0zODI5LVxcdHhhX2xvY2soXFx1MDAyNnBvb2wtXFx1MDAzZXhhKTtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX3NjaGVkLmM6MzgzMDpcXHRncm91cCA9IGdyb3VwX2dldCh4YV9maW5kKFxcdTAwMjZwb29sLVxcdTAwM2V4YSwgXFx1MDAyNmdyb3VwX2hhbmRsZSwgZ3JvdXBfaGFuZGxlLCBHUk9VUF9SRUdJU1RFUkVEKSk7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9zY2hlZC5jLTM4MzEtXFx0eGFfdW5sb2NrKFxcdTAwMjZwb29sLVxcdTAwM2V4YSk7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9uZXRkZXZfcnguYz00Nzc9dm9pZCAqaGZpMV9uZXRkZXZfZ2V0X2ZpcnN0X2RhdGEoc3RydWN0IGhmaTFfZGV2ZGF0YSAqZGQsIGludCAqc3RhcnRfaWQpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9uZXRkZXZfcnguYy00ODItXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvbmV0ZGV2X3J4LmM6NDgzOlxcdHJldCA9IHhhX2ZpbmQoXFx1MDAyNnJ4LVxcdTAwM2VkZXZfdGJsLCBcXHUwMDI2aW5kZXgsIFVJTlRfTUFYLCBYQV9QUkVTRU5UKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9uZXRkZXZfcnguYy00ODQtXFx0KnN0YXJ0X2lkID0gKGludClpbmRleDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lc3dpdGNoLmg9NzUwPXZvaWQgbWx4NWVfdGNfY2xlYW5fZmRiX3BlZXJfZmxvd3Moc3RydWN0IG1seDVfZXN3aXRjaCAqZXN3KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lc3dpdGNoLmgtNzY5LSNkZWZpbmUgbWx4NV9lc3dfZm9yX2VhY2hfZW50cnlfbWFya2VkKHhhLCBpbmRleCwgZW50cnksIGxhc3QsIGZpbHRlcilcXHRcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guaDo3NzA6XFx0Zm9yIChpbmRleCA9IDAsIGVudHJ5ID0geGFfZmluZCh4YSwgXFx1MDAyNmluZGV4LCBsYXN0LCBmaWx0ZXIpOyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Vzd2l0Y2guaC03NzEtXFx0ICAgICBlbnRyeTsgZW50cnkgPSB4YV9maW5kX2FmdGVyKHhhLCBcXHUwMDI2aW5kZXgsIGxhc3QsIGZpbHRlcikpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5jPTM4MD1zdGF0aWMgaW50IG1seDVfbGFnX2dldF9tYXN0ZXJfaWR4KHN0cnVjdCBtbHg1X2xhZyAqbGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmMtMzg3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmM6Mzg4OlxcdGVudHJ5ID0geGFfZmluZChcXHUwMDI2bGRldi1cXHUwMDNlcGZzLCBcXHUwMDI2aWR4LCBVOF9NQVgsIE1MWDVfTEFHX1hBX01BUktfTUFTVEVSKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5jLTM4OS1cXHRpZiAoIWVudHJ5KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9sYWcuYz01NjI9c3RhdGljIHZvaWQgbWx4NV9sYWdfY2xlYXJfbWFzdGVyKHN0cnVjdCBtbHg1X2xhZyAqbGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmMtNTY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmM6NTY3OlxcdGVudHJ5ID0geGFfZmluZChcXHUwMDI2bGRldi1cXHUwMDNlcGZzLCBcXHUwMDI2aWR4LCBVOF9NQVgsIE1MWDVfTEFHX1hBX01BUktfTUFTVEVSKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5jLTU2OC1cXHRpZiAoIWVudHJ5KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9sYWcuaC0yMi0jZGVmaW5lIHhhX2Zvcl9lYWNoX21hcmtlZF9zdGFydCh4YSwgaW5kZXgsIGVudHJ5LCBmaWx0ZXIsIHN0YXJ0KVxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL2xhZy5oOjIzOlxcdGZvciAoaW5kZXggPSBzdGFydCwgZW50cnkgPSB4YV9maW5kKHhhLCBcXHUwMDI2aW5kZXgsIFVMT05HX01BWCwgZmlsdGVyKTsgXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbGFnLmgtMjQtXFx0ICAgICBlbnRyeTsgZW50cnkgPSB4YV9maW5kX2FmdGVyKHhhLCBcXHUwMDI2aW5kZXgsIFVMT05HX01BWCwgZmlsdGVyKSlcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsL3BtdC90ZWxlbWV0cnkuYz0xNzI9c3RydWN0IHRlbGVtX2VuZHBvaW50ICpwbXRfdGVsZW1fcmVnaXN0ZXJfZW5kcG9pbnQoaW50IGRldmlkKVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWwvcG10L3RlbGVtZXRyeS5jLTE3Ny1cXHRtdXRleF9sb2NrKFxcdTAwMjZlcF9sb2NrKTtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbC9wbXQvdGVsZW1ldHJ5LmM6MTc4OlxcdGVudHJ5ID0geGFfZmluZChcXHUwMDI2dGVsZW1fYXJyYXksIFxcdTAwMjZpbmRleCwgaW5kZXgsIFhBX1BSRVNFTlQpO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsL3BtdC90ZWxlbWV0cnkuYy0xNzktXFx0aWYgKCFlbnRyeSkge1xcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWwvcG10L3RlbGVtZXRyeS5jPTE5Nz1pbnQgcG10X3RlbGVtX2dldF9lbmRwb2ludF9pbmZvKGludCBkZXZpZCwgc3RydWN0IHRlbGVtX2VuZHBvaW50X2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbC9wbXQvdGVsZW1ldHJ5LmMtMjA2LVxcdG11dGV4X2xvY2soXFx1MDAyNmVwX2xvY2spO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsL3BtdC90ZWxlbWV0cnkuYzoyMDc6XFx0ZW50cnkgPSB4YV9maW5kKFxcdTAwMjZ0ZWxlbV9hcnJheSwgXFx1MDAyNmluZGV4LCBpbmRleCwgWEFfUFJFU0VOVCk7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWwvcG10L3RlbGVtZXRyeS5jLTIwOC1cXHRpZiAoIWVudHJ5KSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9OTI3PXN0YXRpYyBpbnQgdmhvc3RfdnFfYXR0YWNoX3dvcmtlcihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy05MzYtXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjkzNzpcXHR3b3JrZXIgPSB4YV9maW5kKFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtlcl94YSwgXFx1MDAyNmluZGV4LCBVSU5UX01BWCwgWEFfUFJFU0VOVCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTkzOC1cXHRpZiAoIXdvcmtlciB8fCB3b3JrZXItXFx1MDAzZWlkICE9IGluZm8tXFx1MDAzZXdvcmtlcl9pZClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz05NjA9c3RhdGljIGludCB2aG9zdF9mcmVlX3dvcmtlcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtOTY1LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzo5NjY6XFx0d29ya2VyID0geGFfZmluZChcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrZXJfeGEsIFxcdTAwMjZpbmRleCwgVUlOVF9NQVgsIFhBX1BSRVNFTlQpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy05NjctXFx0aWYgKCF3b3JrZXIgfHwgd29ya2VyLVxcdTAwM2VpZCAhPSBpbmZvLVxcdTAwM2V3b3JrZXJfaWQpXFxuLS1cXG5mcy9idHJmcy9kZWxheWVkLXJlZi5jPTM2Nz1zdGF0aWMgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX2hlYWQgKmZpbmRfZmlyc3RfcmVmX2hlYWQoXFxuLS1cXG5mcy9idHJmcy9kZWxheWVkLXJlZi5jLTM3My1cXG5mcy9idHJmcy9kZWxheWVkLXJlZi5jOjM3NDpcXHRyZXR1cm4geGFfZmluZChcXHUwMDI2ZHItXFx1MDAzZWhlYWRfcmVmcywgXFx1MDAyNmZyb20sIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XFxuZnMvYnRyZnMvZGVsYXllZC1yZWYuYy0zNzUtfVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X21hcC5jPTEyMDY9c3RhdGljIHN0cnVjdCBidHJmc19pbm9kZSAqZmluZF9maXJzdF9pbm9kZV90b19zaHJpbmsoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsXFxuLS1cXG5mcy9idHJmcy9leHRlbnRfbWFwLmMtMTIxNS1cXG5mcy9idHJmcy9leHRlbnRfbWFwLmM6MTIxNjpcXHRcXHRpbm9kZSA9IHhhX2ZpbmQoXFx1MDAyNnJvb3QtXFx1MDAzZWlub2RlcywgXFx1MDAyNmZyb20sIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XFxuZnMvYnRyZnMvZXh0ZW50X21hcC5jLTEyMTctXFx0XFx0aWYgKCFpbm9kZSlcXG4tLVxcbmZzL2J0cmZzL2lub2RlLmM9MTA2NzQ9c3RydWN0IGJ0cmZzX2lub2RlICpidHJmc19maW5kX2ZpcnN0X2lub2RlKHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgbWluX2lubylcXG4tLVxcbmZzL2J0cmZzL2lub2RlLmMtMTA2ODAtXFx0d2hpbGUgKHRydWUpIHtcXG5mcy9idHJmcy9pbm9kZS5jOjEwNjgxOlxcdFxcdGlub2RlID0geGFfZmluZChcXHUwMDI2cm9vdC1cXHUwMDNlaW5vZGVzLCBcXHUwMDI2ZnJvbSwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKTtcXG5mcy9idHJmcy9pbm9kZS5jLTEwNjgyLVxcdFxcdGlmICghaW5vZGUpXFxuLS1cXG5mcy94ZnMvbGlieGZzL3hmc19ncm91cC5jPTEyMT14ZnNfZ3JvdXBfZ3JhYl9uZXh0X21hcmsoXFxuLS1cXG5mcy94ZnMvbGlieGZzL3hmc19ncm91cC5jLTEzNC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZnMveGZzL2xpYnhmcy94ZnNfZ3JvdXAuYzoxMzU6XFx0eGcgPSB4YV9maW5kKFxcdTAwMjZtcC1cXHUwMDNlbV9ncm91cHNbdHlwZV0ueGEsIFxcdTAwMjZpbmRleCwgVUxPTkdfTUFYLCBtYXJrKTtcXG5mcy94ZnMvbGlieGZzL3hmc19ncm91cC5jLTEzNi1cXHRpZiAoeGcpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MzM1OT1pbnQgY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzX2luZm8odW5zaWduZWQgbG9uZyB2YWwsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMzODItI2RlZmluZSBmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGQsIGlmaW5kZXgpXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzM4MzpcXHRmb3IgKDsgKGQgPSB4YV9maW5kKFxcdTAwMjYobmV0KS1cXHUwMDNlZGV2X2J5X2luZGV4LCBcXHUwMDI2aWZpbmRleCxcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMzg0LVxcdFxcdFxcdCAgICBVTE9OR19NQVgsIFhBX1BSRVNFTlQpKTsgaWZpbmRleCsrKVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0zNjI9dm9pZCB4YV9jbGVhcl9tYXJrKHN0cnVjdCB4YXJyYXkgKiwgdW5zaWduZWQgbG9uZyBpbmRleCwgeGFfbWFya190KTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjM2Mzp2b2lkICp4YV9maW5kKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleCxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTM2NC1cXHRcXHR1bnNpZ25lZCBsb25nIG1heCwgeGFfbWFya190KSBfX2F0dHJpYnV0ZV9fKChub25udWxsKDIpKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTQyMj1zdGF0aWMgaW5saW5lIGJvb2wgeGFfbWFya2VkKGNvbnN0IHN0cnVjdCB4YXJyYXkgKnhhLCB4YV9tYXJrX3QgbWFyaylcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNDUyLVxcdGZvciAoaW5kZXggPSBzdGFydCxcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo0NTM6XFx0ICAgICBlbnRyeSA9IHhhX2ZpbmQoeGEsIFxcdTAwMjZpbmRleCwgbGFzdCwgWEFfUFJFU0VOVCk7XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtNDU0LVxcdCAgICAgZW50cnk7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC01MzEtI2RlZmluZSB4YV9mb3JfZWFjaF9tYXJrZWQoeGEsIGluZGV4LCBlbnRyeSwgZmlsdGVyKSBcXFxcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDo1MzI6XFx0Zm9yIChpbmRleCA9IDAsIGVudHJ5ID0geGFfZmluZCh4YSwgXFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIGZpbHRlcik7IFxcXFxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTUzMy1cXHQgICAgIGVudHJ5OyBlbnRyeSA9IHhhX2ZpbmRfYWZ0ZXIoeGEsIFxcdTAwMjZpbmRleCwgVUxPTkdfTUFYLCBmaWx0ZXIpKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jPTQ2OD12b2lkIGlvX2Rlc3Ryb3lfYnVmZmVycyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy00NzUtXFx0XFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2Y3R4LVxcdTAwM2VtbWFwX2xvY2spIHtcXG5pb191cmluZy9rYnVmLmM6NDc2OlxcdFxcdFxcdGJsID0geGFfZmluZChcXHUwMDI2Y3R4LVxcdTAwM2Vpb19ibF94YSwgXFx1MDAyNmluZGV4LCBVTE9OR19NQVgsIFhBX1BSRVNFTlQpO1xcbmlvX3VyaW5nL2tidWYuYy00NzctXFx0XFx0XFx0aWYgKGJsKVxcbi0tXFxuaW9fdXJpbmcvemNyeC5jPTEwMzE9dm9pZCBpb190ZXJtaW5hdGVfemNyeChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0xMDM5LVxcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNmN0eC1cXHUwMDNlbW1hcF9sb2NrKVxcbmlvX3VyaW5nL3pjcnguYzoxMDQwOlxcdFxcdFxcdGlmcSA9IHhhX2ZpbmQoXFx1MDAyNmN0eC1cXHUwMDNlemNyeF9jdHhzLCBcXHUwMDI2aWQsIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XFxuaW9fdXJpbmcvemNyeC5jLTEwNDEtXFx0XFx0aWYgKCFpZnEpXFxuLS1cXG5pb191cmluZy96Y3J4LmM9MTA1MT12b2lkIGlvX3VucmVnaXN0ZXJfemNyeChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0xMDYwLVxcbmlvX3VyaW5nL3pjcnguYzoxMDYxOlxcdFxcdFxcdGlmcSA9IHhhX2ZpbmQoXFx1MDAyNmN0eC1cXHUwMDNlemNyeF9jdHhzLCBcXHUwMDI2aWQsIFVMT05HX01BWCwgWEFfUFJFU0VOVCk7XFxuaW9fdXJpbmcvemNyeC5jLTEwNjItXFx0XFx0XFx0aWYgKGlmcSkge1xcbi0tXFxubGliL2lkci5jPTQ5Mz1pbnQgaWRhX2ZpbmRfZmlyc3RfcmFuZ2Uoc3RydWN0IGlkYSAqaWRhLCB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4KVxcbi0tXFxubGliL2lkci5jLTUwOS1cXG5saWIvaWRyLmM6NTEwOlxcdGVudHJ5ID0geGFfZmluZChcXHUwMDI2aWRhLVxcdTAwM2V4YSwgXFx1MDAyNmluZGV4LCBtYXggLyBJREFfQklUTUFQX0JJVFMsIFhBX1BSRVNFTlQpO1xcbmxpYi9pZHIuYy01MTEtXFx0aWYgKCFlbnRyeSkge1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTE4MD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzEoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIG9yZGVyKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTE5MS1cXHRpbmRleCA9IDA7XFxubGliL3Rlc3RfeGFycmF5LmM6MTE5MjpcXHRYQV9CVUdfT04oeGEsIHhhX2ZpbmQoeGEsIFxcdTAwMjZpbmRleCwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKSAhPVxcbmxpYi90ZXN0X3hhcnJheS5jLTExOTMtXFx0XFx0XFx0eGFfbWtfdmFsdWUobXVsdGkpKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTExOTUtXFx0aW5kZXggPSBtdWx0aSArIDE7XFxubGliL3Rlc3RfeGFycmF5LmM6MTE5NjpcXHRYQV9CVUdfT04oeGEsIHhhX2ZpbmQoeGEsIFxcdTAwMjZpbmRleCwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKSAhPVxcbmxpYi90ZXN0X3hhcnJheS5jLTExOTctXFx0XFx0XFx0eGFfbWtfdmFsdWUobXVsdGkpKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jPTEzMTE9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZF8xKHN0cnVjdCB4YXJyYXkgKnhhKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTMyOS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gaztcXG5saWIvdGVzdF94YXJyYXkuYzoxMzMwOlxcdFxcdFxcdFxcdHZvaWQgKmVudHJ5ID0geGFfZmluZCh4YSwgXFx1MDAyNmluZGV4LCBVTE9OR19NQVgsXFxubGliL3Rlc3RfeGFycmF5LmMtMTMzMS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRYQV9QUkVTRU5UKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTEzMzktXFx0XFx0XFx0XFx0aW5kZXggPSBrO1xcbmxpYi90ZXN0X3hhcnJheS5jOjEzNDA6XFx0XFx0XFx0XFx0ZW50cnkgPSB4YV9maW5kKHhhLCBcXHUwMDI2aW5kZXgsIFVMT05HX01BWCxcXG5saWIvdGVzdF94YXJyYXkuYy0xMzQxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFhBX01BUktfMCk7XFxuLS1cXG5saWIveGFycmF5LmM9MjE3Mj1FWFBPUlRfU1lNQk9MKHhhX2NsZWFyX21hcmspO1xcbi0tXFxubGliL3hhcnJheS5jLTIxNzQtLyoqXFxubGliL3hhcnJheS5jOjIxNzU6ICogeGFfZmluZCgpIC0gU2VhcmNoIHRoZSBYQXJyYXkgZm9yIGFuIGVudHJ5LlxcbmxpYi94YXJyYXkuYy0yMTc2LSAqIEB4YTogWEFycmF5Llxcbi0tXFxubGliL3hhcnJheS5jLTIxOTAtICovXFxubGliL3hhcnJheS5jOjIxOTE6dm9pZCAqeGFfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyAqaW5kZXhwLFxcbmxpYi94YXJyYXkuYy0yMTkyLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4LCB4YV9tYXJrX3QgZmlsdGVyKVxcbi0tXFxubW0vc2htZW0uYz0xODY0PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL3NobWVtLmMtMTg5MS1cXHRcXHQgKi9cXG5tbS9zaG1lbS5jOjE4OTI6XFx0XFx0aWYgKCF4YV9maW5kKFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzLCBcXHUwMDI2YWxpZ25lZF9pbmRleCxcXG5tbS9zaG1lbS5jLTE4OTMtXFx0XFx0XFx0ICAgICBhbGlnbmVkX2luZGV4ICsgcGFnZXMgLSAxLCBYQV9QUkVTRU5UKSlcXG4tLVxcbm1tL3NobWVtLmM9MTkyMz1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9hbGxvY19hbmRfYWRkX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc2htZW0uYy0xOTcwLVxcdGlmIChlcnJvcikge1xcbm1tL3NobWVtLmM6MTk3MTpcXHRcXHRpZiAoeGFfZmluZChcXHUwMDI2bWFwcGluZy1cXHUwMDNlaV9wYWdlcywgXFx1MDAyNmluZGV4LFxcbm1tL3NobWVtLmMtMTk3Mi1cXHRcXHRcXHRcXHRpbmRleCArIHBhZ2VzIC0gMSwgWEFfUFJFU0VOVCkpIHtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExMjc9bmV0ZGV2X3hhX2ZpbmRfbG9jayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMTM0LVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9kZXYuYzoxMTM1OlxcdFxcdGRldiA9IHhhX2ZpbmQoXFx1MDAyNm5ldC1cXHUwMDNlZGV2X2J5X2luZGV4LCBpbmRleCwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKTtcXG5uZXQvY29yZS9kZXYuYy0xMTM2LVxcdFxcdGlmICghZGV2KSB7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMTUyPW5ldGRldl94YV9maW5kX2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMTU5LVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9kZXYuYzoxMTYwOlxcdFxcdGRldiA9IHhhX2ZpbmQoXFx1MDAyNm5ldC1cXHUwMDNlZGV2X2J5X2luZGV4LCBpbmRleCwgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKTtcXG5uZXQvY29yZS9kZXYuYy0xMTYxLVxcdFxcdGlmICghZGV2KSB7XFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmM9MTk9c3RhdGljIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rc194YV9nZXQodW5zaWduZWQgbG9uZyBpbmRleClcXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMy1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2RldmxpbmsvY29yZS5jOjI0OlxcdGRldmxpbmsgPSB4YV9maW5kKFxcdTAwMjZkZXZsaW5rcywgXFx1MDAyNmluZGV4LCBpbmRleCwgREVWTElOS19SRUdJU1RFUkVEKTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMjUtXFx0aWYgKCFkZXZsaW5rIHx8ICFkZXZsaW5rX3RyeV9nZXQoZGV2bGluaykpXFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmM9MTkyPXN0YXRpYyBzdHJ1Y3QgZGV2bGlua19yZWwgKmRldmxpbmtfcmVsX2ZpbmQodW5zaWduZWQgbG9uZyByZWxfaW5kZXgpXFxubmV0L2RldmxpbmsvY29yZS5jLTE5My17XFxubmV0L2RldmxpbmsvY29yZS5jOjE5NDpcXHRyZXR1cm4geGFfZmluZChcXHUwMDI2ZGV2bGlua19yZWxzLCBcXHUwMDI2cmVsX2luZGV4LCByZWxfaW5kZXgsXFxubmV0L2RldmxpbmsvY29yZS5jLTE5NS1cXHRcXHQgICAgICAgREVWTElOS19SRUxfSU5fVVNFKTtcXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYz0zNDU9c3RhdGljIHN0cnVjdCBkZXZsaW5rICpfX2RldmxpbmtzX3hhX2ZpbmRfZ2V0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0zNTItcmV0cnk6XFxubmV0L2RldmxpbmsvY29yZS5jOjM1MzpcXHRkZXZsaW5rID0geGFfZmluZChcXHUwMDI2ZGV2bGlua3MsIGluZGV4cCwgZW5kLCBERVZMSU5LX1JFR0lTVEVSRUQpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0zNTQtXFx0aWYgKCFkZXZsaW5rKVxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmM9NDQxPXJzc19kdW1wX29uZV9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmMtNDU2LVxcbm5ldC9ldGh0b29sL3Jzcy5jOjQ1NzpcXHRmb3IgKDsgeGFfZmluZChcXHUwMDI2ZGV2LVxcdTAwM2VldGh0b29sLVxcdTAwM2Vyc3NfY3R4LCBcXHUwMDI2Y3R4LVxcdTAwM2VjdHhfaWR4LFxcbm5ldC9ldGh0b29sL3Jzcy5jLTQ1OC1cXHRcXHQgICAgICAgVUxPTkdfTUFYLCBYQV9QUkVTRU5UKTsgY3R4LVxcdTAwM2VjdHhfaWR4KyspIHtcXG4tLVxcbm5ldC9zaGFwZXIvc2hhcGVyLmM9ODUzPWludCBuZXRfc2hhcGVyX25sX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zaGFwZXIvc2hhcGVyLmMtODcwLVxcbm5ldC9zaGFwZXIvc2hhcGVyLmM6ODcxOlxcdGZvciAoOyAoc2hhcGVyID0geGFfZmluZChcXHUwMDI2aGllcmFyY2h5LVxcdTAwM2VzaGFwZXJzLCBcXHUwMDI2Y3R4LVxcdTAwM2VzdGFydF9pbmRleCxcXG5uZXQvc2hhcGVyL3NoYXBlci5jLTg3Mi1cXHRcXHRcXHRcXHQgVTMyX01BWCwgWEFfUFJFU0VOVCkpO1xcbi0tXFxucnVzdC9rZXJuZWwveGFycmF5LnJzPTExMT0gICAgZm4gaXRlcihcXHUwMDI2c2VsZikgLVxcdTAwM2UgaW1wbCBJdGVyYXRvclxcdTAwM2NJdGVtID0gTm9uTnVsbFxcdTAwM2NjX3ZvaWRcXHUwMDNlXFx1MDAzZSArICdfIHtcXG4tLVxcbnJ1c3Qva2VybmVsL3hhcnJheS5ycy0xMTUtICAgICAgICBpdGVyOjpvbmNlKHVuc2FmZSB7XFxucnVzdC9rZXJuZWwveGFycmF5LnJzOjExNjogICAgICAgICAgICBiaW5kaW5nczo6eGFfZmluZChzZWxmLnhhLmdldCgpLCBcXHUwMDI2bXV0IGluZGV4LCB1c2l6ZTo6TUFYLCBiaW5kaW5nczo6WEFfUFJFU0VOVClcXG5ydXN0L2tlcm5lbC94YXJyYXkucnMtMTE3LSAgICAgICAgfSlcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tdWx0aW9yZGVyLmM9MjQwPXN0YXRpYyB2b2lkICpsb2FkX3dvcmtlcih2b2lkICpwdHIpXFxuLS1cXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbXVsdGlvcmRlci5jLTI0OC1cXHRcXHRhc3NlcnQoIXhhX2lzX2ludGVybmFsKGl0ZW0pKTtcXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbXVsdGlvcmRlci5jOjI0OTpcXHRcXHRpdGVtID0geGFfZmluZChwdHIsIFxcdTAwMjZmaW5kX2luZGV4LCBpbmRleCwgWEFfTUFSS18xKTtcXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbXVsdGlvcmRlci5jLTI1MC1cXHRcXHRhc3NlcnQoIXhhX2lzX2ludGVybmFsKGl0ZW0pKTtcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9MjA5PXN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCxcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMjEzLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6MjE0OlxcdGlmICh4YV9maW5kKFxcdTAwMjZmLVxcdTAwM2ViaW5kaW5ncywgXFx1MDAyNnN0YXJ0LCBlbmQgLSAxLCBYQV9QUkVTRU5UKSkge1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMjE1LVxcdFxcdEtWTV9NTVVfTE9DSyhrdm0pO1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz02NDM9aW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02NzctXFx0aWYgKCF4YV9lbXB0eShcXHUwMDI2Zi1cXHUwMDNlYmluZGluZ3MpIFxcdTAwMjZcXHUwMDI2XFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo2Nzg6XFx0ICAgIHhhX2ZpbmQoXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBcXHUwMDI2c3RhcnQsIGVuZCAtIDEsIFhBX1BSRVNFTlQpKSB7XFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02NzktXFx0XFx0ciA9IC1FRVhJU1Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIzOjA3LjkwMTQyMTg2NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3OTI5NzQyOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgeGFzX2ZpbmRgIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUga2V5IHN5bWJvbHMgaGVyZSBhcmUgY2xlYXJseSBgeGFzX2ZpbmRgLCBgeGFfZmluZGAsIGFuZCBgeGFfZmluZF9hZnRlcmAuIExldCdzIHplcm8gaW4gb24gdGhvc2UuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgaGFuZGxpbmcgbXVsdGktb3JkZXIgWEFycmF5cywgYW5kIHNwZWNpZmljYWxseSBob3cgYHhhc19maW5kYCBkZWFscyB3aXRoIHRoZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBFbmFibGVDb25maWdzIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLlxuXG5JIHNlZSBgWEFSUkFZX01VTFRJYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnIGFzIGl0J3Mgc2VsZWN0ZWQgYnkgc2V2ZXJhbCwgbGlrZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYEhVR0VUTEJfUEFHRWAuIEJ1dCwgaW1wb3J0YW50bHksIGB4YXNfZmluZGAgaXMgY29tcGlsZWQgaW50byBgeGFycmF5Lm9gLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29yZS4gVGhhdCBtYWtlcyB0aGlzIHBvdGVudGlhbGx5IHZlcnkgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBsb2dpYyB0aGF0IGhhbmRsZXMgdGhlc2UgbXVsdGktb3JkZXIgY2FzZXMgYXBwZWFycyB0byBiZSBpbiB0aGUgY2hlY2s6IGBpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0KWAgdnMgYHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCguLi4pYC4gU2VlbXMgbGlrZSB0aGUgY29kZSBpcyB0cnlpbmcgdG8gaGFuZGxlIHRoZSBgc2hpZnQgXHUwMDNlIDBgIHBhdGhzIGFuZCBtdWx0aS1pbmRleCBYQXJyYXlzIGNvcnJlY3RseS5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBgWEFSUkFZX01VTFRJYCByZWxhdGlvbnNoaXAuIEl0J3MgdmlzaWJsZSBpbiBgbGliL0tjb25maWdgLCBidXQgbm90IGRpcmVjdGx5IHVzZXItc2VsZWN0YWJsZSB2aWEgYG1lbnVjb25maWdgLCB1bmxlc3MgaXQncyBzZWxlY3RlZCBieSBvdGhlciBzeW1ib2xzLCBidXQgaXQgY2FuIGJlIHNldCBieSBjb25maWdzIHN1Y2ggYXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgb3IgYEhVR0VUTEJGU2AgLiBTbywgc3BlY2lmeWluZyB0aG9zZSBtaWdodCBiZSB0aGUgcmlnaHQgYXBwcm9hY2guIEl0IHNlZW1zIHRvIGVuYWJsZSB0aG9zZSBtdWx0aS1vcmRlciB4YXJyYXkgcGF0aHMgd2hlcmUgYHNoaWZ0IFx1MDAzZSAwYC5cblxuT2theSwgSSdtIHByZXR0eSBjb25maWRlbnQgaW4gdGhvc2UgY29uZmlndXJhdGlvbnMuIExldCdzIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBzZXQtcmVzdWx0cyBwYXJhbWV0ZXJzIGNvcnJlY3QuIFRoZSBmdXp6aW5nIHZlcmRpY3QgaXMsIG9mIGNvdXJzZSwgXCJXb3J0aEZ1enppbmdcIiBiZWNhdXNlIHRoZSBwYXRjaCBjaGFuZ2VzIGB4YXNfZmluZGAgaW4gYGxpYi94YXJyYXkuY2AgdG8gaGFuZGxlIHRoZSBgeGFzLVx1MDAzZXhhX29mZnNldGAgcHJvcGVybHkgd2hlbiB0cmF2ZXJzaW5nIG11bHRpLW9yZGVyIFhBcnJheSBlbnRyaWVzIHdoZXJlIGB4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdGAgaXMgbm9uLXplcm8uIEFuZCB0aGlzIGlzIGluIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgbG9naWMgdGhhdCdzIGhpdCBkdXJpbmcgcGFnZSBjYWNoZSBvcGVyYXRpb25zLCBzaG1lbSBsb29rdXBzLCBldGMuIFNvdW5kcyBsaWtlIGEgZ29vZCB0YXJnZXQuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY29ycmVjdDogYHhhc19maW5kYCwgYHhhX2ZpbmRgLCBgeGFfZmluZF9hZnRlcmAuIEFuZCBiYXNlZCBvbiBldmVyeXRoaW5nIGFib3ZlLCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGBYQVJSQVlfTVVMVElgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIHRoaW5rIEkndmUgZ290IHRoaXMuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGFnYWluc3QgdGhlIGluc3RydWN0aW9ucyBhbmQgdGhlbiBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDU3LCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMzoxNS44MzExNzA5OTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc0MDkzMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhBUlJBWV9NVUxUSVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4YXNfZmluZFwiLFxuICAgIFwieGFfZmluZFwiLFxuICAgIFwieGFfZmluZF9hZnRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpdGVyYXRpb24gb2Zmc2V0IGNhbGN1bGF0aW9uIGluIHhhc19maW5kKCkgd2l0aGluIGxpYi94YXJyYXkuYyBmb3IgbXVsdGktb3JkZXIgbm9kZXMgKHdoZXJlIHNoaWZ0IFxcdTAwM2UgMCkuIFRoaXMgaXMgY29yZSBkYXRhIHN0cnVjdHVyZSBsb2dpYyBleGVyY2lzZWQgYWNyb3NzIG1lbW9yeSBtYW5hZ2VtZW50IChwYWdlIGNhY2hlLCBzaG1lbSwgZm9saW8gbG9va3VwcykgYW5kIHN1YnN5c3RlbSBpdGVyYXRvcnMsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEFSUkFZX01VTFRJXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhhc19maW5kXCIsXG4gICAgXCJ4YV9maW5kXCIsXG4gICAgXCJ4YV9maW5kX2FmdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl0ZXJhdGlvbiBvZmZzZXQgY2FsY3VsYXRpb24gaW4geGFzX2ZpbmQoKSB3aXRoaW4gbGliL3hhcnJheS5jIGZvciBtdWx0aS1vcmRlciBub2RlcyAod2hlcmUgc2hpZnQgXFx1MDAzZSAwKS4gVGhpcyBpcyBjb3JlIGRhdGEgc3RydWN0dXJlIGxvZ2ljIGV4ZXJjaXNlZCBhY3Jvc3MgbWVtb3J5IG1hbmFnZW1lbnQgKHBhZ2UgY2FjaGUsIHNobWVtLCBmb2xpbyBsb29rdXBzKSBhbmQgc3Vic3lzdGVtIGl0ZXJhdG9ycywgbWFraW5nIGl0IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjM6MTUuOTU4NTg3NDRaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzEyODgyMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjM6MTUuOTU5MDM1NTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTMxMjQyNjkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG9mZnNldCBjYWxjdWxhdGlvbiBsb2dpYyBpbiB4YXNfZmluZCgpIHdpdGhpbiB0aGUgWEFycmF5IGRhdGEgc3RydWN0dXJlIGltcGxlbWVudGF0aW9uIChsaWIveGFycmF5LmMpIGFuZCBhZGRzIGEgdGVzdCBjYXNlIHRvIHRoZSBYQXJyYXkgc2VsZi10ZXN0IHN1aXRlIChsaWIvdGVzdF94YXJyYXkuYykuXFxuXFxuVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgdHJlZSB0cmF2ZXJzYWwgaW5kZXhpbmcvb2Zmc2V0IGFyaXRobWV0aWMgZm9yIG11bHRpLWluZGV4IGVudHJpZXMgKFhBX1NUQVRFIC8geGFfbm9kZSBvZmZzZXQgY2FsY3VsYXRpb25zKS4gTm8gbmV3IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gY29ycnVwdGVkIG9yIGluY29ycmVjdCB0cmF2ZXJzYWwgb2Zmc2V0cyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzRhNTMwYzQ2MDczMjFhZTUyYWVmNjQ1YWJmODE0N2VjZmVjMzUyNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTQ6MjI6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9saWIvdGVzdF94YXJyYXkuYyBiL2xpYi90ZXN0X3hhcnJheS5jXG5pbmRleCA1Y2EwYWVmZWU5YWE1Li5jZGE3MjQ1ZTQ3NzE2IDEwMDY0NFxuLS0tIGEvbGliL3Rlc3RfeGFycmF5LmNcbisrKyBiL2xpYi90ZXN0X3hhcnJheS5jXG5AQCAtMTI0Nyw2ICsxMjQ3LDY3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfMyhzdHJ1Y3QgeGFycmF5ICp4YSlcbiBcdH1cbiB9XG4gXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF80KHN0cnVjdCB4YXJyYXkgKnhhKVxuK3tcbisjaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxuK1x0WEFfU1RBVEUoeGFzLCB4YSwgMTAwKTtcbitcdFhBX1NUQVRFX09SREVSKHNwbGl0LCB4YSwgMCwgMCk7XG4rXHR2b2lkICplbnRyeTtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdC8qICgxKSBPcmRlci03IGVudHJ5ICgwLTEyNykgd2l0aCBhZGphY2VudCBlbnRyeSBhdCAxMjgsIHN0YXJ0aW5nIGF0IDEwMCAqL1xuK1x0eGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTtcbitcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcbitcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTtcbitcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7XG4rXG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHhhX2VyYXNlX2luZGV4KHhhLCAxMjgpO1xuK1x0eGFfZXJhc2VfaW5kZXgoeGEsIDApO1xuK1x0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcbitcbitcdC8qICgyKSBTcGxpdHRpbmcgYSBtdWx0aS1pbmRleCBlbnRyeSBhZnRlciBhIGxvb2t1cCBiZWdpbnMgaW5zaWRlIGl0ICovXG4rXHR4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpO1xuK1x0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcbitcbitcdHhhc19zZXQoXHUwMDI2eGFzLCAxMDApO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcbitcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHhhc19zcGxpdF9hbGxvYyhcdTAwMjZzcGxpdCwgeGFfbWtfaW5kZXgoMCksIDcsIEdGUF9LRVJORUwpO1xuK1x0eGFzX2xvY2soXHUwMDI2c3BsaXQpO1xuK1x0eGFzX3NwbGl0KFx1MDAyNnNwbGl0LCB4YV9ta19pbmRleCgwKSwgNyk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMjg7IGkrKylcbitcdFx0X194YV9zdG9yZSh4YSwgaSwgeGFfbWtfaW5kZXgoaSksIDApO1xuK1x0eGFzX3VubG9jayhcdTAwMjZzcGxpdCk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHR4YV9kZXN0cm95KHhhKTtcbitcdFhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGksIGosIGs7XG5AQCAtMTM3MCw2ICsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSlcbiBcdFx0Y2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTtcbiBcdGNoZWNrX211bHRpX2ZpbmRfMih4YSk7XG4gXHRjaGVja19tdWx0aV9maW5kXzMoeGEpO1xuK1x0Y2hlY2tfbXVsdGlfZmluZF80KHhhKTtcbiB9XG4gXG4gLyogU2VlIGZpbmRfc3dhcF9lbnRyeSgpIGluIG1tL3NobWVtLmMgKi9cbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcbmluZGV4IDlhOGI0OTE2NTQwY2YuLjk4MDMyNGQ2ODZiZDAgMTAwNjQ0XG4tLS0gYS9saWIveGFycmF5LmNcbisrKyBiL2xpYi94YXJyYXkuY1xuQEAgLTE0MDYsOSArMTQwNiwxMSBAQCB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXG4gXHRcdGVudHJ5ID0geGFzX2xvYWQoeGFzKTtcbiBcdFx0aWYgKGVudHJ5IHx8IHhhc19ub3Rfbm9kZSh4YXMtXHUwMDNleGFfbm9kZSkpXG4gXHRcdFx0cmV0dXJuIGVudHJ5O1xuLVx0fSBlbHNlIGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICB4YXMtXHUwMDNleGFfb2Zmc2V0ICE9ICh4YXMtXHUwMDNleGFfaW5kZXggXHUwMDI2IFhBX0NIVU5LX01BU0spKSB7XG4tXHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHR9IGVsc2UgaWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSkge1xuK1x0XHRpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0KVxuK1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHRcdGVsc2VcbitcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbiBcdH1cbiBcbiBcdHhhc19uZXh0X29mZnNldCh4YXMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MjM6MTUuOTU5MDM2NjRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg4NzMwNjM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYSBQYXRjaDogRm9jdXMgb24gWGFycmF5IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIFRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gaWRlbnRpZnkgdGhlIHNjb3BlLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIGltcGFjdGluZyBgbGliL3Rlc3RfeGFycmF5LmNgIGFuZCBgbGliL3hhcnJheS5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBjaGFuZ2VzIHRvIHRoZSB4YXJyYXkgaW1wbGVtZW50YXRpb24gaXRzZWxmLCBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgdGVzdHMuIEdpdmVuIHRoZSBmaWxlIG5hbWVzLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGUgY29yZSBvZiB0aGUgeGFycmF5IGRhdGEgc3RydWN0dXJlIGlzIGxpa2VseSB0aGUgdGFyZ2V0IG9mIHRoaXMgcGF0Y2gsIHdoaWNoIGlzIGNvbW1vbi5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIGBsaWIveGFycmF5LmNgLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgZGlmZiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE0MDYsIHNvIEnigJlsbCB1c2UgbXkgdHJ1c3R5IGByZWFkLWZpbGVgIHRvIGdldCBhIGRpcmVjdCB2aWV3IGludG8gdGhlIGNvZGUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBpbW1lZGlhdGVseSBleGFtaW5lIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIExpbmUgMTQwNiBpc24ndCBwYXJ0aWN1bGFybHkgaW5mb3JtYXRpdmUgd2l0aG91dCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgc28gSSdsbCBiZSBzdXJlIHRvIGV4YW1pbmUgdGhlIGxpbmVzIGltbWVkaWF0ZWx5IGFib3ZlIGFuZCBiZWxvdyB0byBmb3JtIGFuIGluaXRpYWwgaHlwb3RoZXNpcyByZWdhcmRpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGNoYW5nZS4gSXMgdGhpcyBhIGJ1ZyBmaXg/IEFuIG9wdGltaXphdGlvbj8gQSBmZWF0dXJlIGFkZGl0aW9uPyBUaGUgY29kZSB3aWxsIHJldmVhbCB0aGUgYW5zd2Vycy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgdGhpcyBpcyBhIHRlc3QgYW5kIGEgbWFpbiB4YXJyYXkgbGlicmFyeSBmaWxlIC0gdGhpcyBtYXkgYmUgYSBzaW1wbGUgdGVzdCBjaGFuZ2UsIG9yIGEgbW9yZSBpbnZhc2l2ZSB4YXJyYXkgY2hhbmdlLiBJJ2xsIG5lZWQgdG8gcmVhZCB0aGUgY29kZSB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMzoyMi44NDYzNDc3NDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi94YXJyYXkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzkwOlxcdCAqXFxuMTM5MTpcXHQgKiBSZXR1cm46IFRoZSBlbnRyeSwgaWYgZm91bmQsIG90aGVyd2lzZSAlTlVMTC5cXG4xMzkyOlxcdCAqL1xcbjEzOTM6XFx0dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxcbjEzOTQ6XFx0e1xcbjEzOTU6XFx0XFx0dm9pZCAqZW50cnk7XFxuMTM5NjpcXHRcXG4xMzk3OlxcdFxcdGlmICh4YXNfZXJyb3IoeGFzKSB8fCB4YXMtXFx1MDAzZXhhX25vZGUgPT0gWEFTX0JPVU5EUylcXG4xMzk4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjEzOTk6XFx0XFx0aWYgKHhhcy1cXHUwMDNleGFfaW5kZXggXFx1MDAzZSBtYXgpXFxuMTQwMDpcXHRcXHRcXHRyZXR1cm4gc2V0X2JvdW5kcyh4YXMpO1xcbjE0MDE6XFx0XFxuMTQwMjpcXHRcXHRpZiAoIXhhcy1cXHUwMDNleGFfbm9kZSkge1xcbjE0MDM6XFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9pbmRleCA9IDE7XFxuMTQwNDpcXHRcXHRcXHRyZXR1cm4gc2V0X2JvdW5kcyh4YXMpO1xcbjE0MDU6XFx0XFx0fSBlbHNlIGlmICh4YXMtXFx1MDAzZXhhX25vZGUgPT0gWEFTX1JFU1RBUlQpIHtcXG4xNDA2OlxcdFxcdFxcdGVudHJ5ID0geGFzX2xvYWQoeGFzKTtcXG4xNDA3OlxcdFxcdFxcdGlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLVxcdTAwM2V4YV9ub2RlKSlcXG4xNDA4OlxcdFxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG4xNDA5OlxcdFxcdH0gZWxzZSBpZiAoeGFzLVxcdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXFx1MDAzZXhhX2luZGV4LCB4YXMtXFx1MDAzZXhhX25vZGUpKSB7XFxuMTQxMDpcXHRcXHRcXHRpZiAoIXhhcy1cXHUwMDNleGFfbm9kZS1cXHUwMDNlc2hpZnQpXFxuMTQxMTpcXHRcXHRcXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVxcdTAwM2V4YV9pbmRleCAtIDEpIFxcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxO1xcbjE0MTI6XFx0XFx0XFx0ZWxzZVxcbjE0MTM6XFx0XFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cXHUwMDNleGFfaW5kZXgsIHhhcy1cXHUwMDNleGFfbm9kZSk7XFxuMTQxNDpcXHRcXHR9XFxuMTQxNTpcXHRcXG4xNDE2OlxcdFxcdHhhc19uZXh0X29mZnNldCh4YXMpO1xcbjE0MTc6XFx0XFxuMTQxODpcXHRcXHR3aGlsZSAoeGFzLVxcdTAwM2V4YV9ub2RlIFxcdTAwMjZcXHUwMDI2ICh4YXMtXFx1MDAzZXhhX2luZGV4IFxcdTAwM2M9IG1heCkpIHtcXG4xNDE5OlxcdFxcdFxcdGlmICh1bmxpa2VseSh4YXMtXFx1MDAzZXhhX29mZnNldCA9PSBYQV9DSFVOS19TSVpFKSkge1xcbjE0MjA6XFx0XFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQgPSB4YXMtXFx1MDAzZXhhX25vZGUtXFx1MDAzZW9mZnNldCArIDE7XFxuMTQyMTpcXHRcXHRcXHRcXHR4YXMtXFx1MDAzZXhhX25vZGUgPSB4YV9wYXJlbnQoeGFzLVxcdTAwM2V4YSwgeGFzLVxcdTAwM2V4YV9ub2RlKTtcXG4xNDIyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE0MjM6XFx0XFx0XFx0fVxcbjE0MjQ6XFx0XFxuMTQyNTpcXHRcXHRcXHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIHhhcy1cXHUwMDNleGFfbm9kZSwgeGFzLVxcdTAwM2V4YV9vZmZzZXQpO1xcbjE0MjY6XFx0XFx0XFx0aWYgKHhhX2lzX25vZGUoZW50cnkpKSB7XFxuMTQyNzpcXHRcXHRcXHRcXHR4YXMtXFx1MDAzZXhhX25vZGUgPSB4YV90b19ub2RlKGVudHJ5KTtcXG4xNDI4OlxcdFxcdFxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ID0gMDtcXG4xNDI5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE0MzA6XFx0XFx0XFx0fVxcbjE0MzE6XFx0XFx0XFx0aWYgKGVudHJ5IFxcdTAwMjZcXHUwMDI2ICF4YV9pc19zaWJsaW5nKGVudHJ5KSlcXG4xNDMyOlxcdFxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG4xNDMzOlxcdFxcbjE0MzQ6XFx0XFx0XFx0eGFzX25leHRfb2Zmc2V0KHhhcyk7XFxuMTQzNTpcXHRcXHR9XFxuMTQzNjpcXHRcXG4xNDM3OlxcdFxcdGlmICgheGFzLVxcdTAwM2V4YV9ub2RlKVxcbjE0Mzg6XFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9ub2RlID0gWEFTX0JPVU5EUztcXG4xNDM5OlxcdFxcdHJldHVybiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMzoyMi44NDY1MDQ0OTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYxOTI3NDM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGxpYi94YXJyYXkuYyBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBpbXBhY3Qgb2YgdGhlIG1vZGlmaWNhdGlvbiBpbiBgbGliL3hhcnJheS5jYC4gVGhlIGNvcmUgZGlmZmVyZW5jZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBob3cgYHhhcy1cdTAwM2V4YV9vZmZzZXRgIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB1bmRlciB0aGUgY29uZGl0aW9uIHdoZXJlIHRoZSBub2RlIGlzbid0IGEgc2hpZnQgbm9kZSAqYW5kKiB0aGUgb2Zmc2V0IGRvZXNuJ3QgbWF0Y2ggdGhlIGNodW5rIG1hc2suXG5cbkJlZm9yZSB0aGUgY2hhbmdlLCBpdCBhcHBlYXJzIHdlIHdlcmUgc2V0dGluZyBgeGFzLVx1MDAzZXhhX29mZnNldGAgdG8gYSBjYWxjdWxhdGVkIHZhbHVlOiBgKCh4YXMtXHUwMDNleGFfaW5kZXggLSAxKSBcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxYC4gTm93LCB0aGUgY29uZGl0aW9uIHNlZW1zIG1vcmUgaW52b2x2ZWQuIEl0IGNoZWNrcyBpZiBgeGFzLVx1MDAzZXhhX29mZnNldGAgaXMgKm5vdCBlcXVhbCB0byogdGhlIHJlc3VsdCBvZiBhIGNhbGwgdG8gYGdldF9vZmZzZXQoKWAgd2l0aCBgeGFzLVx1MDAzZXhhX2luZGV4YCBhbmQgYHhhcy1cdTAwM2V4YV9ub2RlYCBhcyBwYXJhbWV0ZXJzLiBJZiB0aGF0IGNvbmRpdGlvbiBob2xkcywgd2UgaGF2ZSBhIGNvbmRpdGlvbmFsIHdpdGhpbiB0aGF0IGNvbmRpdGlvbmFsOiBJZiBgIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0YCB0aGUgb2xkIGFwcHJvYWNoIGlzIHVzZWQgYnV0IGlmIHRoZSBub2RlICppcyogYSBzaGlmdCBub2RlLCBgeGFzLVx1MDAzZXhhX29mZnNldGAgaXMgbm93IGFzc2lnbmVkIHRoZSByZXN1bHQgb2YgYGdldF9vZmZzZXQoKWAuXG5cblRoaXMgc3VnZ2VzdHMgdGhhdCBgZ2V0X29mZnNldGAgaXMgYmVjb21pbmcgdGhlIHByaW1hcnkgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgb2Zmc2V0LiBJdCBhbHNvIHNlZW1zIHRoZXJlJ3MgYSBkaXN0aW5jdGlvbiBpbiBob3cgd2UgaGFuZGxlIG5vbi1zaGlmdCBhbmQgc2hpZnQgbm9kZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBnZXRfb2Zmc2V0YCB0byBmdWxseSBncmFzcCB0aGlzLiBJdCdzIGxpa2VseSB0aGUga2V5IHRvIHdoYXQncyBnb2luZyBvbiBoZXJlLiBJIG5lZWQgdG8gY2hlY2sgaXRzIGRlZmluaXRpb24gdG8gc2VlIGhvdyBpdCdzIGNhbGN1bGF0aW5nIHRoZSBvZmZzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyMzoyNi40NjU3ODM4MjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTcyMTAxNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X29mZnNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIveGFycmF5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIzOjI2Ljk0NzUxOTYyNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzM2MDIyNzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBqdXN0IGhhcHBlbmVkOlxuXG4qKkZpbmRpbmcgdGhlIGBnZXRfb2Zmc2V0YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoZSBgZ2V0X29mZnNldGAgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgdXNlZCwgbW9zdCBsaWtlbHkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgY29kZS4gR2l2ZW4gaXRzIGxpa2VseSByZWxhdGlvbiB0byBvZmZzZXRzLCBJJ20gYmV0dGluZyBpdCdzIGFzc29jaWF0ZWQgd2l0aCBgeGFycmF5YCwgc28gdGhhdCBkaXJlY3RzIG1lIHRvIHRoZSBgbGliL2AgZGlyZWN0b3J5LCB3aGljaCBob3VzZXMga2VybmVsIGxpYnJhcmllcywgb3IgcGVyaGFwcyB3aXRoaW4gdGhlIGBpbmNsdWRlL2xpbnV4L2AgZGlyZWN0b3J5LCB3aGVyZSB3ZSBjYW4gZmluZCBtYW55IGtleSBoZWFkZXJzLCBwb3RlbnRpYWxseSBpbiBgeGFycmF5LmhgLiBMZXQncyBzdGFydCB0aGUgaHVudCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEwNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIzOjI4LjY4MzU0NTU2M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIwNDUzNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X29mZnNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIveGFycmF5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3hhcnJheS5jPTEyNj1zdGF0aWMgdm9pZCB4YXNfc3F1YXNoX21hcmtzKGNvbnN0IHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubGliL3hhcnJheS5jLTE0NC0vKiBleHRyYWN0cyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGlzIG5vZGUgZnJvbSB0aGUgaW5kZXggKi9cXG5saWIveGFycmF5LmM6MTQ1OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X29mZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCBzdHJ1Y3QgeGFfbm9kZSAqbm9kZSlcXG5saWIveGFycmF5LmMtMTQ2LXtcXG4tLVxcbmxpYi94YXJyYXkuYz0xNTA9c3RhdGljIHZvaWQgeGFzX3NldF9vZmZzZXQoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxubGliL3hhcnJheS5jLTE1MS17XFxubGliL3hhcnJheS5jOjE1MjpcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgeGFzLVxcdTAwM2V4YV9ub2RlKTtcXG5saWIveGFycmF5LmMtMTUzLX1cXG4tLVxcbmxpYi94YXJyYXkuYz0yMDQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICp4YXNfZGVzY2VuZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4tLVxcbmxpYi94YXJyYXkuYy0yMDYte1xcbmxpYi94YXJyYXkuYzoyMDc6XFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgbm9kZSk7XFxubGliL3hhcnJheS5jLTIwOC1cXHR2b2lkICplbnRyeSA9IHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XFxuLS1cXG5saWIveGFycmF5LmM9MTMwNj12b2lkICpfX3hhc19wcmV2KHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubGliL3hhcnJheS5jLTEzMTYtXFxubGliL3hhcnJheS5jOjEzMTc6XFx0aWYgKHhhcy1cXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgeGFzLVxcdTAwM2V4YV9ub2RlKSlcXG5saWIveGFycmF5LmMtMTMxOC1cXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldC0tO1xcbi0tXFxubGliL3hhcnJheS5jPTEzNDU9dm9pZCAqX194YXNfbmV4dChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbmxpYi94YXJyYXkuYy0xMzU1LVxcbmxpYi94YXJyYXkuYzoxMzU2OlxcdGlmICh4YXMtXFx1MDAzZXhhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy1cXHUwMDNleGFfaW5kZXgsIHhhcy1cXHUwMDNleGFfbm9kZSkpXFxubGliL3hhcnJheS5jLTEzNTctXFx0XFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQrKztcXG4tLVxcbmxpYi94YXJyYXkuYz0xMzkzPXZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcXG4tLVxcbmxpYi94YXJyYXkuYy0xNDA4LVxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG5saWIveGFycmF5LmM6MTQwOTpcXHR9IGVsc2UgaWYgKHhhcy1cXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgeGFzLVxcdTAwM2V4YV9ub2RlKSkge1xcbmxpYi94YXJyYXkuYy0xNDEwLVxcdFxcdGlmICgheGFzLVxcdTAwM2V4YV9ub2RlLVxcdTAwM2VzaGlmdClcXG4tLVxcbmxpYi94YXJyYXkuYy0xNDEyLVxcdFxcdGVsc2VcXG5saWIveGFycmF5LmM6MTQxMzpcXHRcXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgeGFzLVxcdTAwM2V4YV9ub2RlKTtcXG5saWIveGFycmF5LmMtMTQxNC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIzOjI4Ljc1NTU5NjUyOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTE1ODMzMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhhcnJheSBNdWx0aS1JbmRleCBGaXgqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdGVzdF94YXJyYXkuY2AgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBuZXcgdW5pdCB0ZXN0LCBgY2hlY2tfbXVsdGlfZmluZF80YCwgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgbXVsdGktaW5kZXggZmluZCBhbmQgc3BsaXQgb3BlcmF0aW9ucyB3aXRoaW4geGFycmF5LiBUaGF0J3MgZ29vZCwgbW9yZSB0YXJnZXRlZCB0ZXN0cyBhcmUgYWx3YXlzIHdlbGNvbWUuIEFuZCB0aGUgY29ycmVzcG9uZGluZyBmaXggaW4gYGxpYi94YXJyYXkuY2AgYWRkcmVzc2VzIGFuIG9mZnNldCBjYWxjdWxhdGlvbiBidWcgaW4gYHhhc19maW5kYCwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLW9yZGVyIGVudHJpZXMgaW4gdGhlIHhhcnJheS4gU291bmRzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBmaXggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBMZXQncyBydW4gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZSwgdGhpcyBpcyBhbGwgaW50ZXJuYWwgeGFycmF5IGxvZ2ljIGFuZCBzZWxmLXRlc3RpbmcuIE5vIHVzZXItZmFjaW5nIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZC4gVGhhdCdzIGEgcmVsaWVmLlxuMi4gICoqQnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCB0aGUgY29kZSB1c2VzIHN0YW5kYXJkIHhhcnJheSB0cmF2ZXJzYWwgc3RhdGUgbWVtYmVycyBsaWtlIGB4YXMtXHUwMDNleGFfb2Zmc2V0YCwgYHhhcy1cdTAwM2V4YV9pbmRleGAsIGB4YXMtXHUwMDNleGFfbm9kZWAsIGV0Yy4gVGhlc2UgYXJlIGluaXRpYWxpemVkIHByb3Blcmx5IGJ5IGBYQV9TVEFURWAgb3IgYHhhc19zZXRgLiBTbyB3ZSdyZSBnb29kIHRoZXJlLlxuMy4gICoqQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRob3V0IGluaXRpYWxpemF0aW9uPyoqIEkgZG9uJ3Qgc2VlIGFueSBuZXcgYWxsb2NhdGlvbnMgYmVpbmcgaW50cm9kdWNlZCBvciBleGlzdGluZyBhbGxvY2F0aW9ucyBtb2RpZmllZC4gVGhpcyBpcyBhIGZpeCwgbm90IGEgZmVhdHVyZS4gTm8gd29ycmllcyB0aGVyZS5cbjQuICAqKkJvdW5kcyBjaGVja3MvYnVmZmVyIHNpemUgY2hhbmdlcz8qKiBOb3BlLiBUaGUgY29kZSBpc24ndCBjaGFuZ2luZyBidWZmZXIgc2l6ZXMgb3IgYWRkaW5nIG5ldyBidWZmZXIgY2hlY2tzLiBOb3RoaW5nIHRvIHdvcnJ5IGFib3V0IGluIHRoYXQgcmVnYXJkLlxuXG5TbywgaW4gc3VtbWFyeSwgSSBzZWUgbm8gaW1tZWRpYXRlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgdG8gdXNlcnNwYWNlLiBUaGF0J3Mgd2hhdCBJIGxpa2UgdG8gc2VlLlxuXG5Ob3csIEtNU0FOLiBEb2VzIHRoaXMgbmVlZCBpdD8gTm8uIEtNU0FOIGlzIGZvciBjYXRjaGluZyAqdW5pbml0aWFsaXplZCogcmVhZHMgc3BlY2lmaWNhbGx5LCBidXQgZ2l2ZW4gdGhlIGNoZWNrIGxpc3QsIEkgZG9uJ3Qgc2VlIGFueSBvZiB0aG9zZSBoZXJlLiBTdGFuZGFyZCBLQVNBTiwgdGhlIHVuaXQgdGVzdHMsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50LiBBbnkgbWVtb3J5IGVycm9ycyAoaWYgYW55KSB3b3VsZCBiZSBjYXVnaHQgd2l0aCB0aG9zZS4gVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGludHJvZHVjZWQgaGVyZS5cblxuTGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHJlcXVpcmVtZW50czogYE5lZWRzS01TQU5gIHNob3VsZCBkZWZpbml0ZWx5IGJlIGZhbHNlLCBJIGNhbiBmb3JtdWxhdGUgZGV0YWlsZWQgcmVhc29uaW5nIGNvbnRyYXN0aW5nIEtNU0FOIHZlcnN1cyBLQVNBTidzIGFwcGxpY2FiaWxpdHkuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCB0aGUgZml4IGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZHMsIGFuZCB0aHVzIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sLiBOb3csIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBBbGwgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzQsIk91dHB1dFRva2VucyI6MTY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjIzOjM1LjI3MTQzMzI1N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG9mZnNldCBjYWxjdWxhdGlvbiBsb2dpYyBpbiB4YXNfZmluZCgpIHdpdGhpbiB0aGUgWEFycmF5IGRhdGEgc3RydWN0dXJlIGltcGxlbWVudGF0aW9uIChsaWIveGFycmF5LmMpIGFuZCBhZGRzIGEgdGVzdCBjYXNlIHRvIHRoZSBYQXJyYXkgc2VsZi10ZXN0IHN1aXRlIChsaWIvdGVzdF94YXJyYXkuYykuXFxuXFxuVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgdHJlZSB0cmF2ZXJzYWwgaW5kZXhpbmcvb2Zmc2V0IGFyaXRobWV0aWMgZm9yIG11bHRpLWluZGV4IGVudHJpZXMgKFhBX1NUQVRFIC8geGFfbm9kZSBvZmZzZXQgY2FsY3VsYXRpb25zKS4gTm8gbmV3IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gY29ycnVwdGVkIG9yIGluY29ycmVjdCB0cmF2ZXJzYWwgb2Zmc2V0cyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIG9mZnNldCBjYWxjdWxhdGlvbiBsb2dpYyBpbiB4YXNfZmluZCgpIHdpdGhpbiB0aGUgWEFycmF5IGRhdGEgc3RydWN0dXJlIGltcGxlbWVudGF0aW9uIChsaWIveGFycmF5LmMpIGFuZCBhZGRzIGEgdGVzdCBjYXNlIHRvIHRoZSBYQXJyYXkgc2VsZi10ZXN0IHN1aXRlIChsaWIvdGVzdF94YXJyYXkuYykuXFxuXFxuVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaW50ZXJuYWwgdHJlZSB0cmF2ZXJzYWwgaW5kZXhpbmcvb2Zmc2V0IGFyaXRobWV0aWMgZm9yIG11bHRpLWluZGV4IGVudHJpZXMgKFhBX1NUQVRFIC8geGFfbm9kZSBvZmZzZXQgY2FsY3VsYXRpb25zKS4gTm8gbmV3IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gY29ycnVwdGVkIG9yIGluY29ycmVjdCB0cmF2ZXJzYWwgb2Zmc2V0cyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsss4f[1] Phase: Succeeded StartedAt: 2026-09-03 14:23:47 +0000 UTC FinishedAt: 2026-09-03 14:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 14:23:47 +0000 UTC FinishedAt: 2026-09-03 14:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2] Phase: Succeeded StartedAt: 2026-09-03 14:23:47 +0000 UTC FinishedAt: 2026-09-03 18:11:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 14:23:47 +0000 UTC FinishedAt: 2026-09-03 18:11:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 14:23:47 +0000 UTC FinishedAt: 2026-09-03 14:23:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 14:23:47 +0000 UTC FinishedAt: 2026-09-03 14:23:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsss4f/series-workflowsss4f-convert-artifact-1871333005/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 14:23:57 +0000 UTC FinishedAt: 2026-09-03 14:43:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 14:23:57 +0000 UTC FinishedAt: 2026-09-03 14:43:34 +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:*3e2c4805-498b-4e24-b450-e1eef0d25fc1,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-workflowsss4f/series-workflowsss4f-convert-artifact-1871333005/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": "c6129dd9-2a0e-4b67-a20c-5bbb9aaa3997", "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-workflowsss4f/series-workflowsss4f-build-action-1614914051/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 14:23:57 +0000 UTC FinishedAt: 2026-09-03 14:43:24 +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:*3e2c4805-498b-4e24-b450-e1eef0d25fc1,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-workflowsss4f/series-workflowsss4f-convert-artifact-1871333005/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": "c6129dd9-2a0e-4b67-a20c-5bbb9aaa3997", "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-workflowsss4f/series-workflowsss4f-build-action-1614914051/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 14:43:34 +0000 UTC FinishedAt: 2026-09-03 14:43:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 14:43:34 +0000 UTC FinishedAt: 2026-09-03 14:43:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 14:43:34 +0000 UTC FinishedAt: 2026-09-03 14:43:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 14:43:34 +0000 UTC FinishedAt: 2026-09-03 14:43:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsss4f/series-workflowsss4f-convert-artifact-979346408/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 14:43:44 +0000 UTC FinishedAt: 2026-09-03 14:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 14:43:44 +0000 UTC FinishedAt: 2026-09-03 14:45:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c6129dd9-2a0e-4b67-a20c-5bbb9aaa3997,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-workflowsss4f/series-workflowsss4f-build-action-1614914051/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-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 14:45:53 +0000 UTC FinishedAt: 2026-09-03 14:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 14:45:53 +0000 UTC FinishedAt: 2026-09-03 14:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 14:45:53 +0000 UTC FinishedAt: 2026-09-03 15:05:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 14:45:53 +0000 UTC FinishedAt: 2026-09-03 15:05:30 +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:*3e2c4805-498b-4e24-b450-e1eef0d25fc1,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-workflowsss4f/series-workflowsss4f-convert-artifact-979346408/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": "a2d6d865-c4ad-413c-bb9a-1177900b4130", "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-workflowsss4f/series-workflowsss4f-build-action-1649171348/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 14:45:53 +0000 UTC FinishedAt: 2026-09-03 15:05:20 +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:*3e2c4805-498b-4e24-b450-e1eef0d25fc1,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-workflowsss4f/series-workflowsss4f-convert-artifact-979346408/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": "a2d6d865-c4ad-413c-bb9a-1177900b4130", "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-workflowsss4f/series-workflowsss4f-build-action-1649171348/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 15:05:30 +0000 UTC FinishedAt: 2026-09-03 15:05:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 15:05:30 +0000 UTC FinishedAt: 2026-09-03 15:05:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 15:05:30 +0000 UTC FinishedAt: 2026-09-03 15:07:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 15:05:30 +0000 UTC FinishedAt: 2026-09-03 15:07:31 +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:*a2d6d865-c4ad-413c-bb9a-1177900b4130,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-workflowsss4f/series-workflowsss4f-build-action-1649171348/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-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 15:07:41 +0000 UTC FinishedAt: 2026-09-03 18:11:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 15:07:41 +0000 UTC FinishedAt: 2026-09-03 18:11:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"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:*c6129dd9-2a0e-4b67-a20c-5bbb9aaa3997,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a2d6d865-c4ad-413c-bb9a-1177900b4130,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-workflowsss4f/series-workflowsss4f-build-action-1614914051/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-workflowsss4f/series-workflowsss4f-build-action-1649171348/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 15:07:41 +0000 UTC FinishedAt: 2026-09-03 15:07:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 15:07:41 +0000 UTC FinishedAt: 2026-09-03 15:07:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"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-workflowsss4f/series-workflowsss4f-convert-artifact-2177538081/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 15:07:41 +0000 UTC FinishedAt: 2026-09-03 15:07:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 15:07:41 +0000 UTC FinishedAt: 2026-09-03 15:07:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 15:07:41 +0000 UTC FinishedAt: 2026-09-03 15:07:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 15:07:51 +0000 UTC FinishedAt: 2026-09-03 18:11:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsss4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["xas_find","xa_find","xa_find_after"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["XARRAY_MULTI","TRANSPARENT_HUGEPAGE"],"series_id":"a0f55a0d-19d3-47cb-b831-32aaf125825e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 15:07:51 +0000 UTC FinishedAt: 2026-09-03 18:11:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c6129dd9-2a0e-4b67-a20c-5bbb9aaa3997,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a2d6d865-c4ad-413c-bb9a-1177900b4130,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-workflowsss4f/series-workflowsss4f-build-action-1614914051/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-workflowsss4f/series-workflowsss4f-build-action-1649171348/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-workflowsss4f/series-workflowsss4f-convert-artifact-2177538081/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,}