Name: series-workflow89zx4 Phase: Succeeded StartedAt: 2026-08-27 12:44:47 +0000 UTC FinishedAt: 2026-08-27 13:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[0] Phase: Succeeded StartedAt: 2026-08-27 12:44:47 +0000 UTC FinishedAt: 2026-08-27 12:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 12:44:47 +0000 UTC FinishedAt: 2026-08-27 12:51:30 +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": [ "TEST_XARRAY", "HUGETLBFS" ], "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": [ "TEST_XARRAY", "HUGETLBFS" ], "series_id": "c03cb276-83ca-4dcf-9b35-e7a078619e6c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfWEFSUkFZJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSB4YXJyYXkgbXVsdGktaW5kZXggZmluZCBpbXBsZW1lbnRhdGlvbiAoYHhhc19maW5kYCkuIFRoZSBpc3N1ZSBpbnZvbHZlcyBpbmNvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9ucyBkdXJpbmcgeGFycmF5IHRyYXZlcnNhbCwgd2hpY2ggY291bGQgbGVhZCB0byByZXR1cm5pbmcgaW5jb3JyZWN0IGVudHJpZXMsIGluZmluaXRlIGxvb3BzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOIChpZiB0aGV5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMpLCBvciBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgeGFzX2ZpbmQoKWAsIGEgY29yZSBYQXJyYXkgZnVuY3Rpb24gdXNlZCBleHRlbnNpdmVseSBpbiB0aGUga2VybmVsIChlLmcuLCBwYWdlIGNhY2hlKS4gVGhlIGJ1ZyBvY2N1cnMgd2hlbiBzZWFyY2hpbmcgZm9yIG11bHRpLWluZGV4IGVudHJpZXMuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSB0ZXN0IGNhc2UgYGNoZWNrX211bHRpX2ZpbmRfNGAgdG8gYGxpYi90ZXN0X3hhcnJheS5jYC4gU2luY2UgYHhhc19maW5kKClgIGlzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgaXQgaXMgZXhjbHVkZWQgZnJvbSBGb2N1c1N5bWJvbHMuIFRvIGVuc3VyZSB0aGUgbmV3IHRlc3QgY2FzZSBpcyBleGVjdXRlZCwgYENPTkZJR19URVNUX1hBUlJBWWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCAod2hpY2ggc2VsZWN0cyBgQ09ORklHX1hBUlJBWV9NVUxUSWAgcmVxdWlyZWQgYnkgdGhlIHRlc3QpIHNob3VsZCBiZSBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjc5MzUzNjM1NDViZTExMDA0MTEyYTNiZGZmYTY2ZTMzMTJjNWY2Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDEyOjQ2OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3hhcnJheS5jIGIvbGliL3Rlc3RfeGFycmF5LmNcbmluZGV4IDVjYTBhZWZlZTlhYTUuLjdkMGRlY2NkZjU5YTAgMTAwNjQ0XG4tLS0gYS9saWIvdGVzdF94YXJyYXkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RfeGFycmF5LmNcbkBAIC0xMjQ3LDYgJiM0MzsxMjQ3LDY3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfMyhzdHJ1Y3QgeGFycmF5ICp4YSlcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSlcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxuJiM0MztcdFhBX1NUQVRFKHhhcywgeGEsIDEwMCk7XG4mIzQzO1x0WEFfU1RBVEVfT1JERVIoeGFzX3NwbGl0LCB4YSwgMCwgMCk7XG4mIzQzO1x0dm9pZCAqZW50cnk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpO1xuJiM0MztcbiYjNDM7XHQvKiAoMSkgT3JkZXItNyBlbnRyeSAoMC0xMjcpIHdpdGggYWRqYWNlbnQgZW50cnkgYXQgMTI4LCBzdGFydGluZyBhdCAxMDAgKi9cbiYjNDM7XHR4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuJiM0MztcbiYjNDM7XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7XG4mIzQzO1xuJiM0MztcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHhhX2VyYXNlX2luZGV4KHhhLCAxMjgpO1xuJiM0MztcdHhhX2VyYXNlX2luZGV4KHhhLCAwKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuJiM0MztcbiYjNDM7XHQvKiAoMikgU3BsaXR0aW5nIGEgbXVsdGktaW5kZXggZW50cnkgYWZ0ZXIgYSBsb29rdXAgYmVnaW5zIGluc2lkZSBpdCAqL1xuJiM0MztcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0eGFzX3NldChcdTAwMjZ4YXMsIDEwMCk7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHhhc19zcGxpdF9hbGxvYyhcdTAwMjZ4YXNfc3BsaXQsIHhhLCA3LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR4YXNfbG9jayhcdTAwMjZ4YXNfc3BsaXQpO1xuJiM0MztcdHhhc19zcGxpdChcdTAwMjZ4YXNfc3BsaXQsIHhhLCA3KTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMjg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0X194YV9zdG9yZSh4YSwgaSwgeGFfbWtfaW5kZXgoaSksIDApO1xuJiM0MztcdHhhc191bmxvY2soXHUwMDI2eGFzX3NwbGl0KTtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcbiYjNDM7XG4mIzQzO1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0eGFfZGVzdHJveSh4YSk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZF8xKHN0cnVjdCB4YXJyYXkgKnhhKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgaiwgaztcbkBAIC0xMzcwLDYgJiM0MzsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSlcbiBcdFx0Y2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTtcbiBcdGNoZWNrX211bHRpX2ZpbmRfMih4YSk7XG4gXHRjaGVja19tdWx0aV9maW5kXzMoeGEpO1xuJiM0MztcdGNoZWNrX211bHRpX2ZpbmRfNCh4YSk7XG4gfVxuIFxuIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovXG5kaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jXG5pbmRleCA5YThiNDkxNjU0MGNmLi45ODAzMjRkNjg2YmQwIDEwMDY0NFxuLS0tIGEvbGliL3hhcnJheS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIveGFycmF5LmNcbkBAIC0xNDA2LDkgJiM0MzsxNDA2LDExIEBAIHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcbiBcdFx0ZW50cnkgPSB4YXNfbG9hZCh4YXMpO1xuIFx0XHRpZiAoZW50cnkgfHwgeGFzX25vdF9ub2RlKHhhcy1cdTAwM2V4YV9ub2RlKSlcbiBcdFx0XHRyZXR1cm4gZW50cnk7XG4tXHR9IGVsc2UgaWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gKHhhcy1cdTAwM2V4YV9pbmRleCBcdTAwMjYgWEFfQ0hVTktfTUFTSykpIHtcbi1cdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVx1MDAzZXhhX2luZGV4IC0gMSkgXHUwMDI2IFhBX0NIVU5LX01BU0spICYjNDM7IDE7XG4mIzQzO1x0fSBlbHNlIGlmICh4YXMtXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSkpIHtcbiYjNDM7XHRcdGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQpXG4mIzQzO1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSAmIzQzOyAxO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbiBcdH1cbiBcbiBcdHhhc19uZXh0X29mZnNldCh4YXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtURVNUX1hBUlJBWSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHhhc19maW5kKClgLCBhIGNvcmUgWEFycmF5IGZ1bmN0aW9uIHVzZWQgZXh0ZW5zaXZlbHkgaW4gdGhlIGtlcm5lbCAoZS5nLiwgcGFnZSBjYWNoZSkuIFRoZSBidWcgb2NjdXJzIHdoZW4gc2VhcmNoaW5nIGZvciBtdWx0aS1pbmRleCBlbnRyaWVzLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgdGVzdCBjYXNlIGBjaGVja19tdWx0aV9maW5kXzRgIHRvIGBsaWIvdGVzdF94YXJyYXkuY2AuIFNpbmNlIGB4YXNfZmluZCgpYCBpcyBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24sIGl0IGlzIGV4Y2x1ZGVkIGZyb20gRm9jdXNTeW1ib2xzLiBUbyBlbnN1cmUgdGhlIG5ldyB0ZXN0IGNhc2UgaXMgZXhlY3V0ZWQsIGBDT05GSUdfVEVTVF9YQVJSQVlgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgKHdoaWNoIHNlbGVjdHMgYENPTkZJR19YQVJSQVlfTVVMVElgIHJlcXVpcmVkIGJ5IHRoZSB0ZXN0KSBzaG91bGQgYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY3OTM1MzYzNTQ1YmUxMTAwNDExMmEzYmRmZmE2NmUzMzEyYzVmNmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAxMjo0Njo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3hhcnJheS5jIGIvbGliL3Rlc3RfeGFycmF5LmMKaW5kZXggNWNhMGFlZmVlOWFhNS4uN2QwZGVjY2RmNTlhMCAxMDA2NDQKLS0tIGEvbGliL3Rlc3RfeGFycmF5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RfeGFycmF5LmMKQEAgLTEyNDcsNiAmIzQzOzEyNDcsNjcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8zKHN0cnVjdCB4YXJyYXkgKnhhKQogCX0KIH0KIAomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVEkKJiM0MzsJWEFfU1RBVEUoeGFzLCB4YSwgMTAwKTsKJiM0MzsJWEFfU1RBVEVfT1JERVIoeGFzX3NwbGl0LCB4YSwgMCwgMCk7CiYjNDM7CXZvaWQgKmVudHJ5OwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CS8qICgxKSBPcmRlci03IGVudHJ5ICgwLTEyNykgd2l0aCBhZGphY2VudCBlbnRyeSBhdCAxMjgsIHN0YXJ0aW5nIGF0IDEwMCAqLwomIzQzOwl4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApOwomIzQzOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpOwomIzQzOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJeGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7CiYjNDM7CXhhX2VyYXNlX2luZGV4KHhhLCAwKTsKJiM0MzsJWEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTsKJiM0MzsKJiM0MzsJLyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi8KJiM0MzsJeGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTsKJiM0MzsKJiM0MzsJeGFzX3NldCgmYW1wO3hhcywgMTAwKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXhhc19zcGxpdF9hbGxvYygmYW1wO3hhc19zcGxpdCwgeGEsIDcsIEdGUF9LRVJORUwpOwomIzQzOwl4YXNfbG9jaygmYW1wO3hhc19zcGxpdCk7CiYjNDM7CXhhc19zcGxpdCgmYW1wO3hhc19zcGxpdCwgeGEsIDcpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTI4OyBpJiM0MzsmIzQzOykKJiM0MzsJCV9feGFfc3RvcmUoeGEsIGksIHhhX21rX2luZGV4KGkpLCAwKTsKJiM0MzsJeGFzX3VubG9jaygmYW1wO3hhc19zcGxpdCk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTsKJiM0MzsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXhhX2Rlc3Ryb3koeGEpOwomIzQzOwlYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSkKIHsKIAl1bnNpZ25lZCBsb25nIGksIGosIGs7CkBAIC0xMzcwLDYgJiM0MzsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSkKIAkJY2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTsKIAljaGVja19tdWx0aV9maW5kXzIoeGEpOwogCWNoZWNrX211bHRpX2ZpbmRfMyh4YSk7CiYjNDM7CWNoZWNrX211bHRpX2ZpbmRfNCh4YSk7CiB9CiAKIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovCmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmMKaW5kZXggOWE4YjQ5MTY1NDBjZi4uOTgwMzI0ZDY4NmJkMCAxMDA2NDQKLS0tIGEvbGliL3hhcnJheS5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi94YXJyYXkuYwpAQCAtMTQwNiw5ICYjNDM7MTQwNiwxMSBAQCB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpCiAJCWVudHJ5ID0geGFzX2xvYWQoeGFzKTsKIAkJaWYgKGVudHJ5IHx8IHhhc19ub3Rfbm9kZSh4YXMtJmd0O3hhX25vZGUpKQogCQkJcmV0dXJuIGVudHJ5OwotCX0gZWxzZSBpZiAoIXhhcy0mZ3Q7eGFfbm9kZS0mZ3Q7c2hpZnQgJmFtcDsmYW1wOwotCQkgICAgeGFzLSZndDt4YV9vZmZzZXQgIT0gKHhhcy0mZ3Q7eGFfaW5kZXggJmFtcDsgWEFfQ0hVTktfTUFTSykpIHsKLQkJeGFzLSZndDt4YV9vZmZzZXQgPSAoKHhhcy0mZ3Q7eGFfaW5kZXggLSAxKSAmYW1wOyBYQV9DSFVOS19NQVNLKSAmIzQzOyAxOwomIzQzOwl9IGVsc2UgaWYgKHhhcy0mZ3Q7eGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKSkgewomIzQzOwkJaWYgKCF4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0KQomIzQzOwkJCXhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl4YXMtJmd0O3hhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKTsKIAl9CiAKIAl4YXNfbmV4dF9vZmZzZXQoeGFzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgWEFycmF5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgbGliL3hhcnJheS5jYCBhbmQgYGxpYi90ZXN0X3hhcnJheS5jYC4gIFJpZ2h0IGF3YXksIEkgc2VlIHRoYXQgdGhlIHByaW1hcnkgY2hhbmdlIGlzIHRvIHRoZSBgeGFzX2ZpbmQoKWAgZnVuY3Rpb24gaW4gdGhlIGBsaWIveGFycmF5LmNgIGZpbGUuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uOyBpdCYjMzk7cyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIFhBcnJheSBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggaXMgdXNlZCBoZWF2aWx5IHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBBUEkgY2FsbGVkIGZyb20gcG90ZW50aWFsbHkgbnVtZXJvdXMga2VybmVsIGxvY2F0aW9ucyBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIGEgY2FuZGlkYXRlIGZvciBzb21lIHNlcmlvdXMgZnV6emluZy4KClRoZSBkaWZmIGl0c2VsZiBsb29rcyBsaWtlIGEgc3VidGxlIGFkanVzdG1lbnQgdG8gaG93IGB4YXNfZmluZCgpYCBoYW5kbGVzIG9mZnNldCBjYWxjdWxhdGlvbnMgd2l0aGluIHRoZSBYQXJyYXkuIFNwZWNpZmljYWxseSwgdGhlcmUmIzM5O3MgYSBjb25kaXRpb25hbCBtb2RpZmljYXRpb24gb2YgYHhhcy0mZ3Q7eGFfb2Zmc2V0YC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzZW1hbnRpY3MgYSBiaXQsIGJ1dCBpdCBzZWVtcyB0byBpbnZvbHZlIGEgY2hlY2sgYW5kIHBvdGVudGlhbCB1cGRhdGUgdG8gdGhlIG9mZnNldCB3aXRoaW4gYW4gWEFycmF5IGNodW5rLiAgVGhlIGFkZGVkIGBnZXRfb2Zmc2V0KClgIGNhbGwgaXMgaW50ZXJlc3RpbmcuICBJdCBtYWtlcyBtZSB3b25kZXIgaWYgdGhpcyBpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGNvbmZpZ3VyYXRpb24uCgpJIGFsc28gc2VlIHRoYXQgdGhleSYjMzk7dmUgYWRkZWQgYSB0ZXN0IGNhc2UgaW4gYGxpYi90ZXN0X3hhcnJheS5jYC4gVGhpcyBpcyBncmVhdDsgdGVzdHMgYXJlIGVzc2VudGlhbCBmb3IgdGhpcyB0eXBlIG9mIGNoYW5nZSwgYW5kIEkmIzM5O2xsIHdhbnQgdG8gcmV2aWV3IHRoYXQgdGVzdCBjYXNlIGluIGRldGFpbC4KClNpbmNlIGl0JiMzOTtzIGEgdGVzdCBjYXNlLCBJIHNob3VsZCBjb25maXJtIHRoYXQgYENPTkZJR19YQVJSQVlfTVVMVElgIGlzIHNldC4gSXQgc2VlbXMgdGhhdCB0aGUgdGVzdCBpcyB1bmRlciB0aGF0IGNvbmZpZy4gTm93IEkgaGF2ZSB0byBkZXRlcm1pbmUgaWYgYENPTkZJR19YQVJSQVlfTVVMVElgIGlzIG5lZWRlZCBmb3IgYHhhc19maW5kYC4gSSBuZWVkIHRvIHJldmlldyBgbGliL3hhcnJheS5jYCB0byBiZSBzdXJlLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIGRldGVybWluaW5nIGhvdyB3aWRlc3ByZWFkIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgY291bGQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGFzX2ZpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIveGFycmF5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL3hhcnJheS5jPTEzNzU9RVhQT1JUX1NZTUJPTF9HUEwoX194YXNfbmV4dCk7XG4tLVxubGliL3hhcnJheS5jLTEzNzctLyoqXG5saWIveGFycmF5LmM6MTM3ODogKiB4YXNfZmluZCgpIC0gRmluZCB0aGUgbmV4dCBwcmVzZW50IGVudHJ5IGluIHRoZSBYQXJyYXkuXG5saWIveGFycmF5LmMtMTM3OS0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxuLS1cbmxpYi94YXJyYXkuYy0xMzkyLSAqL1xubGliL3hhcnJheS5jOjEzOTM6dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxubGliL3hhcnJheS5jLTEzOTQte1xuLS1cbmxpYi94YXJyYXkuYy0xNDQwLX1cbmxpYi94YXJyYXkuYzoxNDQxOkVYUE9SVF9TWU1CT0xfR1BMKHhhc19maW5kKTtcbmxpYi94YXJyYXkuYy0xNDQyLVxubGliL3hhcnJheS5jLTE0NDMtLyoqXG5saWIveGFycmF5LmM6MTQ0NDogKiB4YXNfZmluZF9tYXJrZWQoKSAtIEZpbmQgdGhlIG5leHQgbWFya2VkIGVudHJ5IGluIHRoZSBYQXJyYXkuXG5saWIveGFycmF5LmMtMTQ0NS0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxuLS1cbmxpYi94YXJyYXkuYy0xNDYzLSAqL1xubGliL3hhcnJheS5jOjE0NjQ6dm9pZCAqeGFzX2ZpbmRfbWFya2VkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCwgeGFfbWFya190IG1hcmspXG5saWIveGFycmF5LmMtMTQ2NS17XG4tLVxubGliL3hhcnJheS5jLTE1MTEtXG5saWIveGFycmF5LmM6MTUxMjpcdFx0b2Zmc2V0ID0geGFzX2ZpbmRfY2h1bmsoeGFzLCBhZHZhbmNlLCBtYXJrKTtcbmxpYi94YXJyYXkuYy0xNTEzLVx0XHRpZiAob2Zmc2V0IFx1MDAzZSB4YXMtXHUwMDNleGFfb2Zmc2V0KSB7XG4tLVxubGliL3hhcnJheS5jLTE1NDItfVxubGliL3hhcnJheS5jOjE1NDM6RVhQT1JUX1NZTUJPTF9HUEwoeGFzX2ZpbmRfbWFya2VkKTtcbmxpYi94YXJyYXkuYy0xNTQ0LVxubGliL3hhcnJheS5jLTE1NDUtLyoqXG5saWIveGFycmF5LmM6MTU0NjogKiB4YXNfZmluZF9jb25mbGljdCgpIC0gRmluZCB0aGUgbmV4dCBwcmVzZW50IGVudHJ5IGluIGEgcmFuZ2UuXG5saWIveGFycmF5LmMtMTU0Ny0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxuLS1cbmxpYi94YXJyYXkuYy0xNTUzLSAqL1xubGliL3hhcnJheS5jOjE1NTQ6dm9pZCAqeGFzX2ZpbmRfY29uZmxpY3Qoc3RydWN0IHhhX3N0YXRlICp4YXMpXG5saWIveGFycmF5LmMtMTU1NS17XG4tLVxubGliL3hhcnJheS5jLTE2MDMtfVxubGliL3hhcnJheS5jOjE2MDQ6RVhQT1JUX1NZTUJPTF9HUEwoeGFzX2ZpbmRfY29uZmxpY3QpO1xubGliL3hhcnJheS5jLTE2MDUtXG4tLVxubGliL3hhcnJheS5jPTE5ODc9aW50IF9feGFfYWxsb2Moc3RydWN0IHhhcnJheSAqeGEsIHUzMiAqaWQsIHZvaWQgKmVudHJ5LFxuLS1cbmxpYi94YXJyYXkuYy0yMDAxLVx0XHR4YXMueGFfaW5kZXggPSBsaW1pdC5taW47XG5saWIveGFycmF5LmM6MjAwMjpcdFx0eGFzX2ZpbmRfbWFya2VkKFx1MDAyNnhhcywgbGltaXQubWF4LCBYQV9GUkVFX01BUkspO1xubGliL3hhcnJheS5jLTIwMDMtXHRcdGlmICh4YXMueGFfbm9kZSA9PSBYQVNfUkVTVEFSVClcbi0tXG5saWIveGFycmF5LmM9MjE3Mj1FWFBPUlRfU1lNQk9MKHhhX2NsZWFyX21hcmspO1xuLS1cbmxpYi94YXJyYXkuYy0yMTg1LSAqIGVudHJpZXMgd2hpY2ggYXJlIGJlaW5nIHNpbXVsdGFuZW91c2x5IGFkZGVkLiAgSXQgd2lsbCBub3QgcmV0dXJuIGFuXG5saWIveGFycmF5LmM6MjE4NjogKiAlWEFfUkVUUllfRU5UUlk7IGlmIHlvdSBuZWVkIHRvIHNlZSByZXRyeSBlbnRyaWVzLCB1c2UgeGFzX2ZpbmQoKS5cbmxpYi94YXJyYXkuYy0yMTg3LSAqXG4tLVxubGliL3hhcnJheS5jPTIxOTE9dm9pZCAqeGFfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyAqaW5kZXhwLFxuLS1cbmxpYi94YXJyYXkuYy0yMTk5LVx0XHRpZiAoKF9fZm9yY2UgdW5zaWduZWQgaW50KWZpbHRlciBcdTAwM2MgWEFfTUFYX01BUktTKVxubGliL3hhcnJheS5jOjIyMDA6XHRcdFx0ZW50cnkgPSB4YXNfZmluZF9tYXJrZWQoXHUwMDI2eGFzLCBtYXgsIGZpbHRlcik7XG5saWIveGFycmF5LmMtMjIwMS1cdFx0ZWxzZVxubGliL3hhcnJheS5jOjIyMDI6XHRcdFx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIG1heCk7XG5saWIveGFycmF5LmMtMjIwMy1cdH0gd2hpbGUgKHhhc19yZXRyeShcdTAwMjZ4YXMsIGVudHJ5KSk7XG4tLVxubGliL3hhcnJheS5jPTIyMTI9c3RhdGljIGJvb2wgeGFzX3NpYmxpbmcoc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubGliL3hhcnJheS5jLTIyMzUtICogd2hpY2ggYXJlIGJlaW5nIHNpbXVsdGFuZW91c2x5IGFkZGVkLiAgSXQgd2lsbCBub3QgcmV0dXJuIGFuXG5saWIveGFycmF5LmM6MjIzNjogKiAlWEFfUkVUUllfRU5UUlk7IGlmIHlvdSBuZWVkIHRvIHNlZSByZXRyeSBlbnRyaWVzLCB1c2UgeGFzX2ZpbmQoKS5cbmxpYi94YXJyYXkuYy0yMjM3LSAqXG4tLVxubGliL3hhcnJheS5jPTIyNDE9dm9pZCAqeGFfZmluZF9hZnRlcihzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyAqaW5kZXhwLFxuLS1cbmxpYi94YXJyYXkuYy0yMjUyLVx0XHRpZiAoKF9fZm9yY2UgdW5zaWduZWQgaW50KWZpbHRlciBcdTAwM2MgWEFfTUFYX01BUktTKVxubGliL3hhcnJheS5jOjIyNTM6XHRcdFx0ZW50cnkgPSB4YXNfZmluZF9tYXJrZWQoXHUwMDI2eGFzLCBtYXgsIGZpbHRlcik7XG5saWIveGFycmF5LmMtMjI1NC1cdFx0ZWxzZVxubGliL3hhcnJheS5jOjIyNTU6XHRcdFx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIG1heCk7XG5saWIveGFycmF5LmMtMjI1Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzMwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBYYXJyYXkgVGVzdGluZyoqCgpPa2F5LCBzbyBgeGFzX2ZpbmRgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gaGVyZS4gSXQmIzM5O3MgZm91bmRhdGlvbmFsLCBzbyB0aGUgdGVzdGluZyBhcm91bmQgaXQgbmVlZHMgdG8gYmUgc29saWQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgdGVzdCBjYXNlLiBJIGtub3cgaXQmIzM5O3MgaW4gYGxpYi90ZXN0X3hhcnJheS5jYC4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBiZWluZyBldmFsdWF0ZWQuIEFuZCB0aGVuLCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwbHkgaW50byB0aGUgY29kZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYFRFU1RfWEFSUkFZYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBwb3NzaWJsZSB0aGUgdGVzdHMgYXJlIGNvbmRpdGlvbmFsIGJhc2VkIG9uIHRoYXQgZmxhZy4gQmV0dGVyIHRvIHZlcmlmeSB0aGUgZW52aXJvbm1lbnQgZmlyc3QuIFRoaXMgaXMgYWxsIGFib3V0IGVmZmljaWVuY3k7IEkgY2FuJiMzOTt0IHdhc3RlIHRpbWUgb24gYSBodW50IGlmIHRoZSB0ZXN0cyBhcmVuJiMzOTt0IGV2ZW4gY29tcGlsZWQgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VEVTVF9YQVJSQVkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTI1NTc9Y29uZmlnIFRFU1RfQklUTUFQXG4tLVxubGliL0tjb25maWcuZGVidWctMjU2My1cbmxpYi9LY29uZmlnLmRlYnVnOjI1NjQ6Y29uZmlnIFRFU1RfWEFSUkFZXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTY1LVx0dHJpc3RhdGUgXCYjMzQ7VGVzdCB0aGUgWEFycmF5IGNvZGUgYXQgcnVudGltZVwmIzM0O1xuLS1cbmxpYi9NYWtlZmlsZT05Mj1lbmRpZlxubGliL01ha2VmaWxlLTkzLVxubGliL01ha2VmaWxlOjk0Om9iai0kKENPTkZJR19URVNUX1hBUlJBWSkgJiM0Mzs9IHRlc3RfeGFycmF5Lm9cbmxpYi9NYWtlZmlsZS05NS1vYmotJChDT05GSUdfVEVTVF9NQVBMRV9UUkVFKSAmIzQzOz0gdGVzdF9tYXBsZV90cmVlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFhBcnJheSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoaXMgdGVzdCBjYXNlIGxldmVyYWdlcyBgQ09ORklHX1hBUlJBWV9NVUxUSWAuIE15IGZpcnN0IG1vdmUgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBYQVJSQVlfTVVMVElgIHJlcHJlc2VudHMuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgYGxpYi9LY29uZmlnYCBhbmQgYGxpYi9LY29uZmlnLmRlYnVnYC4gSXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlIHRvIHN0YXJ0IHRoZXJlIHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24gb2YgYFhBUlJBWV9NVUxUSWAsIGl0cyBkZXBlbmRlbmNpZXMsIGl0cyBkZWZhdWx0IHZhbHVlLCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB0aGF0IG1pZ2h0IHByb3ZpZGUgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGlzIG9wdGlvbiBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHdoeSB0aGlzIHRlc3QgY2FzZSBleGlzdHMgYW5kIHdoYXQgaXQmIzM5O3MgdHJ5aW5nIHRvIHZhbGlkYXRlLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIHRlc3QgY2FzZSBleHBlY3RzIHRoZSBrZXJuZWwgdG8gZG8gd2hlbiBgWEFSUkFZX01VTFRJYCBpcyBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEFSUkFZX01VTFRJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZz0zNDg9Y29uZmlnIElOVEVSVkFMX1RSRUVfU1BBTl9JVEVSXG4tLVxubGliL0tjb25maWctMzUxLVxubGliL0tjb25maWc6MzUyOmNvbmZpZyBYQVJSQVlfTVVMVElcbmxpYi9LY29uZmlnLTM1My1cdGJvb2xcbi0tXG5saWIvdGVzdF94YXJyYXkuYz0xNT1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG9yZGVyX2xpbWl0ID1cbmxpYi90ZXN0X3hhcnJheS5jOjE2Olx0XHRJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gQklUU19QRVJfTE9ORyA6IDE7XG5saWIvdGVzdF94YXJyYXkuYy0xNy1cbi0tXG5saWIvdGVzdF94YXJyYXkuYz0xNzU9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfeGFfbWFya18xKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTE3Ny1cdHVuc2lnbmVkIGludCBvcmRlcjtcbmxpYi90ZXN0X3hhcnJheS5jOjE3ODpcdHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gOCA6IDE7XG5saWIvdGVzdF94YXJyYXkuYy0xNzktXG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MjkyPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3hhX21hcmtfMyhzdHJ1Y3QgeGFycmF5ICp4YSlcbmxpYi90ZXN0X3hhcnJheS5jLTI5My17XG5saWIvdGVzdF94YXJyYXkuYzoyOTQ6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi90ZXN0X3hhcnJheS5jLTI5NS1cdFhBX1NUQVRFKHhhcywgeGEsIDB4NDEpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTMyND1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja194YV9zaHJpbmsoc3RydWN0IHhhcnJheSAqeGEpXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMzI4LVx0dW5zaWduZWQgaW50IG9yZGVyO1xubGliL3Rlc3RfeGFycmF5LmM6MzI5Olx0dW5zaWduZWQgaW50IG1heF9vcmRlciA9IElTX0VOQUJMRUQoQ09ORklHX1hBUlJBWV9NVUxUSSkgPyAxNSA6IDE7XG5saWIvdGVzdF94YXJyYXkuYy0zMzAtXG4tLVxubGliL3Rlc3RfeGFycmF5LmM9NDI2PXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2NtcHhjaGdfb3JkZXIoc3RydWN0IHhhcnJheSAqeGEpXG5saWIvdGVzdF94YXJyYXkuYy00Mjcte1xubGliL3Rlc3RfeGFycmF5LmM6NDI4OiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG5saWIvdGVzdF94YXJyYXkuYy00MjktXHR2b2lkICpGSVZFID0geGFfbWtfdmFsdWUoNSk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmM9NTQ1PXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3hhc19lcmFzZShzdHJ1Y3QgeGFycmF5ICp4YSlcbi0tXG5saWIvdGVzdF94YXJyYXkuYy01ODItXG5saWIvdGVzdF94YXJyYXkuYzo1ODM6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi90ZXN0X3hhcnJheS5jLTU4NC1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9zdG9yZV8xKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGluZGV4LFxuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTY1MD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9zdG9yZShzdHJ1Y3QgeGFycmF5ICp4YSlcbmxpYi90ZXN0X3hhcnJheS5jLTY1MS17XG5saWIvdGVzdF94YXJyYXkuYzo2NTI6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi90ZXN0X3hhcnJheS5jLTY1My1cdHVuc2lnbmVkIGxvbmcgaSwgaiwgaztcbi0tXG5saWIvdGVzdF94YXJyYXkuYy03MjktXG5saWIvdGVzdF94YXJyYXkuYzo3MzA6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi90ZXN0X3hhcnJheS5jLTczMS0vKiBtaW1pY3MgcGFnZSBjYWNoZSBfX2ZpbGVtYXBfYWRkX2ZvbGlvKCkgKi9cbi0tXG5saWIvdGVzdF94YXJyYXkuYz04OTE9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfc3RvcmVfYWR2YW5jZWQoc3RydWN0IHhhcnJheSAqeGEpXG5saWIvdGVzdF94YXJyYXkuYy04OTIte1xubGliL3Rlc3RfeGFycmF5LmM6ODkzOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG5saWIvdGVzdF94YXJyYXkuYzo4OTQ6XHR1bnNpZ25lZCBpbnQgbWF4X29yZGVyID0gSVNfRU5BQkxFRChDT05GSUdfWEFSUkFZX01VTFRJKSA/IDIwIDogMTtcbmxpYi90ZXN0X3hhcnJheS5jLTg5NS1cdHVuc2lnbmVkIGxvbmcgZW5kID0gVUxPTkdfTUFYLzI7XG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MTE0Mj1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19zdG9yZV9pdGVyKHN0cnVjdCB4YXJyYXkgKnhhKVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTExNDQtXHR1bnNpZ25lZCBpbnQgaSwgajtcbmxpYi90ZXN0X3hhcnJheS5jOjExNDU6XHR1bnNpZ25lZCBpbnQgbWF4X29yZGVyID0gSVNfRU5BQkxFRChDT05GSUdfWEFSUkFZX01VTFRJKSA/IDIwIDogMTtcbmxpYi90ZXN0X3hhcnJheS5jLTExNDYtXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTE3MC1cdH1cbmxpYi90ZXN0X3hhcnJheS5jOjExNzE6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi90ZXN0X3hhcnJheS5jLTExNzItXHR4YV9zdG9yZV9pbmRleCh4YSwgNjMsIEdGUF9LRVJORUwpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTExODA9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8xKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBvcmRlcilcbmxpYi90ZXN0X3hhcnJheS5jLTExODEte1xubGliL3Rlc3RfeGFycmF5LmM6MTE4MjojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxubGliL3Rlc3RfeGFycmF5LmMtMTE4My1cdHVuc2lnbmVkIGxvbmcgbXVsdGkgPSAzIFx1MDAzY1x1MDAzYyBvcmRlcjtcbi0tXG5saWIvdGVzdF94YXJyYXkuYz0xMjEyPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfMihzdHJ1Y3QgeGFycmF5ICp4YSlcbmxpYi90ZXN0X3hhcnJheS5jLTEyMTMte1xubGliL3Rlc3RfeGFycmF5LmM6MTIxNDpcdHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gMTAgOiAxO1xubGliL3Rlc3RfeGFycmF5LmMtMTIxNS1cdHVuc2lnbmVkIGludCBpLCBqO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTEyNTA9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF80KHN0cnVjdCB4YXJyYXkgKnhhKVxubGliL3Rlc3RfeGFycmF5LmMtMTI1MS17XG5saWIvdGVzdF94YXJyYXkuYzoxMjUyOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG5saWIvdGVzdF94YXJyYXkuYy0xMjUzLVx0WEFfU1RBVEUoeGFzLCB4YSwgMTAwKTtcbi0tXG5saWIvdGVzdF94YXJyYXkuYz0xNDYwPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfZW50cnkoc3RydWN0IHhhcnJheSAqeGEpXG5saWIvdGVzdF94YXJyYXkuYy0xNDYxLXtcbmxpYi90ZXN0X3hhcnJheS5jOjE0NjI6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi90ZXN0X3hhcnJheS5jLTE0NjMtXHR1bnNpZ25lZCBpbnQgb3JkZXI7XG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MTgyOT1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19jcmVhdGVfcmFuZ2Uoc3RydWN0IHhhcnJheSAqeGEpXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTgzMS1cdHVuc2lnbmVkIGludCBvcmRlcjtcbmxpYi90ZXN0X3hhcnJheS5jOjE4MzI6XHR1bnNpZ25lZCBpbnQgbWF4X29yZGVyID0gSVNfRU5BQkxFRChDT05GSUdfWEFSUkFZX01VTFRJKSA/IDEyIDogMTtcbmxpYi90ZXN0X3hhcnJheS5jLTE4MzMtXG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MTg2ND1zdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2NoZWNrX3N0b3JlX3JhbmdlKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGZpcnN0LFxuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTE4NjYte1xubGliL3Rlc3RfeGFycmF5LmM6MTg2NzojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxubGliL3Rlc3RfeGFycmF5LmMtMTg2OC1cdHhhX3N0b3JlX3JhbmdlKHhhLCBmaXJzdCwgbGFzdCwgeGFfbWtfaW5kZXgoZmlyc3QpLCBHRlBfS0VSTkVMKTtcbi0tXG5saWIvdGVzdF94YXJyYXkuYz0xODgxPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3N0b3JlX3JhbmdlKHN0cnVjdCB4YXJyYXkgKnhhKVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTE4OTYtXG5saWIvdGVzdF94YXJyYXkuYzoxODk3OiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG5saWIvdGVzdF94YXJyYXkuYy0xODk4LXN0YXRpYyB2b2lkIGNoZWNrX3NwbGl0XzEoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgaW5kZXgsXG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MjExOD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19hY2NvdW50KHN0cnVjdCB4YXJyYXkgKnhhKVxubGliL3Rlc3RfeGFycmF5LmMtMjExOS17XG5saWIvdGVzdF94YXJyYXkuYzoyMTIwOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG5saWIvdGVzdF94YXJyYXkuYy0yMTIxLVx0dW5zaWduZWQgaW50IG9yZGVyO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTIxNDc9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZ2V0X29yZGVyKHN0cnVjdCB4YXJyYXkgKnhhKVxubGliL3Rlc3RfeGFycmF5LmMtMjE0OC17XG5saWIvdGVzdF94YXJyYXkuYzoyMTQ5Olx0dW5zaWduZWQgaW50IG1heF9vcmRlciA9IElTX0VOQUJMRUQoQ09ORklHX1hBUlJBWV9NVUxUSSkgPyAyMCA6IDE7XG5saWIvdGVzdF94YXJyYXkuYy0yMTUwLVx0dW5zaWduZWQgaW50IG9yZGVyO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTIxNjc9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfeGFzX2dldF9vcmRlcihzdHJ1Y3QgeGFycmF5ICp4YSlcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0yMTcwLVxubGliL3Rlc3RfeGFycmF5LmM6MjE3MTpcdHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gMjAgOiAxO1xubGliL3Rlc3RfeGFycmF5LmMtMjE3Mi1cdHVuc2lnbmVkIGludCBvcmRlcjtcbi0tXG5saWIvdGVzdF94YXJyYXkuYz0yMjAwPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3hhc19jb25mbGljdF9nZXRfb3JkZXIoc3RydWN0IHhhcnJheSAqeGEpXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMjIwNS1cdGludCBvbmx5X29uY2U7XG5saWIvdGVzdF94YXJyYXkuYzoyMjA2Olx0dW5zaWduZWQgaW50IG1heF9vcmRlciA9IElTX0VOQUJMRUQoQ09ORklHX1hBUlJBWV9NVUxUSSkgPyAyMCA6IDE7XG5saWIvdGVzdF94YXJyYXkuYy0yMjA3LVx0dW5zaWduZWQgaW50IG9yZGVyO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTIyNTg9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZGVzdHJveShzdHJ1Y3QgeGFycmF5ICp4YSlcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0yMjgxLVxubGliL3Rlc3RfeGFycmF5LmM6MjI4MjojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxubGliL3Rlc3RfeGFycmF5LmMtMjI4My1cdC8qIERlc3Ryb3lpbmcgYW4gYXJyYXkgd2l0aCBhIG11bHRpLWluZGV4IGVudHJ5ICovXG4tLVxubGliL3hhcnJheS5jPTM2Mj1zdGF0aWMgdm9pZCAqeGFzX2FsbG9jKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4tLVxubGliL3hhcnJheS5jLTQwMS1cbmxpYi94YXJyYXkuYzo0MDI6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi94YXJyYXkuYy00MDMtLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGluZGljZXMgY292ZXJlZCBieSBhIGdpdmVuIHhhX3N0YXRlICovXG4tLVxubGliL3hhcnJheS5jPTQxNj1zdGF0aWMgdW5zaWduZWQgbG9uZyB4YXNfbWF4KHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbmxpYi94YXJyYXkuYy00MTktXG5saWIveGFycmF5LmM6NDIwOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG5saWIveGFycmF5LmMtNDIxLVx0aWYgKHhhcy1cdTAwM2V4YV9zaGlmdCB8fCB4YXMtXHUwMDNleGFfc2licykge1xuLS1cbmxpYi94YXJyYXkuYz05NjE9RVhQT1JUX1NZTUJPTF9HUEwoeGFzX2luaXRfbWFya3MpO1xubGliL3hhcnJheS5jLTk2Mi1cbmxpYi94YXJyYXkuYzo5NjM6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi94YXJyYXkuYy05NjQtc3RhdGljIHVuc2lnbmVkIGludCBub2RlX2dldF9tYXJrcyhzdHJ1Y3QgeGFfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IG9mZnNldClcbi0tXG5saWIveGFycmF5LmM9MTgyMj1FWFBPUlRfU1lNQk9MKF9feGFfaW5zZXJ0KTtcbmxpYi94YXJyYXkuYy0xODIzLVxubGliL3hhcnJheS5jOjE4MjQ6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi94YXJyYXkuYy0xODI1LXN0YXRpYyB2b2lkIHhhc19zZXRfcmFuZ2Uoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgZmlyc3QsXG4tLVxubGliL3hhcnJheS5jPTE5NjQ9RVhQT1JUX1NZTUJPTCh4YV9nZXRfb3JkZXIpO1xubGliL3hhcnJheS5jOjE5NjU6I2VuZGlmIC8qIENPTkZJR19YQVJSQVlfTVVMVEkgKi9cbmxpYi94YXJyYXkuYy0xOTY2LVxuLS1cbmxpYi94YXJyYXkuYz0yMjEyPXN0YXRpYyBib29sIHhhc19zaWJsaW5nKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbmxpYi94YXJyYXkuYy0yMjE2LVxubGliL3hhcnJheS5jOjIyMTc6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1hBUlJBWV9NVUxUSSkgfHwgIW5vZGUpXG5saWIveGFycmF5LmMtMjIxOC1cdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4OTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gdGhlIHhhcnJheSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHRlc3QgY2FzZSBhbmQgaXQmIzM5O3MgY2xlYXIgdGhhdCBgQ09ORklHX1hBUlJBWV9NVUxUSWAgaXMgKmVzc2VudGlhbCogZm9yIHRlc3RpbmcgdGhlc2UgbXVsdGktaW5kZXggZW50cmllcy4gVGhhdCYjMzk7cyB0aGUgd2hvbGUgcG9pbnQgb2YgdGhpcyB0ZXN0LiBUaGUgdGVzdCBpdHNlbGYgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX1RFU1RfWEFSUkFZYCBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gTm93IEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gSSBzZWVtIHRvIHJlY2FsbCBgQ09ORklHX1hBUlJBWV9NVUxUSWAgYmVpbmcgYSBib29sZWFuIGluIGBsaWIvS2NvbmZpZ2AuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoZXJlIGFyZW4mIzM5O3QgYW55IGRlcGVuZGVuY2llcyBJJiMzOTttIG1pc3NpbmcuIFRpbWUgdG8gZGl2ZSBpbnRvIGBsaWIvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBYQVJSQVlfTVVMVElgIHRvIHZlcmlmeSB0aGlzLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBjb25maWd1cmVkIHByb3Blcmx5IGZvciB0aGlzIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYQVJSQVlfTVVMVEkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnPTM0OD1jb25maWcgSU5URVJWQUxfVFJFRV9TUEFOX0lURVJcbi0tXG5saWIvS2NvbmZpZy0zNTEtXG5saWIvS2NvbmZpZzozNTI6Y29uZmlnIFhBUlJBWV9NVUxUSVxubGliL0tjb25maWctMzUzLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjQ1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGVjaXBoZXJpbmcgYSBCb29sJiMzOTtzIE9yaWdpbnMqKgoKUmlnaHQsIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O20gbG9va2luZyBhdCBhIGJvb2xlYW4gdmFsdWUsIHNlZW1pbmdseSBpbmRlcGVuZGVudCBpbiBpdHNlbGYg4oCTIGl0JiMzOTtzIG5vdCBkaXJlY3RseSB0cmlnZ2VyZWQgYnkgYW55IHNwZWNpZmljIHVzZXIgcHJvbXB0IG9yIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyAqaW1wbGljaXRseSogc2V0IGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEluIG15IGxpbmUgb2Ygd29yaywgdGhpcyBpcyBhIHZlcnkgY29tbW9uIHNjZW5hcmlvLiBTbywgdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogd2hhdCBhcmUgdGhlIHVwc3RyZWFtIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgYWN0aXZhdGluZyB0aGlzIGBYQVJSQVlfTVVMVElgIGZsYWc/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gY2hhaW4uIFRoZSBjb3JlIG9mIGRlYnVnZ2luZyB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMgbGllcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV4IHJlbGF0aW9uc2hpcHMgb2YgZGVwZW5kZW5jaWVzIHdpdGhpbiBhIGxhcmdlIHN5c3RlbS4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb25maWcgZmlsZXMgYW5kIHNlZSB3aGF0JiMzOTtzIGNhbGxpbmcgdGhlIHNob3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgWEFSUkFZX01VTFRJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTgyNz1jb25maWcgWDg2X1NHWFxuLS1cbmFyY2gveDg2L0tjb25maWctMTgzMi1cdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GTyBpZiBOVU1BXG5hcmNoL3g4Ni9LY29uZmlnOjE4MzM6XHRzZWxlY3QgWEFSUkFZX01VTFRJXG5hcmNoL3g4Ni9LY29uZmlnLTE4MzQtXHRoZWxwXG4tLVxuZnMvS2NvbmZpZz0yNzM9Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbmZzL0tjb25maWc6Mjc1Olx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuZnMvS2NvbmZpZy0yNzYtXG4tLVxubW0vS2NvbmZpZz04NDY9bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuLS1cbm1tL0tjb25maWctODQ5LVx0c2VsZWN0IENPTVBBQ1RJT05cbm1tL0tjb25maWc6ODUwOlx0c2VsZWN0IFhBUlJBWV9NVUxUSVxubW0vS2NvbmZpZy04NTEtXHRzZWxlY3QgTU1fSURcbi0tXG5tbS9LY29uZmlnPTEyMzY9Y29uZmlnIFpPTkVfREVWSUNFXG4tLVxubW0vS2NvbmZpZy0xMjQwLVx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxubW0vS2NvbmZpZzoxMjQxOlx0c2VsZWN0IFhBUlJBWV9NVUxUSVxubW0vS2NvbmZpZy0xMjQyLVxuLS1cbnNvdW5kL2NvcmUvS2NvbmZpZz0xODE9Y29uZmlnIFNORF9DVExfRkFTVF9MT09LVVBcbi0tXG5zb3VuZC9jb3JlL0tjb25maWctMTgzLVx0ZGVmYXVsdCB5XG5zb3VuZC9jb3JlL0tjb25maWc6MTg0Olx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuc291bmQvY29yZS9LY29uZmlnLTE4NS1cdGhlbHBcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTEwNj1jb25maWcgS1ZNX0dVRVNUX01FTUZEXG52aXJ0L2t2bS9LY29uZmlnOjEwNzogICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxudmlydC9rdm0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkxNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBYQXJyYXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhlIFhBcnJheSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgYFhBUlJBWV9NVUxUSWAgZ2V0cyBwdWxsZWQgaW4gYnkgYSBmZXcgZGlmZmVyZW50IHNldHRpbmdzOiBlaXRoZXIgYEhVR0VUTEJfUEFHRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIG9yIGBTTkRfQ1RMX0ZBU1RfTE9PS1VQYC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIFNvLCBpZiBJIHdhbnQgYFhBUlJBWV9NVUxUSWAgZW5hYmxlZCwganVzdCBpbmNsdWRpbmcgZWl0aGVyIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3IgYEhVR0VUTEJGU2Agc2VlbXMgbGlrZSB0aGUgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoLgoKQW5kIHRoZW4gdGhlcmUmIzM5O3MgYFRFU1RfWEFSUkFZYCwgYSB0cmlzdGF0ZSBvcHRpb24uIE9idmlvdXNseSwgSSBzaG91bGQgZW5hYmxlIHRoYXQgdG8gcnVuIHRoZSB0ZXN0cywgcmlnaHQ/IEJ1dCB0aGVuIEkgd29uZGVyLCBob3cgZG8gdGhlc2UgdGVzdHMgYWN0dWFsbHkgcnVuPyBJcyB0aGlzIGEga3VuaXQgdGVzdCB0aGF0JiMzOTtzIGF1dG9tYXRpY2FsbHkgcnVuIHdoZW4gdGhlIGtlcm5lbCBpcyBjb21waWxlZCBvciB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkPyBPciBpcyBpdCBzb21ldGhpbmcgZWxzZT8gU3l6a2FsbGVyIGNvdWxkIHByb2JhYmx5IGxvYWQgaXQsIG9yIEkgY291bGQganVzdCBidWlsZCBpdCBpbi4KCldhaXQgYSBzZWNvbmTigKYgTm8sIGl0JiMzOTtzIG5vdCBhIGt1bml0IHRlc3QuIEl0JiMzOTtzIGEgKnN0YW5kYWxvbmUqIHRlc3QgbW9kdWxlLiBSaWdodCwgdGhhdCBtYWtlcyBtb3JlIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIHJ1bnMuIEkgc2hvdWxkIGp1c3QgZ28gbG9vayBhdCBgbGliL3Rlc3RfeGFycmF5LmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgaW52b2tlZC4gVGhhdCYjMzk7cyBwcm9iYWJseSB0aGUgYmVzdCBhcHByb2FjaCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL3Rlc3RfeGFycmF5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL3Rlc3RfeGFycmF5LmM9MjMzMj1zdGF0aWMgdm9pZCB4YXJyYXlfZXhpdCh2b2lkKVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTIzMzUtXG5saWIvdGVzdF94YXJyYXkuYzoyMzM2Om1vZHVsZV9pbml0KHhhcnJheV9jaGVja3MpO1xubGliL3Rlc3RfeGFycmF5LmMtMjMzNy1tb2R1bGVfZXhpdCh4YXJyYXlfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTI1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqWEFycmF5IFRlc3QgTW9kdWxlIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0ZXN0IGZvciB0aGUgWEFycmF5IG1vZHVsZSBpcyBraWNraW5nIG9mZiBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFRoYXQgbWVhbnMgYENPTkZJR19URVNUX1hBUlJBWT15YCBpcyBiZWluZyBzZXQsIGFuZCB0aGUgYnVpbGQgc3lzdGVtIGlzIGNvcnJlY3RseSBleGVjdXRpbmcgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUgYXQgYm9vdC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCB3aGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYENPTkZJR19URVNUX1hBUlJBWWAgcHVsbHMgaW4gYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgdGVzdCYjMzk7cyBiZWhhdmlvciBvciBlbnZpcm9ubWVudC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gYXdhcmUgb2YgdGhlIGNvbXBsZXRlIGRlcGVuZGVuY3kgY2hhaW4gdG8gdHJvdWJsZXNob290IGFueSB1bmV4cGVjdGVkIGlzc3VlcyBsYXRlciBvbi4gTGV0IG1lIGdvIGxvb2sgaW50byB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBURVNUX1hBUlJBWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTI1NTc9Y29uZmlnIFRFU1RfQklUTUFQXG4tLVxubGliL0tjb25maWcuZGVidWctMjU2My1cbmxpYi9LY29uZmlnLmRlYnVnOjI1NjQ6Y29uZmlnIFRFU1RfWEFSUkFZXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTY1LVx0dHJpc3RhdGUgXCYjMzQ7VGVzdCB0aGUgWEFycmF5IGNvZGUgYXQgcnVudGltZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgyOAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDUzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB4YXNfZmluZGAgTW9kaWZpY2F0aW9uIGluIFhBcnJheSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW55IG5ldyBkZXBlbmRlbmNpZXMuIFRoYXQmIzM5O3MgYWx3YXlzIGdvb2QuIFRoZSBmYWN0IHRoYXQgYFRFU1RfWEFSUkFZYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhcmUgcmVsZXZhbnQgY29uZmlncyAoc3BlY2lmaWNhbGx5IHRvIGdldCBgWEFSUkFZX01VTFRJYCkgbWFrZXMgc2Vuc2UgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBJIHNlZSB0aGF0IHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGB4YXNfZmluZGAuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgKm9ubHkqIGZ1bmN0aW9uIGltcGFjdGVkLiBZdXAsIGNoZWNraW5nIGBsaWIveGFycmF5LmNgIGNvbmZpcm1zIHRoYXQuIEkgc2hvdWxkIG1ha2UgYSBub3RlIHRvIGFkZCBgeGFzX2ZpbmRgIHRvIGBGb2N1c1N5bWJvbHNgLCBqdXN0IHRvIGJlIHNhZmUuCgpXYWl0LCBsb29raW5nIGFnYWluLCBgeGFzX2ZpbmRgIGlzIGV4cG9ydGVkLiBUaGF0IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byBtYWtlIHN1cmUgaXQmIzM5O3Mgbm90IGlubGluZWQuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24gYHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClgLCBpdCYjMzk7cyBub3QuIEFscmlnaHQsIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggaXRzZWxmOiBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGNoYW5nZWQgdGhlIGxvZ2ljIGFyb3VuZCB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uIHdpdGhpbiBgeGFzX2ZpbmRgLiBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgY2hlY2sgb24gYHhhcy0mZ3Q7eGFfbm9kZS0mZ3Q7c2hpZnRgIHRoYXQgaGFzIGJlZW4gYWRkZWQgb3IgbW9kaWZpZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHdhczoKCmBgYGMKfSBlbHNlIGlmICgheGFzLSZndDt4YV9ub2RlLSZndDtzaGlmdCAmYW1wOyZhbXA7CiAgICAgICAgICAgeGFzLSZndDt4YV9vZmZzZXQgIT0gKHhhcy0mZ3Q7eGFfaW5kZXggJmFtcDsgWEFfQ0hVTktfTUFTSykpIHsKICAgIHhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKfQpgYGAKClRoaXMgbm93IHNlZW1zIHRvIGJlOgoKYGBgYwp9IGVsc2UgaWYgKHhhcy0mZ3Q7eGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKSkgewogICAgaWYgKCF4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0KQogICAgICAgIHhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKICAgIGVsc2UKICAgICAgICB4YXMtJmd0O3hhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKTsKfQpgYGAKCkFscmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBgeGFzX2ZpbmRgIGFzIGV4cGVjdGVkLCBidXQgd2hhdCBkb2VzIHRoZSBhc3NvY2lhdGVkIHRlc3QgY2FzZSBsb29rIGxpa2U/IExvb2tpbmcgYXQgYGxpYi90ZXN0X3hhcnJheS5jYCwgdGhlIHJlbGV2YW50IHRlc3QgaXMgYGNoZWNrX211bHRpX2ZpbmRfNGAuIFNvIHRoYXQgdGVzdCBjYXNlIHdpbGwgbGlrZWx5IGV4ZXJjaXNlIHRoaXMgbmV3IGxvZ2ljIGFuZCBnaXZlIHNvbWUgY29uZmlkZW5jZSBpbiB0aGUgcGF0Y2guCgpOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBpbiBteSBtaW5kOiBJcyBgeGFzX2ZpbmRgIGEgaG90LXBhdGggZnVuY3Rpb24/IEdpdmVuIHRoYXQgWEFycmF5IGlzIHVzZWQgZXh0ZW5zaXZlbHkgaW4gdGhlIHBhZ2UgY2FjaGUgYW5kIG90aGVyIGNvcmUgc3Vic3lzdGVtcywgbXkgaHVuY2ggaXMgdGhhdCBgeGFzX2ZpbmRgIGNvdWxkIHZlcnkgd2VsbCBiZSBwZXJmb3JtYW5jZS1zZW5zaXRpdmUuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBvZmZzZXQgY2FsY3VsYXRpb24sIHNvIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgeGFzX2ZpbmRgIGlzIHVzZWQgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyBwZXJmb3JtYW5jZS1jcml0aWNhbCB0aGlzIGNoYW5nZSBtaWdodCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGFzX2ZpbmRcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTQxNz1oZWxkLCB3aGlsZSBtb3ZpbmcgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgaW5kZXggZG9lcy5cbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00MTgtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q6NDE5OllvdSBjYW4gc2VhcmNoIGZvciB0aGUgbmV4dCBwcmVzZW50IGVudHJ5IHVzaW5nIHhhc19maW5kKCkuICBUaGlzXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDIwLWlzIHRoZSBlcXVpdmFsZW50IG9mIGJvdGggeGFfZmluZCgpIGFuZCB4YV9maW5kX2FmdGVyKCk7XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTQyMz1lbnRyeSBhdCB0aGUgaW5kZXggb2YgdGhlIHhhX3N0YXRlLiAgVXNpbmcgeGFzX25leHRfZW50cnkoKSB0b1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjQyNDptb3ZlIHRvIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW5zdGVhZCBvZiB4YXNfZmluZCgpIHdpbGwgc2F2ZVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0LTQyNS1hIGZ1bmN0aW9uIGNhbGwgaW4gdGhlIG1ham9yaXR5IG9mIGNhc2VzIGF0IHRoZSBleHBlbnNlIG9mIGVtaXR0aW5nIG1vcmVcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9NDc3PWluIHRoZSB4YV9zdGF0ZSB3aWxsIG5vdCBiZSBjaGFuZ2VkLiAgV2hlbiBpdGVyYXRpbmcgb3ZlciBhbiBYQXJyYXlcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0Nzg6b3IgY2FsbGluZyB4YXNfZmluZCgpLCBpZiB0aGUgaW5pdGlhbCBpbmRleCBpcyBpbiB0aGUgbWlkZGxlXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDc5LW9mIGEgbXVsdGktaW5kZXggZW50cnksIGl0IHdpbGwgbm90IGJlIGFsdGVyZWQuICBTdWJzZXF1ZW50IGNhbGxzXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdD0zMTU9eGFzX2xvYWQoKeS8muWwveWPr+iDveWcsOWwhnhhX3N0YXRl56e75Yqo5Yiw6K+l5p2h55uu6ZmE6L+R44CC5aaC5p6c5L2g55+l6YGTeGFfc3RhdGXlt7Lnu4/np7vliqjliLDkuobor6XmnaHnm67vvIzlubbkuJTpnIDopoHmo4Dmn6Vcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTMyMS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3Q6MzIyOuS9oOWPr+S7peS9v+eUqHhhc19maW5kKCnmkJzntKLkuIvkuIDkuKrlvZPliY3mnaHnm67jgILov5nnm7jlvZPkuo54YV9maW5kKCnlkox4YV9maW5kX2FmdGVyKCnvvJvlpoLmnpzlhYnmoIflt7Lnu4/np7vliqjliLDkuoZcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzIzLeS4gOS4quadoeebru+8jOmCo+S5iOWug+WwhuaJvuWIsOW9k+WJjeW8leeUqOeahOadoeebruS5i+WQjueahOS4i+S4gOS4quadoeebruOAguWmguaenOayoeacie+8jOWug+Wwhui/lOWbnnhhX3N0YXRl57Si5byV5aSE55qE5p2h55uu44CC5L2/55SoXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0OjMyNDp4YXNfbmV4dF9lbnRyeSgp6ICM5LiN5piveGFzX2ZpbmQoKeadpeenu+WKqOWIsOS4i+S4gOS4quW9k+WJjeadoeebru+8jOWcqOWkp+WkmuaVsOaDheWGteS4i+S8muiKguecgeS4gOS4quWHveaVsOiwg+eUqO+8jOS9huS7o+S7t1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0zMjUt5piv5Y+R5Ye65pu05aSa5YaF6IGU5Luj56CB44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdD0zNDU9WEFycmF55pyJ6IO95Yqb5bCG5aSa5Liq57Si5byV6IGU57O75Zyo5LiA6LW377yM5Zug5q2k5a+55LiA5Liq57Si5byV55qE5pON5L2c5Lya5b2x5ZON5Yiw5omA5pyJ55qE57Si5byV44CC5L6L5aaC77yM5a2Y5YKo5Yiw5Lu75L2V57Si5byV5bCGXHVmZmZkXHVmZmZkLi4uXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0zNTQtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0OjM1NTrlpoLmnpx4YXNfbG9hZCgp6YGH5Yiw5LiA5Liq5aSa57Si5byV5p2h55uu77yMeGFfc3RhdGXkuK3nmoR4YV9pbmRleOWwhuS4jeS8muiiq+aUueWPmOOAguW9k+mBjeWOhuS4gOS4qlhBcnJheeaIluiAheiwg+eUqHhhc19maW5kKClcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzU2LeaXtu+8jOWmguaenOWIneWni+e0ouW8leWcqOS4gOS4quWkmue0ouW8leadoeebrueahOS4remXtO+8jOWug+WwhuS4jeS8muiiq+aUueWPmOOAgumaj+WQjueahOiwg+eUqOaIlui/reS7o+WwhuaKiue0ouW8leenu+WIsOiMg+WbtOWGheeahOesrFx1ZmZmZFx1ZmZmZC4uLlxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTU0Mz12b2lkICp4YXNfc3RvcmUoc3RydWN0IHhhX3N0YXRlICosIHZvaWQgKmVudHJ5KTtcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTU0NDp2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKiwgdW5zaWduZWQgbG9uZyBtYXgpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNTQ1LXZvaWQgKnhhc19maW5kX2NvbmZsaWN0KHN0cnVjdCB4YV9zdGF0ZSAqKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE3MDE9c3RhdGljIGlubGluZSB2b2lkIHhhc19zZXRfbHJ1KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MTEtICogeGFzX25leHRfZW50cnkoKSBpcyBhbiBpbmxpbmUgZnVuY3Rpb24gdG8gb3B0aW1pc2UgeGFycmF5IHRyYXZlcnNhbCBmb3JcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTcxMjogKiBzcGVlZC4gIEl0IGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyB4YXNfZmluZCgpLCBhbmQgd2lsbCBjYWxsIHhhc19maW5kKClcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcxMy0gKiBmb3IgYWxsIHRoZSBoYXJkIGNhc2VzLlxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTcxNz1zdGF0aWMgaW5saW5lIHZvaWQgKnhhc19uZXh0X2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MjMtXHRcdFx0eGFzLVx1MDAzZXhhX29mZnNldCAhPSAoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAyNiBYQV9DSFVOS19NQVNLKSkpXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE3MjQ6XHRcdHJldHVybiB4YXNfZmluZCh4YXMsIG1heCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MjUtXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzI3LVx0XHRpZiAodW5saWtlbHkoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAzZT0gbWF4KSlcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTcyODpcdFx0XHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzI5LVx0XHRpZiAodW5saWtlbHkoeGFzLVx1MDAzZXhhX29mZnNldCA9PSBYQV9DSFVOS19NQVNLKSlcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTczMDpcdFx0XHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzMxLVx0XHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cdTAwM2V4YSwgbm9kZSwgeGFzLVx1MDAzZXhhX29mZnNldCAmIzQzOyAxKTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTczMi1cdFx0aWYgKHVubGlrZWx5KHhhX2lzX2ludGVybmFsKGVudHJ5KSkpXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE3MzM6XHRcdFx0cmV0dXJuIHhhc19maW5kKHhhcywgbWF4KTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTczNC1cdFx0eGFzLVx1MDAzZXhhX29mZnNldCYjNDM7JiM0Mzs7XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xODAwPWVudW0ge1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTgxNy0jZGVmaW5lIHhhc19mb3JfZWFjaCh4YXMsIGVudHJ5LCBtYXgpIFxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE4MTg6XHRmb3IgKGVudHJ5ID0geGFzX2ZpbmQoeGFzLCBtYXgpOyBlbnRyeTsgXFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTgxOS1cdCAgICAgZW50cnkgPSB4YXNfbmV4dF9lbnRyeSh4YXMsIG1heCkpXG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MTAyPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3hhc19yZXRyeShzdHJ1Y3QgeGFycmF5ICp4YSlcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0xMTAtXHRyY3VfcmVhZF9sb2NrKCk7XG5saWIvdGVzdF94YXJyYXkuYzoxMTE6XHRYQV9CVUdfT04oeGEsIHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKSAhPSB4YV9ta192YWx1ZSgwKSk7XG5saWIvdGVzdF94YXJyYXkuYy0xMTItXHR4YV9lcmFzZV9pbmRleCh4YSwgMSk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MTI1MD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzQoc3RydWN0IHhhcnJheSAqeGEpXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTI2Mi1cdHJjdV9yZWFkX2xvY2soKTtcbmxpYi90ZXN0X3hhcnJheS5jOjEyNjM6XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbmxpYi90ZXN0X3hhcnJheS5jLTEyNjQtXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0xMjY2LVxubGliL3Rlc3RfeGFycmF5LmM6MTI2NzpcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xubGliL3Rlc3RfeGFycmF5LmMtMTI2OC1cdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTI3MC1cbmxpYi90ZXN0X3hhcnJheS5jOjEyNzE6XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbmxpYi90ZXN0X3hhcnJheS5jLTEyNzItXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTEyODQtXHRyY3VfcmVhZF9sb2NrKCk7XG5saWIvdGVzdF94YXJyYXkuYzoxMjg1Olx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG5saWIvdGVzdF94YXJyYXkuYy0xMjg2LVx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTI5Ny1cdHJjdV9yZWFkX2xvY2soKTtcbmxpYi90ZXN0X3hhcnJheS5jOjEyOTg6XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbmxpYi90ZXN0X3hhcnJheS5jLTEyOTktXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTEzMDEtXG5saWIvdGVzdF94YXJyYXkuYzoxMzAyOlx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG5saWIvdGVzdF94YXJyYXkuYy0xMzAzLVx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbi0tXG5saWIvdGVzdF94YXJyYXkuYz0xNTg2PXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX21vdmVfbWF4KHN0cnVjdCB4YXJyYXkgKnhhKVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTE1OTEtXHRyY3VfcmVhZF9sb2NrKCk7XG5saWIvdGVzdF94YXJyYXkuYzoxNTkyOlx0WEFfQlVHX09OKHhhLCB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0geGFfbWtfaW5kZXgoVUxPTkdfTUFYKSk7XG5saWIvdGVzdF94YXJyYXkuYzoxNTkzOlx0WEFfQlVHX09OKHhhLCB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0gTlVMTCk7XG5saWIvdGVzdF94YXJyYXkuYy0xNTk0LVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTU5Ny1cdHJjdV9yZWFkX2xvY2soKTtcbmxpYi90ZXN0X3hhcnJheS5jOjE1OTg6XHRYQV9CVUdfT04oeGEsIHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKSAhPSB4YV9ta19pbmRleChVTE9OR19NQVgpKTtcbmxpYi90ZXN0X3hhcnJheS5jLTE1OTktXHR4YXNfcGF1c2UoXHUwMDI2eGFzKTtcbmxpYi90ZXN0X3hhcnJheS5jOjE2MDA6XHRYQV9CVUdfT04oeGEsIHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKSAhPSBOVUxMKTtcbmxpYi90ZXN0X3hhcnJheS5jLTE2MDEtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5saWIveGFycmF5LmM9MTM3NT1FWFBPUlRfU1lNQk9MX0dQTChfX3hhc19uZXh0KTtcbi0tXG5saWIveGFycmF5LmMtMTM3Ny0vKipcbmxpYi94YXJyYXkuYzoxMzc4OiAqIHhhc19maW5kKCkgLSBGaW5kIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW4gdGhlIFhBcnJheS5cbmxpYi94YXJyYXkuYy0xMzc5LSAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXG4tLVxubGliL3hhcnJheS5jLTEzOTItICovXG5saWIveGFycmF5LmM6MTM5Mzp2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXG5saWIveGFycmF5LmMtMTM5NC17XG4tLVxubGliL3hhcnJheS5jPTIxNzI9RVhQT1JUX1NZTUJPTCh4YV9jbGVhcl9tYXJrKTtcbi0tXG5saWIveGFycmF5LmMtMjE4NS0gKiBlbnRyaWVzIHdoaWNoIGFyZSBiZWluZyBzaW11bHRhbmVvdXNseSBhZGRlZC4gIEl0IHdpbGwgbm90IHJldHVybiBhblxubGliL3hhcnJheS5jOjIxODY6ICogJVhBX1JFVFJZX0VOVFJZOyBpZiB5b3UgbmVlZCB0byBzZWUgcmV0cnkgZW50cmllcywgdXNlIHhhc19maW5kKCkuXG5saWIveGFycmF5LmMtMjE4Ny0gKlxuLS1cbmxpYi94YXJyYXkuYz0yMTkxPXZvaWQgKnhhX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgKmluZGV4cCxcbi0tXG5saWIveGFycmF5LmMtMjIwMS1cdFx0ZWxzZVxubGliL3hhcnJheS5jOjIyMDI6XHRcdFx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIG1heCk7XG5saWIveGFycmF5LmMtMjIwMy1cdH0gd2hpbGUgKHhhc19yZXRyeShcdTAwMjZ4YXMsIGVudHJ5KSk7XG4tLVxubGliL3hhcnJheS5jPTIyMTI9c3RhdGljIGJvb2wgeGFzX3NpYmxpbmcoc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubGliL3hhcnJheS5jLTIyMzUtICogd2hpY2ggYXJlIGJlaW5nIHNpbXVsdGFuZW91c2x5IGFkZGVkLiAgSXQgd2lsbCBub3QgcmV0dXJuIGFuXG5saWIveGFycmF5LmM6MjIzNjogKiAlWEFfUkVUUllfRU5UUlk7IGlmIHlvdSBuZWVkIHRvIHNlZSByZXRyeSBlbnRyaWVzLCB1c2UgeGFzX2ZpbmQoKS5cbmxpYi94YXJyYXkuYy0yMjM3LSAqXG4tLVxubGliL3hhcnJheS5jPTIyNDE9dm9pZCAqeGFfZmluZF9hZnRlcihzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyAqaW5kZXhwLFxuLS1cbmxpYi94YXJyYXkuYy0yMjU0LVx0XHRlbHNlXG5saWIveGFycmF5LmM6MjI1NTpcdFx0XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgbWF4KTtcbmxpYi94YXJyYXkuYy0yMjU2LVxuLS1cbm1tL2ZpbGVtYXAuYz00Nzk9Ym9vbCBmaWxlbWFwX3JhbmdlX2hhc19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2ZpbGVtYXAuYy00OTAtXHRmb3IgKDs7KSB7XG5tbS9maWxlbWFwLmM6NDkxOlx0XHRmb2xpbyA9IHhhc19maW5kKFx1MDAyNnhhcywgbWF4KTtcbm1tL2ZpbGVtYXAuYy00OTItXHRcdGlmICh4YXNfcmV0cnkoXHUwMDI2eGFzLCBmb2xpbykpXG4tLVxubW0vZmlsZW1hcC5jPTIwNzg9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmZpbmRfZ2V0X2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBwZ29mZl90IG1heCxcbi0tXG5tbS9maWxlbWFwLmMtMjA4NC1cdGlmIChtYXJrID09IFhBX1BSRVNFTlQpXG5tbS9maWxlbWFwLmM6MjA4NTpcdFx0Zm9saW8gPSB4YXNfZmluZCh4YXMsIG1heCk7XG5tbS9maWxlbWFwLmMtMjA4Ni1cdGVsc2Vcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI0MzQ9Ym9vbCBrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NDktXHRpZiAoIWF0dHJzKVxudmlydC9rdm0va3ZtX21haW4uYzoyNDUwOlx0XHRyZXR1cm4gIXhhc19maW5kKFx1MDAyNnhhcywgZW5kIC0gMSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzE5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBhbmQgQ29uZmlndXJhdGlvbiBmb3IgWEFycmF5IEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiBpdCBlZmZlY3RpdmVseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHhhc19maW5kYCBpcyBkZWZpbml0ZWx5IGEgaG90LXBhdGggZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWQgaW4gc2V2ZXJhbCBjcml0aWNhbCBhcmVhcyBsaWtlIGBmaWxlbWFwX3JhbmdlX2hhc19wYWdlYCBhbmQgYGZpbmRfZ2V0X2VudHJ5YC4gU28sIGFzIHBlciB0aGUgaW5zdHJ1Y3Rpb25zLCBJICpzaG91bGQgbm90KiBsaXN0IGB4YXNfZmluZGAgaW4gYEZvY3VzU3ltYm9sc2AgYmVjYXVzZSBkb2luZyBzbyB3b3VsZCBza2V3IHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbnMsIGFuZCBpdCBpcyBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24uCgpXaGF0IGFib3V0IHRoZSB0ZXN0IGZ1bmN0aW9uIGBjaGVja19tdWx0aV9maW5kXzRgIHRob3VnaD8gSXTigJlzIGEgc3RhdGljLCBsaWtlbHkgaW5saW5lZCAob3IgYHN0YXRpYyBub2lubGluZWApIHRlc3QgZnVuY3Rpb24uIEJ1dCwgZnV6emluZyBhIHRlc3QgZnVuY3Rpb24gZGlyZWN0bHkgZG9lc27igJl0IHJlYWxseSBtYWtlIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIFN5emthbGxlciYjMzk7cyBnb2Fscy4gSSBhbSBhaW1pbmcgdG8gZmluZCBrZXJuZWwtbGV2ZWwgZW50cnlwb2ludHMuCgpUaGVyZWZvcmUsIGBGb2N1c1N5bWJvbHNgIHdpbGwgcmVtYWluIGVtcHR5LiBDaGVja2luZyBmb3Igb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zIGNvbmZpcm1zIHRoaXMuCgpOb3csIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbiwgdGhlIGdvYWwgaXMgdG8gZW5hYmxlIHRoZSB0ZXN0IGNhc2UgdGhhdCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyB0aGUgYnVnLiBUaGUgcHJvbXB0IHNheXMgdGhhdCBJIHNob3VsZCBlbmFibGUgdGhlIHRlc3QgY2FzZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGB4YXNfZmluZGAgYW5kIGBjaGVja19tdWx0aV9maW5kXzRgIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHRlc3QgY2FzZSBjYW4gYmUgcnVuLiBJbml0aWFsbHksIEkgdGhvdWdodCBhYm91dCBgVEVTVF9YQVJSQVlgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBzaW5jZSB0aGUgbGF0dGVyIHNlbGVjdHMgYFhBUlJBWV9NVUxUSWAuIEJ1dCBgSFVHRVRMQkZTYCAqYWxzbyogc2VsZWN0cyBgWEFSUkFZX01VTFRJYCBhbmQgc2VlbXMgbGlrZSBhIG1vcmUgc3RyYWlnaHRmb3J3YXJkIG9wdGlvbiwgcmV2aWV3aW5nIGBsaWIvS2NvbmZpZ2AgY29uZmlybXMgdGhpcy4KClRoaW5raW5nIGFib3V0IGBURVNUX1hBUlJBWWAsIGlmIGl0JiMzOTtzIGJ1aWx0LWluIChgQ09ORklHX1RFU1RfWEFSUkFZPXlgKSwgaXQgcnVucyBhdCBib290LiBJZiBpdCYjMzk7cyBhIG1vZHVsZSAoYENPTkZJR19URVNUX1hBUlJBWT1tYCksIGl0IHJ1bnMgb24gbW9kdWxlIGxvYWQuIFN5emthbGxlciBjYW4gbG9hZCBtb2R1bGVzIGlmIHRoZXkgYXJlIHByZXNlbnQuIEJ1dCB0aGUgYWN0dWFsIGJ1ZyBpcyBpbiBgeGFzX2ZpbmRgLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBwbGFjZXMgbGlrZSBgbW1hcGAsIGByZWFkYCwgYHdyaXRlYCwgYW5kIHNvIG9uLiBTbyB0aGUgYnVnIGlzIHJlYWNoYWJsZSBldmVuIHdpdGhvdXQgYFRFU1RfWEFSUkFZYC4gSG93ZXZlciwgdGhlIHRlc3QgY2FzZSBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZXhwb3NlIHRoZSBidWcuIEVuYWJsaW5nIGBURVNUX1hBUlJBWT15YCBlbnN1cmVzIHRoYXQgdGhlIGtlcm5lbCBydW5zIHRoZSB0ZXN0IGF0IGJvb3QsIGNyYXNoaW5nIGltbWVkaWF0ZWx5IGlmIHRoZSBidWcgaXMgcHJlc2VudC4gVGhpcyBpcyBpZGVhbCEKClNvLCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGluY2x1ZGUgYFRFU1RfWEFSUkFZYCBhbmQgYEhVR0VUTEJGU2AgKHRvIGVuYWJsZSBgWEFSUkFZX01VTFRJYCkuIEkgY29uZmlybWVkIHRoYXQgYEhVR0VUTEJGU2AgaXMgYSBjb21tb24gY29uZmlnIGFuZCBpcyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgdG8gdXNlLiBMZXQgbWUgZG91YmxlIGNoZWNrLi4uIFllcywgaXQmIzM5O3MgdGhlIHJpZ2h0IGNob2ljZS4KCkluIHN1bW1hcnksIHRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgeGFzX2ZpbmQoKWAgd2l0aGluIHRoZSBYQXJyYXkgY29kZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aS1pbmRleCBlbnRyaWVzLiBUaGlzIGlzIGNvcmUgWEFycmF5IGxvZ2ljIGFuZCB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgdGVzdCBjYXNlLCBgY2hlY2tfbXVsdGlfZmluZF80YC4gVG8gbWF4aW1pemUgZnV6emluZyBlZmZlY3RpdmVuZXNzLCBJJiMzOTtsbCBleGNsdWRlIGB4YXNfZmluZGAgZnJvbSBgRm9jdXNTeW1ib2xzYC4gVG8gZW5zdXJlIHRoZSBhZGRlZCB0ZXN0IGNhc2UgcnVucyBhbmQgY2F0Y2hlcyBwb3RlbnRpYWwgaXNzdWVzLCBgQ09ORklHX1RFU1RfWEFSUkFZYCBhbmQgYENPTkZJR19IVUdFVExCRlNgICh3aGljaCBlbmFibGVzIGBDT05GSUdfWEFSUkFZX01VTFRJYCkgd2lsbCBiZSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTQ5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVmVyaWZ5aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBgSFVHRVRMQkZTYOKAlHllcCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQuIENvbmZpcm1lZC4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSBhYm91dCBgQ09ORklHX1RFU1RfWEFSUkFZYC4gSXQmIzM5O3MgYSBrZXkgcGllY2UsIGFuZCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBzZXQgYXBwcm9wcmlhdGVseSBnaXZlbiB0aGUgZGlyZWN0aW9uIG9mIHRoaXMgcHJvamVjdC4gTm8gcm9vbSBmb3IgYXNzdW1wdGlvbnMgaGVyZS4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRFU1RfWEFSUkFZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MjU1Nz1jb25maWcgVEVTVF9CSVRNQVBcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTYzLVxubGliL0tjb25maWcuZGVidWc6MjU2NDpjb25maWcgVEVTVF9YQVJSQVlcbmxpYi9LY29uZmlnLmRlYnVnLTI1NjUtXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IHRoZSBYQXJyYXkgY29kZSBhdCBydW50aW1lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDAxCgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBYQXJyYXkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYFRFU1RfWEFSUkFZYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZm9jdXMgb24gaGVyZS4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmdXJ0aGVyLCBnaXZlbiBteSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCBpbnRlcm5hbHMgYW5kIFhBcnJheSBzcGVjaWZpY2FsbHkuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBidWcgd2l0aGluIGB4YXNfZmluZCgpYC4gVGhhdCYjMzk7cyBhICptYWpvciogZnVuY3Rpb24gd2l0aGluIHRoZSBYQXJyYXkgc3lzdGVtOyBpdCYjMzk7cyBwcmFjdGljYWxseSBhIGxpbmNocGluLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRoZSBwYWdlIGNhY2hlIGFuZCBvdGhlciBjcml0aWNhbCBzdWJzeXN0ZW1zLiBUaGUgYnVnIGl0c2VsZiB0YXJnZXRzIG11bHRpLWluZGV4IGVudHJ5IHNlYXJjaGVzLCB3aGljaCwgYXMgd2Uga25vdywgY2FuIGdldCB0cmlja3kuCgpGcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBtYWtlcyB0aGUgcGF0Y2ggaGlnaGx5IHJlbGV2YW50LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBhcHByb3ByaWF0ZWx5IHNldCB0byBgdHJ1ZWAuIEJlY2F1c2UgYHhhc19maW5kKClgIGlzIGEgZ2VuZXJpYywgY29yZSBmdW5jdGlvbiBpbiBhIGhvdCBwYXRoLCBpdCYjMzk7cyBjb3JyZWN0IHRvIGV4Y2x1ZGUgaXQgZnJvbSB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhlIHJlYWwgYmVuZWZpdCBoZXJlIGNvbWVzIGZyb20gZW5zdXJpbmcgdGhpcyBuZXcgdGVzdCBjYXNlLCBgY2hlY2tfbXVsdGlfZmluZF80YCwgd2l0aGluIGBsaWIvdGVzdF94YXJyYXkuY2AsIGFjdHVhbGx5ICpydW5zKiBkdXJpbmcgZnV6emluZy4KClRoZXJlZm9yZSwgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgYXJlIGBURVNUX1hBUlJBWWAgKHRoYXQmIzM5O3Mgb2J2aW91cykgYW5kIGBIVUdFVExCRlNgLiBUaGUgbGF0dGVyIGlzIGVzc2VudGlhbCBiZWNhdXNlIGl0IHNlbGVjdHMgYENPTkZJR19YQVJSQVlfTVVMVElgLCB3aGljaCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIG11bHRpLWluZGV4IHRlc3QgYWRkZWQgYnkgdGhlIHBhdGNoLiBUaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBhcHByb2FjaCB0byBtYXhpbWl6ZSB0ZXN0IGNvdmVyYWdlIG9mIHRoaXMgcGFydGljdWxhciBidWcgZml4IHdpdGhpbiB0aGUgZnV6emluZyBmcmFtZXdvcmsuIEl0IGNvcnJlY3RseSBpZGVudGlmaWVzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGVzdCBleGVjdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtURVNUX1hBUlJBWSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHhhc19maW5kKClgLCBhIGNvcmUgWEFycmF5IGZ1bmN0aW9uIHVzZWQgZXh0ZW5zaXZlbHkgaW4gdGhlIGtlcm5lbCAoZS5nLiwgcGFnZSBjYWNoZSkuIFRoZSBidWcgb2NjdXJzIHdoZW4gc2VhcmNoaW5nIGZvciBtdWx0aS1pbmRleCBlbnRyaWVzLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgdGVzdCBjYXNlIGBjaGVja19tdWx0aV9maW5kXzRgIHRvIGBsaWIvdGVzdF94YXJyYXkuY2AuIFNpbmNlIGB4YXNfZmluZCgpYCBpcyBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24sIGl0IGlzIGV4Y2x1ZGVkIGZyb20gRm9jdXNTeW1ib2xzLiBUbyBlbnN1cmUgdGhlIG5ldyB0ZXN0IGNhc2UgaXMgZXhlY3V0ZWQsIGBDT05GSUdfVEVTVF9YQVJSQVlgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgKHdoaWNoIHNlbGVjdHMgYENPTkZJR19YQVJSQVlfTVVMVElgIHJlcXVpcmVkIGJ5IHRoZSB0ZXN0KSBzaG91bGQgYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9YQVJSQVkmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB4YXNfZmluZCgpYCwgYSBjb3JlIFhBcnJheSBmdW5jdGlvbiB1c2VkIGV4dGVuc2l2ZWx5IGluIHRoZSBrZXJuZWwgKGUuZy4sIHBhZ2UgY2FjaGUpLiBUaGUgYnVnIG9jY3VycyB3aGVuIHNlYXJjaGluZyBmb3IgbXVsdGktaW5kZXggZW50cmllcy4gVGhlIHBhdGNoIGFsc28gYWRkcyBhIHRlc3QgY2FzZSBgY2hlY2tfbXVsdGlfZmluZF80YCB0byBgbGliL3Rlc3RfeGFycmF5LmNgLiBTaW5jZSBgeGFzX2ZpbmQoKWAgaXMgYSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uLCBpdCBpcyBleGNsdWRlZCBmcm9tIEZvY3VzU3ltYm9scy4gVG8gZW5zdXJlIHRoZSBuZXcgdGVzdCBjYXNlIGlzIGV4ZWN1dGVkLCBgQ09ORklHX1RFU1RfWEFSUkFZYCBhbmQgYENPTkZJR19IVUdFVExCRlNgICh3aGljaCBzZWxlY3RzIGBDT05GSUdfWEFSUkFZX01VTFRJYCByZXF1aXJlZCBieSB0aGUgdGVzdCkgc2hvdWxkIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIHhhcnJheSBtdWx0aS1pbmRleCBmaW5kIGltcGxlbWVudGF0aW9uIChgeGFzX2ZpbmRgKS4gVGhlIGlzc3VlIGludm9sdmVzIGluY29ycmVjdCBvZmZzZXQgY2FsY3VsYXRpb25zIGR1cmluZyB4YXJyYXkgdHJhdmVyc2FsLCB3aGljaCBjb3VsZCBsZWFkIHRvIHJldHVybmluZyBpbmNvcnJlY3QgZW50cmllcywgaW5maW5pdGUgbG9vcHMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4gKGlmIHRoZXkgbGVhZCB0byBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyksIG9yIG90aGVyIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY3OTM1MzYzNTQ1YmUxMTAwNDExMmEzYmRmZmE2NmUzMzEyYzVmNmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAxMjo0Njo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3hhcnJheS5jIGIvbGliL3Rlc3RfeGFycmF5LmMKaW5kZXggNWNhMGFlZmVlOWFhNS4uN2QwZGVjY2RmNTlhMCAxMDA2NDQKLS0tIGEvbGliL3Rlc3RfeGFycmF5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RfeGFycmF5LmMKQEAgLTEyNDcsNiAmIzQzOzEyNDcsNjcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8zKHN0cnVjdCB4YXJyYXkgKnhhKQogCX0KIH0KIAomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVEkKJiM0MzsJWEFfU1RBVEUoeGFzLCB4YSwgMTAwKTsKJiM0MzsJWEFfU1RBVEVfT1JERVIoeGFzX3NwbGl0LCB4YSwgMCwgMCk7CiYjNDM7CXZvaWQgKmVudHJ5OwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CS8qICgxKSBPcmRlci03IGVudHJ5ICgwLTEyNykgd2l0aCBhZGphY2VudCBlbnRyeSBhdCAxMjgsIHN0YXJ0aW5nIGF0IDEwMCAqLwomIzQzOwl4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApOwomIzQzOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpOwomIzQzOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJeGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7CiYjNDM7CXhhX2VyYXNlX2luZGV4KHhhLCAwKTsKJiM0MzsJWEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTsKJiM0MzsKJiM0MzsJLyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi8KJiM0MzsJeGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTsKJiM0MzsKJiM0MzsJeGFzX3NldCgmYW1wO3hhcywgMTAwKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXhhc19zcGxpdF9hbGxvYygmYW1wO3hhc19zcGxpdCwgeGEsIDcsIEdGUF9LRVJORUwpOwomIzQzOwl4YXNfbG9jaygmYW1wO3hhc19zcGxpdCk7CiYjNDM7CXhhc19zcGxpdCgmYW1wO3hhc19zcGxpdCwgeGEsIDcpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTI4OyBpJiM0MzsmIzQzOykKJiM0MzsJCV9feGFfc3RvcmUoeGEsIGksIHhhX21rX2luZGV4KGkpLCAwKTsKJiM0MzsJeGFzX3VubG9jaygmYW1wO3hhc19zcGxpdCk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTsKJiM0MzsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXhhX2Rlc3Ryb3koeGEpOwomIzQzOwlYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSkKIHsKIAl1bnNpZ25lZCBsb25nIGksIGosIGs7CkBAIC0xMzcwLDYgJiM0MzsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSkKIAkJY2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTsKIAljaGVja19tdWx0aV9maW5kXzIoeGEpOwogCWNoZWNrX211bHRpX2ZpbmRfMyh4YSk7CiYjNDM7CWNoZWNrX211bHRpX2ZpbmRfNCh4YSk7CiB9CiAKIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovCmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmMKaW5kZXggOWE4YjQ5MTY1NDBjZi4uOTgwMzI0ZDY4NmJkMCAxMDA2NDQKLS0tIGEvbGliL3hhcnJheS5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi94YXJyYXkuYwpAQCAtMTQwNiw5ICYjNDM7MTQwNiwxMSBAQCB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpCiAJCWVudHJ5ID0geGFzX2xvYWQoeGFzKTsKIAkJaWYgKGVudHJ5IHx8IHhhc19ub3Rfbm9kZSh4YXMtJmd0O3hhX25vZGUpKQogCQkJcmV0dXJuIGVudHJ5OwotCX0gZWxzZSBpZiAoIXhhcy0mZ3Q7eGFfbm9kZS0mZ3Q7c2hpZnQgJmFtcDsmYW1wOwotCQkgICAgeGFzLSZndDt4YV9vZmZzZXQgIT0gKHhhcy0mZ3Q7eGFfaW5kZXggJmFtcDsgWEFfQ0hVTktfTUFTSykpIHsKLQkJeGFzLSZndDt4YV9vZmZzZXQgPSAoKHhhcy0mZ3Q7eGFfaW5kZXggLSAxKSAmYW1wOyBYQV9DSFVOS19NQVNLKSAmIzQzOyAxOwomIzQzOwl9IGVsc2UgaWYgKHhhcy0mZ3Q7eGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKSkgewomIzQzOwkJaWYgKCF4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0KQomIzQzOwkJCXhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl4YXMtJmd0O3hhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKTsKIAl9CiAKIAl4YXNfbmV4dF9vZmZzZXQoeGFzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTEKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogNDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhhcnJheSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBsaWIveGFycmF5LmNgIGFuZCBhZGRpbmcgYSBuZXcgdGVzdCwgYGxpYi90ZXN0X3hhcnJheS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiB0aGUgYHhhc19maW5kYCBmdW5jdGlvbiB3aXRoaW4gYHhhcnJheS5jYC4gIExvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZSBvcmlnaW5hbCBjaGVjayBmb3Igb2Zmc2V0IGhhcyBiZWVuIG1vZGlmaWVkLiAgU3BlY2lmaWNhbGx5OgoKYGBgYwotCX0gZWxzZSBpZiAoIXhhcy0mZ3Q7eGFfbm9kZS0mZ3Q7c2hpZnQgJmFtcDsmYW1wOwotCQkgICAgeGFzLSZndDt4YV9vZmZzZXQgIT0gKHhhcy0mZ3Q7eGFfaW5kZXggJmFtcDsgWEFfQ0hVTktfTUFTSykpIHsKLQkJeGFzLSZndDt4YV9vZmZzZXQgPSAoKHhhcy0mZ3Q7eGFfaW5kZXggLSAxKSAmYW1wOyBYQV9DSFVOS19NQVNLKSAmIzQzOyAxOwomIzQzOwl9IGVsc2UgaWYgKHhhcy0mZ3Q7eGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKSkgewomIzQzOwkJaWYgKCF4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0KQomIzQzOwkJCXhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl4YXMtJmd0O3hhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKTsKIAl9CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhZGRyZXNzaW5nIGEgYnVnIGluIGhvdyBgeGFzX2ZpbmRgIGhhbmRsZXMgbXVsdGktaW5kZXggc2VhcmNoZXMsIGxpa2VseSByZWxhdGVkIHRvIGNhc2VzIHdoZXJlIGVudHJpZXMgYXJlIHNwbGl0IGFjcm9zcyBib3VuZGFyaWVzLiBUaGUgb3JpZ2luYWwgbG9naWMgc2VlbXMgdG8gaGF2ZSBhIGZsYXcgcmVsYXRlZCB0byBvZmZzZXQgY2FsY3VsYXRpb24sIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFuIGluZmluaXRlIGxvb3AsIG9yIGp1c3QgdGhlIHdyb25nIGVudHJ5IGJlaW5nIHJldHVybmVkLiAgVGhpcyBpcyBhIHRyYXZlcnNhbCBpc3N1ZS4KCk5vdywgY29uY2VybmluZyBtZW1vcnkgc2FmZXR5LCB0aGlzIGlzIHdoZXJlIG15IGV4cGVydGlzZSBjb21lcyBpbi4gIEkgZG9uJiMzOTt0IHNlZSBhbnkgZXZpZGVuY2UgaGVyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IEtNU0FOIHdvdWxkIGNhdGNoLiBUaGUgYHhhc19maW5kYCBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBhbiBlbnRyeTsgaWYgaXQgcmV0dXJucyB0aGUgd3JvbmcgZW50cnksIGl0IGlzIGxpa2VseSBhIGNyYXNoIG9yIGxvZ2ljIGJ1ZyBidXQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIHRoZSBtYWluIHVzZSBjYXNlIGZvciBLTVNBTi4gVGhlIGNvZGUgY2hhbmdlcyBhcHBlYXIgdG8gYmUgZW50aXJlbHkgY29uY2VybmVkIHdpdGggdGhlICpsb2dpYyogb2YgdGhlIHRyYXZlcnNhbCwgYW5kIG5vdCB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvciBoYW5kbGluZyBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkgaXRzZWxmLiBLQVNBTiBpcyBzdGlsbCByZWxldmFudCBoZXJlLCBhcyB0aGVyZSAqY291bGQqIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBIb3dldmVyLCBJJiMzOTtkIGJldCB0aGUgcHJpbWFyeSBpc3N1ZSBpcyBsb2dpYywgbm90IG1lbW9yeSBjb3JydXB0aW9uLiBUaGUgbmV3IHRlc3QsIGBjaGVja19tdWx0aV9maW5kXzRgLCBzZWVtcyB0byBiZSBleGVyY2lzaW5nIGB4YV9zdG9yZV9vcmRlcmAsIGB4YXNfZmluZGAsIGB4YXNfc3BsaXRgLCBldGMuLCBzbyBpdCYjMzk7cyBhIGdvb2Qgc2lnbiB0aGV5JiMzOTtyZSBjb3ZlcmluZyB0aGVzZSBib3VuZGFyeSBjb25kaXRpb25zLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXgsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiAgVGhpcyBpcyBhIGxvZ2ljIGJ1ZyBmaXgsIG5vdCBhIG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciBsZWFrIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgeGFycmF5IG11bHRpLWluZGV4IGZpbmQgaW1wbGVtZW50YXRpb24gKGB4YXNfZmluZGApLiBUaGUgaXNzdWUgaW52b2x2ZXMgaW5jb3JyZWN0IG9mZnNldCBjYWxjdWxhdGlvbnMgZHVyaW5nIHhhcnJheSB0cmF2ZXJzYWwsIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmV0dXJuaW5nIGluY29ycmVjdCBlbnRyaWVzLCBpbmZpbml0ZSBsb29wcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nLCBLQVNBTiAoaWYgdGhleSBsZWFkIHRvIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzKSwgb3Igb3RoZXIgc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSB4YXJyYXkgbXVsdGktaW5kZXggZmluZCBpbXBsZW1lbnRhdGlvbiAoYHhhc19maW5kYCkuIFRoZSBpc3N1ZSBpbnZvbHZlcyBpbmNvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9ucyBkdXJpbmcgeGFycmF5IHRyYXZlcnNhbCwgd2hpY2ggY291bGQgbGVhZCB0byByZXR1cm5pbmcgaW5jb3JyZWN0IGVudHJpZXMsIGluZmluaXRlIGxvb3BzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOIChpZiB0aGV5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMpLCBvciBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo0Njo0Mi41NDA3MjY4MTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU0NDQyMDQxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9YQVJSQVlcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSB4YXJyYXkgbXVsdGktaW5kZXggZmluZCBpbXBsZW1lbnRhdGlvbiAoYHhhc19maW5kYCkuIFRoZSBpc3N1ZSBpbnZvbHZlcyBpbmNvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9ucyBkdXJpbmcgeGFycmF5IHRyYXZlcnNhbCwgd2hpY2ggY291bGQgbGVhZCB0byByZXR1cm5pbmcgaW5jb3JyZWN0IGVudHJpZXMsIGluZmluaXRlIGxvb3BzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOIChpZiB0aGV5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMpLCBvciBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB4YXNfZmluZCgpYCwgYSBjb3JlIFhBcnJheSBmdW5jdGlvbiB1c2VkIGV4dGVuc2l2ZWx5IGluIHRoZSBrZXJuZWwgKGUuZy4sIHBhZ2UgY2FjaGUpLiBUaGUgYnVnIG9jY3VycyB3aGVuIHNlYXJjaGluZyBmb3IgbXVsdGktaW5kZXggZW50cmllcy4gVGhlIHBhdGNoIGFsc28gYWRkcyBhIHRlc3QgY2FzZSBgY2hlY2tfbXVsdGlfZmluZF80YCB0byBgbGliL3Rlc3RfeGFycmF5LmNgLiBTaW5jZSBgeGFzX2ZpbmQoKWAgaXMgYSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uLCBpdCBpcyBleGNsdWRlZCBmcm9tIEZvY3VzU3ltYm9scy4gVG8gZW5zdXJlIHRoZSBuZXcgdGVzdCBjYXNlIGlzIGV4ZWN1dGVkLCBgQ09ORklHX1RFU1RfWEFSUkFZYCBhbmQgYENPTkZJR19IVUdFVExCRlNgICh3aGljaCBzZWxlY3RzIGBDT05GSUdfWEFSUkFZX01VTFRJYCByZXF1aXJlZCBieSB0aGUgdGVzdCkgc2hvdWxkIGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ2OjQyLjU0MDczMTc3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAxMTA1MzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjc5MzUzNjM1NDViZTExMDA0MTEyYTNiZGZmYTY2ZTMzMTJjNWY2Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxMjo0Njo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9saWIvdGVzdF94YXJyYXkuYyBiL2xpYi90ZXN0X3hhcnJheS5jXFxuaW5kZXggNWNhMGFlZmVlOWFhNS4uN2QwZGVjY2RmNTlhMCAxMDA2NDRcXG4tLS0gYS9saWIvdGVzdF94YXJyYXkuY1xcbisrKyBiL2xpYi90ZXN0X3hhcnJheS5jXFxuQEAgLTEyNDcsNiArMTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF80KHN0cnVjdCB4YXJyYXkgKnhhKVxcbit7XFxuKyNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXFxuK1xcdFhBX1NUQVRFKHhhcywgeGEsIDEwMCk7XFxuK1xcdFhBX1NUQVRFX09SREVSKHhhc19zcGxpdCwgeGEsIDAsIDApO1xcbitcXHR2b2lkICplbnRyeTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0LyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovXFxuK1xcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG4rXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7XFxuK1xcbitcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCk7XFxuK1xcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7XFxuK1xcbitcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCk7XFxuK1xcdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0eGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7XFxuK1xcdHhhX2VyYXNlX2luZGV4KHhhLCAwKTtcXG4rXFx0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcXG4rXFxuK1xcdC8qICgyKSBTcGxpdHRpbmcgYSBtdWx0aS1pbmRleCBlbnRyeSBhZnRlciBhIGxvb2t1cCBiZWdpbnMgaW5zaWRlIGl0ICovXFxuK1xcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XFxuK1xcbitcXHR4YXNfc2V0KFxcdTAwMjZ4YXMsIDEwMCk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbitcXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcXG4rXFx0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHR4YXNfc3BsaXRfYWxsb2MoXFx1MDAyNnhhc19zcGxpdCwgeGEsIDcsIEdGUF9LRVJORUwpO1xcbitcXHR4YXNfbG9jayhcXHUwMDI2eGFzX3NwbGl0KTtcXG4rXFx0eGFzX3NwbGl0KFxcdTAwMjZ4YXNfc3BsaXQsIHhhLCA3KTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDEyODsgaSsrKVxcbitcXHRcXHRfX3hhX3N0b3JlKHhhLCBpLCB4YV9ta19pbmRleChpKSwgMCk7XFxuK1xcdHhhc191bmxvY2soXFx1MDAyNnhhc19zcGxpdCk7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG4rXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTtcXG4rXFx0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcXG4rXFxuK1xcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG4rXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHR4YV9kZXN0cm95KHhhKTtcXG4rXFx0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGksIGosIGs7XFxuQEAgLTEzNzAsNiArMTQzMSw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEpXFxuIFxcdFxcdGNoZWNrX211bHRpX2ZpbmRfMSh4YSwgaSk7XFxuIFxcdGNoZWNrX211bHRpX2ZpbmRfMih4YSk7XFxuIFxcdGNoZWNrX211bHRpX2ZpbmRfMyh4YSk7XFxuK1xcdGNoZWNrX211bHRpX2ZpbmRfNCh4YSk7XFxuIH1cXG4gXFxuIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovXFxuZGlmZiAtLWdpdCBhL2xpYi94YXJyYXkuYyBiL2xpYi94YXJyYXkuY1xcbmluZGV4IDlhOGI0OTE2NTQwY2YuLjk4MDMyNGQ2ODZiZDAgMTAwNjQ0XFxuLS0tIGEvbGliL3hhcnJheS5jXFxuKysrIGIvbGliL3hhcnJheS5jXFxuQEAgLTE0MDYsOSArMTQwNiwxMSBAQCB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXFxuIFxcdFxcdGVudHJ5ID0geGFzX2xvYWQoeGFzKTtcXG4gXFx0XFx0aWYgKGVudHJ5IHx8IHhhc19ub3Rfbm9kZSh4YXMtXFx1MDAzZXhhX25vZGUpKVxcbiBcXHRcXHRcXHRyZXR1cm4gZW50cnk7XFxuLVxcdH0gZWxzZSBpZiAoIXhhcy1cXHUwMDNleGFfbm9kZS1cXHUwMDNlc2hpZnQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIHhhcy1cXHUwMDNleGFfb2Zmc2V0ICE9ICh4YXMtXFx1MDAzZXhhX2luZGV4IFxcdTAwMjYgWEFfQ0hVTktfTUFTSykpIHtcXG4tXFx0XFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cXHUwMDNleGFfaW5kZXggLSAxKSBcXHUwMDI2IFhBX0NIVU5LX01BU0spICsgMTtcXG4rXFx0fSBlbHNlIGlmICh4YXMtXFx1MDAzZXhhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy1cXHUwMDNleGFfaW5kZXgsIHhhcy1cXHUwMDNleGFfbm9kZSkpIHtcXG4rXFx0XFx0aWYgKCF4YXMtXFx1MDAzZXhhX25vZGUtXFx1MDAzZXNoaWZ0KVxcbitcXHRcXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVxcdTAwM2V4YV9pbmRleCAtIDEpIFxcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXFx1MDAzZXhhX2luZGV4LCB4YXMtXFx1MDAzZXhhX25vZGUpO1xcbiBcXHR9XFxuIFxcbiBcXHR4YXNfbmV4dF9vZmZzZXQoeGFzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6NDY6NDIuOTQyNDYwNzAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjYwODk1Mzc2OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfWEFSUkFZXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHhhc19maW5kKClgLCBhIGNvcmUgWEFycmF5IGZ1bmN0aW9uIHVzZWQgZXh0ZW5zaXZlbHkgaW4gdGhlIGtlcm5lbCAoZS5nLiwgcGFnZSBjYWNoZSkuIFRoZSBidWcgb2NjdXJzIHdoZW4gc2VhcmNoaW5nIGZvciBtdWx0aS1pbmRleCBlbnRyaWVzLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgdGVzdCBjYXNlIGBjaGVja19tdWx0aV9maW5kXzRgIHRvIGBsaWIvdGVzdF94YXJyYXkuY2AuIFNpbmNlIGB4YXNfZmluZCgpYCBpcyBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24sIGl0IGlzIGV4Y2x1ZGVkIGZyb20gRm9jdXNTeW1ib2xzLiBUbyBlbnN1cmUgdGhlIG5ldyB0ZXN0IGNhc2UgaXMgZXhlY3V0ZWQsIGBDT05GSUdfVEVTVF9YQVJSQVlgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgKHdoaWNoIHNlbGVjdHMgYENPTkZJR19YQVJSQVlfTVVMVElgIHJlcXVpcmVkIGJ5IHRoZSB0ZXN0KSBzaG91bGQgYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjc5MzUzNjM1NDViZTExMDA0MTEyYTNiZGZmYTY2ZTMzMTJjNWY2Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDEyOjQ2OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfeGFycmF5LmMgYi9saWIvdGVzdF94YXJyYXkuY1xuaW5kZXggNWNhMGFlZmVlOWFhNS4uN2QwZGVjY2RmNTlhMCAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X3hhcnJheS5jXG4rKysgYi9saWIvdGVzdF94YXJyYXkuY1xuQEAgLTEyNDcsNiArMTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSlcbit7XG4rI2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbitcdFhBX1NUQVRFKHhhcywgeGEsIDEwMCk7XG4rXHRYQV9TVEFURV9PUkRFUih4YXNfc3BsaXQsIHhhLCAwLCAwKTtcbitcdHZvaWQgKmVudHJ5O1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0LyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovXG4rXHR4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpO1xuK1x0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcbitcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7XG4rXHR4YV9lcmFzZV9pbmRleCh4YSwgMCk7XG4rXHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuK1xuK1x0LyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi9cbitcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XG4rXHRYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpO1xuK1xuK1x0eGFzX3NldChcdTAwMjZ4YXMsIDEwMCk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFzX3NwbGl0X2FsbG9jKFx1MDAyNnhhc19zcGxpdCwgeGEsIDcsIEdGUF9LRVJORUwpO1xuK1x0eGFzX2xvY2soXHUwMDI2eGFzX3NwbGl0KTtcbitcdHhhc19zcGxpdChcdTAwMjZ4YXNfc3BsaXQsIHhhLCA3KTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEyODsgaSsrKVxuK1x0XHRfX3hhX3N0b3JlKHhhLCBpLCB4YV9ta19pbmRleChpKSwgMCk7XG4rXHR4YXNfdW5sb2NrKFx1MDAyNnhhc19zcGxpdCk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHR4YV9kZXN0cm95KHhhKTtcbitcdFhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGksIGosIGs7XG5AQCAtMTM3MCw2ICsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSlcbiBcdFx0Y2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTtcbiBcdGNoZWNrX211bHRpX2ZpbmRfMih4YSk7XG4gXHRjaGVja19tdWx0aV9maW5kXzMoeGEpO1xuK1x0Y2hlY2tfbXVsdGlfZmluZF80KHhhKTtcbiB9XG4gXG4gLyogU2VlIGZpbmRfc3dhcF9lbnRyeSgpIGluIG1tL3NobWVtLmMgKi9cbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcbmluZGV4IDlhOGI0OTE2NTQwY2YuLjk4MDMyNGQ2ODZiZDAgMTAwNjQ0XG4tLS0gYS9saWIveGFycmF5LmNcbisrKyBiL2xpYi94YXJyYXkuY1xuQEAgLTE0MDYsOSArMTQwNiwxMSBAQCB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXG4gXHRcdGVudHJ5ID0geGFzX2xvYWQoeGFzKTtcbiBcdFx0aWYgKGVudHJ5IHx8IHhhc19ub3Rfbm9kZSh4YXMtXHUwMDNleGFfbm9kZSkpXG4gXHRcdFx0cmV0dXJuIGVudHJ5O1xuLVx0fSBlbHNlIGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICB4YXMtXHUwMDNleGFfb2Zmc2V0ICE9ICh4YXMtXHUwMDNleGFfaW5kZXggXHUwMDI2IFhBX0NIVU5LX01BU0spKSB7XG4tXHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHR9IGVsc2UgaWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSkge1xuK1x0XHRpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0KVxuK1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHRcdGVsc2VcbitcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbiBcdH1cbiBcbiBcdHhhc19uZXh0X29mZnNldCh4YXMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6NDY6NDIuOTQyNDYxOTExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIxMjY2OTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgWEFycmF5IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYGxpYi94YXJyYXkuY2AgYW5kIGBsaWIvdGVzdF94YXJyYXkuY2AuICBSaWdodCBhd2F5LCBJIHNlZSB0aGF0IHRoZSBwcmltYXJ5IGNoYW5nZSBpcyB0byB0aGUgYHhhc19maW5kKClgIGZ1bmN0aW9uIGluIHRoZSBgbGliL3hhcnJheS5jYCBmaWxlLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbjsgaXQncyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIFhBcnJheSBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggaXMgdXNlZCBoZWF2aWx5IHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gIFRoZSBmYWN0IHRoYXQgaXQncyBhIGZ1bmRhbWVudGFsIEFQSSBjYWxsZWQgZnJvbSBwb3RlbnRpYWxseSBudW1lcm91cyBrZXJuZWwgbG9jYXRpb25zIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBjYW5kaWRhdGUgZm9yIHNvbWUgc2VyaW91cyBmdXp6aW5nLlxuXG5UaGUgZGlmZiBpdHNlbGYgbG9va3MgbGlrZSBhIHN1YnRsZSBhZGp1c3RtZW50IHRvIGhvdyBgeGFzX2ZpbmQoKWAgaGFuZGxlcyBvZmZzZXQgY2FsY3VsYXRpb25zIHdpdGhpbiB0aGUgWEFycmF5LiBTcGVjaWZpY2FsbHksIHRoZXJlJ3MgYSBjb25kaXRpb25hbCBtb2RpZmljYXRpb24gb2YgYHhhcy1cdTAwM2V4YV9vZmZzZXRgLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHNlbWFudGljcyBhIGJpdCwgYnV0IGl0IHNlZW1zIHRvIGludm9sdmUgYSBjaGVjayBhbmQgcG90ZW50aWFsIHVwZGF0ZSB0byB0aGUgb2Zmc2V0IHdpdGhpbiBhbiBYQXJyYXkgY2h1bmsuICBUaGUgYWRkZWQgYGdldF9vZmZzZXQoKWAgY2FsbCBpcyBpbnRlcmVzdGluZy4gIEl0IG1ha2VzIG1lIHdvbmRlciBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgb3IgY29uZmlndXJhdGlvbi5cblxuSSBhbHNvIHNlZSB0aGF0IHRoZXkndmUgYWRkZWQgYSB0ZXN0IGNhc2UgaW4gYGxpYi90ZXN0X3hhcnJheS5jYC4gVGhpcyBpcyBncmVhdDsgdGVzdHMgYXJlIGVzc2VudGlhbCBmb3IgdGhpcyB0eXBlIG9mIGNoYW5nZSwgYW5kIEknbGwgd2FudCB0byByZXZpZXcgdGhhdCB0ZXN0IGNhc2UgaW4gZGV0YWlsLlxuXG5TaW5jZSBpdCdzIGEgdGVzdCBjYXNlLCBJIHNob3VsZCBjb25maXJtIHRoYXQgYENPTkZJR19YQVJSQVlfTVVMVElgIGlzIHNldC4gSXQgc2VlbXMgdGhhdCB0aGUgdGVzdCBpcyB1bmRlciB0aGF0IGNvbmZpZy4gTm93IEkgaGF2ZSB0byBkZXRlcm1pbmUgaWYgYENPTkZJR19YQVJSQVlfTVVMVElgIGlzIG5lZWRlZCBmb3IgYHhhc19maW5kYC4gSSBuZWVkIHRvIHJldmlldyBgbGliL3hhcnJheS5jYCB0byBiZSBzdXJlLiBJdCdzIGEga2V5IHBhcnQgb2YgZGV0ZXJtaW5pbmcgaG93IHdpZGVzcHJlYWQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSBjb3VsZCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ2OjUwLjE1NTEzMzQzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgzODU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4YXNfZmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIveGFycmF5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3hhcnJheS5jPTEzNzU9RVhQT1JUX1NZTUJPTF9HUEwoX194YXNfbmV4dCk7XFxuLS1cXG5saWIveGFycmF5LmMtMTM3Ny0vKipcXG5saWIveGFycmF5LmM6MTM3ODogKiB4YXNfZmluZCgpIC0gRmluZCB0aGUgbmV4dCBwcmVzZW50IGVudHJ5IGluIHRoZSBYQXJyYXkuXFxubGliL3hhcnJheS5jLTEzNzktICogQHhhczogWEFycmF5IG9wZXJhdGlvbiBzdGF0ZS5cXG4tLVxcbmxpYi94YXJyYXkuYy0xMzkyLSAqL1xcbmxpYi94YXJyYXkuYzoxMzkzOnZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcXG5saWIveGFycmF5LmMtMTM5NC17XFxuLS1cXG5saWIveGFycmF5LmMtMTQ0MC19XFxubGliL3hhcnJheS5jOjE0NDE6RVhQT1JUX1NZTUJPTF9HUEwoeGFzX2ZpbmQpO1xcbmxpYi94YXJyYXkuYy0xNDQyLVxcbmxpYi94YXJyYXkuYy0xNDQzLS8qKlxcbmxpYi94YXJyYXkuYzoxNDQ0OiAqIHhhc19maW5kX21hcmtlZCgpIC0gRmluZCB0aGUgbmV4dCBtYXJrZWQgZW50cnkgaW4gdGhlIFhBcnJheS5cXG5saWIveGFycmF5LmMtMTQ0NS0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxcbi0tXFxubGliL3hhcnJheS5jLTE0NjMtICovXFxubGliL3hhcnJheS5jOjE0NjQ6dm9pZCAqeGFzX2ZpbmRfbWFya2VkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCwgeGFfbWFya190IG1hcmspXFxubGliL3hhcnJheS5jLTE0NjUte1xcbi0tXFxubGliL3hhcnJheS5jLTE1MTEtXFxubGliL3hhcnJheS5jOjE1MTI6XFx0XFx0b2Zmc2V0ID0geGFzX2ZpbmRfY2h1bmsoeGFzLCBhZHZhbmNlLCBtYXJrKTtcXG5saWIveGFycmF5LmMtMTUxMy1cXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2UgeGFzLVxcdTAwM2V4YV9vZmZzZXQpIHtcXG4tLVxcbmxpYi94YXJyYXkuYy0xNTQyLX1cXG5saWIveGFycmF5LmM6MTU0MzpFWFBPUlRfU1lNQk9MX0dQTCh4YXNfZmluZF9tYXJrZWQpO1xcbmxpYi94YXJyYXkuYy0xNTQ0LVxcbmxpYi94YXJyYXkuYy0xNTQ1LS8qKlxcbmxpYi94YXJyYXkuYzoxNTQ2OiAqIHhhc19maW5kX2NvbmZsaWN0KCkgLSBGaW5kIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW4gYSByYW5nZS5cXG5saWIveGFycmF5LmMtMTU0Ny0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxcbi0tXFxubGliL3hhcnJheS5jLTE1NTMtICovXFxubGliL3hhcnJheS5jOjE1NTQ6dm9pZCAqeGFzX2ZpbmRfY29uZmxpY3Qoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxubGliL3hhcnJheS5jLTE1NTUte1xcbi0tXFxubGliL3hhcnJheS5jLTE2MDMtfVxcbmxpYi94YXJyYXkuYzoxNjA0OkVYUE9SVF9TWU1CT0xfR1BMKHhhc19maW5kX2NvbmZsaWN0KTtcXG5saWIveGFycmF5LmMtMTYwNS1cXG4tLVxcbmxpYi94YXJyYXkuYz0xOTg3PWludCBfX3hhX2FsbG9jKHN0cnVjdCB4YXJyYXkgKnhhLCB1MzIgKmlkLCB2b2lkICplbnRyeSxcXG4tLVxcbmxpYi94YXJyYXkuYy0yMDAxLVxcdFxcdHhhcy54YV9pbmRleCA9IGxpbWl0Lm1pbjtcXG5saWIveGFycmF5LmM6MjAwMjpcXHRcXHR4YXNfZmluZF9tYXJrZWQoXFx1MDAyNnhhcywgbGltaXQubWF4LCBYQV9GUkVFX01BUkspO1xcbmxpYi94YXJyYXkuYy0yMDAzLVxcdFxcdGlmICh4YXMueGFfbm9kZSA9PSBYQVNfUkVTVEFSVClcXG4tLVxcbmxpYi94YXJyYXkuYz0yMTcyPUVYUE9SVF9TWU1CT0woeGFfY2xlYXJfbWFyayk7XFxuLS1cXG5saWIveGFycmF5LmMtMjE4NS0gKiBlbnRyaWVzIHdoaWNoIGFyZSBiZWluZyBzaW11bHRhbmVvdXNseSBhZGRlZC4gIEl0IHdpbGwgbm90IHJldHVybiBhblxcbmxpYi94YXJyYXkuYzoyMTg2OiAqICVYQV9SRVRSWV9FTlRSWTsgaWYgeW91IG5lZWQgdG8gc2VlIHJldHJ5IGVudHJpZXMsIHVzZSB4YXNfZmluZCgpLlxcbmxpYi94YXJyYXkuYy0yMTg3LSAqXFxuLS1cXG5saWIveGFycmF5LmM9MjE5MT12b2lkICp4YV9maW5kKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXFxuLS1cXG5saWIveGFycmF5LmMtMjE5OS1cXHRcXHRpZiAoKF9fZm9yY2UgdW5zaWduZWQgaW50KWZpbHRlciBcXHUwMDNjIFhBX01BWF9NQVJLUylcXG5saWIveGFycmF5LmM6MjIwMDpcXHRcXHRcXHRlbnRyeSA9IHhhc19maW5kX21hcmtlZChcXHUwMDI2eGFzLCBtYXgsIGZpbHRlcik7XFxubGliL3hhcnJheS5jLTIyMDEtXFx0XFx0ZWxzZVxcbmxpYi94YXJyYXkuYzoyMjAyOlxcdFxcdFxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgbWF4KTtcXG5saWIveGFycmF5LmMtMjIwMy1cXHR9IHdoaWxlICh4YXNfcmV0cnkoXFx1MDAyNnhhcywgZW50cnkpKTtcXG4tLVxcbmxpYi94YXJyYXkuYz0yMjEyPXN0YXRpYyBib29sIHhhc19zaWJsaW5nKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubGliL3hhcnJheS5jLTIyMzUtICogd2hpY2ggYXJlIGJlaW5nIHNpbXVsdGFuZW91c2x5IGFkZGVkLiAgSXQgd2lsbCBub3QgcmV0dXJuIGFuXFxubGliL3hhcnJheS5jOjIyMzY6ICogJVhBX1JFVFJZX0VOVFJZOyBpZiB5b3UgbmVlZCB0byBzZWUgcmV0cnkgZW50cmllcywgdXNlIHhhc19maW5kKCkuXFxubGliL3hhcnJheS5jLTIyMzctICpcXG4tLVxcbmxpYi94YXJyYXkuYz0yMjQxPXZvaWQgKnhhX2ZpbmRfYWZ0ZXIoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgKmluZGV4cCxcXG4tLVxcbmxpYi94YXJyYXkuYy0yMjUyLVxcdFxcdGlmICgoX19mb3JjZSB1bnNpZ25lZCBpbnQpZmlsdGVyIFxcdTAwM2MgWEFfTUFYX01BUktTKVxcbmxpYi94YXJyYXkuYzoyMjUzOlxcdFxcdFxcdGVudHJ5ID0geGFzX2ZpbmRfbWFya2VkKFxcdTAwMjZ4YXMsIG1heCwgZmlsdGVyKTtcXG5saWIveGFycmF5LmMtMjI1NC1cXHRcXHRlbHNlXFxubGliL3hhcnJheS5jOjIyNTU6XFx0XFx0XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBtYXgpO1xcbmxpYi94YXJyYXkuYy0yMjU2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo0Njo1MC4yMDA5NzU4MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjY5MTQwMTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFhhcnJheSBUZXN0aW5nKipcblxuT2theSwgc28gYHhhc19maW5kYCBpcyBkZWZpbml0ZWx5IGEga2V5IGZ1bmN0aW9uIGhlcmUuIEl0J3MgZm91bmRhdGlvbmFsLCBzbyB0aGUgdGVzdGluZyBhcm91bmQgaXQgbmVlZHMgdG8gYmUgc29saWQuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSB0ZXN0IGNhc2UuIEkga25vdyBpdCdzIGluIGBsaWIvdGVzdF94YXJyYXkuY2AuIFRoYXQncyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIGV2YWx1YXRlZC4gQW5kIHRoZW4sIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXBseSBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbi4gSSdsbCB0YWtlIGEgbG9vayBhdCBgbGliL0tjb25maWcuZGVidWdgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBURVNUX1hBUlJBWWAgaXMgZW5hYmxlZC4gSXQncyBwb3NzaWJsZSB0aGUgdGVzdHMgYXJlIGNvbmRpdGlvbmFsIGJhc2VkIG9uIHRoYXQgZmxhZy4gQmV0dGVyIHRvIHZlcmlmeSB0aGUgZW52aXJvbm1lbnQgZmlyc3QuIFRoaXMgaXMgYWxsIGFib3V0IGVmZmljaWVuY3k7IEkgY2FuJ3Qgd2FzdGUgdGltZSBvbiBhIGh1bnQgaWYgdGhlIHRlc3RzIGFyZW4ndCBldmVuIGNvbXBpbGVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzMwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6NDc6MTYuODkyMzc5MzM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODU2NTExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJURVNUX1hBUlJBWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTI1NTc9Y29uZmlnIFRFU1RfQklUTUFQXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTYzLVxcbmxpYi9LY29uZmlnLmRlYnVnOjI1NjQ6Y29uZmlnIFRFU1RfWEFSUkFZXFxubGliL0tjb25maWcuZGVidWctMjU2NS1cXHR0cmlzdGF0ZSBcXFwiVGVzdCB0aGUgWEFycmF5IGNvZGUgYXQgcnVudGltZVxcXCJcXG4tLVxcbmxpYi9NYWtlZmlsZT05Mj1lbmRpZlxcbmxpYi9NYWtlZmlsZS05My1cXG5saWIvTWFrZWZpbGU6OTQ6b2JqLSQoQ09ORklHX1RFU1RfWEFSUkFZKSArPSB0ZXN0X3hhcnJheS5vXFxubGliL01ha2VmaWxlLTk1LW9iai0kKENPTkZJR19URVNUX01BUExFX1RSRUUpICs9IHRlc3RfbWFwbGVfdHJlZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ3OjE3LjAzMDk0OTIyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODk0ODk5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYQXJyYXkgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgdGVzdCBjYXNlIGxldmVyYWdlcyBgQ09ORklHX1hBUlJBWV9NVUxUSWAuIE15IGZpcnN0IG1vdmUgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBYQVJSQVlfTVVMVElgIHJlcHJlc2VudHMuIEknbSBnb2luZyB0byBjaGVjayBgbGliL0tjb25maWdgIGFuZCBgbGliL0tjb25maWcuZGVidWdgLiBJdCdzIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSB0byBzdGFydCB0aGVyZSB3aGVuIGRlYWxpbmcgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24gb2YgYFhBUlJBWV9NVUxUSWAsIGl0cyBkZXBlbmRlbmNpZXMsIGl0cyBkZWZhdWx0IHZhbHVlLCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB0aGF0IG1pZ2h0IHByb3ZpZGUgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGlzIG9wdGlvbiBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHdoeSB0aGlzIHRlc3QgY2FzZSBleGlzdHMgYW5kIHdoYXQgaXQncyB0cnlpbmcgdG8gdmFsaWRhdGUuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgdGVzdCBjYXNlIGV4cGVjdHMgdGhlIGtlcm5lbCB0byBkbyB3aGVuIGBYQVJSQVlfTVVMVElgIGlzIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc0MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ3OjIwLjIyMDQ0MTU4OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjI0Mzc1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJYQVJSQVlfTVVMVElcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZz0zNDg9Y29uZmlnIElOVEVSVkFMX1RSRUVfU1BBTl9JVEVSXFxuLS1cXG5saWIvS2NvbmZpZy0zNTEtXFxubGliL0tjb25maWc6MzUyOmNvbmZpZyBYQVJSQVlfTVVMVElcXG5saWIvS2NvbmZpZy0zNTMtXFx0Ym9vbFxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTU9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBvcmRlcl9saW1pdCA9XFxubGliL3Rlc3RfeGFycmF5LmM6MTY6XFx0XFx0SVNfRU5BQkxFRChDT05GSUdfWEFSUkFZX01VTFRJKSA/IEJJVFNfUEVSX0xPTkcgOiAxO1xcbmxpYi90ZXN0X3hhcnJheS5jLTE3LVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTc1PXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3hhX21hcmtfMShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleClcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTE3Ny1cXHR1bnNpZ25lZCBpbnQgb3JkZXI7XFxubGliL3Rlc3RfeGFycmF5LmM6MTc4OlxcdHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gOCA6IDE7XFxubGliL3Rlc3RfeGFycmF5LmMtMTc5LVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MjkyPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3hhX21hcmtfMyhzdHJ1Y3QgeGFycmF5ICp4YSlcXG5saWIvdGVzdF94YXJyYXkuYy0yOTMte1xcbmxpYi90ZXN0X3hhcnJheS5jOjI5NDojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbmxpYi90ZXN0X3hhcnJheS5jLTI5NS1cXHRYQV9TVEFURSh4YXMsIHhhLCAweDQxKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jPTMyND1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja194YV9zaHJpbmsoc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0zMjgtXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbmxpYi90ZXN0X3hhcnJheS5jOjMyOTpcXHR1bnNpZ25lZCBpbnQgbWF4X29yZGVyID0gSVNfRU5BQkxFRChDT05GSUdfWEFSUkFZX01VTFRJKSA/IDE1IDogMTtcXG5saWIvdGVzdF94YXJyYXkuYy0zMzAtXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz00MjY9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfY21weGNoZ19vcmRlcihzdHJ1Y3QgeGFycmF5ICp4YSlcXG5saWIvdGVzdF94YXJyYXkuYy00Mjcte1xcbmxpYi90ZXN0X3hhcnJheS5jOjQyODojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbmxpYi90ZXN0X3hhcnJheS5jLTQyOS1cXHR2b2lkICpGSVZFID0geGFfbWtfdmFsdWUoNSk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz01NDU9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfeGFzX2VyYXNlKHN0cnVjdCB4YXJyYXkgKnhhKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtNTgyLVxcbmxpYi90ZXN0X3hhcnJheS5jOjU4MzojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbmxpYi90ZXN0X3hhcnJheS5jLTU4NC1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9zdG9yZV8xKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9NjUwPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX3N0b3JlKHN0cnVjdCB4YXJyYXkgKnhhKVxcbmxpYi90ZXN0X3hhcnJheS5jLTY1MS17XFxubGliL3Rlc3RfeGFycmF5LmM6NjUyOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXFxubGliL3Rlc3RfeGFycmF5LmMtNjUzLVxcdHVuc2lnbmVkIGxvbmcgaSwgaiwgaztcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTcyOS1cXG5saWIvdGVzdF94YXJyYXkuYzo3MzA6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcXG5saWIvdGVzdF94YXJyYXkuYy03MzEtLyogbWltaWNzIHBhZ2UgY2FjaGUgX19maWxlbWFwX2FkZF9mb2xpbygpICovXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz04OTE9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfc3RvcmVfYWR2YW5jZWQoc3RydWN0IHhhcnJheSAqeGEpXFxubGliL3Rlc3RfeGFycmF5LmMtODkyLXtcXG5saWIvdGVzdF94YXJyYXkuYzo4OTM6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcXG5saWIvdGVzdF94YXJyYXkuYzo4OTQ6XFx0dW5zaWduZWQgaW50IG1heF9vcmRlciA9IElTX0VOQUJMRUQoQ09ORklHX1hBUlJBWV9NVUxUSSkgPyAyMCA6IDE7XFxubGliL3Rlc3RfeGFycmF5LmMtODk1LVxcdHVuc2lnbmVkIGxvbmcgZW5kID0gVUxPTkdfTUFYLzI7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0xMTQyPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3N0b3JlX2l0ZXIoc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMTQ0LVxcdHVuc2lnbmVkIGludCBpLCBqO1xcbmxpYi90ZXN0X3hhcnJheS5jOjExNDU6XFx0dW5zaWduZWQgaW50IG1heF9vcmRlciA9IElTX0VOQUJMRUQoQ09ORklHX1hBUlJBWV9NVUxUSSkgPyAyMCA6IDE7XFxubGliL3Rlc3RfeGFycmF5LmMtMTE0Ni1cXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTExNzAtXFx0fVxcbmxpYi90ZXN0X3hhcnJheS5jOjExNzE6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcXG5saWIvdGVzdF94YXJyYXkuYy0xMTcyLVxcdHhhX3N0b3JlX2luZGV4KHhhLCA2MywgR0ZQX0tFUk5FTCk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0xMTgwPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgb3JkZXIpXFxubGliL3Rlc3RfeGFycmF5LmMtMTE4MS17XFxubGliL3Rlc3RfeGFycmF5LmM6MTE4MjojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbmxpYi90ZXN0X3hhcnJheS5jLTExODMtXFx0dW5zaWduZWQgbG9uZyBtdWx0aSA9IDMgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0xMjEyPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfMihzdHJ1Y3QgeGFycmF5ICp4YSlcXG5saWIvdGVzdF94YXJyYXkuYy0xMjEzLXtcXG5saWIvdGVzdF94YXJyYXkuYzoxMjE0OlxcdHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gMTAgOiAxO1xcbmxpYi90ZXN0X3hhcnJheS5jLTEyMTUtXFx0dW5zaWduZWQgaW50IGksIGo7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0xMjUwPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSlcXG5saWIvdGVzdF94YXJyYXkuYy0xMjUxLXtcXG5saWIvdGVzdF94YXJyYXkuYzoxMjUyOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXFxubGliL3Rlc3RfeGFycmF5LmMtMTI1My1cXHRYQV9TVEFURSh4YXMsIHhhLCAxMDApO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTQ2MD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kX2VudHJ5KHN0cnVjdCB4YXJyYXkgKnhhKVxcbmxpYi90ZXN0X3hhcnJheS5jLTE0NjEte1xcbmxpYi90ZXN0X3hhcnJheS5jOjE0NjI6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcXG5saWIvdGVzdF94YXJyYXkuYy0xNDYzLVxcdHVuc2lnbmVkIGludCBvcmRlcjtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jPTE4Mjk9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfY3JlYXRlX3JhbmdlKHN0cnVjdCB4YXJyYXkgKnhhKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTgzMS1cXHR1bnNpZ25lZCBpbnQgb3JkZXI7XFxubGliL3Rlc3RfeGFycmF5LmM6MTgzMjpcXHR1bnNpZ25lZCBpbnQgbWF4X29yZGVyID0gSVNfRU5BQkxFRChDT05GSUdfWEFSUkFZX01VTFRJKSA/IDEyIDogMTtcXG5saWIvdGVzdF94YXJyYXkuYy0xODMzLVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTg2ND1zdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2NoZWNrX3N0b3JlX3JhbmdlKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGZpcnN0LFxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTg2Ni17XFxubGliL3Rlc3RfeGFycmF5LmM6MTg2NzojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbmxpYi90ZXN0X3hhcnJheS5jLTE4NjgtXFx0eGFfc3RvcmVfcmFuZ2UoeGEsIGZpcnN0LCBsYXN0LCB4YV9ta19pbmRleChmaXJzdCksIEdGUF9LRVJORUwpO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTg4MT1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19zdG9yZV9yYW5nZShzdHJ1Y3QgeGFycmF5ICp4YSlcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTE4OTYtXFxubGliL3Rlc3RfeGFycmF5LmM6MTg5NzojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbmxpYi90ZXN0X3hhcnJheS5jLTE4OTgtc3RhdGljIHZvaWQgY2hlY2tfc3BsaXRfMShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jPTIxMTg9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfYWNjb3VudChzdHJ1Y3QgeGFycmF5ICp4YSlcXG5saWIvdGVzdF94YXJyYXkuYy0yMTE5LXtcXG5saWIvdGVzdF94YXJyYXkuYzoyMTIwOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXFxubGliL3Rlc3RfeGFycmF5LmMtMjEyMS1cXHR1bnNpZ25lZCBpbnQgb3JkZXI7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0yMTQ3PXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2dldF9vcmRlcihzdHJ1Y3QgeGFycmF5ICp4YSlcXG5saWIvdGVzdF94YXJyYXkuYy0yMTQ4LXtcXG5saWIvdGVzdF94YXJyYXkuYzoyMTQ5OlxcdHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gMjAgOiAxO1xcbmxpYi90ZXN0X3hhcnJheS5jLTIxNTAtXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MjE2Nz1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja194YXNfZ2V0X29yZGVyKHN0cnVjdCB4YXJyYXkgKnhhKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMjE3MC1cXG5saWIvdGVzdF94YXJyYXkuYzoyMTcxOlxcdHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gMjAgOiAxO1xcbmxpYi90ZXN0X3hhcnJheS5jLTIxNzItXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MjIwMD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja194YXNfY29uZmxpY3RfZ2V0X29yZGVyKHN0cnVjdCB4YXJyYXkgKnhhKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMjIwNS1cXHRpbnQgb25seV9vbmNlO1xcbmxpYi90ZXN0X3hhcnJheS5jOjIyMDY6XFx0dW5zaWduZWQgaW50IG1heF9vcmRlciA9IElTX0VOQUJMRUQoQ09ORklHX1hBUlJBWV9NVUxUSSkgPyAyMCA6IDE7XFxubGliL3Rlc3RfeGFycmF5LmMtMjIwNy1cXHR1bnNpZ25lZCBpbnQgb3JkZXI7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0yMjU4PXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2Rlc3Ryb3koc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0yMjgxLVxcbmxpYi90ZXN0X3hhcnJheS5jOjIyODI6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcXG5saWIvdGVzdF94YXJyYXkuYy0yMjgzLVxcdC8qIERlc3Ryb3lpbmcgYW4gYXJyYXkgd2l0aCBhIG11bHRpLWluZGV4IGVudHJ5ICovXFxuLS1cXG5saWIveGFycmF5LmM9MzYyPXN0YXRpYyB2b2lkICp4YXNfYWxsb2Moc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGludCBzaGlmdClcXG4tLVxcbmxpYi94YXJyYXkuYy00MDEtXFxubGliL3hhcnJheS5jOjQwMjojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbmxpYi94YXJyYXkuYy00MDMtLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGluZGljZXMgY292ZXJlZCBieSBhIGdpdmVuIHhhX3N0YXRlICovXFxuLS1cXG5saWIveGFycmF5LmM9NDE2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHhhc19tYXgoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxuLS1cXG5saWIveGFycmF5LmMtNDE5LVxcbmxpYi94YXJyYXkuYzo0MjA6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcXG5saWIveGFycmF5LmMtNDIxLVxcdGlmICh4YXMtXFx1MDAzZXhhX3NoaWZ0IHx8IHhhcy1cXHUwMDNleGFfc2licykge1xcbi0tXFxubGliL3hhcnJheS5jPTk2MT1FWFBPUlRfU1lNQk9MX0dQTCh4YXNfaW5pdF9tYXJrcyk7XFxubGliL3hhcnJheS5jLTk2Mi1cXG5saWIveGFycmF5LmM6OTYzOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXFxubGliL3hhcnJheS5jLTk2NC1zdGF0aWMgdW5zaWduZWQgaW50IG5vZGVfZ2V0X21hcmtzKHN0cnVjdCB4YV9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KVxcbi0tXFxubGliL3hhcnJheS5jPTE4MjI9RVhQT1JUX1NZTUJPTChfX3hhX2luc2VydCk7XFxubGliL3hhcnJheS5jLTE4MjMtXFxubGliL3hhcnJheS5jOjE4MjQ6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcXG5saWIveGFycmF5LmMtMTgyNS1zdGF0aWMgdm9pZCB4YXNfc2V0X3JhbmdlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIGZpcnN0LFxcbi0tXFxubGliL3hhcnJheS5jPTE5NjQ9RVhQT1JUX1NZTUJPTCh4YV9nZXRfb3JkZXIpO1xcbmxpYi94YXJyYXkuYzoxOTY1OiNlbmRpZiAvKiBDT05GSUdfWEFSUkFZX01VTFRJICovXFxubGliL3hhcnJheS5jLTE5NjYtXFxuLS1cXG5saWIveGFycmF5LmM9MjIxMj1zdGF0aWMgYm9vbCB4YXNfc2libGluZyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbmxpYi94YXJyYXkuYy0yMjE2LVxcbmxpYi94YXJyYXkuYzoyMjE3OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfWEFSUkFZX01VTFRJKSB8fCAhbm9kZSlcXG5saWIveGFycmF5LmMtMjIxOC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ3OjIwLjI3NjY5MTA4NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMTc5NjM2NjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiB0aGUgeGFycmF5IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHRlc3QgY2FzZSBhbmQgaXQncyBjbGVhciB0aGF0IGBDT05GSUdfWEFSUkFZX01VTFRJYCBpcyAqZXNzZW50aWFsKiBmb3IgdGVzdGluZyB0aGVzZSBtdWx0aS1pbmRleCBlbnRyaWVzLiBUaGF0J3MgdGhlIHdob2xlIHBvaW50IG9mIHRoaXMgdGVzdC4gVGhlIHRlc3QgaXRzZWxmIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19URVNUX1hBUlJBWWAgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIE5vdyBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuIEkgc2VlbSB0byByZWNhbGwgYENPTkZJR19YQVJSQVlfTVVMVElgIGJlaW5nIGEgYm9vbGVhbiBpbiBgbGliL0tjb25maWdgLiBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGVyZSBhcmVuJ3QgYW55IGRlcGVuZGVuY2llcyBJJ20gbWlzc2luZy4gVGltZSB0byBkaXZlIGludG8gYGxpYi9LY29uZmlnYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gb2YgYFhBUlJBWV9NVUxUSWAgdG8gdmVyaWZ5IHRoaXMuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHkgZm9yIHRoaXMgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg5MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ3OjMzLjQ1NjMzMDc2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUzOTM2MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYQVJSQVlfTVVMVElcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZz0zNDg9Y29uZmlnIElOVEVSVkFMX1RSRUVfU1BBTl9JVEVSXFxuLS1cXG5saWIvS2NvbmZpZy0zNTEtXFxubGliL0tjb25maWc6MzUyOmNvbmZpZyBYQVJSQVlfTVVMVElcXG5saWIvS2NvbmZpZy0zNTMtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo0NzozMy44MTAyODA4OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk5NzA5OTYwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRlY2lwaGVyaW5nIGEgQm9vbCdzIE9yaWdpbnMqKlxuXG5SaWdodCwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIGxvb2tpbmcgYXQgYSBib29sZWFuIHZhbHVlLCBzZWVtaW5nbHkgaW5kZXBlbmRlbnQgaW4gaXRzZWxmIOKAkyBpdCdzIG5vdCBkaXJlY3RseSB0cmlnZ2VyZWQgYnkgYW55IHNwZWNpZmljIHVzZXIgcHJvbXB0IG9yIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyAqaW1wbGljaXRseSogc2V0IGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEluIG15IGxpbmUgb2Ygd29yaywgdGhpcyBpcyBhIHZlcnkgY29tbW9uIHNjZW5hcmlvLiBTbywgdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogd2hhdCBhcmUgdGhlIHVwc3RyZWFtIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgYWN0aXZhdGluZyB0aGlzIGBYQVJSQVlfTVVMVElgIGZsYWc/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gY2hhaW4uIFRoZSBjb3JlIG9mIGRlYnVnZ2luZyB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMgbGllcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV4IHJlbGF0aW9uc2hpcHMgb2YgZGVwZW5kZW5jaWVzIHdpdGhpbiBhIGxhcmdlIHN5c3RlbS4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb25maWcgZmlsZXMgYW5kIHNlZSB3aGF0J3MgY2FsbGluZyB0aGUgc2hvdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNDUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo0OToyMy43ODEyNzk4ODlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTU2NzgwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFhBUlJBWV9NVUxUSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xODI3PWNvbmZpZyBYODZfU0dYXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE4MzItXFx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPIGlmIE5VTUFcXG5hcmNoL3g4Ni9LY29uZmlnOjE4MzM6XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbmFyY2gveDg2L0tjb25maWctMTgzNC1cXHRoZWxwXFxuLS1cXG5mcy9LY29uZmlnPTI3Mz1jb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNzU6XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbmZzL0tjb25maWctMjc2LVxcbi0tXFxubW0vS2NvbmZpZz04NDY9bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbi0tXFxubW0vS2NvbmZpZy04NDktXFx0c2VsZWN0IENPTVBBQ1RJT05cXG5tbS9LY29uZmlnOjg1MDpcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxubW0vS2NvbmZpZy04NTEtXFx0c2VsZWN0IE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnPTEyMzY9Y29uZmlnIFpPTkVfREVWSUNFXFxuLS1cXG5tbS9LY29uZmlnLTEyNDAtXFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWc6MTI0MTpcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxubW0vS2NvbmZpZy0xMjQyLVxcbi0tXFxuc291bmQvY29yZS9LY29uZmlnPTE4MT1jb25maWcgU05EX0NUTF9GQVNUX0xPT0tVUFxcbi0tXFxuc291bmQvY29yZS9LY29uZmlnLTE4My1cXHRkZWZhdWx0IHlcXG5zb3VuZC9jb3JlL0tjb25maWc6MTg0OlxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG5zb3VuZC9jb3JlL0tjb25maWctMTg1LVxcdGhlbHBcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9MTA2PWNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcXG52aXJ0L2t2bS9LY29uZmlnOjEwNzogICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxcbnZpcnQva3ZtL0tjb25maWctMTA4LSAgICAgICBib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ5OjI1LjU3Njk2MTg2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzgwNzMwNjU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBYQXJyYXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoZSBYQXJyYXkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIGBYQVJSQVlfTVVMVElgIGdldHMgcHVsbGVkIGluIGJ5IGEgZmV3IGRpZmZlcmVudCBzZXR0aW5nczogZWl0aGVyIGBIVUdFVExCX1BBR0VgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBvciBgU05EX0NUTF9GQVNUX0xPT0tVUGAuIFRoYXQncyBnb29kIHRvIGtub3cuIFNvLCBpZiBJIHdhbnQgYFhBUlJBWV9NVUxUSWAgZW5hYmxlZCwganVzdCBpbmNsdWRpbmcgZWl0aGVyIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3IgYEhVR0VUTEJGU2Agc2VlbXMgbGlrZSB0aGUgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoLlxuXG5BbmQgdGhlbiB0aGVyZSdzIGBURVNUX1hBUlJBWWAsIGEgdHJpc3RhdGUgb3B0aW9uLiBPYnZpb3VzbHksIEkgc2hvdWxkIGVuYWJsZSB0aGF0IHRvIHJ1biB0aGUgdGVzdHMsIHJpZ2h0PyBCdXQgdGhlbiBJIHdvbmRlciwgaG93IGRvIHRoZXNlIHRlc3RzIGFjdHVhbGx5IHJ1bj8gSXMgdGhpcyBhIGt1bml0IHRlc3QgdGhhdCdzIGF1dG9tYXRpY2FsbHkgcnVuIHdoZW4gdGhlIGtlcm5lbCBpcyBjb21waWxlZCBvciB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkPyBPciBpcyBpdCBzb21ldGhpbmcgZWxzZT8gU3l6a2FsbGVyIGNvdWxkIHByb2JhYmx5IGxvYWQgaXQsIG9yIEkgY291bGQganVzdCBidWlsZCBpdCBpbi5cblxuV2FpdCBhIHNlY29uZOKApiBObywgaXQncyBub3QgYSBrdW5pdCB0ZXN0LiBJdCdzIGEgKnN0YW5kYWxvbmUqIHRlc3QgbW9kdWxlLiBSaWdodCwgdGhhdCBtYWtlcyBtb3JlIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIHJ1bnMuIEkgc2hvdWxkIGp1c3QgZ28gbG9vayBhdCBgbGliL3Rlc3RfeGFycmF5LmNgIHRvIHNlZSBob3cgaXQncyBkZXNpZ25lZCB0byBiZSBpbnZva2VkLiBUaGF0J3MgcHJvYmFibHkgdGhlIGJlc3QgYXBwcm9hY2ggdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6NDk6NTMuMzg0MjcwNTIxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMxNjA1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF94YXJyYXkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF94YXJyYXkuYz0yMzMyPXN0YXRpYyB2b2lkIHhhcnJheV9leGl0KHZvaWQpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0yMzM1LVxcbmxpYi90ZXN0X3hhcnJheS5jOjIzMzY6bW9kdWxlX2luaXQoeGFycmF5X2NoZWNrcyk7XFxubGliL3Rlc3RfeGFycmF5LmMtMjMzNy1tb2R1bGVfZXhpdCh4YXJyYXlfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ5OjUzLjQzNDU5MDU2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDc1MzU4NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipYQXJyYXkgVGVzdCBNb2R1bGUgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGVzdCBmb3IgdGhlIFhBcnJheSBtb2R1bGUgaXMga2lja2luZyBvZmYgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBUaGF0IG1lYW5zIGBDT05GSUdfVEVTVF9YQVJSQVk9eWAgaXMgYmVpbmcgc2V0LCBhbmQgdGhlIGJ1aWxkIHN5c3RlbSBpcyBjb3JyZWN0bHkgZXhlY3V0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGF0IGJvb3QuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcywgd2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBDT05GSUdfVEVTVF9YQVJSQVlgIHB1bGxzIGluIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIHRlc3QncyBiZWhhdmlvciBvciBlbnZpcm9ubWVudC4gR290dGEgbWFrZSBzdXJlIEknbSBhd2FyZSBvZiB0aGUgY29tcGxldGUgZGVwZW5kZW5jeSBjaGFpbiB0byB0cm91Ymxlc2hvb3QgYW55IHVuZXhwZWN0ZWQgaXNzdWVzIGxhdGVyIG9uLiBMZXQgbWUgZ28gbG9vayBpbnRvIHRoYXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MjUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo1MDowMS41MDk5NTE0MzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDM3ODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBURVNUX1hBUlJBWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0yNTU3PWNvbmZpZyBURVNUX0JJVE1BUFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMjU2My1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoyNTY0OmNvbmZpZyBURVNUX1hBUlJBWVxcbmxpYi9LY29uZmlnLmRlYnVnLTI1NjUtXFx0dHJpc3RhdGUgXFxcIlRlc3QgdGhlIFhBcnJheSBjb2RlIGF0IHJ1bnRpbWVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjUwOjAxLjU1NTM5MjUwOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTI0NzY1NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHhhc19maW5kYCBNb2RpZmljYXRpb24gaW4gWEFycmF5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IGRlcGVuZGVuY2llcy4gVGhhdCdzIGFsd2F5cyBnb29kLiBUaGUgZmFjdCB0aGF0IGBURVNUX1hBUlJBWWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIHJlbGV2YW50IGNvbmZpZ3MgKHNwZWNpZmljYWxseSB0byBnZXQgYFhBUlJBWV9NVUxUSWApIG1ha2VzIHNlbnNlIGluIHRoaXMgY29udGV4dC5cblxuTm93LCBJIHNlZSB0aGF0IHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGB4YXNfZmluZGAuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgKm9ubHkqIGZ1bmN0aW9uIGltcGFjdGVkLiBZdXAsIGNoZWNraW5nIGBsaWIveGFycmF5LmNgIGNvbmZpcm1zIHRoYXQuIEkgc2hvdWxkIG1ha2UgYSBub3RlIHRvIGFkZCBgeGFzX2ZpbmRgIHRvIGBGb2N1c1N5bWJvbHNgLCBqdXN0IHRvIGJlIHNhZmUuXG5cbldhaXQsIGxvb2tpbmcgYWdhaW4sIGB4YXNfZmluZGAgaXMgZXhwb3J0ZWQuIFRoYXQgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBpbmxpbmVkLiBMb29raW5nIGF0IHRoZSBkZWZpbml0aW9uIGB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpYCwgaXQncyBub3QuIEFscmlnaHQsIHRoYXQncyBnb29kIHRvIGtub3cuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggaXRzZWxmOiBpdCBsb29rcyBsaWtlIHRoZXkndmUgY2hhbmdlZCB0aGUgbG9naWMgYXJvdW5kIHRoZSBvZmZzZXQgY2FsY3VsYXRpb24gd2l0aGluIGB4YXNfZmluZGAuIFNwZWNpZmljYWxseSwgdGhlcmUncyBhIGNvbmRpdGlvbmFsIGNoZWNrIG9uIGB4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdGAgdGhhdCBoYXMgYmVlbiBhZGRlZCBvciBtb2RpZmllZC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzOlxuXG5gYGBjXG59IGVsc2UgaWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdCBcdTAwMjZcdTAwMjZcbiAgICAgICAgICAgeGFzLVx1MDAzZXhhX29mZnNldCAhPSAoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAyNiBYQV9DSFVOS19NQVNLKSkge1xuICAgIHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG59XG5gYGBcblxuVGhpcyBub3cgc2VlbXMgdG8gYmU6XG5cbmBgYGNcbn0gZWxzZSBpZiAoeGFzLVx1MDAzZXhhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpKSB7XG4gICAgaWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdClcbiAgICAgICAgeGFzLVx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVx1MDAzZXhhX2luZGV4IC0gMSkgXHUwMDI2IFhBX0NIVU5LX01BU0spICsgMTtcbiAgICBlbHNlXG4gICAgICAgIHhhcy1cdTAwM2V4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpO1xufVxuYGBgXG5cbkFscmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBgeGFzX2ZpbmRgIGFzIGV4cGVjdGVkLCBidXQgd2hhdCBkb2VzIHRoZSBhc3NvY2lhdGVkIHRlc3QgY2FzZSBsb29rIGxpa2U/IExvb2tpbmcgYXQgYGxpYi90ZXN0X3hhcnJheS5jYCwgdGhlIHJlbGV2YW50IHRlc3QgaXMgYGNoZWNrX211bHRpX2ZpbmRfNGAuIFNvIHRoYXQgdGVzdCBjYXNlIHdpbGwgbGlrZWx5IGV4ZXJjaXNlIHRoaXMgbmV3IGxvZ2ljIGFuZCBnaXZlIHNvbWUgY29uZmlkZW5jZSBpbiB0aGUgcGF0Y2guXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIGluIG15IG1pbmQ6IElzIGB4YXNfZmluZGAgYSBob3QtcGF0aCBmdW5jdGlvbj8gR2l2ZW4gdGhhdCBYQXJyYXkgaXMgdXNlZCBleHRlbnNpdmVseSBpbiB0aGUgcGFnZSBjYWNoZSBhbmQgb3RoZXIgY29yZSBzdWJzeXN0ZW1zLCBteSBodW5jaCBpcyB0aGF0IGB4YXNfZmluZGAgY291bGQgdmVyeSB3ZWxsIGJlIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZS4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdGhlIG9mZnNldCBjYWxjdWxhdGlvbiwgc28gSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGB4YXNfZmluZGAgaXMgdXNlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHBlcmZvcm1hbmNlLWNyaXRpY2FsIHRoaXMgY2hhbmdlIG1pZ2h0IGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgyOCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo1MDoxMS4wODAxNjE1ODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzExNzQ1NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGFzX2ZpbmRcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTQxNz1oZWxkLCB3aGlsZSBtb3ZpbmcgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgaW5kZXggZG9lcy5cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDE4LVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0MTk6WW91IGNhbiBzZWFyY2ggZm9yIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgdXNpbmcgeGFzX2ZpbmQoKS4gIFRoaXNcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDIwLWlzIHRoZSBlcXVpdmFsZW50IG9mIGJvdGggeGFfZmluZCgpIGFuZCB4YV9maW5kX2FmdGVyKCk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9NDIzPWVudHJ5IGF0IHRoZSBpbmRleCBvZiB0aGUgeGFfc3RhdGUuICBVc2luZyB4YXNfbmV4dF9lbnRyeSgpIHRvXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjQyNDptb3ZlIHRvIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW5zdGVhZCBvZiB4YXNfZmluZCgpIHdpbGwgc2F2ZVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00MjUtYSBmdW5jdGlvbiBjYWxsIGluIHRoZSBtYWpvcml0eSBvZiBjYXNlcyBhdCB0aGUgZXhwZW5zZSBvZiBlbWl0dGluZyBtb3JlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9NDc3PWluIHRoZSB4YV9zdGF0ZSB3aWxsIG5vdCBiZSBjaGFuZ2VkLiAgV2hlbiBpdGVyYXRpbmcgb3ZlciBhbiBYQXJyYXlcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q6NDc4Om9yIGNhbGxpbmcgeGFzX2ZpbmQoKSwgaWYgdGhlIGluaXRpYWwgaW5kZXggaXMgaW4gdGhlIG1pZGRsZVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00Nzktb2YgYSBtdWx0aS1pbmRleCBlbnRyeSwgaXQgd2lsbCBub3QgYmUgYWx0ZXJlZC4gIFN1YnNlcXVlbnQgY2FsbHNcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3Q9MzE1PXhhc19sb2FkKCnkvJrlsL3lj6/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+WbtOWGheeahOesrFxcdWZmZmRcXHVmZmZkLi4uXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE1NDM9dm9pZCAqeGFzX3N0b3JlKHN0cnVjdCB4YV9zdGF0ZSAqLCB2b2lkICplbnRyeSk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNTQ0OnZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqLCB1bnNpZ25lZCBsb25nIG1heCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNTQ1LXZvaWQgKnhhc19maW5kX2NvbmZsaWN0KHN0cnVjdCB4YV9zdGF0ZSAqKTtcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTcwMT1zdGF0aWMgaW5saW5lIHZvaWQgeGFzX3NldF9scnUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzExLSAqIHhhc19uZXh0X2VudHJ5KCkgaXMgYW4gaW5saW5lIGZ1bmN0aW9uIHRvIG9wdGltaXNlIHhhcnJheSB0cmF2ZXJzYWwgZm9yXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzEyOiAqIHNwZWVkLiAgSXQgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIHhhc19maW5kKCksIGFuZCB3aWxsIGNhbGwgeGFzX2ZpbmQoKVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcxMy0gKiBmb3IgYWxsIHRoZSBoYXJkIGNhc2VzLlxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xNzE3PXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFzX25leHRfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzIzLVxcdFxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ICE9ICh4YXMtXFx1MDAzZXhhX2luZGV4IFxcdTAwMjYgWEFfQ0hVTktfTUFTSykpKVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTcyNDpcXHRcXHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyNS1cXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyNy1cXHRcXHRpZiAodW5saWtlbHkoeGFzLVxcdTAwM2V4YV9pbmRleCBcXHUwMDNlPSBtYXgpKVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTcyODpcXHRcXHRcXHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyOS1cXHRcXHRpZiAodW5saWtlbHkoeGFzLVxcdTAwM2V4YV9vZmZzZXQgPT0gWEFfQ0hVTktfTUFTSykpXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzMwOlxcdFxcdFxcdHJldHVybiB4YXNfZmluZCh4YXMsIG1heCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzMxLVxcdFxcdGVudHJ5ID0geGFfZW50cnkoeGFzLVxcdTAwM2V4YSwgbm9kZSwgeGFzLVxcdTAwM2V4YV9vZmZzZXQgKyAxKTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MzItXFx0XFx0aWYgKHVubGlrZWx5KHhhX2lzX2ludGVybmFsKGVudHJ5KSkpXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzMzOlxcdFxcdFxcdHJldHVybiB4YXNfZmluZCh4YXMsIG1heCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzM0LVxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0Kys7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE4MDA9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4MTctI2RlZmluZSB4YXNfZm9yX2VhY2goeGFzLCBlbnRyeSwgbWF4KSBcXFxcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxODE4OlxcdGZvciAoZW50cnkgPSB4YXNfZmluZCh4YXMsIG1heCk7IGVudHJ5OyBcXFxcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xODE5LVxcdCAgICAgZW50cnkgPSB4YXNfbmV4dF9lbnRyeSh4YXMsIG1heCkpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0xMDI9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfeGFzX3JldHJ5KHN0cnVjdCB4YXJyYXkgKnhhKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTEwLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxMTE6XFx0WEFfQlVHX09OKHhhLCB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpICE9IHhhX21rX3ZhbHVlKDApKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMTItXFx0eGFfZXJhc2VfaW5kZXgoeGEsIDEpO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTI1MD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzQoc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMjYyLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxMjYzOlxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMjY0LVxcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTI2Ni1cXG5saWIvdGVzdF94YXJyYXkuYzoxMjY3OlxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMjY4LVxcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMjcwLVxcbmxpYi90ZXN0X3hhcnJheS5jOjEyNzE6XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbmxpYi90ZXN0X3hhcnJheS5jLTEyNzItXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTEyODQtXFx0cmN1X3JlYWRfbG9jaygpO1xcbmxpYi90ZXN0X3hhcnJheS5jOjEyODU6XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbmxpYi90ZXN0X3hhcnJheS5jLTEyODYtXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMjk3LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxMjk4OlxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMjk5LVxcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMzAxLVxcbmxpYi90ZXN0X3hhcnJheS5jOjEzMDI6XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbmxpYi90ZXN0X3hhcnJheS5jLTEzMDMtXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jPTE1ODY9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbW92ZV9tYXgoc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xNTkxLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxNTkyOlxcdFhBX0JVR19PTih4YSwgeGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKSAhPSB4YV9ta19pbmRleChVTE9OR19NQVgpKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxNTkzOlxcdFhBX0JVR19PTih4YSwgeGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKSAhPSBOVUxMKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xNTk0LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTU5Ny1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubGliL3Rlc3RfeGFycmF5LmM6MTU5ODpcXHRYQV9CVUdfT04oeGEsIHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0geGFfbWtfaW5kZXgoVUxPTkdfTUFYKSk7XFxubGliL3Rlc3RfeGFycmF5LmMtMTU5OS1cXHR4YXNfcGF1c2UoXFx1MDAyNnhhcyk7XFxubGliL3Rlc3RfeGFycmF5LmM6MTYwMDpcXHRYQV9CVUdfT04oeGEsIHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0gTlVMTCk7XFxubGliL3Rlc3RfeGFycmF5LmMtMTYwMS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmxpYi94YXJyYXkuYz0xMzc1PUVYUE9SVF9TWU1CT0xfR1BMKF9feGFzX25leHQpO1xcbi0tXFxubGliL3hhcnJheS5jLTEzNzctLyoqXFxubGliL3hhcnJheS5jOjEzNzg6ICogeGFzX2ZpbmQoKSAtIEZpbmQgdGhlIG5leHQgcHJlc2VudCBlbnRyeSBpbiB0aGUgWEFycmF5LlxcbmxpYi94YXJyYXkuYy0xMzc5LSAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXFxuLS1cXG5saWIveGFycmF5LmMtMTM5Mi0gKi9cXG5saWIveGFycmF5LmM6MTM5Mzp2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXFxubGliL3hhcnJheS5jLTEzOTQte1xcbi0tXFxubGliL3hhcnJheS5jPTIxNzI9RVhQT1JUX1NZTUJPTCh4YV9jbGVhcl9tYXJrKTtcXG4tLVxcbmxpYi94YXJyYXkuYy0yMTg1LSAqIGVudHJpZXMgd2hpY2ggYXJlIGJlaW5nIHNpbXVsdGFuZW91c2x5IGFkZGVkLiAgSXQgd2lsbCBub3QgcmV0dXJuIGFuXFxubGliL3hhcnJheS5jOjIxODY6ICogJVhBX1JFVFJZX0VOVFJZOyBpZiB5b3UgbmVlZCB0byBzZWUgcmV0cnkgZW50cmllcywgdXNlIHhhc19maW5kKCkuXFxubGliL3hhcnJheS5jLTIxODctICpcXG4tLVxcbmxpYi94YXJyYXkuYz0yMTkxPXZvaWQgKnhhX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgKmluZGV4cCxcXG4tLVxcbmxpYi94YXJyYXkuYy0yMjAxLVxcdFxcdGVsc2VcXG5saWIveGFycmF5LmM6MjIwMjpcXHRcXHRcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIG1heCk7XFxubGliL3hhcnJheS5jLTIyMDMtXFx0fSB3aGlsZSAoeGFzX3JldHJ5KFxcdTAwMjZ4YXMsIGVudHJ5KSk7XFxuLS1cXG5saWIveGFycmF5LmM9MjIxMj1zdGF0aWMgYm9vbCB4YXNfc2libGluZyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbmxpYi94YXJyYXkuYy0yMjM1LSAqIHdoaWNoIGFyZSBiZWluZyBzaW11bHRhbmVvdXNseSBhZGRlZC4gIEl0IHdpbGwgbm90IHJldHVybiBhblxcbmxpYi94YXJyYXkuYzoyMjM2OiAqICVYQV9SRVRSWV9FTlRSWTsgaWYgeW91IG5lZWQgdG8gc2VlIHJldHJ5IGVudHJpZXMsIHVzZSB4YXNfZmluZCgpLlxcbmxpYi94YXJyYXkuYy0yMjM3LSAqXFxuLS1cXG5saWIveGFycmF5LmM9MjI0MT12b2lkICp4YV9maW5kX2FmdGVyKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXFxuLS1cXG5saWIveGFycmF5LmMtMjI1NC1cXHRcXHRlbHNlXFxubGliL3hhcnJheS5jOjIyNTU6XFx0XFx0XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBtYXgpO1xcbmxpYi94YXJyYXkuYy0yMjU2LVxcbi0tXFxubW0vZmlsZW1hcC5jPTQ3OT1ib29sIGZpbGVtYXBfcmFuZ2VfaGFzX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9maWxlbWFwLmMtNDkwLVxcdGZvciAoOzspIHtcXG5tbS9maWxlbWFwLmM6NDkxOlxcdFxcdGZvbGlvID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgbWF4KTtcXG5tbS9maWxlbWFwLmMtNDkyLVxcdFxcdGlmICh4YXNfcmV0cnkoXFx1MDAyNnhhcywgZm9saW8pKVxcbi0tXFxubW0vZmlsZW1hcC5jPTIwNzg9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmZpbmRfZ2V0X2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBwZ29mZl90IG1heCxcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yMDg0LVxcdGlmIChtYXJrID09IFhBX1BSRVNFTlQpXFxubW0vZmlsZW1hcC5jOjIwODU6XFx0XFx0Zm9saW8gPSB4YXNfZmluZCh4YXMsIG1heCk7XFxubW0vZmlsZW1hcC5jLTIwODYtXFx0ZWxzZVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yNDM0PWJvb2wga3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NDktXFx0aWYgKCFhdHRycylcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI0NTA6XFx0XFx0cmV0dXJuICF4YXNfZmluZChcXHUwMDI2eGFzLCBlbmQgLSAxKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjUwOjEzLjAxMTM0MTgyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDQ4MTU0ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IGFuZCBDb25maWd1cmF0aW9uIGZvciBYQXJyYXkgQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiBpdCBlZmZlY3RpdmVseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHhhc19maW5kYCBpcyBkZWZpbml0ZWx5IGEgaG90LXBhdGggZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWQgaW4gc2V2ZXJhbCBjcml0aWNhbCBhcmVhcyBsaWtlIGBmaWxlbWFwX3JhbmdlX2hhc19wYWdlYCBhbmQgYGZpbmRfZ2V0X2VudHJ5YC4gU28sIGFzIHBlciB0aGUgaW5zdHJ1Y3Rpb25zLCBJICpzaG91bGQgbm90KiBsaXN0IGB4YXNfZmluZGAgaW4gYEZvY3VzU3ltYm9sc2AgYmVjYXVzZSBkb2luZyBzbyB3b3VsZCBza2V3IHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbnMsIGFuZCBpdCBpcyBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24uXG5cbldoYXQgYWJvdXQgdGhlIHRlc3QgZnVuY3Rpb24gYGNoZWNrX211bHRpX2ZpbmRfNGAgdGhvdWdoPyBJdOKAmXMgYSBzdGF0aWMsIGxpa2VseSBpbmxpbmVkIChvciBgc3RhdGljIG5vaW5saW5lYCkgdGVzdCBmdW5jdGlvbi4gQnV0LCBmdXp6aW5nIGEgdGVzdCBmdW5jdGlvbiBkaXJlY3RseSBkb2VzbuKAmXQgcmVhbGx5IG1ha2Ugc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgU3l6a2FsbGVyJ3MgZ29hbHMuIEkgYW0gYWltaW5nIHRvIGZpbmQga2VybmVsLWxldmVsIGVudHJ5cG9pbnRzLlxuXG5UaGVyZWZvcmUsIGBGb2N1c1N5bWJvbHNgIHdpbGwgcmVtYWluIGVtcHR5LiBDaGVja2luZyBmb3Igb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zIGNvbmZpcm1zIHRoaXMuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uLCB0aGUgZ29hbCBpcyB0byBlbmFibGUgdGhlIHRlc3QgY2FzZSB0aGF0IHNwZWNpZmljYWxseSB0YXJnZXRzIHRoZSBidWcuIFRoZSBwcm9tcHQgc2F5cyB0aGF0IEkgc2hvdWxkIGVuYWJsZSB0aGUgdGVzdCBjYXNlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHhhc19maW5kYCBhbmQgYGNoZWNrX211bHRpX2ZpbmRfNGAgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdGVzdCBjYXNlIGNhbiBiZSBydW4uIEluaXRpYWxseSwgSSB0aG91Z2h0IGFib3V0IGBURVNUX1hBUlJBWWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNpbmNlIHRoZSBsYXR0ZXIgc2VsZWN0cyBgWEFSUkFZX01VTFRJYC4gQnV0IGBIVUdFVExCRlNgICphbHNvKiBzZWxlY3RzIGBYQVJSQVlfTVVMVElgIGFuZCBzZWVtcyBsaWtlIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgb3B0aW9uLCByZXZpZXdpbmcgYGxpYi9LY29uZmlnYCBjb25maXJtcyB0aGlzLlxuXG5UaGlua2luZyBhYm91dCBgVEVTVF9YQVJSQVlgLCBpZiBpdCdzIGJ1aWx0LWluIChgQ09ORklHX1RFU1RfWEFSUkFZPXlgKSwgaXQgcnVucyBhdCBib290LiBJZiBpdCdzIGEgbW9kdWxlIChgQ09ORklHX1RFU1RfWEFSUkFZPW1gKSwgaXQgcnVucyBvbiBtb2R1bGUgbG9hZC4gU3l6a2FsbGVyIGNhbiBsb2FkIG1vZHVsZXMgaWYgdGhleSBhcmUgcHJlc2VudC4gQnV0IHRoZSBhY3R1YWwgYnVnIGlzIGluIGB4YXNfZmluZGAsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHBsYWNlcyBsaWtlIGBtbWFwYCwgYHJlYWRgLCBgd3JpdGVgLCBhbmQgc28gb24uIFNvIHRoZSBidWcgaXMgcmVhY2hhYmxlIGV2ZW4gd2l0aG91dCBgVEVTVF9YQVJSQVlgLiBIb3dldmVyLCB0aGUgdGVzdCBjYXNlIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBleHBvc2UgdGhlIGJ1Zy4gRW5hYmxpbmcgYFRFU1RfWEFSUkFZPXlgIGVuc3VyZXMgdGhhdCB0aGUga2VybmVsIHJ1bnMgdGhlIHRlc3QgYXQgYm9vdCwgY3Jhc2hpbmcgaW1tZWRpYXRlbHkgaWYgdGhlIGJ1ZyBpcyBwcmVzZW50LiBUaGlzIGlzIGlkZWFsIVxuXG5TbywgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBpbmNsdWRlIGBURVNUX1hBUlJBWWAgYW5kIGBIVUdFVExCRlNgICh0byBlbmFibGUgYFhBUlJBWV9NVUxUSWApLiBJIGNvbmZpcm1lZCB0aGF0IGBIVUdFVExCRlNgIGlzIGEgY29tbW9uIGNvbmZpZyBhbmQgaXMgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIHRvIHVzZS4gTGV0IG1lIGRvdWJsZSBjaGVjay4uLiBZZXMsIGl0J3MgdGhlIHJpZ2h0IGNob2ljZS5cblxuSW4gc3VtbWFyeSwgdGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB4YXNfZmluZCgpYCB3aXRoaW4gdGhlIFhBcnJheSBjb2RlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLWluZGV4IGVudHJpZXMuIFRoaXMgaXMgY29yZSBYQXJyYXkgbG9naWMgYW5kIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSB0ZXN0IGNhc2UsIGBjaGVja19tdWx0aV9maW5kXzRgLiBUbyBtYXhpbWl6ZSBmdXp6aW5nIGVmZmVjdGl2ZW5lc3MsIEknbGwgZXhjbHVkZSBgeGFzX2ZpbmRgIGZyb20gYEZvY3VzU3ltYm9sc2AuIFRvIGVuc3VyZSB0aGUgYWRkZWQgdGVzdCBjYXNlIHJ1bnMgYW5kIGNhdGNoZXMgcG90ZW50aWFsIGlzc3VlcywgYENPTkZJR19URVNUX1hBUlJBWWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCAod2hpY2ggZW5hYmxlcyBgQ09ORklHX1hBUlJBWV9NVUxUSWApIHdpbGwgYmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjUwOjQ0LjA1OTQ5OTA3NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE2Nzg0MjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo1MDo0NC4zNzYyODc4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzE4NDcxMzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipWZXJpZnlpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgYEhVR0VUTEJGU2DigJR5ZXAsIHRoYXQncyB3aGF0IEkgZXhwZWN0ZWQuIENvbmZpcm1lZC4gTm93LCBsZXQncyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBDT05GSUdfVEVTVF9YQVJSQVlgLiBJdCdzIGEga2V5IHBpZWNlLCBhbmQgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgc2V0IGFwcHJvcHJpYXRlbHkgZ2l2ZW4gdGhlIGRpcmVjdGlvbiBvZiB0aGlzIHByb2plY3QuIE5vIHJvb20gZm9yIGFzc3VtcHRpb25zIGhlcmUuIExldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTQ5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6NTA6NTAuNjk0NzY1Nzk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA3MDQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVEVTVF9YQVJSQVlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL0tjb25maWcuZGVidWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MjU1Nz1jb25maWcgVEVTVF9CSVRNQVBcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTI1NjMtXFxubGliL0tjb25maWcuZGVidWc6MjU2NDpjb25maWcgVEVTVF9YQVJSQVlcXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTY1LVxcdHRyaXN0YXRlIFxcXCJUZXN0IHRoZSBYQXJyYXkgY29kZSBhdCBydW50aW1lXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo1MDo1MC43Mzk4Mzg1MjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwMjQwMTU2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWEFycmF5IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgVEVTVF9YQVJSQVlgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBmb2N1cyBvbiBoZXJlLiBMZXQncyBicmVhayB0aGlzIGRvd24gZnVydGhlciwgZ2l2ZW4gbXkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwgaW50ZXJuYWxzIGFuZCBYQXJyYXkgc3BlY2lmaWNhbGx5LlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBidWcgd2l0aGluIGB4YXNfZmluZCgpYC4gVGhhdCdzIGEgKm1ham9yKiBmdW5jdGlvbiB3aXRoaW4gdGhlIFhBcnJheSBzeXN0ZW07IGl0J3MgcHJhY3RpY2FsbHkgYSBsaW5jaHBpbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgcGFnZSBjYWNoZSBhbmQgb3RoZXIgY3JpdGljYWwgc3Vic3lzdGVtcy4gVGhlIGJ1ZyBpdHNlbGYgdGFyZ2V0cyBtdWx0aS1pbmRleCBlbnRyeSBzZWFyY2hlcywgd2hpY2gsIGFzIHdlIGtub3csIGNhbiBnZXQgdHJpY2t5LlxuXG5Gcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBtYWtlcyB0aGUgcGF0Y2ggaGlnaGx5IHJlbGV2YW50LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBhcHByb3ByaWF0ZWx5IHNldCB0byBgdHJ1ZWAuIEJlY2F1c2UgYHhhc19maW5kKClgIGlzIGEgZ2VuZXJpYywgY29yZSBmdW5jdGlvbiBpbiBhIGhvdCBwYXRoLCBpdCdzIGNvcnJlY3QgdG8gZXhjbHVkZSBpdCBmcm9tIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBUaGUgcmVhbCBiZW5lZml0IGhlcmUgY29tZXMgZnJvbSBlbnN1cmluZyB0aGlzIG5ldyB0ZXN0IGNhc2UsIGBjaGVja19tdWx0aV9maW5kXzRgLCB3aXRoaW4gYGxpYi90ZXN0X3hhcnJheS5jYCwgYWN0dWFsbHkgKnJ1bnMqIGR1cmluZyBmdXp6aW5nLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIGFyZSBgVEVTVF9YQVJSQVlgICh0aGF0J3Mgb2J2aW91cykgYW5kIGBIVUdFVExCRlNgLiBUaGUgbGF0dGVyIGlzIGVzc2VudGlhbCBiZWNhdXNlIGl0IHNlbGVjdHMgYENPTkZJR19YQVJSQVlfTVVMVElgLCB3aGljaCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIG11bHRpLWluZGV4IHRlc3QgYWRkZWQgYnkgdGhlIHBhdGNoLiBUaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBhcHByb2FjaCB0byBtYXhpbWl6ZSB0ZXN0IGNvdmVyYWdlIG9mIHRoaXMgcGFydGljdWxhciBidWcgZml4IHdpdGhpbiB0aGUgZnV6emluZyBmcmFtZXdvcmsuIEl0IGNvcnJlY3RseSBpZGVudGlmaWVzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGVzdCBleGVjdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDAxLCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo1MTowMy43NjM4NTczMjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzk3NzQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9YQVJSQVlcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgeGFzX2ZpbmQoKWAsIGEgY29yZSBYQXJyYXkgZnVuY3Rpb24gdXNlZCBleHRlbnNpdmVseSBpbiB0aGUga2VybmVsIChlLmcuLCBwYWdlIGNhY2hlKS4gVGhlIGJ1ZyBvY2N1cnMgd2hlbiBzZWFyY2hpbmcgZm9yIG11bHRpLWluZGV4IGVudHJpZXMuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSB0ZXN0IGNhc2UgYGNoZWNrX211bHRpX2ZpbmRfNGAgdG8gYGxpYi90ZXN0X3hhcnJheS5jYC4gU2luY2UgYHhhc19maW5kKClgIGlzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgaXQgaXMgZXhjbHVkZWQgZnJvbSBGb2N1c1N5bWJvbHMuIFRvIGVuc3VyZSB0aGUgbmV3IHRlc3QgY2FzZSBpcyBleGVjdXRlZCwgYENPTkZJR19URVNUX1hBUlJBWWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCAod2hpY2ggc2VsZWN0cyBgQ09ORklHX1hBUlJBWV9NVUxUSWAgcmVxdWlyZWQgYnkgdGhlIHRlc3QpIHNob3VsZCBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfWEFSUkFZXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHhhc19maW5kKClgLCBhIGNvcmUgWEFycmF5IGZ1bmN0aW9uIHVzZWQgZXh0ZW5zaXZlbHkgaW4gdGhlIGtlcm5lbCAoZS5nLiwgcGFnZSBjYWNoZSkuIFRoZSBidWcgb2NjdXJzIHdoZW4gc2VhcmNoaW5nIGZvciBtdWx0aS1pbmRleCBlbnRyaWVzLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgdGVzdCBjYXNlIGBjaGVja19tdWx0aV9maW5kXzRgIHRvIGBsaWIvdGVzdF94YXJyYXkuY2AuIFNpbmNlIGB4YXNfZmluZCgpYCBpcyBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24sIGl0IGlzIGV4Y2x1ZGVkIGZyb20gRm9jdXNTeW1ib2xzLiBUbyBlbnN1cmUgdGhlIG5ldyB0ZXN0IGNhc2UgaXMgZXhlY3V0ZWQsIGBDT05GSUdfVEVTVF9YQVJSQVlgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgKHdoaWNoIHNlbGVjdHMgYENPTkZJR19YQVJSQVlfTVVMVElgIHJlcXVpcmVkIGJ5IHRoZSB0ZXN0KSBzaG91bGQgYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6NTE6MDMuODM3ODQxMTQyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE0NzA3OTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjUxOjAzLjgzODI4ODMyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDE0NjYyOTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIHhhcnJheSBtdWx0aS1pbmRleCBmaW5kIGltcGxlbWVudGF0aW9uIChgeGFzX2ZpbmRgKS4gVGhlIGlzc3VlIGludm9sdmVzIGluY29ycmVjdCBvZmZzZXQgY2FsY3VsYXRpb25zIGR1cmluZyB4YXJyYXkgdHJhdmVyc2FsLCB3aGljaCBjb3VsZCBsZWFkIHRvIHJldHVybmluZyBpbmNvcnJlY3QgZW50cmllcywgaW5maW5pdGUgbG9vcHMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4gKGlmIHRoZXkgbGVhZCB0byBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyksIG9yIG90aGVyIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjc5MzUzNjM1NDViZTExMDA0MTEyYTNiZGZmYTY2ZTMzMTJjNWY2Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDEyOjQ2OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfeGFycmF5LmMgYi9saWIvdGVzdF94YXJyYXkuY1xuaW5kZXggNWNhMGFlZmVlOWFhNS4uN2QwZGVjY2RmNTlhMCAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X3hhcnJheS5jXG4rKysgYi9saWIvdGVzdF94YXJyYXkuY1xuQEAgLTEyNDcsNiArMTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSlcbit7XG4rI2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbitcdFhBX1NUQVRFKHhhcywgeGEsIDEwMCk7XG4rXHRYQV9TVEFURV9PUkRFUih4YXNfc3BsaXQsIHhhLCAwLCAwKTtcbitcdHZvaWQgKmVudHJ5O1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0LyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovXG4rXHR4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpO1xuK1x0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcbitcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7XG4rXHR4YV9lcmFzZV9pbmRleCh4YSwgMCk7XG4rXHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuK1xuK1x0LyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi9cbitcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XG4rXHRYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpO1xuK1xuK1x0eGFzX3NldChcdTAwMjZ4YXMsIDEwMCk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFzX3NwbGl0X2FsbG9jKFx1MDAyNnhhc19zcGxpdCwgeGEsIDcsIEdGUF9LRVJORUwpO1xuK1x0eGFzX2xvY2soXHUwMDI2eGFzX3NwbGl0KTtcbitcdHhhc19zcGxpdChcdTAwMjZ4YXNfc3BsaXQsIHhhLCA3KTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEyODsgaSsrKVxuK1x0XHRfX3hhX3N0b3JlKHhhLCBpLCB4YV9ta19pbmRleChpKSwgMCk7XG4rXHR4YXNfdW5sb2NrKFx1MDAyNnhhc19zcGxpdCk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHR4YV9kZXN0cm95KHhhKTtcbitcdFhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGksIGosIGs7XG5AQCAtMTM3MCw2ICsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSlcbiBcdFx0Y2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTtcbiBcdGNoZWNrX211bHRpX2ZpbmRfMih4YSk7XG4gXHRjaGVja19tdWx0aV9maW5kXzMoeGEpO1xuK1x0Y2hlY2tfbXVsdGlfZmluZF80KHhhKTtcbiB9XG4gXG4gLyogU2VlIGZpbmRfc3dhcF9lbnRyeSgpIGluIG1tL3NobWVtLmMgKi9cbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcbmluZGV4IDlhOGI0OTE2NTQwY2YuLjk4MDMyNGQ2ODZiZDAgMTAwNjQ0XG4tLS0gYS9saWIveGFycmF5LmNcbisrKyBiL2xpYi94YXJyYXkuY1xuQEAgLTE0MDYsOSArMTQwNiwxMSBAQCB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXG4gXHRcdGVudHJ5ID0geGFzX2xvYWQoeGFzKTtcbiBcdFx0aWYgKGVudHJ5IHx8IHhhc19ub3Rfbm9kZSh4YXMtXHUwMDNleGFfbm9kZSkpXG4gXHRcdFx0cmV0dXJuIGVudHJ5O1xuLVx0fSBlbHNlIGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICB4YXMtXHUwMDNleGFfb2Zmc2V0ICE9ICh4YXMtXHUwMDNleGFfaW5kZXggXHUwMDI2IFhBX0NIVU5LX01BU0spKSB7XG4tXHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHR9IGVsc2UgaWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSkge1xuK1x0XHRpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0KVxuK1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHRcdGVsc2VcbitcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbiBcdH1cbiBcbiBcdHhhc19uZXh0X29mZnNldCh4YXMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6NTE6MDMuODM4Mjg5MzQyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTQ2NjA2MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhhcnJheSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbGliL3hhcnJheS5jYCBhbmQgYWRkaW5nIGEgbmV3IHRlc3QsIGBsaWIvdGVzdF94YXJyYXkuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gdGhlIGB4YXNfZmluZGAgZnVuY3Rpb24gd2l0aGluIGB4YXJyYXkuY2AuICBMb29raW5nIGF0IHRoZSBjb2RlLCB0aGUgb3JpZ2luYWwgY2hlY2sgZm9yIG9mZnNldCBoYXMgYmVlbiBtb2RpZmllZC4gIFNwZWNpZmljYWxseTpcblxuYGBgY1xuLVx0fSBlbHNlIGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICB4YXMtXHUwMDNleGFfb2Zmc2V0ICE9ICh4YXMtXHUwMDNleGFfaW5kZXggXHUwMDI2IFhBX0NIVU5LX01BU0spKSB7XG4tXHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHR9IGVsc2UgaWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSkge1xuK1x0XHRpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0KVxuK1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHRcdGVsc2VcbitcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbiBcdH1cbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcgYSBidWcgaW4gaG93IGB4YXNfZmluZGAgaGFuZGxlcyBtdWx0aS1pbmRleCBzZWFyY2hlcywgbGlrZWx5IHJlbGF0ZWQgdG8gY2FzZXMgd2hlcmUgZW50cmllcyBhcmUgc3BsaXQgYWNyb3NzIGJvdW5kYXJpZXMuIFRoZSBvcmlnaW5hbCBsb2dpYyBzZWVtcyB0byBoYXZlIGEgZmxhdyByZWxhdGVkIHRvIG9mZnNldCBjYWxjdWxhdGlvbiwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2VzcywgYW4gaW5maW5pdGUgbG9vcCwgb3IganVzdCB0aGUgd3JvbmcgZW50cnkgYmVpbmcgcmV0dXJuZWQuICBUaGlzIGlzIGEgdHJhdmVyc2FsIGlzc3VlLlxuXG5Ob3csIGNvbmNlcm5pbmcgbWVtb3J5IHNhZmV0eSwgdGhpcyBpcyB3aGVyZSBteSBleHBlcnRpc2UgY29tZXMgaW4uICBJIGRvbid0IHNlZSBhbnkgZXZpZGVuY2UgaGVyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IEtNU0FOIHdvdWxkIGNhdGNoLiBUaGUgYHhhc19maW5kYCBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBhbiBlbnRyeTsgaWYgaXQgcmV0dXJucyB0aGUgd3JvbmcgZW50cnksIGl0IGlzIGxpa2VseSBhIGNyYXNoIG9yIGxvZ2ljIGJ1ZyBidXQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIHRoZSBtYWluIHVzZSBjYXNlIGZvciBLTVNBTi4gVGhlIGNvZGUgY2hhbmdlcyBhcHBlYXIgdG8gYmUgZW50aXJlbHkgY29uY2VybmVkIHdpdGggdGhlICpsb2dpYyogb2YgdGhlIHRyYXZlcnNhbCwgYW5kIG5vdCB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvciBoYW5kbGluZyBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkgaXRzZWxmLiBLQVNBTiBpcyBzdGlsbCByZWxldmFudCBoZXJlLCBhcyB0aGVyZSAqY291bGQqIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBIb3dldmVyLCBJJ2QgYmV0IHRoZSBwcmltYXJ5IGlzc3VlIGlzIGxvZ2ljLCBub3QgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZSBuZXcgdGVzdCwgYGNoZWNrX211bHRpX2ZpbmRfNGAsIHNlZW1zIHRvIGJlIGV4ZXJjaXNpbmcgYHhhX3N0b3JlX29yZGVyYCwgYHhhc19maW5kYCwgYHhhc19zcGxpdGAsIGV0Yy4sIHNvIGl0J3MgYSBnb29kIHNpZ24gdGhleSdyZSBjb3ZlcmluZyB0aGVzZSBib3VuZGFyeSBjb25kaXRpb25zLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gIFRoaXMgaXMgYSBsb2dpYyBidWcgZml4LCBub3QgYSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgbGVhayBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxMSwiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo1MToxNy45ODQ4OTg2NTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSB4YXJyYXkgbXVsdGktaW5kZXggZmluZCBpbXBsZW1lbnRhdGlvbiAoYHhhc19maW5kYCkuIFRoZSBpc3N1ZSBpbnZvbHZlcyBpbmNvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9ucyBkdXJpbmcgeGFycmF5IHRyYXZlcnNhbCwgd2hpY2ggY291bGQgbGVhZCB0byByZXR1cm5pbmcgaW5jb3JyZWN0IGVudHJpZXMsIGluZmluaXRlIGxvb3BzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOIChpZiB0aGV5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMpLCBvciBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSB4YXJyYXkgbXVsdGktaW5kZXggZmluZCBpbXBsZW1lbnRhdGlvbiAoYHhhc19maW5kYCkuIFRoZSBpc3N1ZSBpbnZvbHZlcyBpbmNvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9ucyBkdXJpbmcgeGFycmF5IHRyYXZlcnNhbCwgd2hpY2ggY291bGQgbGVhZCB0byByZXR1cm5pbmcgaW5jb3JyZWN0IGVudHJpZXMsIGluZmluaXRlIGxvb3BzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOIChpZiB0aGV5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMpLCBvciBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow89zx4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 12:44:47 +0000 UTC FinishedAt: 2026-08-27 12:51:20 +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": [ "TEST_XARRAY", "HUGETLBFS" ], "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": [ "TEST_XARRAY", "HUGETLBFS" ], "series_id": "c03cb276-83ca-4dcf-9b35-e7a078619e6c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfWEFSUkFZJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSB4YXJyYXkgbXVsdGktaW5kZXggZmluZCBpbXBsZW1lbnRhdGlvbiAoYHhhc19maW5kYCkuIFRoZSBpc3N1ZSBpbnZvbHZlcyBpbmNvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9ucyBkdXJpbmcgeGFycmF5IHRyYXZlcnNhbCwgd2hpY2ggY291bGQgbGVhZCB0byByZXR1cm5pbmcgaW5jb3JyZWN0IGVudHJpZXMsIGluZmluaXRlIGxvb3BzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOIChpZiB0aGV5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMpLCBvciBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgeGFzX2ZpbmQoKWAsIGEgY29yZSBYQXJyYXkgZnVuY3Rpb24gdXNlZCBleHRlbnNpdmVseSBpbiB0aGUga2VybmVsIChlLmcuLCBwYWdlIGNhY2hlKS4gVGhlIGJ1ZyBvY2N1cnMgd2hlbiBzZWFyY2hpbmcgZm9yIG11bHRpLWluZGV4IGVudHJpZXMuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSB0ZXN0IGNhc2UgYGNoZWNrX211bHRpX2ZpbmRfNGAgdG8gYGxpYi90ZXN0X3hhcnJheS5jYC4gU2luY2UgYHhhc19maW5kKClgIGlzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgaXQgaXMgZXhjbHVkZWQgZnJvbSBGb2N1c1N5bWJvbHMuIFRvIGVuc3VyZSB0aGUgbmV3IHRlc3QgY2FzZSBpcyBleGVjdXRlZCwgYENPTkZJR19URVNUX1hBUlJBWWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCAod2hpY2ggc2VsZWN0cyBgQ09ORklHX1hBUlJBWV9NVUxUSWAgcmVxdWlyZWQgYnkgdGhlIHRlc3QpIHNob3VsZCBiZSBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjc5MzUzNjM1NDViZTExMDA0MTEyYTNiZGZmYTY2ZTMzMTJjNWY2Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDEyOjQ2OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3hhcnJheS5jIGIvbGliL3Rlc3RfeGFycmF5LmNcbmluZGV4IDVjYTBhZWZlZTlhYTUuLjdkMGRlY2NkZjU5YTAgMTAwNjQ0XG4tLS0gYS9saWIvdGVzdF94YXJyYXkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RfeGFycmF5LmNcbkBAIC0xMjQ3LDYgJiM0MzsxMjQ3LDY3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfMyhzdHJ1Y3QgeGFycmF5ICp4YSlcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSlcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxuJiM0MztcdFhBX1NUQVRFKHhhcywgeGEsIDEwMCk7XG4mIzQzO1x0WEFfU1RBVEVfT1JERVIoeGFzX3NwbGl0LCB4YSwgMCwgMCk7XG4mIzQzO1x0dm9pZCAqZW50cnk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpO1xuJiM0MztcbiYjNDM7XHQvKiAoMSkgT3JkZXItNyBlbnRyeSAoMC0xMjcpIHdpdGggYWRqYWNlbnQgZW50cnkgYXQgMTI4LCBzdGFydGluZyBhdCAxMDAgKi9cbiYjNDM7XHR4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuJiM0MztcbiYjNDM7XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7XG4mIzQzO1xuJiM0MztcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHhhX2VyYXNlX2luZGV4KHhhLCAxMjgpO1xuJiM0MztcdHhhX2VyYXNlX2luZGV4KHhhLCAwKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuJiM0MztcbiYjNDM7XHQvKiAoMikgU3BsaXR0aW5nIGEgbXVsdGktaW5kZXggZW50cnkgYWZ0ZXIgYSBsb29rdXAgYmVnaW5zIGluc2lkZSBpdCAqL1xuJiM0MztcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0eGFzX3NldChcdTAwMjZ4YXMsIDEwMCk7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHhhc19zcGxpdF9hbGxvYyhcdTAwMjZ4YXNfc3BsaXQsIHhhLCA3LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR4YXNfbG9jayhcdTAwMjZ4YXNfc3BsaXQpO1xuJiM0MztcdHhhc19zcGxpdChcdTAwMjZ4YXNfc3BsaXQsIHhhLCA3KTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMjg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0X194YV9zdG9yZSh4YSwgaSwgeGFfbWtfaW5kZXgoaSksIDApO1xuJiM0MztcdHhhc191bmxvY2soXHUwMDI2eGFzX3NwbGl0KTtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcbiYjNDM7XG4mIzQzO1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0eGFfZGVzdHJveSh4YSk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZF8xKHN0cnVjdCB4YXJyYXkgKnhhKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgaiwgaztcbkBAIC0xMzcwLDYgJiM0MzsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSlcbiBcdFx0Y2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTtcbiBcdGNoZWNrX211bHRpX2ZpbmRfMih4YSk7XG4gXHRjaGVja19tdWx0aV9maW5kXzMoeGEpO1xuJiM0MztcdGNoZWNrX211bHRpX2ZpbmRfNCh4YSk7XG4gfVxuIFxuIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovXG5kaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jXG5pbmRleCA5YThiNDkxNjU0MGNmLi45ODAzMjRkNjg2YmQwIDEwMDY0NFxuLS0tIGEvbGliL3hhcnJheS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIveGFycmF5LmNcbkBAIC0xNDA2LDkgJiM0MzsxNDA2LDExIEBAIHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcbiBcdFx0ZW50cnkgPSB4YXNfbG9hZCh4YXMpO1xuIFx0XHRpZiAoZW50cnkgfHwgeGFzX25vdF9ub2RlKHhhcy1cdTAwM2V4YV9ub2RlKSlcbiBcdFx0XHRyZXR1cm4gZW50cnk7XG4tXHR9IGVsc2UgaWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gKHhhcy1cdTAwM2V4YV9pbmRleCBcdTAwMjYgWEFfQ0hVTktfTUFTSykpIHtcbi1cdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVx1MDAzZXhhX2luZGV4IC0gMSkgXHUwMDI2IFhBX0NIVU5LX01BU0spICYjNDM7IDE7XG4mIzQzO1x0fSBlbHNlIGlmICh4YXMtXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSkpIHtcbiYjNDM7XHRcdGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQpXG4mIzQzO1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSAmIzQzOyAxO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbiBcdH1cbiBcbiBcdHhhc19uZXh0X29mZnNldCh4YXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtURVNUX1hBUlJBWSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHhhc19maW5kKClgLCBhIGNvcmUgWEFycmF5IGZ1bmN0aW9uIHVzZWQgZXh0ZW5zaXZlbHkgaW4gdGhlIGtlcm5lbCAoZS5nLiwgcGFnZSBjYWNoZSkuIFRoZSBidWcgb2NjdXJzIHdoZW4gc2VhcmNoaW5nIGZvciBtdWx0aS1pbmRleCBlbnRyaWVzLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgdGVzdCBjYXNlIGBjaGVja19tdWx0aV9maW5kXzRgIHRvIGBsaWIvdGVzdF94YXJyYXkuY2AuIFNpbmNlIGB4YXNfZmluZCgpYCBpcyBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24sIGl0IGlzIGV4Y2x1ZGVkIGZyb20gRm9jdXNTeW1ib2xzLiBUbyBlbnN1cmUgdGhlIG5ldyB0ZXN0IGNhc2UgaXMgZXhlY3V0ZWQsIGBDT05GSUdfVEVTVF9YQVJSQVlgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgKHdoaWNoIHNlbGVjdHMgYENPTkZJR19YQVJSQVlfTVVMVElgIHJlcXVpcmVkIGJ5IHRoZSB0ZXN0KSBzaG91bGQgYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY3OTM1MzYzNTQ1YmUxMTAwNDExMmEzYmRmZmE2NmUzMzEyYzVmNmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAxMjo0Njo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3hhcnJheS5jIGIvbGliL3Rlc3RfeGFycmF5LmMKaW5kZXggNWNhMGFlZmVlOWFhNS4uN2QwZGVjY2RmNTlhMCAxMDA2NDQKLS0tIGEvbGliL3Rlc3RfeGFycmF5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RfeGFycmF5LmMKQEAgLTEyNDcsNiAmIzQzOzEyNDcsNjcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8zKHN0cnVjdCB4YXJyYXkgKnhhKQogCX0KIH0KIAomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVEkKJiM0MzsJWEFfU1RBVEUoeGFzLCB4YSwgMTAwKTsKJiM0MzsJWEFfU1RBVEVfT1JERVIoeGFzX3NwbGl0LCB4YSwgMCwgMCk7CiYjNDM7CXZvaWQgKmVudHJ5OwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CS8qICgxKSBPcmRlci03IGVudHJ5ICgwLTEyNykgd2l0aCBhZGphY2VudCBlbnRyeSBhdCAxMjgsIHN0YXJ0aW5nIGF0IDEwMCAqLwomIzQzOwl4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApOwomIzQzOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpOwomIzQzOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJeGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7CiYjNDM7CXhhX2VyYXNlX2luZGV4KHhhLCAwKTsKJiM0MzsJWEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTsKJiM0MzsKJiM0MzsJLyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi8KJiM0MzsJeGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTsKJiM0MzsKJiM0MzsJeGFzX3NldCgmYW1wO3hhcywgMTAwKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXhhc19zcGxpdF9hbGxvYygmYW1wO3hhc19zcGxpdCwgeGEsIDcsIEdGUF9LRVJORUwpOwomIzQzOwl4YXNfbG9jaygmYW1wO3hhc19zcGxpdCk7CiYjNDM7CXhhc19zcGxpdCgmYW1wO3hhc19zcGxpdCwgeGEsIDcpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTI4OyBpJiM0MzsmIzQzOykKJiM0MzsJCV9feGFfc3RvcmUoeGEsIGksIHhhX21rX2luZGV4KGkpLCAwKTsKJiM0MzsJeGFzX3VubG9jaygmYW1wO3hhc19zcGxpdCk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTsKJiM0MzsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXhhX2Rlc3Ryb3koeGEpOwomIzQzOwlYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSkKIHsKIAl1bnNpZ25lZCBsb25nIGksIGosIGs7CkBAIC0xMzcwLDYgJiM0MzsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSkKIAkJY2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTsKIAljaGVja19tdWx0aV9maW5kXzIoeGEpOwogCWNoZWNrX211bHRpX2ZpbmRfMyh4YSk7CiYjNDM7CWNoZWNrX211bHRpX2ZpbmRfNCh4YSk7CiB9CiAKIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovCmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmMKaW5kZXggOWE4YjQ5MTY1NDBjZi4uOTgwMzI0ZDY4NmJkMCAxMDA2NDQKLS0tIGEvbGliL3hhcnJheS5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi94YXJyYXkuYwpAQCAtMTQwNiw5ICYjNDM7MTQwNiwxMSBAQCB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpCiAJCWVudHJ5ID0geGFzX2xvYWQoeGFzKTsKIAkJaWYgKGVudHJ5IHx8IHhhc19ub3Rfbm9kZSh4YXMtJmd0O3hhX25vZGUpKQogCQkJcmV0dXJuIGVudHJ5OwotCX0gZWxzZSBpZiAoIXhhcy0mZ3Q7eGFfbm9kZS0mZ3Q7c2hpZnQgJmFtcDsmYW1wOwotCQkgICAgeGFzLSZndDt4YV9vZmZzZXQgIT0gKHhhcy0mZ3Q7eGFfaW5kZXggJmFtcDsgWEFfQ0hVTktfTUFTSykpIHsKLQkJeGFzLSZndDt4YV9vZmZzZXQgPSAoKHhhcy0mZ3Q7eGFfaW5kZXggLSAxKSAmYW1wOyBYQV9DSFVOS19NQVNLKSAmIzQzOyAxOwomIzQzOwl9IGVsc2UgaWYgKHhhcy0mZ3Q7eGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKSkgewomIzQzOwkJaWYgKCF4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0KQomIzQzOwkJCXhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl4YXMtJmd0O3hhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKTsKIAl9CiAKIAl4YXNfbmV4dF9vZmZzZXQoeGFzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgWEFycmF5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgbGliL3hhcnJheS5jYCBhbmQgYGxpYi90ZXN0X3hhcnJheS5jYC4gIFJpZ2h0IGF3YXksIEkgc2VlIHRoYXQgdGhlIHByaW1hcnkgY2hhbmdlIGlzIHRvIHRoZSBgeGFzX2ZpbmQoKWAgZnVuY3Rpb24gaW4gdGhlIGBsaWIveGFycmF5LmNgIGZpbGUuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uOyBpdCYjMzk7cyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIFhBcnJheSBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggaXMgdXNlZCBoZWF2aWx5IHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBBUEkgY2FsbGVkIGZyb20gcG90ZW50aWFsbHkgbnVtZXJvdXMga2VybmVsIGxvY2F0aW9ucyBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIGEgY2FuZGlkYXRlIGZvciBzb21lIHNlcmlvdXMgZnV6emluZy4KClRoZSBkaWZmIGl0c2VsZiBsb29rcyBsaWtlIGEgc3VidGxlIGFkanVzdG1lbnQgdG8gaG93IGB4YXNfZmluZCgpYCBoYW5kbGVzIG9mZnNldCBjYWxjdWxhdGlvbnMgd2l0aGluIHRoZSBYQXJyYXkuIFNwZWNpZmljYWxseSwgdGhlcmUmIzM5O3MgYSBjb25kaXRpb25hbCBtb2RpZmljYXRpb24gb2YgYHhhcy0mZ3Q7eGFfb2Zmc2V0YC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzZW1hbnRpY3MgYSBiaXQsIGJ1dCBpdCBzZWVtcyB0byBpbnZvbHZlIGEgY2hlY2sgYW5kIHBvdGVudGlhbCB1cGRhdGUgdG8gdGhlIG9mZnNldCB3aXRoaW4gYW4gWEFycmF5IGNodW5rLiAgVGhlIGFkZGVkIGBnZXRfb2Zmc2V0KClgIGNhbGwgaXMgaW50ZXJlc3RpbmcuICBJdCBtYWtlcyBtZSB3b25kZXIgaWYgdGhpcyBpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGNvbmZpZ3VyYXRpb24uCgpJIGFsc28gc2VlIHRoYXQgdGhleSYjMzk7dmUgYWRkZWQgYSB0ZXN0IGNhc2UgaW4gYGxpYi90ZXN0X3hhcnJheS5jYC4gVGhpcyBpcyBncmVhdDsgdGVzdHMgYXJlIGVzc2VudGlhbCBmb3IgdGhpcyB0eXBlIG9mIGNoYW5nZSwgYW5kIEkmIzM5O2xsIHdhbnQgdG8gcmV2aWV3IHRoYXQgdGVzdCBjYXNlIGluIGRldGFpbC4KClNpbmNlIGl0JiMzOTtzIGEgdGVzdCBjYXNlLCBJIHNob3VsZCBjb25maXJtIHRoYXQgYENPTkZJR19YQVJSQVlfTVVMVElgIGlzIHNldC4gSXQgc2VlbXMgdGhhdCB0aGUgdGVzdCBpcyB1bmRlciB0aGF0IGNvbmZpZy4gTm93IEkgaGF2ZSB0byBkZXRlcm1pbmUgaWYgYENPTkZJR19YQVJSQVlfTVVMVElgIGlzIG5lZWRlZCBmb3IgYHhhc19maW5kYC4gSSBuZWVkIHRvIHJldmlldyBgbGliL3hhcnJheS5jYCB0byBiZSBzdXJlLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIGRldGVybWluaW5nIGhvdyB3aWRlc3ByZWFkIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgY291bGQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGFzX2ZpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIveGFycmF5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL3hhcnJheS5jPTEzNzU9RVhQT1JUX1NZTUJPTF9HUEwoX194YXNfbmV4dCk7XG4tLVxubGliL3hhcnJheS5jLTEzNzctLyoqXG5saWIveGFycmF5LmM6MTM3ODogKiB4YXNfZmluZCgpIC0gRmluZCB0aGUgbmV4dCBwcmVzZW50IGVudHJ5IGluIHRoZSBYQXJyYXkuXG5saWIveGFycmF5LmMtMTM3OS0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxuLS1cbmxpYi94YXJyYXkuYy0xMzkyLSAqL1xubGliL3hhcnJheS5jOjEzOTM6dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxubGliL3hhcnJheS5jLTEzOTQte1xuLS1cbmxpYi94YXJyYXkuYy0xNDQwLX1cbmxpYi94YXJyYXkuYzoxNDQxOkVYUE9SVF9TWU1CT0xfR1BMKHhhc19maW5kKTtcbmxpYi94YXJyYXkuYy0xNDQyLVxubGliL3hhcnJheS5jLTE0NDMtLyoqXG5saWIveGFycmF5LmM6MTQ0NDogKiB4YXNfZmluZF9tYXJrZWQoKSAtIEZpbmQgdGhlIG5leHQgbWFya2VkIGVudHJ5IGluIHRoZSBYQXJyYXkuXG5saWIveGFycmF5LmMtMTQ0NS0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxuLS1cbmxpYi94YXJyYXkuYy0xNDYzLSAqL1xubGliL3hhcnJheS5jOjE0NjQ6dm9pZCAqeGFzX2ZpbmRfbWFya2VkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCwgeGFfbWFya190IG1hcmspXG5saWIveGFycmF5LmMtMTQ2NS17XG4tLVxubGliL3hhcnJheS5jLTE1MTEtXG5saWIveGFycmF5LmM6MTUxMjpcdFx0b2Zmc2V0ID0geGFzX2ZpbmRfY2h1bmsoeGFzLCBhZHZhbmNlLCBtYXJrKTtcbmxpYi94YXJyYXkuYy0xNTEzLVx0XHRpZiAob2Zmc2V0IFx1MDAzZSB4YXMtXHUwMDNleGFfb2Zmc2V0KSB7XG4tLVxubGliL3hhcnJheS5jLTE1NDItfVxubGliL3hhcnJheS5jOjE1NDM6RVhQT1JUX1NZTUJPTF9HUEwoeGFzX2ZpbmRfbWFya2VkKTtcbmxpYi94YXJyYXkuYy0xNTQ0LVxubGliL3hhcnJheS5jLTE1NDUtLyoqXG5saWIveGFycmF5LmM6MTU0NjogKiB4YXNfZmluZF9jb25mbGljdCgpIC0gRmluZCB0aGUgbmV4dCBwcmVzZW50IGVudHJ5IGluIGEgcmFuZ2UuXG5saWIveGFycmF5LmMtMTU0Ny0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxuLS1cbmxpYi94YXJyYXkuYy0xNTUzLSAqL1xubGliL3hhcnJheS5jOjE1NTQ6dm9pZCAqeGFzX2ZpbmRfY29uZmxpY3Qoc3RydWN0IHhhX3N0YXRlICp4YXMpXG5saWIveGFycmF5LmMtMTU1NS17XG4tLVxubGliL3hhcnJheS5jLTE2MDMtfVxubGliL3hhcnJheS5jOjE2MDQ6RVhQT1JUX1NZTUJPTF9HUEwoeGFzX2ZpbmRfY29uZmxpY3QpO1xubGliL3hhcnJheS5jLTE2MDUtXG4tLVxubGliL3hhcnJheS5jPTE5ODc9aW50IF9feGFfYWxsb2Moc3RydWN0IHhhcnJheSAqeGEsIHUzMiAqaWQsIHZvaWQgKmVudHJ5LFxuLS1cbmxpYi94YXJyYXkuYy0yMDAxLVx0XHR4YXMueGFfaW5kZXggPSBsaW1pdC5taW47XG5saWIveGFycmF5LmM6MjAwMjpcdFx0eGFzX2ZpbmRfbWFya2VkKFx1MDAyNnhhcywgbGltaXQubWF4LCBYQV9GUkVFX01BUkspO1xubGliL3hhcnJheS5jLTIwMDMtXHRcdGlmICh4YXMueGFfbm9kZSA9PSBYQVNfUkVTVEFSVClcbi0tXG5saWIveGFycmF5LmM9MjE3Mj1FWFBPUlRfU1lNQk9MKHhhX2NsZWFyX21hcmspO1xuLS1cbmxpYi94YXJyYXkuYy0yMTg1LSAqIGVudHJpZXMgd2hpY2ggYXJlIGJlaW5nIHNpbXVsdGFuZW91c2x5IGFkZGVkLiAgSXQgd2lsbCBub3QgcmV0dXJuIGFuXG5saWIveGFycmF5LmM6MjE4NjogKiAlWEFfUkVUUllfRU5UUlk7IGlmIHlvdSBuZWVkIHRvIHNlZSByZXRyeSBlbnRyaWVzLCB1c2UgeGFzX2ZpbmQoKS5cbmxpYi94YXJyYXkuYy0yMTg3LSAqXG4tLVxubGliL3hhcnJheS5jPTIxOTE9dm9pZCAqeGFfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyAqaW5kZXhwLFxuLS1cbmxpYi94YXJyYXkuYy0yMTk5LVx0XHRpZiAoKF9fZm9yY2UgdW5zaWduZWQgaW50KWZpbHRlciBcdTAwM2MgWEFfTUFYX01BUktTKVxubGliL3hhcnJheS5jOjIyMDA6XHRcdFx0ZW50cnkgPSB4YXNfZmluZF9tYXJrZWQoXHUwMDI2eGFzLCBtYXgsIGZpbHRlcik7XG5saWIveGFycmF5LmMtMjIwMS1cdFx0ZWxzZVxubGliL3hhcnJheS5jOjIyMDI6XHRcdFx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIG1heCk7XG5saWIveGFycmF5LmMtMjIwMy1cdH0gd2hpbGUgKHhhc19yZXRyeShcdTAwMjZ4YXMsIGVudHJ5KSk7XG4tLVxubGliL3hhcnJheS5jPTIyMTI9c3RhdGljIGJvb2wgeGFzX3NpYmxpbmcoc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubGliL3hhcnJheS5jLTIyMzUtICogd2hpY2ggYXJlIGJlaW5nIHNpbXVsdGFuZW91c2x5IGFkZGVkLiAgSXQgd2lsbCBub3QgcmV0dXJuIGFuXG5saWIveGFycmF5LmM6MjIzNjogKiAlWEFfUkVUUllfRU5UUlk7IGlmIHlvdSBuZWVkIHRvIHNlZSByZXRyeSBlbnRyaWVzLCB1c2UgeGFzX2ZpbmQoKS5cbmxpYi94YXJyYXkuYy0yMjM3LSAqXG4tLVxubGliL3hhcnJheS5jPTIyNDE9dm9pZCAqeGFfZmluZF9hZnRlcihzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyAqaW5kZXhwLFxuLS1cbmxpYi94YXJyYXkuYy0yMjUyLVx0XHRpZiAoKF9fZm9yY2UgdW5zaWduZWQgaW50KWZpbHRlciBcdTAwM2MgWEFfTUFYX01BUktTKVxubGliL3hhcnJheS5jOjIyNTM6XHRcdFx0ZW50cnkgPSB4YXNfZmluZF9tYXJrZWQoXHUwMDI2eGFzLCBtYXgsIGZpbHRlcik7XG5saWIveGFycmF5LmMtMjI1NC1cdFx0ZWxzZVxubGliL3hhcnJheS5jOjIyNTU6XHRcdFx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIG1heCk7XG5saWIveGFycmF5LmMtMjI1Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzMwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBYYXJyYXkgVGVzdGluZyoqCgpPa2F5LCBzbyBgeGFzX2ZpbmRgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gaGVyZS4gSXQmIzM5O3MgZm91bmRhdGlvbmFsLCBzbyB0aGUgdGVzdGluZyBhcm91bmQgaXQgbmVlZHMgdG8gYmUgc29saWQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgdGVzdCBjYXNlLiBJIGtub3cgaXQmIzM5O3MgaW4gYGxpYi90ZXN0X3hhcnJheS5jYC4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBiZWluZyBldmFsdWF0ZWQuIEFuZCB0aGVuLCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwbHkgaW50byB0aGUgY29kZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYFRFU1RfWEFSUkFZYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBwb3NzaWJsZSB0aGUgdGVzdHMgYXJlIGNvbmRpdGlvbmFsIGJhc2VkIG9uIHRoYXQgZmxhZy4gQmV0dGVyIHRvIHZlcmlmeSB0aGUgZW52aXJvbm1lbnQgZmlyc3QuIFRoaXMgaXMgYWxsIGFib3V0IGVmZmljaWVuY3k7IEkgY2FuJiMzOTt0IHdhc3RlIHRpbWUgb24gYSBodW50IGlmIHRoZSB0ZXN0cyBhcmVuJiMzOTt0IGV2ZW4gY29tcGlsZWQgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VEVTVF9YQVJSQVkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTI1NTc9Y29uZmlnIFRFU1RfQklUTUFQXG4tLVxubGliL0tjb25maWcuZGVidWctMjU2My1cbmxpYi9LY29uZmlnLmRlYnVnOjI1NjQ6Y29uZmlnIFRFU1RfWEFSUkFZXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTY1LVx0dHJpc3RhdGUgXCYjMzQ7VGVzdCB0aGUgWEFycmF5IGNvZGUgYXQgcnVudGltZVwmIzM0O1xuLS1cbmxpYi9NYWtlZmlsZT05Mj1lbmRpZlxubGliL01ha2VmaWxlLTkzLVxubGliL01ha2VmaWxlOjk0Om9iai0kKENPTkZJR19URVNUX1hBUlJBWSkgJiM0Mzs9IHRlc3RfeGFycmF5Lm9cbmxpYi9NYWtlZmlsZS05NS1vYmotJChDT05GSUdfVEVTVF9NQVBMRV9UUkVFKSAmIzQzOz0gdGVzdF9tYXBsZV90cmVlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFhBcnJheSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoaXMgdGVzdCBjYXNlIGxldmVyYWdlcyBgQ09ORklHX1hBUlJBWV9NVUxUSWAuIE15IGZpcnN0IG1vdmUgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBYQVJSQVlfTVVMVElgIHJlcHJlc2VudHMuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgYGxpYi9LY29uZmlnYCBhbmQgYGxpYi9LY29uZmlnLmRlYnVnYC4gSXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlIHRvIHN0YXJ0IHRoZXJlIHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24gb2YgYFhBUlJBWV9NVUxUSWAsIGl0cyBkZXBlbmRlbmNpZXMsIGl0cyBkZWZhdWx0IHZhbHVlLCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB0aGF0IG1pZ2h0IHByb3ZpZGUgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGlzIG9wdGlvbiBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHdoeSB0aGlzIHRlc3QgY2FzZSBleGlzdHMgYW5kIHdoYXQgaXQmIzM5O3MgdHJ5aW5nIHRvIHZhbGlkYXRlLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIHRlc3QgY2FzZSBleHBlY3RzIHRoZSBrZXJuZWwgdG8gZG8gd2hlbiBgWEFSUkFZX01VTFRJYCBpcyBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEFSUkFZX01VTFRJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZz0zNDg9Y29uZmlnIElOVEVSVkFMX1RSRUVfU1BBTl9JVEVSXG4tLVxubGliL0tjb25maWctMzUxLVxubGliL0tjb25maWc6MzUyOmNvbmZpZyBYQVJSQVlfTVVMVElcbmxpYi9LY29uZmlnLTM1My1cdGJvb2xcbi0tXG5saWIvdGVzdF94YXJyYXkuYz0xNT1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG9yZGVyX2xpbWl0ID1cbmxpYi90ZXN0X3hhcnJheS5jOjE2Olx0XHRJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gQklUU19QRVJfTE9ORyA6IDE7XG5saWIvdGVzdF94YXJyYXkuYy0xNy1cbi0tXG5saWIvdGVzdF94YXJyYXkuYz0xNzU9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfeGFfbWFya18xKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTE3Ny1cdHVuc2lnbmVkIGludCBvcmRlcjtcbmxpYi90ZXN0X3hhcnJheS5jOjE3ODpcdHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gOCA6IDE7XG5saWIvdGVzdF94YXJyYXkuYy0xNzktXG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MjkyPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3hhX21hcmtfMyhzdHJ1Y3QgeGFycmF5ICp4YSlcbmxpYi90ZXN0X3hhcnJheS5jLTI5My17XG5saWIvdGVzdF94YXJyYXkuYzoyOTQ6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi90ZXN0X3hhcnJheS5jLTI5NS1cdFhBX1NUQVRFKHhhcywgeGEsIDB4NDEpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTMyND1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja194YV9zaHJpbmsoc3RydWN0IHhhcnJheSAqeGEpXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMzI4LVx0dW5zaWduZWQgaW50IG9yZGVyO1xubGliL3Rlc3RfeGFycmF5LmM6MzI5Olx0dW5zaWduZWQgaW50IG1heF9vcmRlciA9IElTX0VOQUJMRUQoQ09ORklHX1hBUlJBWV9NVUxUSSkgPyAxNSA6IDE7XG5saWIvdGVzdF94YXJyYXkuYy0zMzAtXG4tLVxubGliL3Rlc3RfeGFycmF5LmM9NDI2PXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2NtcHhjaGdfb3JkZXIoc3RydWN0IHhhcnJheSAqeGEpXG5saWIvdGVzdF94YXJyYXkuYy00Mjcte1xubGliL3Rlc3RfeGFycmF5LmM6NDI4OiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG5saWIvdGVzdF94YXJyYXkuYy00MjktXHR2b2lkICpGSVZFID0geGFfbWtfdmFsdWUoNSk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmM9NTQ1PXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3hhc19lcmFzZShzdHJ1Y3QgeGFycmF5ICp4YSlcbi0tXG5saWIvdGVzdF94YXJyYXkuYy01ODItXG5saWIvdGVzdF94YXJyYXkuYzo1ODM6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi90ZXN0X3hhcnJheS5jLTU4NC1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9zdG9yZV8xKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGluZGV4LFxuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTY1MD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9zdG9yZShzdHJ1Y3QgeGFycmF5ICp4YSlcbmxpYi90ZXN0X3hhcnJheS5jLTY1MS17XG5saWIvdGVzdF94YXJyYXkuYzo2NTI6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi90ZXN0X3hhcnJheS5jLTY1My1cdHVuc2lnbmVkIGxvbmcgaSwgaiwgaztcbi0tXG5saWIvdGVzdF94YXJyYXkuYy03MjktXG5saWIvdGVzdF94YXJyYXkuYzo3MzA6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi90ZXN0X3hhcnJheS5jLTczMS0vKiBtaW1pY3MgcGFnZSBjYWNoZSBfX2ZpbGVtYXBfYWRkX2ZvbGlvKCkgKi9cbi0tXG5saWIvdGVzdF94YXJyYXkuYz04OTE9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfc3RvcmVfYWR2YW5jZWQoc3RydWN0IHhhcnJheSAqeGEpXG5saWIvdGVzdF94YXJyYXkuYy04OTIte1xubGliL3Rlc3RfeGFycmF5LmM6ODkzOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG5saWIvdGVzdF94YXJyYXkuYzo4OTQ6XHR1bnNpZ25lZCBpbnQgbWF4X29yZGVyID0gSVNfRU5BQkxFRChDT05GSUdfWEFSUkFZX01VTFRJKSA/IDIwIDogMTtcbmxpYi90ZXN0X3hhcnJheS5jLTg5NS1cdHVuc2lnbmVkIGxvbmcgZW5kID0gVUxPTkdfTUFYLzI7XG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MTE0Mj1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19zdG9yZV9pdGVyKHN0cnVjdCB4YXJyYXkgKnhhKVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTExNDQtXHR1bnNpZ25lZCBpbnQgaSwgajtcbmxpYi90ZXN0X3hhcnJheS5jOjExNDU6XHR1bnNpZ25lZCBpbnQgbWF4X29yZGVyID0gSVNfRU5BQkxFRChDT05GSUdfWEFSUkFZX01VTFRJKSA/IDIwIDogMTtcbmxpYi90ZXN0X3hhcnJheS5jLTExNDYtXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTE3MC1cdH1cbmxpYi90ZXN0X3hhcnJheS5jOjExNzE6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi90ZXN0X3hhcnJheS5jLTExNzItXHR4YV9zdG9yZV9pbmRleCh4YSwgNjMsIEdGUF9LRVJORUwpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTExODA9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8xKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBvcmRlcilcbmxpYi90ZXN0X3hhcnJheS5jLTExODEte1xubGliL3Rlc3RfeGFycmF5LmM6MTE4MjojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxubGliL3Rlc3RfeGFycmF5LmMtMTE4My1cdHVuc2lnbmVkIGxvbmcgbXVsdGkgPSAzIFx1MDAzY1x1MDAzYyBvcmRlcjtcbi0tXG5saWIvdGVzdF94YXJyYXkuYz0xMjEyPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfMihzdHJ1Y3QgeGFycmF5ICp4YSlcbmxpYi90ZXN0X3hhcnJheS5jLTEyMTMte1xubGliL3Rlc3RfeGFycmF5LmM6MTIxNDpcdHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gMTAgOiAxO1xubGliL3Rlc3RfeGFycmF5LmMtMTIxNS1cdHVuc2lnbmVkIGludCBpLCBqO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTEyNTA9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF80KHN0cnVjdCB4YXJyYXkgKnhhKVxubGliL3Rlc3RfeGFycmF5LmMtMTI1MS17XG5saWIvdGVzdF94YXJyYXkuYzoxMjUyOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG5saWIvdGVzdF94YXJyYXkuYy0xMjUzLVx0WEFfU1RBVEUoeGFzLCB4YSwgMTAwKTtcbi0tXG5saWIvdGVzdF94YXJyYXkuYz0xNDYwPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfZW50cnkoc3RydWN0IHhhcnJheSAqeGEpXG5saWIvdGVzdF94YXJyYXkuYy0xNDYxLXtcbmxpYi90ZXN0X3hhcnJheS5jOjE0NjI6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi90ZXN0X3hhcnJheS5jLTE0NjMtXHR1bnNpZ25lZCBpbnQgb3JkZXI7XG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MTgyOT1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19jcmVhdGVfcmFuZ2Uoc3RydWN0IHhhcnJheSAqeGEpXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTgzMS1cdHVuc2lnbmVkIGludCBvcmRlcjtcbmxpYi90ZXN0X3hhcnJheS5jOjE4MzI6XHR1bnNpZ25lZCBpbnQgbWF4X29yZGVyID0gSVNfRU5BQkxFRChDT05GSUdfWEFSUkFZX01VTFRJKSA/IDEyIDogMTtcbmxpYi90ZXN0X3hhcnJheS5jLTE4MzMtXG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MTg2ND1zdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2NoZWNrX3N0b3JlX3JhbmdlKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGZpcnN0LFxuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTE4NjYte1xubGliL3Rlc3RfeGFycmF5LmM6MTg2NzojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxubGliL3Rlc3RfeGFycmF5LmMtMTg2OC1cdHhhX3N0b3JlX3JhbmdlKHhhLCBmaXJzdCwgbGFzdCwgeGFfbWtfaW5kZXgoZmlyc3QpLCBHRlBfS0VSTkVMKTtcbi0tXG5saWIvdGVzdF94YXJyYXkuYz0xODgxPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3N0b3JlX3JhbmdlKHN0cnVjdCB4YXJyYXkgKnhhKVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTE4OTYtXG5saWIvdGVzdF94YXJyYXkuYzoxODk3OiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG5saWIvdGVzdF94YXJyYXkuYy0xODk4LXN0YXRpYyB2b2lkIGNoZWNrX3NwbGl0XzEoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgaW5kZXgsXG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MjExOD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19hY2NvdW50KHN0cnVjdCB4YXJyYXkgKnhhKVxubGliL3Rlc3RfeGFycmF5LmMtMjExOS17XG5saWIvdGVzdF94YXJyYXkuYzoyMTIwOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG5saWIvdGVzdF94YXJyYXkuYy0yMTIxLVx0dW5zaWduZWQgaW50IG9yZGVyO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTIxNDc9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZ2V0X29yZGVyKHN0cnVjdCB4YXJyYXkgKnhhKVxubGliL3Rlc3RfeGFycmF5LmMtMjE0OC17XG5saWIvdGVzdF94YXJyYXkuYzoyMTQ5Olx0dW5zaWduZWQgaW50IG1heF9vcmRlciA9IElTX0VOQUJMRUQoQ09ORklHX1hBUlJBWV9NVUxUSSkgPyAyMCA6IDE7XG5saWIvdGVzdF94YXJyYXkuYy0yMTUwLVx0dW5zaWduZWQgaW50IG9yZGVyO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTIxNjc9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfeGFzX2dldF9vcmRlcihzdHJ1Y3QgeGFycmF5ICp4YSlcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0yMTcwLVxubGliL3Rlc3RfeGFycmF5LmM6MjE3MTpcdHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gMjAgOiAxO1xubGliL3Rlc3RfeGFycmF5LmMtMjE3Mi1cdHVuc2lnbmVkIGludCBvcmRlcjtcbi0tXG5saWIvdGVzdF94YXJyYXkuYz0yMjAwPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3hhc19jb25mbGljdF9nZXRfb3JkZXIoc3RydWN0IHhhcnJheSAqeGEpXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMjIwNS1cdGludCBvbmx5X29uY2U7XG5saWIvdGVzdF94YXJyYXkuYzoyMjA2Olx0dW5zaWduZWQgaW50IG1heF9vcmRlciA9IElTX0VOQUJMRUQoQ09ORklHX1hBUlJBWV9NVUxUSSkgPyAyMCA6IDE7XG5saWIvdGVzdF94YXJyYXkuYy0yMjA3LVx0dW5zaWduZWQgaW50IG9yZGVyO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTIyNTg9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZGVzdHJveShzdHJ1Y3QgeGFycmF5ICp4YSlcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0yMjgxLVxubGliL3Rlc3RfeGFycmF5LmM6MjI4MjojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxubGliL3Rlc3RfeGFycmF5LmMtMjI4My1cdC8qIERlc3Ryb3lpbmcgYW4gYXJyYXkgd2l0aCBhIG11bHRpLWluZGV4IGVudHJ5ICovXG4tLVxubGliL3hhcnJheS5jPTM2Mj1zdGF0aWMgdm9pZCAqeGFzX2FsbG9jKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4tLVxubGliL3hhcnJheS5jLTQwMS1cbmxpYi94YXJyYXkuYzo0MDI6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi94YXJyYXkuYy00MDMtLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGluZGljZXMgY292ZXJlZCBieSBhIGdpdmVuIHhhX3N0YXRlICovXG4tLVxubGliL3hhcnJheS5jPTQxNj1zdGF0aWMgdW5zaWduZWQgbG9uZyB4YXNfbWF4KHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbmxpYi94YXJyYXkuYy00MTktXG5saWIveGFycmF5LmM6NDIwOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG5saWIveGFycmF5LmMtNDIxLVx0aWYgKHhhcy1cdTAwM2V4YV9zaGlmdCB8fCB4YXMtXHUwMDNleGFfc2licykge1xuLS1cbmxpYi94YXJyYXkuYz05NjE9RVhQT1JUX1NZTUJPTF9HUEwoeGFzX2luaXRfbWFya3MpO1xubGliL3hhcnJheS5jLTk2Mi1cbmxpYi94YXJyYXkuYzo5NjM6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi94YXJyYXkuYy05NjQtc3RhdGljIHVuc2lnbmVkIGludCBub2RlX2dldF9tYXJrcyhzdHJ1Y3QgeGFfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IG9mZnNldClcbi0tXG5saWIveGFycmF5LmM9MTgyMj1FWFBPUlRfU1lNQk9MKF9feGFfaW5zZXJ0KTtcbmxpYi94YXJyYXkuYy0xODIzLVxubGliL3hhcnJheS5jOjE4MjQ6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbmxpYi94YXJyYXkuYy0xODI1LXN0YXRpYyB2b2lkIHhhc19zZXRfcmFuZ2Uoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgZmlyc3QsXG4tLVxubGliL3hhcnJheS5jPTE5NjQ9RVhQT1JUX1NZTUJPTCh4YV9nZXRfb3JkZXIpO1xubGliL3hhcnJheS5jOjE5NjU6I2VuZGlmIC8qIENPTkZJR19YQVJSQVlfTVVMVEkgKi9cbmxpYi94YXJyYXkuYy0xOTY2LVxuLS1cbmxpYi94YXJyYXkuYz0yMjEyPXN0YXRpYyBib29sIHhhc19zaWJsaW5nKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbmxpYi94YXJyYXkuYy0yMjE2LVxubGliL3hhcnJheS5jOjIyMTc6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1hBUlJBWV9NVUxUSSkgfHwgIW5vZGUpXG5saWIveGFycmF5LmMtMjIxOC1cdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4OTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gdGhlIHhhcnJheSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHRlc3QgY2FzZSBhbmQgaXQmIzM5O3MgY2xlYXIgdGhhdCBgQ09ORklHX1hBUlJBWV9NVUxUSWAgaXMgKmVzc2VudGlhbCogZm9yIHRlc3RpbmcgdGhlc2UgbXVsdGktaW5kZXggZW50cmllcy4gVGhhdCYjMzk7cyB0aGUgd2hvbGUgcG9pbnQgb2YgdGhpcyB0ZXN0LiBUaGUgdGVzdCBpdHNlbGYgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX1RFU1RfWEFSUkFZYCBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gTm93IEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gSSBzZWVtIHRvIHJlY2FsbCBgQ09ORklHX1hBUlJBWV9NVUxUSWAgYmVpbmcgYSBib29sZWFuIGluIGBsaWIvS2NvbmZpZ2AuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoZXJlIGFyZW4mIzM5O3QgYW55IGRlcGVuZGVuY2llcyBJJiMzOTttIG1pc3NpbmcuIFRpbWUgdG8gZGl2ZSBpbnRvIGBsaWIvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBYQVJSQVlfTVVMVElgIHRvIHZlcmlmeSB0aGlzLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBjb25maWd1cmVkIHByb3Blcmx5IGZvciB0aGlzIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYQVJSQVlfTVVMVEkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnPTM0OD1jb25maWcgSU5URVJWQUxfVFJFRV9TUEFOX0lURVJcbi0tXG5saWIvS2NvbmZpZy0zNTEtXG5saWIvS2NvbmZpZzozNTI6Y29uZmlnIFhBUlJBWV9NVUxUSVxubGliL0tjb25maWctMzUzLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjQ1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGVjaXBoZXJpbmcgYSBCb29sJiMzOTtzIE9yaWdpbnMqKgoKUmlnaHQsIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O20gbG9va2luZyBhdCBhIGJvb2xlYW4gdmFsdWUsIHNlZW1pbmdseSBpbmRlcGVuZGVudCBpbiBpdHNlbGYg4oCTIGl0JiMzOTtzIG5vdCBkaXJlY3RseSB0cmlnZ2VyZWQgYnkgYW55IHNwZWNpZmljIHVzZXIgcHJvbXB0IG9yIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyAqaW1wbGljaXRseSogc2V0IGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEluIG15IGxpbmUgb2Ygd29yaywgdGhpcyBpcyBhIHZlcnkgY29tbW9uIHNjZW5hcmlvLiBTbywgdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogd2hhdCBhcmUgdGhlIHVwc3RyZWFtIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgYWN0aXZhdGluZyB0aGlzIGBYQVJSQVlfTVVMVElgIGZsYWc/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gY2hhaW4uIFRoZSBjb3JlIG9mIGRlYnVnZ2luZyB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMgbGllcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV4IHJlbGF0aW9uc2hpcHMgb2YgZGVwZW5kZW5jaWVzIHdpdGhpbiBhIGxhcmdlIHN5c3RlbS4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb25maWcgZmlsZXMgYW5kIHNlZSB3aGF0JiMzOTtzIGNhbGxpbmcgdGhlIHNob3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgWEFSUkFZX01VTFRJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTgyNz1jb25maWcgWDg2X1NHWFxuLS1cbmFyY2gveDg2L0tjb25maWctMTgzMi1cdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GTyBpZiBOVU1BXG5hcmNoL3g4Ni9LY29uZmlnOjE4MzM6XHRzZWxlY3QgWEFSUkFZX01VTFRJXG5hcmNoL3g4Ni9LY29uZmlnLTE4MzQtXHRoZWxwXG4tLVxuZnMvS2NvbmZpZz0yNzM9Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbmZzL0tjb25maWc6Mjc1Olx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuZnMvS2NvbmZpZy0yNzYtXG4tLVxubW0vS2NvbmZpZz04NDY9bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuLS1cbm1tL0tjb25maWctODQ5LVx0c2VsZWN0IENPTVBBQ1RJT05cbm1tL0tjb25maWc6ODUwOlx0c2VsZWN0IFhBUlJBWV9NVUxUSVxubW0vS2NvbmZpZy04NTEtXHRzZWxlY3QgTU1fSURcbi0tXG5tbS9LY29uZmlnPTEyMzY9Y29uZmlnIFpPTkVfREVWSUNFXG4tLVxubW0vS2NvbmZpZy0xMjQwLVx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxubW0vS2NvbmZpZzoxMjQxOlx0c2VsZWN0IFhBUlJBWV9NVUxUSVxubW0vS2NvbmZpZy0xMjQyLVxuLS1cbnNvdW5kL2NvcmUvS2NvbmZpZz0xODE9Y29uZmlnIFNORF9DVExfRkFTVF9MT09LVVBcbi0tXG5zb3VuZC9jb3JlL0tjb25maWctMTgzLVx0ZGVmYXVsdCB5XG5zb3VuZC9jb3JlL0tjb25maWc6MTg0Olx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuc291bmQvY29yZS9LY29uZmlnLTE4NS1cdGhlbHBcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTEwNj1jb25maWcgS1ZNX0dVRVNUX01FTUZEXG52aXJ0L2t2bS9LY29uZmlnOjEwNzogICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxudmlydC9rdm0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkxNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBYQXJyYXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhlIFhBcnJheSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgYFhBUlJBWV9NVUxUSWAgZ2V0cyBwdWxsZWQgaW4gYnkgYSBmZXcgZGlmZmVyZW50IHNldHRpbmdzOiBlaXRoZXIgYEhVR0VUTEJfUEFHRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIG9yIGBTTkRfQ1RMX0ZBU1RfTE9PS1VQYC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIFNvLCBpZiBJIHdhbnQgYFhBUlJBWV9NVUxUSWAgZW5hYmxlZCwganVzdCBpbmNsdWRpbmcgZWl0aGVyIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3IgYEhVR0VUTEJGU2Agc2VlbXMgbGlrZSB0aGUgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoLgoKQW5kIHRoZW4gdGhlcmUmIzM5O3MgYFRFU1RfWEFSUkFZYCwgYSB0cmlzdGF0ZSBvcHRpb24uIE9idmlvdXNseSwgSSBzaG91bGQgZW5hYmxlIHRoYXQgdG8gcnVuIHRoZSB0ZXN0cywgcmlnaHQ/IEJ1dCB0aGVuIEkgd29uZGVyLCBob3cgZG8gdGhlc2UgdGVzdHMgYWN0dWFsbHkgcnVuPyBJcyB0aGlzIGEga3VuaXQgdGVzdCB0aGF0JiMzOTtzIGF1dG9tYXRpY2FsbHkgcnVuIHdoZW4gdGhlIGtlcm5lbCBpcyBjb21waWxlZCBvciB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkPyBPciBpcyBpdCBzb21ldGhpbmcgZWxzZT8gU3l6a2FsbGVyIGNvdWxkIHByb2JhYmx5IGxvYWQgaXQsIG9yIEkgY291bGQganVzdCBidWlsZCBpdCBpbi4KCldhaXQgYSBzZWNvbmTigKYgTm8sIGl0JiMzOTtzIG5vdCBhIGt1bml0IHRlc3QuIEl0JiMzOTtzIGEgKnN0YW5kYWxvbmUqIHRlc3QgbW9kdWxlLiBSaWdodCwgdGhhdCBtYWtlcyBtb3JlIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIHJ1bnMuIEkgc2hvdWxkIGp1c3QgZ28gbG9vayBhdCBgbGliL3Rlc3RfeGFycmF5LmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgaW52b2tlZC4gVGhhdCYjMzk7cyBwcm9iYWJseSB0aGUgYmVzdCBhcHByb2FjaCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL3Rlc3RfeGFycmF5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL3Rlc3RfeGFycmF5LmM9MjMzMj1zdGF0aWMgdm9pZCB4YXJyYXlfZXhpdCh2b2lkKVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTIzMzUtXG5saWIvdGVzdF94YXJyYXkuYzoyMzM2Om1vZHVsZV9pbml0KHhhcnJheV9jaGVja3MpO1xubGliL3Rlc3RfeGFycmF5LmMtMjMzNy1tb2R1bGVfZXhpdCh4YXJyYXlfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTI1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqWEFycmF5IFRlc3QgTW9kdWxlIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0ZXN0IGZvciB0aGUgWEFycmF5IG1vZHVsZSBpcyBraWNraW5nIG9mZiBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFRoYXQgbWVhbnMgYENPTkZJR19URVNUX1hBUlJBWT15YCBpcyBiZWluZyBzZXQsIGFuZCB0aGUgYnVpbGQgc3lzdGVtIGlzIGNvcnJlY3RseSBleGVjdXRpbmcgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUgYXQgYm9vdC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCB3aGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYENPTkZJR19URVNUX1hBUlJBWWAgcHVsbHMgaW4gYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgdGVzdCYjMzk7cyBiZWhhdmlvciBvciBlbnZpcm9ubWVudC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gYXdhcmUgb2YgdGhlIGNvbXBsZXRlIGRlcGVuZGVuY3kgY2hhaW4gdG8gdHJvdWJsZXNob290IGFueSB1bmV4cGVjdGVkIGlzc3VlcyBsYXRlciBvbi4gTGV0IG1lIGdvIGxvb2sgaW50byB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBURVNUX1hBUlJBWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTI1NTc9Y29uZmlnIFRFU1RfQklUTUFQXG4tLVxubGliL0tjb25maWcuZGVidWctMjU2My1cbmxpYi9LY29uZmlnLmRlYnVnOjI1NjQ6Y29uZmlnIFRFU1RfWEFSUkFZXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTY1LVx0dHJpc3RhdGUgXCYjMzQ7VGVzdCB0aGUgWEFycmF5IGNvZGUgYXQgcnVudGltZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgyOAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDUzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB4YXNfZmluZGAgTW9kaWZpY2F0aW9uIGluIFhBcnJheSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW55IG5ldyBkZXBlbmRlbmNpZXMuIFRoYXQmIzM5O3MgYWx3YXlzIGdvb2QuIFRoZSBmYWN0IHRoYXQgYFRFU1RfWEFSUkFZYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhcmUgcmVsZXZhbnQgY29uZmlncyAoc3BlY2lmaWNhbGx5IHRvIGdldCBgWEFSUkFZX01VTFRJYCkgbWFrZXMgc2Vuc2UgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBJIHNlZSB0aGF0IHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGB4YXNfZmluZGAuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgKm9ubHkqIGZ1bmN0aW9uIGltcGFjdGVkLiBZdXAsIGNoZWNraW5nIGBsaWIveGFycmF5LmNgIGNvbmZpcm1zIHRoYXQuIEkgc2hvdWxkIG1ha2UgYSBub3RlIHRvIGFkZCBgeGFzX2ZpbmRgIHRvIGBGb2N1c1N5bWJvbHNgLCBqdXN0IHRvIGJlIHNhZmUuCgpXYWl0LCBsb29raW5nIGFnYWluLCBgeGFzX2ZpbmRgIGlzIGV4cG9ydGVkLiBUaGF0IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byBtYWtlIHN1cmUgaXQmIzM5O3Mgbm90IGlubGluZWQuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24gYHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClgLCBpdCYjMzk7cyBub3QuIEFscmlnaHQsIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggaXRzZWxmOiBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGNoYW5nZWQgdGhlIGxvZ2ljIGFyb3VuZCB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uIHdpdGhpbiBgeGFzX2ZpbmRgLiBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgY2hlY2sgb24gYHhhcy0mZ3Q7eGFfbm9kZS0mZ3Q7c2hpZnRgIHRoYXQgaGFzIGJlZW4gYWRkZWQgb3IgbW9kaWZpZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHdhczoKCmBgYGMKfSBlbHNlIGlmICgheGFzLSZndDt4YV9ub2RlLSZndDtzaGlmdCAmYW1wOyZhbXA7CiAgICAgICAgICAgeGFzLSZndDt4YV9vZmZzZXQgIT0gKHhhcy0mZ3Q7eGFfaW5kZXggJmFtcDsgWEFfQ0hVTktfTUFTSykpIHsKICAgIHhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKfQpgYGAKClRoaXMgbm93IHNlZW1zIHRvIGJlOgoKYGBgYwp9IGVsc2UgaWYgKHhhcy0mZ3Q7eGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKSkgewogICAgaWYgKCF4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0KQogICAgICAgIHhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKICAgIGVsc2UKICAgICAgICB4YXMtJmd0O3hhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKTsKfQpgYGAKCkFscmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBgeGFzX2ZpbmRgIGFzIGV4cGVjdGVkLCBidXQgd2hhdCBkb2VzIHRoZSBhc3NvY2lhdGVkIHRlc3QgY2FzZSBsb29rIGxpa2U/IExvb2tpbmcgYXQgYGxpYi90ZXN0X3hhcnJheS5jYCwgdGhlIHJlbGV2YW50IHRlc3QgaXMgYGNoZWNrX211bHRpX2ZpbmRfNGAuIFNvIHRoYXQgdGVzdCBjYXNlIHdpbGwgbGlrZWx5IGV4ZXJjaXNlIHRoaXMgbmV3IGxvZ2ljIGFuZCBnaXZlIHNvbWUgY29uZmlkZW5jZSBpbiB0aGUgcGF0Y2guCgpOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBpbiBteSBtaW5kOiBJcyBgeGFzX2ZpbmRgIGEgaG90LXBhdGggZnVuY3Rpb24/IEdpdmVuIHRoYXQgWEFycmF5IGlzIHVzZWQgZXh0ZW5zaXZlbHkgaW4gdGhlIHBhZ2UgY2FjaGUgYW5kIG90aGVyIGNvcmUgc3Vic3lzdGVtcywgbXkgaHVuY2ggaXMgdGhhdCBgeGFzX2ZpbmRgIGNvdWxkIHZlcnkgd2VsbCBiZSBwZXJmb3JtYW5jZS1zZW5zaXRpdmUuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBvZmZzZXQgY2FsY3VsYXRpb24sIHNvIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgeGFzX2ZpbmRgIGlzIHVzZWQgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyBwZXJmb3JtYW5jZS1jcml0aWNhbCB0aGlzIGNoYW5nZSBtaWdodCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGFzX2ZpbmRcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTQxNz1oZWxkLCB3aGlsZSBtb3ZpbmcgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgaW5kZXggZG9lcy5cbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00MTgtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q6NDE5OllvdSBjYW4gc2VhcmNoIGZvciB0aGUgbmV4dCBwcmVzZW50IGVudHJ5IHVzaW5nIHhhc19maW5kKCkuICBUaGlzXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDIwLWlzIHRoZSBlcXVpdmFsZW50IG9mIGJvdGggeGFfZmluZCgpIGFuZCB4YV9maW5kX2FmdGVyKCk7XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTQyMz1lbnRyeSBhdCB0aGUgaW5kZXggb2YgdGhlIHhhX3N0YXRlLiAgVXNpbmcgeGFzX25leHRfZW50cnkoKSB0b1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjQyNDptb3ZlIHRvIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW5zdGVhZCBvZiB4YXNfZmluZCgpIHdpbGwgc2F2ZVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0LTQyNS1hIGZ1bmN0aW9uIGNhbGwgaW4gdGhlIG1ham9yaXR5IG9mIGNhc2VzIGF0IHRoZSBleHBlbnNlIG9mIGVtaXR0aW5nIG1vcmVcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9NDc3PWluIHRoZSB4YV9zdGF0ZSB3aWxsIG5vdCBiZSBjaGFuZ2VkLiAgV2hlbiBpdGVyYXRpbmcgb3ZlciBhbiBYQXJyYXlcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0Nzg6b3IgY2FsbGluZyB4YXNfZmluZCgpLCBpZiB0aGUgaW5pdGlhbCBpbmRleCBpcyBpbiB0aGUgbWlkZGxlXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDc5LW9mIGEgbXVsdGktaW5kZXggZW50cnksIGl0IHdpbGwgbm90IGJlIGFsdGVyZWQuICBTdWJzZXF1ZW50IGNhbGxzXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdD0zMTU9eGFzX2xvYWQoKeS8muWwveWPr+iDveWcsOWwhnhhX3N0YXRl56e75Yqo5Yiw6K+l5p2h55uu6ZmE6L+R44CC5aaC5p6c5L2g55+l6YGTeGFfc3RhdGXlt7Lnu4/np7vliqjliLDkuobor6XmnaHnm67vvIzlubbkuJTpnIDopoHmo4Dmn6Vcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTMyMS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3Q6MzIyOuS9oOWPr+S7peS9v+eUqHhhc19maW5kKCnmkJzntKLkuIvkuIDkuKrlvZPliY3mnaHnm67jgILov5nnm7jlvZPkuo54YV9maW5kKCnlkox4YV9maW5kX2FmdGVyKCnvvJvlpoLmnpzlhYnmoIflt7Lnu4/np7vliqjliLDkuoZcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzIzLeS4gOS4quadoeebru+8jOmCo+S5iOWug+WwhuaJvuWIsOW9k+WJjeW8leeUqOeahOadoeebruS5i+WQjueahOS4i+S4gOS4quadoeebruOAguWmguaenOayoeacie+8jOWug+Wwhui/lOWbnnhhX3N0YXRl57Si5byV5aSE55qE5p2h55uu44CC5L2/55SoXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0OjMyNDp4YXNfbmV4dF9lbnRyeSgp6ICM5LiN5piveGFzX2ZpbmQoKeadpeenu+WKqOWIsOS4i+S4gOS4quW9k+WJjeadoeebru+8jOWcqOWkp+WkmuaVsOaDheWGteS4i+S8muiKguecgeS4gOS4quWHveaVsOiwg+eUqO+8jOS9huS7o+S7t1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0zMjUt5piv5Y+R5Ye65pu05aSa5YaF6IGU5Luj56CB44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdD0zNDU9WEFycmF55pyJ6IO95Yqb5bCG5aSa5Liq57Si5byV6IGU57O75Zyo5LiA6LW377yM5Zug5q2k5a+55LiA5Liq57Si5byV55qE5pON5L2c5Lya5b2x5ZON5Yiw5omA5pyJ55qE57Si5byV44CC5L6L5aaC77yM5a2Y5YKo5Yiw5Lu75L2V57Si5byV5bCGXHVmZmZkXHVmZmZkLi4uXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0zNTQtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0OjM1NTrlpoLmnpx4YXNfbG9hZCgp6YGH5Yiw5LiA5Liq5aSa57Si5byV5p2h55uu77yMeGFfc3RhdGXkuK3nmoR4YV9pbmRleOWwhuS4jeS8muiiq+aUueWPmOOAguW9k+mBjeWOhuS4gOS4qlhBcnJheeaIluiAheiwg+eUqHhhc19maW5kKClcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzU2LeaXtu+8jOWmguaenOWIneWni+e0ouW8leWcqOS4gOS4quWkmue0ouW8leadoeebrueahOS4remXtO+8jOWug+WwhuS4jeS8muiiq+aUueWPmOOAgumaj+WQjueahOiwg+eUqOaIlui/reS7o+WwhuaKiue0ouW8leenu+WIsOiMg+WbtOWGheeahOesrFx1ZmZmZFx1ZmZmZC4uLlxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTU0Mz12b2lkICp4YXNfc3RvcmUoc3RydWN0IHhhX3N0YXRlICosIHZvaWQgKmVudHJ5KTtcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTU0NDp2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKiwgdW5zaWduZWQgbG9uZyBtYXgpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNTQ1LXZvaWQgKnhhc19maW5kX2NvbmZsaWN0KHN0cnVjdCB4YV9zdGF0ZSAqKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE3MDE9c3RhdGljIGlubGluZSB2b2lkIHhhc19zZXRfbHJ1KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MTEtICogeGFzX25leHRfZW50cnkoKSBpcyBhbiBpbmxpbmUgZnVuY3Rpb24gdG8gb3B0aW1pc2UgeGFycmF5IHRyYXZlcnNhbCBmb3JcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTcxMjogKiBzcGVlZC4gIEl0IGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyB4YXNfZmluZCgpLCBhbmQgd2lsbCBjYWxsIHhhc19maW5kKClcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcxMy0gKiBmb3IgYWxsIHRoZSBoYXJkIGNhc2VzLlxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTcxNz1zdGF0aWMgaW5saW5lIHZvaWQgKnhhc19uZXh0X2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MjMtXHRcdFx0eGFzLVx1MDAzZXhhX29mZnNldCAhPSAoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAyNiBYQV9DSFVOS19NQVNLKSkpXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE3MjQ6XHRcdHJldHVybiB4YXNfZmluZCh4YXMsIG1heCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MjUtXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzI3LVx0XHRpZiAodW5saWtlbHkoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAzZT0gbWF4KSlcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTcyODpcdFx0XHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzI5LVx0XHRpZiAodW5saWtlbHkoeGFzLVx1MDAzZXhhX29mZnNldCA9PSBYQV9DSFVOS19NQVNLKSlcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTczMDpcdFx0XHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzMxLVx0XHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cdTAwM2V4YSwgbm9kZSwgeGFzLVx1MDAzZXhhX29mZnNldCAmIzQzOyAxKTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTczMi1cdFx0aWYgKHVubGlrZWx5KHhhX2lzX2ludGVybmFsKGVudHJ5KSkpXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE3MzM6XHRcdFx0cmV0dXJuIHhhc19maW5kKHhhcywgbWF4KTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTczNC1cdFx0eGFzLVx1MDAzZXhhX29mZnNldCYjNDM7JiM0Mzs7XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xODAwPWVudW0ge1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTgxNy0jZGVmaW5lIHhhc19mb3JfZWFjaCh4YXMsIGVudHJ5LCBtYXgpIFxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE4MTg6XHRmb3IgKGVudHJ5ID0geGFzX2ZpbmQoeGFzLCBtYXgpOyBlbnRyeTsgXFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTgxOS1cdCAgICAgZW50cnkgPSB4YXNfbmV4dF9lbnRyeSh4YXMsIG1heCkpXG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MTAyPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3hhc19yZXRyeShzdHJ1Y3QgeGFycmF5ICp4YSlcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0xMTAtXHRyY3VfcmVhZF9sb2NrKCk7XG5saWIvdGVzdF94YXJyYXkuYzoxMTE6XHRYQV9CVUdfT04oeGEsIHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKSAhPSB4YV9ta192YWx1ZSgwKSk7XG5saWIvdGVzdF94YXJyYXkuYy0xMTItXHR4YV9lcmFzZV9pbmRleCh4YSwgMSk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmM9MTI1MD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzQoc3RydWN0IHhhcnJheSAqeGEpXG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTI2Mi1cdHJjdV9yZWFkX2xvY2soKTtcbmxpYi90ZXN0X3hhcnJheS5jOjEyNjM6XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbmxpYi90ZXN0X3hhcnJheS5jLTEyNjQtXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0xMjY2LVxubGliL3Rlc3RfeGFycmF5LmM6MTI2NzpcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xubGliL3Rlc3RfeGFycmF5LmMtMTI2OC1cdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTI3MC1cbmxpYi90ZXN0X3hhcnJheS5jOjEyNzE6XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbmxpYi90ZXN0X3hhcnJheS5jLTEyNzItXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTEyODQtXHRyY3VfcmVhZF9sb2NrKCk7XG5saWIvdGVzdF94YXJyYXkuYzoxMjg1Olx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG5saWIvdGVzdF94YXJyYXkuYy0xMjg2LVx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTI5Ny1cdHJjdV9yZWFkX2xvY2soKTtcbmxpYi90ZXN0X3hhcnJheS5jOjEyOTg6XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbmxpYi90ZXN0X3hhcnJheS5jLTEyOTktXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTEzMDEtXG5saWIvdGVzdF94YXJyYXkuYzoxMzAyOlx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG5saWIvdGVzdF94YXJyYXkuYy0xMzAzLVx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbi0tXG5saWIvdGVzdF94YXJyYXkuYz0xNTg2PXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX21vdmVfbWF4KHN0cnVjdCB4YXJyYXkgKnhhKVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jLTE1OTEtXHRyY3VfcmVhZF9sb2NrKCk7XG5saWIvdGVzdF94YXJyYXkuYzoxNTkyOlx0WEFfQlVHX09OKHhhLCB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0geGFfbWtfaW5kZXgoVUxPTkdfTUFYKSk7XG5saWIvdGVzdF94YXJyYXkuYzoxNTkzOlx0WEFfQlVHX09OKHhhLCB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0gTlVMTCk7XG5saWIvdGVzdF94YXJyYXkuYy0xNTk0LVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubGliL3Rlc3RfeGFycmF5LmMtMTU5Ny1cdHJjdV9yZWFkX2xvY2soKTtcbmxpYi90ZXN0X3hhcnJheS5jOjE1OTg6XHRYQV9CVUdfT04oeGEsIHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKSAhPSB4YV9ta19pbmRleChVTE9OR19NQVgpKTtcbmxpYi90ZXN0X3hhcnJheS5jLTE1OTktXHR4YXNfcGF1c2UoXHUwMDI2eGFzKTtcbmxpYi90ZXN0X3hhcnJheS5jOjE2MDA6XHRYQV9CVUdfT04oeGEsIHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKSAhPSBOVUxMKTtcbmxpYi90ZXN0X3hhcnJheS5jLTE2MDEtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5saWIveGFycmF5LmM9MTM3NT1FWFBPUlRfU1lNQk9MX0dQTChfX3hhc19uZXh0KTtcbi0tXG5saWIveGFycmF5LmMtMTM3Ny0vKipcbmxpYi94YXJyYXkuYzoxMzc4OiAqIHhhc19maW5kKCkgLSBGaW5kIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW4gdGhlIFhBcnJheS5cbmxpYi94YXJyYXkuYy0xMzc5LSAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXG4tLVxubGliL3hhcnJheS5jLTEzOTItICovXG5saWIveGFycmF5LmM6MTM5Mzp2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXG5saWIveGFycmF5LmMtMTM5NC17XG4tLVxubGliL3hhcnJheS5jPTIxNzI9RVhQT1JUX1NZTUJPTCh4YV9jbGVhcl9tYXJrKTtcbi0tXG5saWIveGFycmF5LmMtMjE4NS0gKiBlbnRyaWVzIHdoaWNoIGFyZSBiZWluZyBzaW11bHRhbmVvdXNseSBhZGRlZC4gIEl0IHdpbGwgbm90IHJldHVybiBhblxubGliL3hhcnJheS5jOjIxODY6ICogJVhBX1JFVFJZX0VOVFJZOyBpZiB5b3UgbmVlZCB0byBzZWUgcmV0cnkgZW50cmllcywgdXNlIHhhc19maW5kKCkuXG5saWIveGFycmF5LmMtMjE4Ny0gKlxuLS1cbmxpYi94YXJyYXkuYz0yMTkxPXZvaWQgKnhhX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgKmluZGV4cCxcbi0tXG5saWIveGFycmF5LmMtMjIwMS1cdFx0ZWxzZVxubGliL3hhcnJheS5jOjIyMDI6XHRcdFx0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIG1heCk7XG5saWIveGFycmF5LmMtMjIwMy1cdH0gd2hpbGUgKHhhc19yZXRyeShcdTAwMjZ4YXMsIGVudHJ5KSk7XG4tLVxubGliL3hhcnJheS5jPTIyMTI9c3RhdGljIGJvb2wgeGFzX3NpYmxpbmcoc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubGliL3hhcnJheS5jLTIyMzUtICogd2hpY2ggYXJlIGJlaW5nIHNpbXVsdGFuZW91c2x5IGFkZGVkLiAgSXQgd2lsbCBub3QgcmV0dXJuIGFuXG5saWIveGFycmF5LmM6MjIzNjogKiAlWEFfUkVUUllfRU5UUlk7IGlmIHlvdSBuZWVkIHRvIHNlZSByZXRyeSBlbnRyaWVzLCB1c2UgeGFzX2ZpbmQoKS5cbmxpYi94YXJyYXkuYy0yMjM3LSAqXG4tLVxubGliL3hhcnJheS5jPTIyNDE9dm9pZCAqeGFfZmluZF9hZnRlcihzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyAqaW5kZXhwLFxuLS1cbmxpYi94YXJyYXkuYy0yMjU0LVx0XHRlbHNlXG5saWIveGFycmF5LmM6MjI1NTpcdFx0XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgbWF4KTtcbmxpYi94YXJyYXkuYy0yMjU2LVxuLS1cbm1tL2ZpbGVtYXAuYz00Nzk9Ym9vbCBmaWxlbWFwX3JhbmdlX2hhc19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2ZpbGVtYXAuYy00OTAtXHRmb3IgKDs7KSB7XG5tbS9maWxlbWFwLmM6NDkxOlx0XHRmb2xpbyA9IHhhc19maW5kKFx1MDAyNnhhcywgbWF4KTtcbm1tL2ZpbGVtYXAuYy00OTItXHRcdGlmICh4YXNfcmV0cnkoXHUwMDI2eGFzLCBmb2xpbykpXG4tLVxubW0vZmlsZW1hcC5jPTIwNzg9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmZpbmRfZ2V0X2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBwZ29mZl90IG1heCxcbi0tXG5tbS9maWxlbWFwLmMtMjA4NC1cdGlmIChtYXJrID09IFhBX1BSRVNFTlQpXG5tbS9maWxlbWFwLmM6MjA4NTpcdFx0Zm9saW8gPSB4YXNfZmluZCh4YXMsIG1heCk7XG5tbS9maWxlbWFwLmMtMjA4Ni1cdGVsc2Vcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI0MzQ9Ym9vbCBrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NDktXHRpZiAoIWF0dHJzKVxudmlydC9rdm0va3ZtX21haW4uYzoyNDUwOlx0XHRyZXR1cm4gIXhhc19maW5kKFx1MDAyNnhhcywgZW5kIC0gMSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzE5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBhbmQgQ29uZmlndXJhdGlvbiBmb3IgWEFycmF5IEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiBpdCBlZmZlY3RpdmVseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHhhc19maW5kYCBpcyBkZWZpbml0ZWx5IGEgaG90LXBhdGggZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWQgaW4gc2V2ZXJhbCBjcml0aWNhbCBhcmVhcyBsaWtlIGBmaWxlbWFwX3JhbmdlX2hhc19wYWdlYCBhbmQgYGZpbmRfZ2V0X2VudHJ5YC4gU28sIGFzIHBlciB0aGUgaW5zdHJ1Y3Rpb25zLCBJICpzaG91bGQgbm90KiBsaXN0IGB4YXNfZmluZGAgaW4gYEZvY3VzU3ltYm9sc2AgYmVjYXVzZSBkb2luZyBzbyB3b3VsZCBza2V3IHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbnMsIGFuZCBpdCBpcyBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24uCgpXaGF0IGFib3V0IHRoZSB0ZXN0IGZ1bmN0aW9uIGBjaGVja19tdWx0aV9maW5kXzRgIHRob3VnaD8gSXTigJlzIGEgc3RhdGljLCBsaWtlbHkgaW5saW5lZCAob3IgYHN0YXRpYyBub2lubGluZWApIHRlc3QgZnVuY3Rpb24uIEJ1dCwgZnV6emluZyBhIHRlc3QgZnVuY3Rpb24gZGlyZWN0bHkgZG9lc27igJl0IHJlYWxseSBtYWtlIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIFN5emthbGxlciYjMzk7cyBnb2Fscy4gSSBhbSBhaW1pbmcgdG8gZmluZCBrZXJuZWwtbGV2ZWwgZW50cnlwb2ludHMuCgpUaGVyZWZvcmUsIGBGb2N1c1N5bWJvbHNgIHdpbGwgcmVtYWluIGVtcHR5LiBDaGVja2luZyBmb3Igb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zIGNvbmZpcm1zIHRoaXMuCgpOb3csIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbiwgdGhlIGdvYWwgaXMgdG8gZW5hYmxlIHRoZSB0ZXN0IGNhc2UgdGhhdCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyB0aGUgYnVnLiBUaGUgcHJvbXB0IHNheXMgdGhhdCBJIHNob3VsZCBlbmFibGUgdGhlIHRlc3QgY2FzZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGB4YXNfZmluZGAgYW5kIGBjaGVja19tdWx0aV9maW5kXzRgIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHRlc3QgY2FzZSBjYW4gYmUgcnVuLiBJbml0aWFsbHksIEkgdGhvdWdodCBhYm91dCBgVEVTVF9YQVJSQVlgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBzaW5jZSB0aGUgbGF0dGVyIHNlbGVjdHMgYFhBUlJBWV9NVUxUSWAuIEJ1dCBgSFVHRVRMQkZTYCAqYWxzbyogc2VsZWN0cyBgWEFSUkFZX01VTFRJYCBhbmQgc2VlbXMgbGlrZSBhIG1vcmUgc3RyYWlnaHRmb3J3YXJkIG9wdGlvbiwgcmV2aWV3aW5nIGBsaWIvS2NvbmZpZ2AgY29uZmlybXMgdGhpcy4KClRoaW5raW5nIGFib3V0IGBURVNUX1hBUlJBWWAsIGlmIGl0JiMzOTtzIGJ1aWx0LWluIChgQ09ORklHX1RFU1RfWEFSUkFZPXlgKSwgaXQgcnVucyBhdCBib290LiBJZiBpdCYjMzk7cyBhIG1vZHVsZSAoYENPTkZJR19URVNUX1hBUlJBWT1tYCksIGl0IHJ1bnMgb24gbW9kdWxlIGxvYWQuIFN5emthbGxlciBjYW4gbG9hZCBtb2R1bGVzIGlmIHRoZXkgYXJlIHByZXNlbnQuIEJ1dCB0aGUgYWN0dWFsIGJ1ZyBpcyBpbiBgeGFzX2ZpbmRgLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSBwbGFjZXMgbGlrZSBgbW1hcGAsIGByZWFkYCwgYHdyaXRlYCwgYW5kIHNvIG9uLiBTbyB0aGUgYnVnIGlzIHJlYWNoYWJsZSBldmVuIHdpdGhvdXQgYFRFU1RfWEFSUkFZYC4gSG93ZXZlciwgdGhlIHRlc3QgY2FzZSBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZXhwb3NlIHRoZSBidWcuIEVuYWJsaW5nIGBURVNUX1hBUlJBWT15YCBlbnN1cmVzIHRoYXQgdGhlIGtlcm5lbCBydW5zIHRoZSB0ZXN0IGF0IGJvb3QsIGNyYXNoaW5nIGltbWVkaWF0ZWx5IGlmIHRoZSBidWcgaXMgcHJlc2VudC4gVGhpcyBpcyBpZGVhbCEKClNvLCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGluY2x1ZGUgYFRFU1RfWEFSUkFZYCBhbmQgYEhVR0VUTEJGU2AgKHRvIGVuYWJsZSBgWEFSUkFZX01VTFRJYCkuIEkgY29uZmlybWVkIHRoYXQgYEhVR0VUTEJGU2AgaXMgYSBjb21tb24gY29uZmlnIGFuZCBpcyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgdG8gdXNlLiBMZXQgbWUgZG91YmxlIGNoZWNrLi4uIFllcywgaXQmIzM5O3MgdGhlIHJpZ2h0IGNob2ljZS4KCkluIHN1bW1hcnksIHRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgeGFzX2ZpbmQoKWAgd2l0aGluIHRoZSBYQXJyYXkgY29kZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aS1pbmRleCBlbnRyaWVzLiBUaGlzIGlzIGNvcmUgWEFycmF5IGxvZ2ljIGFuZCB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgdGVzdCBjYXNlLCBgY2hlY2tfbXVsdGlfZmluZF80YC4gVG8gbWF4aW1pemUgZnV6emluZyBlZmZlY3RpdmVuZXNzLCBJJiMzOTtsbCBleGNsdWRlIGB4YXNfZmluZGAgZnJvbSBgRm9jdXNTeW1ib2xzYC4gVG8gZW5zdXJlIHRoZSBhZGRlZCB0ZXN0IGNhc2UgcnVucyBhbmQgY2F0Y2hlcyBwb3RlbnRpYWwgaXNzdWVzLCBgQ09ORklHX1RFU1RfWEFSUkFZYCBhbmQgYENPTkZJR19IVUdFVExCRlNgICh3aGljaCBlbmFibGVzIGBDT05GSUdfWEFSUkFZX01VTFRJYCkgd2lsbCBiZSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTQ5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVmVyaWZ5aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBgSFVHRVRMQkZTYOKAlHllcCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQuIENvbmZpcm1lZC4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSBhYm91dCBgQ09ORklHX1RFU1RfWEFSUkFZYC4gSXQmIzM5O3MgYSBrZXkgcGllY2UsIGFuZCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBzZXQgYXBwcm9wcmlhdGVseSBnaXZlbiB0aGUgZGlyZWN0aW9uIG9mIHRoaXMgcHJvamVjdC4gTm8gcm9vbSBmb3IgYXNzdW1wdGlvbnMgaGVyZS4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRFU1RfWEFSUkFZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MjU1Nz1jb25maWcgVEVTVF9CSVRNQVBcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTYzLVxubGliL0tjb25maWcuZGVidWc6MjU2NDpjb25maWcgVEVTVF9YQVJSQVlcbmxpYi9LY29uZmlnLmRlYnVnLTI1NjUtXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IHRoZSBYQXJyYXkgY29kZSBhdCBydW50aW1lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDAxCgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBYQXJyYXkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYFRFU1RfWEFSUkFZYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZm9jdXMgb24gaGVyZS4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmdXJ0aGVyLCBnaXZlbiBteSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCBpbnRlcm5hbHMgYW5kIFhBcnJheSBzcGVjaWZpY2FsbHkuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBidWcgd2l0aGluIGB4YXNfZmluZCgpYC4gVGhhdCYjMzk7cyBhICptYWpvciogZnVuY3Rpb24gd2l0aGluIHRoZSBYQXJyYXkgc3lzdGVtOyBpdCYjMzk7cyBwcmFjdGljYWxseSBhIGxpbmNocGluLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRoZSBwYWdlIGNhY2hlIGFuZCBvdGhlciBjcml0aWNhbCBzdWJzeXN0ZW1zLiBUaGUgYnVnIGl0c2VsZiB0YXJnZXRzIG11bHRpLWluZGV4IGVudHJ5IHNlYXJjaGVzLCB3aGljaCwgYXMgd2Uga25vdywgY2FuIGdldCB0cmlja3kuCgpGcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBtYWtlcyB0aGUgcGF0Y2ggaGlnaGx5IHJlbGV2YW50LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBhcHByb3ByaWF0ZWx5IHNldCB0byBgdHJ1ZWAuIEJlY2F1c2UgYHhhc19maW5kKClgIGlzIGEgZ2VuZXJpYywgY29yZSBmdW5jdGlvbiBpbiBhIGhvdCBwYXRoLCBpdCYjMzk7cyBjb3JyZWN0IHRvIGV4Y2x1ZGUgaXQgZnJvbSB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhlIHJlYWwgYmVuZWZpdCBoZXJlIGNvbWVzIGZyb20gZW5zdXJpbmcgdGhpcyBuZXcgdGVzdCBjYXNlLCBgY2hlY2tfbXVsdGlfZmluZF80YCwgd2l0aGluIGBsaWIvdGVzdF94YXJyYXkuY2AsIGFjdHVhbGx5ICpydW5zKiBkdXJpbmcgZnV6emluZy4KClRoZXJlZm9yZSwgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgYXJlIGBURVNUX1hBUlJBWWAgKHRoYXQmIzM5O3Mgb2J2aW91cykgYW5kIGBIVUdFVExCRlNgLiBUaGUgbGF0dGVyIGlzIGVzc2VudGlhbCBiZWNhdXNlIGl0IHNlbGVjdHMgYENPTkZJR19YQVJSQVlfTVVMVElgLCB3aGljaCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIG11bHRpLWluZGV4IHRlc3QgYWRkZWQgYnkgdGhlIHBhdGNoLiBUaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBhcHByb2FjaCB0byBtYXhpbWl6ZSB0ZXN0IGNvdmVyYWdlIG9mIHRoaXMgcGFydGljdWxhciBidWcgZml4IHdpdGhpbiB0aGUgZnV6emluZyBmcmFtZXdvcmsuIEl0IGNvcnJlY3RseSBpZGVudGlmaWVzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGVzdCBleGVjdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtURVNUX1hBUlJBWSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHhhc19maW5kKClgLCBhIGNvcmUgWEFycmF5IGZ1bmN0aW9uIHVzZWQgZXh0ZW5zaXZlbHkgaW4gdGhlIGtlcm5lbCAoZS5nLiwgcGFnZSBjYWNoZSkuIFRoZSBidWcgb2NjdXJzIHdoZW4gc2VhcmNoaW5nIGZvciBtdWx0aS1pbmRleCBlbnRyaWVzLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgdGVzdCBjYXNlIGBjaGVja19tdWx0aV9maW5kXzRgIHRvIGBsaWIvdGVzdF94YXJyYXkuY2AuIFNpbmNlIGB4YXNfZmluZCgpYCBpcyBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24sIGl0IGlzIGV4Y2x1ZGVkIGZyb20gRm9jdXNTeW1ib2xzLiBUbyBlbnN1cmUgdGhlIG5ldyB0ZXN0IGNhc2UgaXMgZXhlY3V0ZWQsIGBDT05GSUdfVEVTVF9YQVJSQVlgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgKHdoaWNoIHNlbGVjdHMgYENPTkZJR19YQVJSQVlfTVVMVElgIHJlcXVpcmVkIGJ5IHRoZSB0ZXN0KSBzaG91bGQgYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9YQVJSQVkmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB4YXNfZmluZCgpYCwgYSBjb3JlIFhBcnJheSBmdW5jdGlvbiB1c2VkIGV4dGVuc2l2ZWx5IGluIHRoZSBrZXJuZWwgKGUuZy4sIHBhZ2UgY2FjaGUpLiBUaGUgYnVnIG9jY3VycyB3aGVuIHNlYXJjaGluZyBmb3IgbXVsdGktaW5kZXggZW50cmllcy4gVGhlIHBhdGNoIGFsc28gYWRkcyBhIHRlc3QgY2FzZSBgY2hlY2tfbXVsdGlfZmluZF80YCB0byBgbGliL3Rlc3RfeGFycmF5LmNgLiBTaW5jZSBgeGFzX2ZpbmQoKWAgaXMgYSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uLCBpdCBpcyBleGNsdWRlZCBmcm9tIEZvY3VzU3ltYm9scy4gVG8gZW5zdXJlIHRoZSBuZXcgdGVzdCBjYXNlIGlzIGV4ZWN1dGVkLCBgQ09ORklHX1RFU1RfWEFSUkFZYCBhbmQgYENPTkZJR19IVUdFVExCRlNgICh3aGljaCBzZWxlY3RzIGBDT05GSUdfWEFSUkFZX01VTFRJYCByZXF1aXJlZCBieSB0aGUgdGVzdCkgc2hvdWxkIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIHhhcnJheSBtdWx0aS1pbmRleCBmaW5kIGltcGxlbWVudGF0aW9uIChgeGFzX2ZpbmRgKS4gVGhlIGlzc3VlIGludm9sdmVzIGluY29ycmVjdCBvZmZzZXQgY2FsY3VsYXRpb25zIGR1cmluZyB4YXJyYXkgdHJhdmVyc2FsLCB3aGljaCBjb3VsZCBsZWFkIHRvIHJldHVybmluZyBpbmNvcnJlY3QgZW50cmllcywgaW5maW5pdGUgbG9vcHMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4gKGlmIHRoZXkgbGVhZCB0byBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyksIG9yIG90aGVyIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY3OTM1MzYzNTQ1YmUxMTAwNDExMmEzYmRmZmE2NmUzMzEyYzVmNmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAxMjo0Njo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3hhcnJheS5jIGIvbGliL3Rlc3RfeGFycmF5LmMKaW5kZXggNWNhMGFlZmVlOWFhNS4uN2QwZGVjY2RmNTlhMCAxMDA2NDQKLS0tIGEvbGliL3Rlc3RfeGFycmF5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RfeGFycmF5LmMKQEAgLTEyNDcsNiAmIzQzOzEyNDcsNjcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8zKHN0cnVjdCB4YXJyYXkgKnhhKQogCX0KIH0KIAomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVEkKJiM0MzsJWEFfU1RBVEUoeGFzLCB4YSwgMTAwKTsKJiM0MzsJWEFfU1RBVEVfT1JERVIoeGFzX3NwbGl0LCB4YSwgMCwgMCk7CiYjNDM7CXZvaWQgKmVudHJ5OwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CS8qICgxKSBPcmRlci03IGVudHJ5ICgwLTEyNykgd2l0aCBhZGphY2VudCBlbnRyeSBhdCAxMjgsIHN0YXJ0aW5nIGF0IDEwMCAqLwomIzQzOwl4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApOwomIzQzOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpOwomIzQzOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJeGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7CiYjNDM7CXhhX2VyYXNlX2luZGV4KHhhLCAwKTsKJiM0MzsJWEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTsKJiM0MzsKJiM0MzsJLyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi8KJiM0MzsJeGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTsKJiM0MzsKJiM0MzsJeGFzX3NldCgmYW1wO3hhcywgMTAwKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXhhc19zcGxpdF9hbGxvYygmYW1wO3hhc19zcGxpdCwgeGEsIDcsIEdGUF9LRVJORUwpOwomIzQzOwl4YXNfbG9jaygmYW1wO3hhc19zcGxpdCk7CiYjNDM7CXhhc19zcGxpdCgmYW1wO3hhc19zcGxpdCwgeGEsIDcpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTI4OyBpJiM0MzsmIzQzOykKJiM0MzsJCV9feGFfc3RvcmUoeGEsIGksIHhhX21rX2luZGV4KGkpLCAwKTsKJiM0MzsJeGFzX3VubG9jaygmYW1wO3hhc19zcGxpdCk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTsKJiM0MzsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXhhX2Rlc3Ryb3koeGEpOwomIzQzOwlYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSkKIHsKIAl1bnNpZ25lZCBsb25nIGksIGosIGs7CkBAIC0xMzcwLDYgJiM0MzsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSkKIAkJY2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTsKIAljaGVja19tdWx0aV9maW5kXzIoeGEpOwogCWNoZWNrX211bHRpX2ZpbmRfMyh4YSk7CiYjNDM7CWNoZWNrX211bHRpX2ZpbmRfNCh4YSk7CiB9CiAKIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovCmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmMKaW5kZXggOWE4YjQ5MTY1NDBjZi4uOTgwMzI0ZDY4NmJkMCAxMDA2NDQKLS0tIGEvbGliL3hhcnJheS5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi94YXJyYXkuYwpAQCAtMTQwNiw5ICYjNDM7MTQwNiwxMSBAQCB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpCiAJCWVudHJ5ID0geGFzX2xvYWQoeGFzKTsKIAkJaWYgKGVudHJ5IHx8IHhhc19ub3Rfbm9kZSh4YXMtJmd0O3hhX25vZGUpKQogCQkJcmV0dXJuIGVudHJ5OwotCX0gZWxzZSBpZiAoIXhhcy0mZ3Q7eGFfbm9kZS0mZ3Q7c2hpZnQgJmFtcDsmYW1wOwotCQkgICAgeGFzLSZndDt4YV9vZmZzZXQgIT0gKHhhcy0mZ3Q7eGFfaW5kZXggJmFtcDsgWEFfQ0hVTktfTUFTSykpIHsKLQkJeGFzLSZndDt4YV9vZmZzZXQgPSAoKHhhcy0mZ3Q7eGFfaW5kZXggLSAxKSAmYW1wOyBYQV9DSFVOS19NQVNLKSAmIzQzOyAxOwomIzQzOwl9IGVsc2UgaWYgKHhhcy0mZ3Q7eGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKSkgewomIzQzOwkJaWYgKCF4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0KQomIzQzOwkJCXhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl4YXMtJmd0O3hhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKTsKIAl9CiAKIAl4YXNfbmV4dF9vZmZzZXQoeGFzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTEKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogNDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhhcnJheSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBsaWIveGFycmF5LmNgIGFuZCBhZGRpbmcgYSBuZXcgdGVzdCwgYGxpYi90ZXN0X3hhcnJheS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiB0aGUgYHhhc19maW5kYCBmdW5jdGlvbiB3aXRoaW4gYHhhcnJheS5jYC4gIExvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZSBvcmlnaW5hbCBjaGVjayBmb3Igb2Zmc2V0IGhhcyBiZWVuIG1vZGlmaWVkLiAgU3BlY2lmaWNhbGx5OgoKYGBgYwotCX0gZWxzZSBpZiAoIXhhcy0mZ3Q7eGFfbm9kZS0mZ3Q7c2hpZnQgJmFtcDsmYW1wOwotCQkgICAgeGFzLSZndDt4YV9vZmZzZXQgIT0gKHhhcy0mZ3Q7eGFfaW5kZXggJmFtcDsgWEFfQ0hVTktfTUFTSykpIHsKLQkJeGFzLSZndDt4YV9vZmZzZXQgPSAoKHhhcy0mZ3Q7eGFfaW5kZXggLSAxKSAmYW1wOyBYQV9DSFVOS19NQVNLKSAmIzQzOyAxOwomIzQzOwl9IGVsc2UgaWYgKHhhcy0mZ3Q7eGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKSkgewomIzQzOwkJaWYgKCF4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0KQomIzQzOwkJCXhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl4YXMtJmd0O3hhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKTsKIAl9CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhZGRyZXNzaW5nIGEgYnVnIGluIGhvdyBgeGFzX2ZpbmRgIGhhbmRsZXMgbXVsdGktaW5kZXggc2VhcmNoZXMsIGxpa2VseSByZWxhdGVkIHRvIGNhc2VzIHdoZXJlIGVudHJpZXMgYXJlIHNwbGl0IGFjcm9zcyBib3VuZGFyaWVzLiBUaGUgb3JpZ2luYWwgbG9naWMgc2VlbXMgdG8gaGF2ZSBhIGZsYXcgcmVsYXRlZCB0byBvZmZzZXQgY2FsY3VsYXRpb24sIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFuIGluZmluaXRlIGxvb3AsIG9yIGp1c3QgdGhlIHdyb25nIGVudHJ5IGJlaW5nIHJldHVybmVkLiAgVGhpcyBpcyBhIHRyYXZlcnNhbCBpc3N1ZS4KCk5vdywgY29uY2VybmluZyBtZW1vcnkgc2FmZXR5LCB0aGlzIGlzIHdoZXJlIG15IGV4cGVydGlzZSBjb21lcyBpbi4gIEkgZG9uJiMzOTt0IHNlZSBhbnkgZXZpZGVuY2UgaGVyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IEtNU0FOIHdvdWxkIGNhdGNoLiBUaGUgYHhhc19maW5kYCBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBhbiBlbnRyeTsgaWYgaXQgcmV0dXJucyB0aGUgd3JvbmcgZW50cnksIGl0IGlzIGxpa2VseSBhIGNyYXNoIG9yIGxvZ2ljIGJ1ZyBidXQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIHRoZSBtYWluIHVzZSBjYXNlIGZvciBLTVNBTi4gVGhlIGNvZGUgY2hhbmdlcyBhcHBlYXIgdG8gYmUgZW50aXJlbHkgY29uY2VybmVkIHdpdGggdGhlICpsb2dpYyogb2YgdGhlIHRyYXZlcnNhbCwgYW5kIG5vdCB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvciBoYW5kbGluZyBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkgaXRzZWxmLiBLQVNBTiBpcyBzdGlsbCByZWxldmFudCBoZXJlLCBhcyB0aGVyZSAqY291bGQqIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBIb3dldmVyLCBJJiMzOTtkIGJldCB0aGUgcHJpbWFyeSBpc3N1ZSBpcyBsb2dpYywgbm90IG1lbW9yeSBjb3JydXB0aW9uLiBUaGUgbmV3IHRlc3QsIGBjaGVja19tdWx0aV9maW5kXzRgLCBzZWVtcyB0byBiZSBleGVyY2lzaW5nIGB4YV9zdG9yZV9vcmRlcmAsIGB4YXNfZmluZGAsIGB4YXNfc3BsaXRgLCBldGMuLCBzbyBpdCYjMzk7cyBhIGdvb2Qgc2lnbiB0aGV5JiMzOTtyZSBjb3ZlcmluZyB0aGVzZSBib3VuZGFyeSBjb25kaXRpb25zLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXgsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiAgVGhpcyBpcyBhIGxvZ2ljIGJ1ZyBmaXgsIG5vdCBhIG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciBsZWFrIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgeGFycmF5IG11bHRpLWluZGV4IGZpbmQgaW1wbGVtZW50YXRpb24gKGB4YXNfZmluZGApLiBUaGUgaXNzdWUgaW52b2x2ZXMgaW5jb3JyZWN0IG9mZnNldCBjYWxjdWxhdGlvbnMgZHVyaW5nIHhhcnJheSB0cmF2ZXJzYWwsIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmV0dXJuaW5nIGluY29ycmVjdCBlbnRyaWVzLCBpbmZpbml0ZSBsb29wcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nLCBLQVNBTiAoaWYgdGhleSBsZWFkIHRvIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzKSwgb3Igb3RoZXIgc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSB4YXJyYXkgbXVsdGktaW5kZXggZmluZCBpbXBsZW1lbnRhdGlvbiAoYHhhc19maW5kYCkuIFRoZSBpc3N1ZSBpbnZvbHZlcyBpbmNvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9ucyBkdXJpbmcgeGFycmF5IHRyYXZlcnNhbCwgd2hpY2ggY291bGQgbGVhZCB0byByZXR1cm5pbmcgaW5jb3JyZWN0IGVudHJpZXMsIGluZmluaXRlIGxvb3BzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOIChpZiB0aGV5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMpLCBvciBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo0Njo0Mi41NDA3MjY4MTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU0NDQyMDQxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9YQVJSQVlcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSB4YXJyYXkgbXVsdGktaW5kZXggZmluZCBpbXBsZW1lbnRhdGlvbiAoYHhhc19maW5kYCkuIFRoZSBpc3N1ZSBpbnZvbHZlcyBpbmNvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9ucyBkdXJpbmcgeGFycmF5IHRyYXZlcnNhbCwgd2hpY2ggY291bGQgbGVhZCB0byByZXR1cm5pbmcgaW5jb3JyZWN0IGVudHJpZXMsIGluZmluaXRlIGxvb3BzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOIChpZiB0aGV5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMpLCBvciBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB4YXNfZmluZCgpYCwgYSBjb3JlIFhBcnJheSBmdW5jdGlvbiB1c2VkIGV4dGVuc2l2ZWx5IGluIHRoZSBrZXJuZWwgKGUuZy4sIHBhZ2UgY2FjaGUpLiBUaGUgYnVnIG9jY3VycyB3aGVuIHNlYXJjaGluZyBmb3IgbXVsdGktaW5kZXggZW50cmllcy4gVGhlIHBhdGNoIGFsc28gYWRkcyBhIHRlc3QgY2FzZSBgY2hlY2tfbXVsdGlfZmluZF80YCB0byBgbGliL3Rlc3RfeGFycmF5LmNgLiBTaW5jZSBgeGFzX2ZpbmQoKWAgaXMgYSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uLCBpdCBpcyBleGNsdWRlZCBmcm9tIEZvY3VzU3ltYm9scy4gVG8gZW5zdXJlIHRoZSBuZXcgdGVzdCBjYXNlIGlzIGV4ZWN1dGVkLCBgQ09ORklHX1RFU1RfWEFSUkFZYCBhbmQgYENPTkZJR19IVUdFVExCRlNgICh3aGljaCBzZWxlY3RzIGBDT05GSUdfWEFSUkFZX01VTFRJYCByZXF1aXJlZCBieSB0aGUgdGVzdCkgc2hvdWxkIGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ2OjQyLjU0MDczMTc3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAxMTA1MzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjc5MzUzNjM1NDViZTExMDA0MTEyYTNiZGZmYTY2ZTMzMTJjNWY2Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxMjo0Njo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9saWIvdGVzdF94YXJyYXkuYyBiL2xpYi90ZXN0X3hhcnJheS5jXFxuaW5kZXggNWNhMGFlZmVlOWFhNS4uN2QwZGVjY2RmNTlhMCAxMDA2NDRcXG4tLS0gYS9saWIvdGVzdF94YXJyYXkuY1xcbisrKyBiL2xpYi90ZXN0X3hhcnJheS5jXFxuQEAgLTEyNDcsNiArMTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF80KHN0cnVjdCB4YXJyYXkgKnhhKVxcbit7XFxuKyNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXFxuK1xcdFhBX1NUQVRFKHhhcywgeGEsIDEwMCk7XFxuK1xcdFhBX1NUQVRFX09SREVSKHhhc19zcGxpdCwgeGEsIDAsIDApO1xcbitcXHR2b2lkICplbnRyeTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0LyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovXFxuK1xcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG4rXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7XFxuK1xcbitcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCk7XFxuK1xcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7XFxuK1xcbitcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCk7XFxuK1xcdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0eGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7XFxuK1xcdHhhX2VyYXNlX2luZGV4KHhhLCAwKTtcXG4rXFx0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcXG4rXFxuK1xcdC8qICgyKSBTcGxpdHRpbmcgYSBtdWx0aS1pbmRleCBlbnRyeSBhZnRlciBhIGxvb2t1cCBiZWdpbnMgaW5zaWRlIGl0ICovXFxuK1xcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XFxuK1xcbitcXHR4YXNfc2V0KFxcdTAwMjZ4YXMsIDEwMCk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbitcXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcXG4rXFx0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHR4YXNfc3BsaXRfYWxsb2MoXFx1MDAyNnhhc19zcGxpdCwgeGEsIDcsIEdGUF9LRVJORUwpO1xcbitcXHR4YXNfbG9jayhcXHUwMDI2eGFzX3NwbGl0KTtcXG4rXFx0eGFzX3NwbGl0KFxcdTAwMjZ4YXNfc3BsaXQsIHhhLCA3KTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDEyODsgaSsrKVxcbitcXHRcXHRfX3hhX3N0b3JlKHhhLCBpLCB4YV9ta19pbmRleChpKSwgMCk7XFxuK1xcdHhhc191bmxvY2soXFx1MDAyNnhhc19zcGxpdCk7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG4rXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTtcXG4rXFx0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcXG4rXFxuK1xcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG4rXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHR4YV9kZXN0cm95KHhhKTtcXG4rXFx0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGksIGosIGs7XFxuQEAgLTEzNzAsNiArMTQzMSw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEpXFxuIFxcdFxcdGNoZWNrX211bHRpX2ZpbmRfMSh4YSwgaSk7XFxuIFxcdGNoZWNrX211bHRpX2ZpbmRfMih4YSk7XFxuIFxcdGNoZWNrX211bHRpX2ZpbmRfMyh4YSk7XFxuK1xcdGNoZWNrX211bHRpX2ZpbmRfNCh4YSk7XFxuIH1cXG4gXFxuIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovXFxuZGlmZiAtLWdpdCBhL2xpYi94YXJyYXkuYyBiL2xpYi94YXJyYXkuY1xcbmluZGV4IDlhOGI0OTE2NTQwY2YuLjk4MDMyNGQ2ODZiZDAgMTAwNjQ0XFxuLS0tIGEvbGliL3hhcnJheS5jXFxuKysrIGIvbGliL3hhcnJheS5jXFxuQEAgLTE0MDYsOSArMTQwNiwxMSBAQCB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXFxuIFxcdFxcdGVudHJ5ID0geGFzX2xvYWQoeGFzKTtcXG4gXFx0XFx0aWYgKGVudHJ5IHx8IHhhc19ub3Rfbm9kZSh4YXMtXFx1MDAzZXhhX25vZGUpKVxcbiBcXHRcXHRcXHRyZXR1cm4gZW50cnk7XFxuLVxcdH0gZWxzZSBpZiAoIXhhcy1cXHUwMDNleGFfbm9kZS1cXHUwMDNlc2hpZnQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIHhhcy1cXHUwMDNleGFfb2Zmc2V0ICE9ICh4YXMtXFx1MDAzZXhhX2luZGV4IFxcdTAwMjYgWEFfQ0hVTktfTUFTSykpIHtcXG4tXFx0XFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cXHUwMDNleGFfaW5kZXggLSAxKSBcXHUwMDI2IFhBX0NIVU5LX01BU0spICsgMTtcXG4rXFx0fSBlbHNlIGlmICh4YXMtXFx1MDAzZXhhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy1cXHUwMDNleGFfaW5kZXgsIHhhcy1cXHUwMDNleGFfbm9kZSkpIHtcXG4rXFx0XFx0aWYgKCF4YXMtXFx1MDAzZXhhX25vZGUtXFx1MDAzZXNoaWZ0KVxcbitcXHRcXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVxcdTAwM2V4YV9pbmRleCAtIDEpIFxcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXFx1MDAzZXhhX2luZGV4LCB4YXMtXFx1MDAzZXhhX25vZGUpO1xcbiBcXHR9XFxuIFxcbiBcXHR4YXNfbmV4dF9vZmZzZXQoeGFzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6NDY6NDIuOTQyNDYwNzAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjYwODk1Mzc2OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfWEFSUkFZXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHhhc19maW5kKClgLCBhIGNvcmUgWEFycmF5IGZ1bmN0aW9uIHVzZWQgZXh0ZW5zaXZlbHkgaW4gdGhlIGtlcm5lbCAoZS5nLiwgcGFnZSBjYWNoZSkuIFRoZSBidWcgb2NjdXJzIHdoZW4gc2VhcmNoaW5nIGZvciBtdWx0aS1pbmRleCBlbnRyaWVzLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgdGVzdCBjYXNlIGBjaGVja19tdWx0aV9maW5kXzRgIHRvIGBsaWIvdGVzdF94YXJyYXkuY2AuIFNpbmNlIGB4YXNfZmluZCgpYCBpcyBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24sIGl0IGlzIGV4Y2x1ZGVkIGZyb20gRm9jdXNTeW1ib2xzLiBUbyBlbnN1cmUgdGhlIG5ldyB0ZXN0IGNhc2UgaXMgZXhlY3V0ZWQsIGBDT05GSUdfVEVTVF9YQVJSQVlgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgKHdoaWNoIHNlbGVjdHMgYENPTkZJR19YQVJSQVlfTVVMVElgIHJlcXVpcmVkIGJ5IHRoZSB0ZXN0KSBzaG91bGQgYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjc5MzUzNjM1NDViZTExMDA0MTEyYTNiZGZmYTY2ZTMzMTJjNWY2Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDEyOjQ2OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfeGFycmF5LmMgYi9saWIvdGVzdF94YXJyYXkuY1xuaW5kZXggNWNhMGFlZmVlOWFhNS4uN2QwZGVjY2RmNTlhMCAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X3hhcnJheS5jXG4rKysgYi9saWIvdGVzdF94YXJyYXkuY1xuQEAgLTEyNDcsNiArMTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSlcbit7XG4rI2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbitcdFhBX1NUQVRFKHhhcywgeGEsIDEwMCk7XG4rXHRYQV9TVEFURV9PUkRFUih4YXNfc3BsaXQsIHhhLCAwLCAwKTtcbitcdHZvaWQgKmVudHJ5O1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0LyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovXG4rXHR4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpO1xuK1x0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcbitcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7XG4rXHR4YV9lcmFzZV9pbmRleCh4YSwgMCk7XG4rXHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuK1xuK1x0LyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi9cbitcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XG4rXHRYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpO1xuK1xuK1x0eGFzX3NldChcdTAwMjZ4YXMsIDEwMCk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFzX3NwbGl0X2FsbG9jKFx1MDAyNnhhc19zcGxpdCwgeGEsIDcsIEdGUF9LRVJORUwpO1xuK1x0eGFzX2xvY2soXHUwMDI2eGFzX3NwbGl0KTtcbitcdHhhc19zcGxpdChcdTAwMjZ4YXNfc3BsaXQsIHhhLCA3KTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEyODsgaSsrKVxuK1x0XHRfX3hhX3N0b3JlKHhhLCBpLCB4YV9ta19pbmRleChpKSwgMCk7XG4rXHR4YXNfdW5sb2NrKFx1MDAyNnhhc19zcGxpdCk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHR4YV9kZXN0cm95KHhhKTtcbitcdFhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGksIGosIGs7XG5AQCAtMTM3MCw2ICsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSlcbiBcdFx0Y2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTtcbiBcdGNoZWNrX211bHRpX2ZpbmRfMih4YSk7XG4gXHRjaGVja19tdWx0aV9maW5kXzMoeGEpO1xuK1x0Y2hlY2tfbXVsdGlfZmluZF80KHhhKTtcbiB9XG4gXG4gLyogU2VlIGZpbmRfc3dhcF9lbnRyeSgpIGluIG1tL3NobWVtLmMgKi9cbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcbmluZGV4IDlhOGI0OTE2NTQwY2YuLjk4MDMyNGQ2ODZiZDAgMTAwNjQ0XG4tLS0gYS9saWIveGFycmF5LmNcbisrKyBiL2xpYi94YXJyYXkuY1xuQEAgLTE0MDYsOSArMTQwNiwxMSBAQCB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXG4gXHRcdGVudHJ5ID0geGFzX2xvYWQoeGFzKTtcbiBcdFx0aWYgKGVudHJ5IHx8IHhhc19ub3Rfbm9kZSh4YXMtXHUwMDNleGFfbm9kZSkpXG4gXHRcdFx0cmV0dXJuIGVudHJ5O1xuLVx0fSBlbHNlIGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICB4YXMtXHUwMDNleGFfb2Zmc2V0ICE9ICh4YXMtXHUwMDNleGFfaW5kZXggXHUwMDI2IFhBX0NIVU5LX01BU0spKSB7XG4tXHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHR9IGVsc2UgaWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSkge1xuK1x0XHRpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0KVxuK1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHRcdGVsc2VcbitcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbiBcdH1cbiBcbiBcdHhhc19uZXh0X29mZnNldCh4YXMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6NDY6NDIuOTQyNDYxOTExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIxMjY2OTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgWEFycmF5IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYGxpYi94YXJyYXkuY2AgYW5kIGBsaWIvdGVzdF94YXJyYXkuY2AuICBSaWdodCBhd2F5LCBJIHNlZSB0aGF0IHRoZSBwcmltYXJ5IGNoYW5nZSBpcyB0byB0aGUgYHhhc19maW5kKClgIGZ1bmN0aW9uIGluIHRoZSBgbGliL3hhcnJheS5jYCBmaWxlLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbjsgaXQncyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIFhBcnJheSBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggaXMgdXNlZCBoZWF2aWx5IHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gIFRoZSBmYWN0IHRoYXQgaXQncyBhIGZ1bmRhbWVudGFsIEFQSSBjYWxsZWQgZnJvbSBwb3RlbnRpYWxseSBudW1lcm91cyBrZXJuZWwgbG9jYXRpb25zIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBjYW5kaWRhdGUgZm9yIHNvbWUgc2VyaW91cyBmdXp6aW5nLlxuXG5UaGUgZGlmZiBpdHNlbGYgbG9va3MgbGlrZSBhIHN1YnRsZSBhZGp1c3RtZW50IHRvIGhvdyBgeGFzX2ZpbmQoKWAgaGFuZGxlcyBvZmZzZXQgY2FsY3VsYXRpb25zIHdpdGhpbiB0aGUgWEFycmF5LiBTcGVjaWZpY2FsbHksIHRoZXJlJ3MgYSBjb25kaXRpb25hbCBtb2RpZmljYXRpb24gb2YgYHhhcy1cdTAwM2V4YV9vZmZzZXRgLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHNlbWFudGljcyBhIGJpdCwgYnV0IGl0IHNlZW1zIHRvIGludm9sdmUgYSBjaGVjayBhbmQgcG90ZW50aWFsIHVwZGF0ZSB0byB0aGUgb2Zmc2V0IHdpdGhpbiBhbiBYQXJyYXkgY2h1bmsuICBUaGUgYWRkZWQgYGdldF9vZmZzZXQoKWAgY2FsbCBpcyBpbnRlcmVzdGluZy4gIEl0IG1ha2VzIG1lIHdvbmRlciBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgb3IgY29uZmlndXJhdGlvbi5cblxuSSBhbHNvIHNlZSB0aGF0IHRoZXkndmUgYWRkZWQgYSB0ZXN0IGNhc2UgaW4gYGxpYi90ZXN0X3hhcnJheS5jYC4gVGhpcyBpcyBncmVhdDsgdGVzdHMgYXJlIGVzc2VudGlhbCBmb3IgdGhpcyB0eXBlIG9mIGNoYW5nZSwgYW5kIEknbGwgd2FudCB0byByZXZpZXcgdGhhdCB0ZXN0IGNhc2UgaW4gZGV0YWlsLlxuXG5TaW5jZSBpdCdzIGEgdGVzdCBjYXNlLCBJIHNob3VsZCBjb25maXJtIHRoYXQgYENPTkZJR19YQVJSQVlfTVVMVElgIGlzIHNldC4gSXQgc2VlbXMgdGhhdCB0aGUgdGVzdCBpcyB1bmRlciB0aGF0IGNvbmZpZy4gTm93IEkgaGF2ZSB0byBkZXRlcm1pbmUgaWYgYENPTkZJR19YQVJSQVlfTVVMVElgIGlzIG5lZWRlZCBmb3IgYHhhc19maW5kYC4gSSBuZWVkIHRvIHJldmlldyBgbGliL3hhcnJheS5jYCB0byBiZSBzdXJlLiBJdCdzIGEga2V5IHBhcnQgb2YgZGV0ZXJtaW5pbmcgaG93IHdpZGVzcHJlYWQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSBjb3VsZCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ2OjUwLjE1NTEzMzQzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgzODU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4YXNfZmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIveGFycmF5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3hhcnJheS5jPTEzNzU9RVhQT1JUX1NZTUJPTF9HUEwoX194YXNfbmV4dCk7XFxuLS1cXG5saWIveGFycmF5LmMtMTM3Ny0vKipcXG5saWIveGFycmF5LmM6MTM3ODogKiB4YXNfZmluZCgpIC0gRmluZCB0aGUgbmV4dCBwcmVzZW50IGVudHJ5IGluIHRoZSBYQXJyYXkuXFxubGliL3hhcnJheS5jLTEzNzktICogQHhhczogWEFycmF5IG9wZXJhdGlvbiBzdGF0ZS5cXG4tLVxcbmxpYi94YXJyYXkuYy0xMzkyLSAqL1xcbmxpYi94YXJyYXkuYzoxMzkzOnZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcXG5saWIveGFycmF5LmMtMTM5NC17XFxuLS1cXG5saWIveGFycmF5LmMtMTQ0MC19XFxubGliL3hhcnJheS5jOjE0NDE6RVhQT1JUX1NZTUJPTF9HUEwoeGFzX2ZpbmQpO1xcbmxpYi94YXJyYXkuYy0xNDQyLVxcbmxpYi94YXJyYXkuYy0xNDQzLS8qKlxcbmxpYi94YXJyYXkuYzoxNDQ0OiAqIHhhc19maW5kX21hcmtlZCgpIC0gRmluZCB0aGUgbmV4dCBtYXJrZWQgZW50cnkgaW4gdGhlIFhBcnJheS5cXG5saWIveGFycmF5LmMtMTQ0NS0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxcbi0tXFxubGliL3hhcnJheS5jLTE0NjMtICovXFxubGliL3hhcnJheS5jOjE0NjQ6dm9pZCAqeGFzX2ZpbmRfbWFya2VkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCwgeGFfbWFya190IG1hcmspXFxubGliL3hhcnJheS5jLTE0NjUte1xcbi0tXFxubGliL3hhcnJheS5jLTE1MTEtXFxubGliL3hhcnJheS5jOjE1MTI6XFx0XFx0b2Zmc2V0ID0geGFzX2ZpbmRfY2h1bmsoeGFzLCBhZHZhbmNlLCBtYXJrKTtcXG5saWIveGFycmF5LmMtMTUxMy1cXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2UgeGFzLVxcdTAwM2V4YV9vZmZzZXQpIHtcXG4tLVxcbmxpYi94YXJyYXkuYy0xNTQyLX1cXG5saWIveGFycmF5LmM6MTU0MzpFWFBPUlRfU1lNQk9MX0dQTCh4YXNfZmluZF9tYXJrZWQpO1xcbmxpYi94YXJyYXkuYy0xNTQ0LVxcbmxpYi94YXJyYXkuYy0xNTQ1LS8qKlxcbmxpYi94YXJyYXkuYzoxNTQ2OiAqIHhhc19maW5kX2NvbmZsaWN0KCkgLSBGaW5kIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW4gYSByYW5nZS5cXG5saWIveGFycmF5LmMtMTU0Ny0gKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxcbi0tXFxubGliL3hhcnJheS5jLTE1NTMtICovXFxubGliL3hhcnJheS5jOjE1NTQ6dm9pZCAqeGFzX2ZpbmRfY29uZmxpY3Qoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxubGliL3hhcnJheS5jLTE1NTUte1xcbi0tXFxubGliL3hhcnJheS5jLTE2MDMtfVxcbmxpYi94YXJyYXkuYzoxNjA0OkVYUE9SVF9TWU1CT0xfR1BMKHhhc19maW5kX2NvbmZsaWN0KTtcXG5saWIveGFycmF5LmMtMTYwNS1cXG4tLVxcbmxpYi94YXJyYXkuYz0xOTg3PWludCBfX3hhX2FsbG9jKHN0cnVjdCB4YXJyYXkgKnhhLCB1MzIgKmlkLCB2b2lkICplbnRyeSxcXG4tLVxcbmxpYi94YXJyYXkuYy0yMDAxLVxcdFxcdHhhcy54YV9pbmRleCA9IGxpbWl0Lm1pbjtcXG5saWIveGFycmF5LmM6MjAwMjpcXHRcXHR4YXNfZmluZF9tYXJrZWQoXFx1MDAyNnhhcywgbGltaXQubWF4LCBYQV9GUkVFX01BUkspO1xcbmxpYi94YXJyYXkuYy0yMDAzLVxcdFxcdGlmICh4YXMueGFfbm9kZSA9PSBYQVNfUkVTVEFSVClcXG4tLVxcbmxpYi94YXJyYXkuYz0yMTcyPUVYUE9SVF9TWU1CT0woeGFfY2xlYXJfbWFyayk7XFxuLS1cXG5saWIveGFycmF5LmMtMjE4NS0gKiBlbnRyaWVzIHdoaWNoIGFyZSBiZWluZyBzaW11bHRhbmVvdXNseSBhZGRlZC4gIEl0IHdpbGwgbm90IHJldHVybiBhblxcbmxpYi94YXJyYXkuYzoyMTg2OiAqICVYQV9SRVRSWV9FTlRSWTsgaWYgeW91IG5lZWQgdG8gc2VlIHJldHJ5IGVudHJpZXMsIHVzZSB4YXNfZmluZCgpLlxcbmxpYi94YXJyYXkuYy0yMTg3LSAqXFxuLS1cXG5saWIveGFycmF5LmM9MjE5MT12b2lkICp4YV9maW5kKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXFxuLS1cXG5saWIveGFycmF5LmMtMjE5OS1cXHRcXHRpZiAoKF9fZm9yY2UgdW5zaWduZWQgaW50KWZpbHRlciBcXHUwMDNjIFhBX01BWF9NQVJLUylcXG5saWIveGFycmF5LmM6MjIwMDpcXHRcXHRcXHRlbnRyeSA9IHhhc19maW5kX21hcmtlZChcXHUwMDI2eGFzLCBtYXgsIGZpbHRlcik7XFxubGliL3hhcnJheS5jLTIyMDEtXFx0XFx0ZWxzZVxcbmxpYi94YXJyYXkuYzoyMjAyOlxcdFxcdFxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgbWF4KTtcXG5saWIveGFycmF5LmMtMjIwMy1cXHR9IHdoaWxlICh4YXNfcmV0cnkoXFx1MDAyNnhhcywgZW50cnkpKTtcXG4tLVxcbmxpYi94YXJyYXkuYz0yMjEyPXN0YXRpYyBib29sIHhhc19zaWJsaW5nKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubGliL3hhcnJheS5jLTIyMzUtICogd2hpY2ggYXJlIGJlaW5nIHNpbXVsdGFuZW91c2x5IGFkZGVkLiAgSXQgd2lsbCBub3QgcmV0dXJuIGFuXFxubGliL3hhcnJheS5jOjIyMzY6ICogJVhBX1JFVFJZX0VOVFJZOyBpZiB5b3UgbmVlZCB0byBzZWUgcmV0cnkgZW50cmllcywgdXNlIHhhc19maW5kKCkuXFxubGliL3hhcnJheS5jLTIyMzctICpcXG4tLVxcbmxpYi94YXJyYXkuYz0yMjQxPXZvaWQgKnhhX2ZpbmRfYWZ0ZXIoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgKmluZGV4cCxcXG4tLVxcbmxpYi94YXJyYXkuYy0yMjUyLVxcdFxcdGlmICgoX19mb3JjZSB1bnNpZ25lZCBpbnQpZmlsdGVyIFxcdTAwM2MgWEFfTUFYX01BUktTKVxcbmxpYi94YXJyYXkuYzoyMjUzOlxcdFxcdFxcdGVudHJ5ID0geGFzX2ZpbmRfbWFya2VkKFxcdTAwMjZ4YXMsIG1heCwgZmlsdGVyKTtcXG5saWIveGFycmF5LmMtMjI1NC1cXHRcXHRlbHNlXFxubGliL3hhcnJheS5jOjIyNTU6XFx0XFx0XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBtYXgpO1xcbmxpYi94YXJyYXkuYy0yMjU2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo0Njo1MC4yMDA5NzU4MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjY5MTQwMTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFhhcnJheSBUZXN0aW5nKipcblxuT2theSwgc28gYHhhc19maW5kYCBpcyBkZWZpbml0ZWx5IGEga2V5IGZ1bmN0aW9uIGhlcmUuIEl0J3MgZm91bmRhdGlvbmFsLCBzbyB0aGUgdGVzdGluZyBhcm91bmQgaXQgbmVlZHMgdG8gYmUgc29saWQuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSB0ZXN0IGNhc2UuIEkga25vdyBpdCdzIGluIGBsaWIvdGVzdF94YXJyYXkuY2AuIFRoYXQncyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIGV2YWx1YXRlZC4gQW5kIHRoZW4sIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXBseSBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbi4gSSdsbCB0YWtlIGEgbG9vayBhdCBgbGliL0tjb25maWcuZGVidWdgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBURVNUX1hBUlJBWWAgaXMgZW5hYmxlZC4gSXQncyBwb3NzaWJsZSB0aGUgdGVzdHMgYXJlIGNvbmRpdGlvbmFsIGJhc2VkIG9uIHRoYXQgZmxhZy4gQmV0dGVyIHRvIHZlcmlmeSB0aGUgZW52aXJvbm1lbnQgZmlyc3QuIFRoaXMgaXMgYWxsIGFib3V0IGVmZmljaWVuY3k7IEkgY2FuJ3Qgd2FzdGUgdGltZSBvbiBhIGh1bnQgaWYgdGhlIHRlc3RzIGFyZW4ndCBldmVuIGNvbXBpbGVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzMwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6NDc6MTYuODkyMzc5MzM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODU2NTExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJURVNUX1hBUlJBWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTI1NTc9Y29uZmlnIFRFU1RfQklUTUFQXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTYzLVxcbmxpYi9LY29uZmlnLmRlYnVnOjI1NjQ6Y29uZmlnIFRFU1RfWEFSUkFZXFxubGliL0tjb25maWcuZGVidWctMjU2NS1cXHR0cmlzdGF0ZSBcXFwiVGVzdCB0aGUgWEFycmF5IGNvZGUgYXQgcnVudGltZVxcXCJcXG4tLVxcbmxpYi9NYWtlZmlsZT05Mj1lbmRpZlxcbmxpYi9NYWtlZmlsZS05My1cXG5saWIvTWFrZWZpbGU6OTQ6b2JqLSQoQ09ORklHX1RFU1RfWEFSUkFZKSArPSB0ZXN0X3hhcnJheS5vXFxubGliL01ha2VmaWxlLTk1LW9iai0kKENPTkZJR19URVNUX01BUExFX1RSRUUpICs9IHRlc3RfbWFwbGVfdHJlZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ3OjE3LjAzMDk0OTIyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODk0ODk5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYQXJyYXkgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgdGVzdCBjYXNlIGxldmVyYWdlcyBgQ09ORklHX1hBUlJBWV9NVUxUSWAuIE15IGZpcnN0IG1vdmUgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBYQVJSQVlfTVVMVElgIHJlcHJlc2VudHMuIEknbSBnb2luZyB0byBjaGVjayBgbGliL0tjb25maWdgIGFuZCBgbGliL0tjb25maWcuZGVidWdgLiBJdCdzIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSB0byBzdGFydCB0aGVyZSB3aGVuIGRlYWxpbmcgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24gb2YgYFhBUlJBWV9NVUxUSWAsIGl0cyBkZXBlbmRlbmNpZXMsIGl0cyBkZWZhdWx0IHZhbHVlLCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB0aGF0IG1pZ2h0IHByb3ZpZGUgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGlzIG9wdGlvbiBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHdoeSB0aGlzIHRlc3QgY2FzZSBleGlzdHMgYW5kIHdoYXQgaXQncyB0cnlpbmcgdG8gdmFsaWRhdGUuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgdGVzdCBjYXNlIGV4cGVjdHMgdGhlIGtlcm5lbCB0byBkbyB3aGVuIGBYQVJSQVlfTVVMVElgIGlzIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc0MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ3OjIwLjIyMDQ0MTU4OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjI0Mzc1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJYQVJSQVlfTVVMVElcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZz0zNDg9Y29uZmlnIElOVEVSVkFMX1RSRUVfU1BBTl9JVEVSXFxuLS1cXG5saWIvS2NvbmZpZy0zNTEtXFxubGliL0tjb25maWc6MzUyOmNvbmZpZyBYQVJSQVlfTVVMVElcXG5saWIvS2NvbmZpZy0zNTMtXFx0Ym9vbFxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTU9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBvcmRlcl9saW1pdCA9XFxubGliL3Rlc3RfeGFycmF5LmM6MTY6XFx0XFx0SVNfRU5BQkxFRChDT05GSUdfWEFSUkFZX01VTFRJKSA/IEJJVFNfUEVSX0xPTkcgOiAxO1xcbmxpYi90ZXN0X3hhcnJheS5jLTE3LVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTc1PXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3hhX21hcmtfMShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleClcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTE3Ny1cXHR1bnNpZ25lZCBpbnQgb3JkZXI7XFxubGliL3Rlc3RfeGFycmF5LmM6MTc4OlxcdHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gOCA6IDE7XFxubGliL3Rlc3RfeGFycmF5LmMtMTc5LVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MjkyPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3hhX21hcmtfMyhzdHJ1Y3QgeGFycmF5ICp4YSlcXG5saWIvdGVzdF94YXJyYXkuYy0yOTMte1xcbmxpYi90ZXN0X3hhcnJheS5jOjI5NDojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbmxpYi90ZXN0X3hhcnJheS5jLTI5NS1cXHRYQV9TVEFURSh4YXMsIHhhLCAweDQxKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jPTMyND1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja194YV9zaHJpbmsoc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0zMjgtXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbmxpYi90ZXN0X3hhcnJheS5jOjMyOTpcXHR1bnNpZ25lZCBpbnQgbWF4X29yZGVyID0gSVNfRU5BQkxFRChDT05GSUdfWEFSUkFZX01VTFRJKSA/IDE1IDogMTtcXG5saWIvdGVzdF94YXJyYXkuYy0zMzAtXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz00MjY9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfY21weGNoZ19vcmRlcihzdHJ1Y3QgeGFycmF5ICp4YSlcXG5saWIvdGVzdF94YXJyYXkuYy00Mjcte1xcbmxpYi90ZXN0X3hhcnJheS5jOjQyODojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbmxpYi90ZXN0X3hhcnJheS5jLTQyOS1cXHR2b2lkICpGSVZFID0geGFfbWtfdmFsdWUoNSk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz01NDU9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfeGFzX2VyYXNlKHN0cnVjdCB4YXJyYXkgKnhhKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtNTgyLVxcbmxpYi90ZXN0X3hhcnJheS5jOjU4MzojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbmxpYi90ZXN0X3hhcnJheS5jLTU4NC1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9zdG9yZV8xKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9NjUwPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX3N0b3JlKHN0cnVjdCB4YXJyYXkgKnhhKVxcbmxpYi90ZXN0X3hhcnJheS5jLTY1MS17XFxubGliL3Rlc3RfeGFycmF5LmM6NjUyOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXFxubGliL3Rlc3RfeGFycmF5LmMtNjUzLVxcdHVuc2lnbmVkIGxvbmcgaSwgaiwgaztcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTcyOS1cXG5saWIvdGVzdF94YXJyYXkuYzo3MzA6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcXG5saWIvdGVzdF94YXJyYXkuYy03MzEtLyogbWltaWNzIHBhZ2UgY2FjaGUgX19maWxlbWFwX2FkZF9mb2xpbygpICovXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz04OTE9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfc3RvcmVfYWR2YW5jZWQoc3RydWN0IHhhcnJheSAqeGEpXFxubGliL3Rlc3RfeGFycmF5LmMtODkyLXtcXG5saWIvdGVzdF94YXJyYXkuYzo4OTM6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcXG5saWIvdGVzdF94YXJyYXkuYzo4OTQ6XFx0dW5zaWduZWQgaW50IG1heF9vcmRlciA9IElTX0VOQUJMRUQoQ09ORklHX1hBUlJBWV9NVUxUSSkgPyAyMCA6IDE7XFxubGliL3Rlc3RfeGFycmF5LmMtODk1LVxcdHVuc2lnbmVkIGxvbmcgZW5kID0gVUxPTkdfTUFYLzI7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0xMTQyPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX3N0b3JlX2l0ZXIoc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMTQ0LVxcdHVuc2lnbmVkIGludCBpLCBqO1xcbmxpYi90ZXN0X3hhcnJheS5jOjExNDU6XFx0dW5zaWduZWQgaW50IG1heF9vcmRlciA9IElTX0VOQUJMRUQoQ09ORklHX1hBUlJBWV9NVUxUSSkgPyAyMCA6IDE7XFxubGliL3Rlc3RfeGFycmF5LmMtMTE0Ni1cXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTExNzAtXFx0fVxcbmxpYi90ZXN0X3hhcnJheS5jOjExNzE6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcXG5saWIvdGVzdF94YXJyYXkuYy0xMTcyLVxcdHhhX3N0b3JlX2luZGV4KHhhLCA2MywgR0ZQX0tFUk5FTCk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0xMTgwPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgb3JkZXIpXFxubGliL3Rlc3RfeGFycmF5LmMtMTE4MS17XFxubGliL3Rlc3RfeGFycmF5LmM6MTE4MjojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbmxpYi90ZXN0X3hhcnJheS5jLTExODMtXFx0dW5zaWduZWQgbG9uZyBtdWx0aSA9IDMgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0xMjEyPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfMihzdHJ1Y3QgeGFycmF5ICp4YSlcXG5saWIvdGVzdF94YXJyYXkuYy0xMjEzLXtcXG5saWIvdGVzdF94YXJyYXkuYzoxMjE0OlxcdHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gMTAgOiAxO1xcbmxpYi90ZXN0X3hhcnJheS5jLTEyMTUtXFx0dW5zaWduZWQgaW50IGksIGo7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0xMjUwPXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSlcXG5saWIvdGVzdF94YXJyYXkuYy0xMjUxLXtcXG5saWIvdGVzdF94YXJyYXkuYzoxMjUyOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXFxubGliL3Rlc3RfeGFycmF5LmMtMTI1My1cXHRYQV9TVEFURSh4YXMsIHhhLCAxMDApO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTQ2MD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kX2VudHJ5KHN0cnVjdCB4YXJyYXkgKnhhKVxcbmxpYi90ZXN0X3hhcnJheS5jLTE0NjEte1xcbmxpYi90ZXN0X3hhcnJheS5jOjE0NjI6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcXG5saWIvdGVzdF94YXJyYXkuYy0xNDYzLVxcdHVuc2lnbmVkIGludCBvcmRlcjtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jPTE4Mjk9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfY3JlYXRlX3JhbmdlKHN0cnVjdCB4YXJyYXkgKnhhKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTgzMS1cXHR1bnNpZ25lZCBpbnQgb3JkZXI7XFxubGliL3Rlc3RfeGFycmF5LmM6MTgzMjpcXHR1bnNpZ25lZCBpbnQgbWF4X29yZGVyID0gSVNfRU5BQkxFRChDT05GSUdfWEFSUkFZX01VTFRJKSA/IDEyIDogMTtcXG5saWIvdGVzdF94YXJyYXkuYy0xODMzLVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTg2ND1zdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2NoZWNrX3N0b3JlX3JhbmdlKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGZpcnN0LFxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTg2Ni17XFxubGliL3Rlc3RfeGFycmF5LmM6MTg2NzojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbmxpYi90ZXN0X3hhcnJheS5jLTE4NjgtXFx0eGFfc3RvcmVfcmFuZ2UoeGEsIGZpcnN0LCBsYXN0LCB4YV9ta19pbmRleChmaXJzdCksIEdGUF9LRVJORUwpO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTg4MT1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19zdG9yZV9yYW5nZShzdHJ1Y3QgeGFycmF5ICp4YSlcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTE4OTYtXFxubGliL3Rlc3RfeGFycmF5LmM6MTg5NzojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbmxpYi90ZXN0X3hhcnJheS5jLTE4OTgtc3RhdGljIHZvaWQgY2hlY2tfc3BsaXRfMShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jPTIxMTg9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfYWNjb3VudChzdHJ1Y3QgeGFycmF5ICp4YSlcXG5saWIvdGVzdF94YXJyYXkuYy0yMTE5LXtcXG5saWIvdGVzdF94YXJyYXkuYzoyMTIwOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXFxubGliL3Rlc3RfeGFycmF5LmMtMjEyMS1cXHR1bnNpZ25lZCBpbnQgb3JkZXI7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0yMTQ3PXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2dldF9vcmRlcihzdHJ1Y3QgeGFycmF5ICp4YSlcXG5saWIvdGVzdF94YXJyYXkuYy0yMTQ4LXtcXG5saWIvdGVzdF94YXJyYXkuYzoyMTQ5OlxcdHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gMjAgOiAxO1xcbmxpYi90ZXN0X3hhcnJheS5jLTIxNTAtXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MjE2Nz1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja194YXNfZ2V0X29yZGVyKHN0cnVjdCB4YXJyYXkgKnhhKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMjE3MC1cXG5saWIvdGVzdF94YXJyYXkuYzoyMTcxOlxcdHVuc2lnbmVkIGludCBtYXhfb3JkZXIgPSBJU19FTkFCTEVEKENPTkZJR19YQVJSQVlfTVVMVEkpID8gMjAgOiAxO1xcbmxpYi90ZXN0X3hhcnJheS5jLTIxNzItXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MjIwMD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja194YXNfY29uZmxpY3RfZ2V0X29yZGVyKHN0cnVjdCB4YXJyYXkgKnhhKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMjIwNS1cXHRpbnQgb25seV9vbmNlO1xcbmxpYi90ZXN0X3hhcnJheS5jOjIyMDY6XFx0dW5zaWduZWQgaW50IG1heF9vcmRlciA9IElTX0VOQUJMRUQoQ09ORklHX1hBUlJBWV9NVUxUSSkgPyAyMCA6IDE7XFxubGliL3Rlc3RfeGFycmF5LmMtMjIwNy1cXHR1bnNpZ25lZCBpbnQgb3JkZXI7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0yMjU4PXN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2Rlc3Ryb3koc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0yMjgxLVxcbmxpYi90ZXN0X3hhcnJheS5jOjIyODI6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcXG5saWIvdGVzdF94YXJyYXkuYy0yMjgzLVxcdC8qIERlc3Ryb3lpbmcgYW4gYXJyYXkgd2l0aCBhIG11bHRpLWluZGV4IGVudHJ5ICovXFxuLS1cXG5saWIveGFycmF5LmM9MzYyPXN0YXRpYyB2b2lkICp4YXNfYWxsb2Moc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGludCBzaGlmdClcXG4tLVxcbmxpYi94YXJyYXkuYy00MDEtXFxubGliL3hhcnJheS5jOjQwMjojaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbmxpYi94YXJyYXkuYy00MDMtLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGluZGljZXMgY292ZXJlZCBieSBhIGdpdmVuIHhhX3N0YXRlICovXFxuLS1cXG5saWIveGFycmF5LmM9NDE2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHhhc19tYXgoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxuLS1cXG5saWIveGFycmF5LmMtNDE5LVxcbmxpYi94YXJyYXkuYzo0MjA6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcXG5saWIveGFycmF5LmMtNDIxLVxcdGlmICh4YXMtXFx1MDAzZXhhX3NoaWZ0IHx8IHhhcy1cXHUwMDNleGFfc2licykge1xcbi0tXFxubGliL3hhcnJheS5jPTk2MT1FWFBPUlRfU1lNQk9MX0dQTCh4YXNfaW5pdF9tYXJrcyk7XFxubGliL3hhcnJheS5jLTk2Mi1cXG5saWIveGFycmF5LmM6OTYzOiNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXFxubGliL3hhcnJheS5jLTk2NC1zdGF0aWMgdW5zaWduZWQgaW50IG5vZGVfZ2V0X21hcmtzKHN0cnVjdCB4YV9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KVxcbi0tXFxubGliL3hhcnJheS5jPTE4MjI9RVhQT1JUX1NZTUJPTChfX3hhX2luc2VydCk7XFxubGliL3hhcnJheS5jLTE4MjMtXFxubGliL3hhcnJheS5jOjE4MjQ6I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcXG5saWIveGFycmF5LmMtMTgyNS1zdGF0aWMgdm9pZCB4YXNfc2V0X3JhbmdlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIGZpcnN0LFxcbi0tXFxubGliL3hhcnJheS5jPTE5NjQ9RVhQT1JUX1NZTUJPTCh4YV9nZXRfb3JkZXIpO1xcbmxpYi94YXJyYXkuYzoxOTY1OiNlbmRpZiAvKiBDT05GSUdfWEFSUkFZX01VTFRJICovXFxubGliL3hhcnJheS5jLTE5NjYtXFxuLS1cXG5saWIveGFycmF5LmM9MjIxMj1zdGF0aWMgYm9vbCB4YXNfc2libGluZyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbmxpYi94YXJyYXkuYy0yMjE2LVxcbmxpYi94YXJyYXkuYzoyMjE3OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfWEFSUkFZX01VTFRJKSB8fCAhbm9kZSlcXG5saWIveGFycmF5LmMtMjIxOC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ3OjIwLjI3NjY5MTA4NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMTc5NjM2NjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiB0aGUgeGFycmF5IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHRlc3QgY2FzZSBhbmQgaXQncyBjbGVhciB0aGF0IGBDT05GSUdfWEFSUkFZX01VTFRJYCBpcyAqZXNzZW50aWFsKiBmb3IgdGVzdGluZyB0aGVzZSBtdWx0aS1pbmRleCBlbnRyaWVzLiBUaGF0J3MgdGhlIHdob2xlIHBvaW50IG9mIHRoaXMgdGVzdC4gVGhlIHRlc3QgaXRzZWxmIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19URVNUX1hBUlJBWWAgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIE5vdyBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuIEkgc2VlbSB0byByZWNhbGwgYENPTkZJR19YQVJSQVlfTVVMVElgIGJlaW5nIGEgYm9vbGVhbiBpbiBgbGliL0tjb25maWdgLiBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGVyZSBhcmVuJ3QgYW55IGRlcGVuZGVuY2llcyBJJ20gbWlzc2luZy4gVGltZSB0byBkaXZlIGludG8gYGxpYi9LY29uZmlnYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gb2YgYFhBUlJBWV9NVUxUSWAgdG8gdmVyaWZ5IHRoaXMuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHkgZm9yIHRoaXMgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg5MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ3OjMzLjQ1NjMzMDc2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUzOTM2MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYQVJSQVlfTVVMVElcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZz0zNDg9Y29uZmlnIElOVEVSVkFMX1RSRUVfU1BBTl9JVEVSXFxuLS1cXG5saWIvS2NvbmZpZy0zNTEtXFxubGliL0tjb25maWc6MzUyOmNvbmZpZyBYQVJSQVlfTVVMVElcXG5saWIvS2NvbmZpZy0zNTMtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo0NzozMy44MTAyODA4OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk5NzA5OTYwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRlY2lwaGVyaW5nIGEgQm9vbCdzIE9yaWdpbnMqKlxuXG5SaWdodCwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIGxvb2tpbmcgYXQgYSBib29sZWFuIHZhbHVlLCBzZWVtaW5nbHkgaW5kZXBlbmRlbnQgaW4gaXRzZWxmIOKAkyBpdCdzIG5vdCBkaXJlY3RseSB0cmlnZ2VyZWQgYnkgYW55IHNwZWNpZmljIHVzZXIgcHJvbXB0IG9yIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyAqaW1wbGljaXRseSogc2V0IGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEluIG15IGxpbmUgb2Ygd29yaywgdGhpcyBpcyBhIHZlcnkgY29tbW9uIHNjZW5hcmlvLiBTbywgdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogd2hhdCBhcmUgdGhlIHVwc3RyZWFtIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgYWN0aXZhdGluZyB0aGlzIGBYQVJSQVlfTVVMVElgIGZsYWc/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gY2hhaW4uIFRoZSBjb3JlIG9mIGRlYnVnZ2luZyB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMgbGllcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV4IHJlbGF0aW9uc2hpcHMgb2YgZGVwZW5kZW5jaWVzIHdpdGhpbiBhIGxhcmdlIHN5c3RlbS4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb25maWcgZmlsZXMgYW5kIHNlZSB3aGF0J3MgY2FsbGluZyB0aGUgc2hvdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNDUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo0OToyMy43ODEyNzk4ODlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTU2NzgwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFhBUlJBWV9NVUxUSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xODI3PWNvbmZpZyBYODZfU0dYXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE4MzItXFx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPIGlmIE5VTUFcXG5hcmNoL3g4Ni9LY29uZmlnOjE4MzM6XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbmFyY2gveDg2L0tjb25maWctMTgzNC1cXHRoZWxwXFxuLS1cXG5mcy9LY29uZmlnPTI3Mz1jb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNzU6XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbmZzL0tjb25maWctMjc2LVxcbi0tXFxubW0vS2NvbmZpZz04NDY9bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbi0tXFxubW0vS2NvbmZpZy04NDktXFx0c2VsZWN0IENPTVBBQ1RJT05cXG5tbS9LY29uZmlnOjg1MDpcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxubW0vS2NvbmZpZy04NTEtXFx0c2VsZWN0IE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnPTEyMzY9Y29uZmlnIFpPTkVfREVWSUNFXFxuLS1cXG5tbS9LY29uZmlnLTEyNDAtXFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWc6MTI0MTpcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxubW0vS2NvbmZpZy0xMjQyLVxcbi0tXFxuc291bmQvY29yZS9LY29uZmlnPTE4MT1jb25maWcgU05EX0NUTF9GQVNUX0xPT0tVUFxcbi0tXFxuc291bmQvY29yZS9LY29uZmlnLTE4My1cXHRkZWZhdWx0IHlcXG5zb3VuZC9jb3JlL0tjb25maWc6MTg0OlxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG5zb3VuZC9jb3JlL0tjb25maWctMTg1LVxcdGhlbHBcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9MTA2PWNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcXG52aXJ0L2t2bS9LY29uZmlnOjEwNzogICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxcbnZpcnQva3ZtL0tjb25maWctMTA4LSAgICAgICBib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ5OjI1LjU3Njk2MTg2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzgwNzMwNjU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBYQXJyYXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoZSBYQXJyYXkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIGBYQVJSQVlfTVVMVElgIGdldHMgcHVsbGVkIGluIGJ5IGEgZmV3IGRpZmZlcmVudCBzZXR0aW5nczogZWl0aGVyIGBIVUdFVExCX1BBR0VgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBvciBgU05EX0NUTF9GQVNUX0xPT0tVUGAuIFRoYXQncyBnb29kIHRvIGtub3cuIFNvLCBpZiBJIHdhbnQgYFhBUlJBWV9NVUxUSWAgZW5hYmxlZCwganVzdCBpbmNsdWRpbmcgZWl0aGVyIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3IgYEhVR0VUTEJGU2Agc2VlbXMgbGlrZSB0aGUgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoLlxuXG5BbmQgdGhlbiB0aGVyZSdzIGBURVNUX1hBUlJBWWAsIGEgdHJpc3RhdGUgb3B0aW9uLiBPYnZpb3VzbHksIEkgc2hvdWxkIGVuYWJsZSB0aGF0IHRvIHJ1biB0aGUgdGVzdHMsIHJpZ2h0PyBCdXQgdGhlbiBJIHdvbmRlciwgaG93IGRvIHRoZXNlIHRlc3RzIGFjdHVhbGx5IHJ1bj8gSXMgdGhpcyBhIGt1bml0IHRlc3QgdGhhdCdzIGF1dG9tYXRpY2FsbHkgcnVuIHdoZW4gdGhlIGtlcm5lbCBpcyBjb21waWxlZCBvciB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkPyBPciBpcyBpdCBzb21ldGhpbmcgZWxzZT8gU3l6a2FsbGVyIGNvdWxkIHByb2JhYmx5IGxvYWQgaXQsIG9yIEkgY291bGQganVzdCBidWlsZCBpdCBpbi5cblxuV2FpdCBhIHNlY29uZOKApiBObywgaXQncyBub3QgYSBrdW5pdCB0ZXN0LiBJdCdzIGEgKnN0YW5kYWxvbmUqIHRlc3QgbW9kdWxlLiBSaWdodCwgdGhhdCBtYWtlcyBtb3JlIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIHJ1bnMuIEkgc2hvdWxkIGp1c3QgZ28gbG9vayBhdCBgbGliL3Rlc3RfeGFycmF5LmNgIHRvIHNlZSBob3cgaXQncyBkZXNpZ25lZCB0byBiZSBpbnZva2VkLiBUaGF0J3MgcHJvYmFibHkgdGhlIGJlc3QgYXBwcm9hY2ggdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6NDk6NTMuMzg0MjcwNTIxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMxNjA1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF94YXJyYXkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF94YXJyYXkuYz0yMzMyPXN0YXRpYyB2b2lkIHhhcnJheV9leGl0KHZvaWQpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0yMzM1LVxcbmxpYi90ZXN0X3hhcnJheS5jOjIzMzY6bW9kdWxlX2luaXQoeGFycmF5X2NoZWNrcyk7XFxubGliL3Rlc3RfeGFycmF5LmMtMjMzNy1tb2R1bGVfZXhpdCh4YXJyYXlfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjQ5OjUzLjQzNDU5MDU2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDc1MzU4NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipYQXJyYXkgVGVzdCBNb2R1bGUgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGVzdCBmb3IgdGhlIFhBcnJheSBtb2R1bGUgaXMga2lja2luZyBvZmYgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBUaGF0IG1lYW5zIGBDT05GSUdfVEVTVF9YQVJSQVk9eWAgaXMgYmVpbmcgc2V0LCBhbmQgdGhlIGJ1aWxkIHN5c3RlbSBpcyBjb3JyZWN0bHkgZXhlY3V0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGF0IGJvb3QuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcywgd2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBDT05GSUdfVEVTVF9YQVJSQVlgIHB1bGxzIGluIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIHRlc3QncyBiZWhhdmlvciBvciBlbnZpcm9ubWVudC4gR290dGEgbWFrZSBzdXJlIEknbSBhd2FyZSBvZiB0aGUgY29tcGxldGUgZGVwZW5kZW5jeSBjaGFpbiB0byB0cm91Ymxlc2hvb3QgYW55IHVuZXhwZWN0ZWQgaXNzdWVzIGxhdGVyIG9uLiBMZXQgbWUgZ28gbG9vayBpbnRvIHRoYXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MjUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo1MDowMS41MDk5NTE0MzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDM3ODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBURVNUX1hBUlJBWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0yNTU3PWNvbmZpZyBURVNUX0JJVE1BUFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMjU2My1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoyNTY0OmNvbmZpZyBURVNUX1hBUlJBWVxcbmxpYi9LY29uZmlnLmRlYnVnLTI1NjUtXFx0dHJpc3RhdGUgXFxcIlRlc3QgdGhlIFhBcnJheSBjb2RlIGF0IHJ1bnRpbWVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjUwOjAxLjU1NTM5MjUwOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTI0NzY1NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHhhc19maW5kYCBNb2RpZmljYXRpb24gaW4gWEFycmF5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IGRlcGVuZGVuY2llcy4gVGhhdCdzIGFsd2F5cyBnb29kLiBUaGUgZmFjdCB0aGF0IGBURVNUX1hBUlJBWWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIHJlbGV2YW50IGNvbmZpZ3MgKHNwZWNpZmljYWxseSB0byBnZXQgYFhBUlJBWV9NVUxUSWApIG1ha2VzIHNlbnNlIGluIHRoaXMgY29udGV4dC5cblxuTm93LCBJIHNlZSB0aGF0IHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGB4YXNfZmluZGAuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgKm9ubHkqIGZ1bmN0aW9uIGltcGFjdGVkLiBZdXAsIGNoZWNraW5nIGBsaWIveGFycmF5LmNgIGNvbmZpcm1zIHRoYXQuIEkgc2hvdWxkIG1ha2UgYSBub3RlIHRvIGFkZCBgeGFzX2ZpbmRgIHRvIGBGb2N1c1N5bWJvbHNgLCBqdXN0IHRvIGJlIHNhZmUuXG5cbldhaXQsIGxvb2tpbmcgYWdhaW4sIGB4YXNfZmluZGAgaXMgZXhwb3J0ZWQuIFRoYXQgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBpbmxpbmVkLiBMb29raW5nIGF0IHRoZSBkZWZpbml0aW9uIGB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpYCwgaXQncyBub3QuIEFscmlnaHQsIHRoYXQncyBnb29kIHRvIGtub3cuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggaXRzZWxmOiBpdCBsb29rcyBsaWtlIHRoZXkndmUgY2hhbmdlZCB0aGUgbG9naWMgYXJvdW5kIHRoZSBvZmZzZXQgY2FsY3VsYXRpb24gd2l0aGluIGB4YXNfZmluZGAuIFNwZWNpZmljYWxseSwgdGhlcmUncyBhIGNvbmRpdGlvbmFsIGNoZWNrIG9uIGB4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdGAgdGhhdCBoYXMgYmVlbiBhZGRlZCBvciBtb2RpZmllZC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzOlxuXG5gYGBjXG59IGVsc2UgaWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdCBcdTAwMjZcdTAwMjZcbiAgICAgICAgICAgeGFzLVx1MDAzZXhhX29mZnNldCAhPSAoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAyNiBYQV9DSFVOS19NQVNLKSkge1xuICAgIHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG59XG5gYGBcblxuVGhpcyBub3cgc2VlbXMgdG8gYmU6XG5cbmBgYGNcbn0gZWxzZSBpZiAoeGFzLVx1MDAzZXhhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpKSB7XG4gICAgaWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdClcbiAgICAgICAgeGFzLVx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVx1MDAzZXhhX2luZGV4IC0gMSkgXHUwMDI2IFhBX0NIVU5LX01BU0spICsgMTtcbiAgICBlbHNlXG4gICAgICAgIHhhcy1cdTAwM2V4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpO1xufVxuYGBgXG5cbkFscmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBgeGFzX2ZpbmRgIGFzIGV4cGVjdGVkLCBidXQgd2hhdCBkb2VzIHRoZSBhc3NvY2lhdGVkIHRlc3QgY2FzZSBsb29rIGxpa2U/IExvb2tpbmcgYXQgYGxpYi90ZXN0X3hhcnJheS5jYCwgdGhlIHJlbGV2YW50IHRlc3QgaXMgYGNoZWNrX211bHRpX2ZpbmRfNGAuIFNvIHRoYXQgdGVzdCBjYXNlIHdpbGwgbGlrZWx5IGV4ZXJjaXNlIHRoaXMgbmV3IGxvZ2ljIGFuZCBnaXZlIHNvbWUgY29uZmlkZW5jZSBpbiB0aGUgcGF0Y2guXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIGluIG15IG1pbmQ6IElzIGB4YXNfZmluZGAgYSBob3QtcGF0aCBmdW5jdGlvbj8gR2l2ZW4gdGhhdCBYQXJyYXkgaXMgdXNlZCBleHRlbnNpdmVseSBpbiB0aGUgcGFnZSBjYWNoZSBhbmQgb3RoZXIgY29yZSBzdWJzeXN0ZW1zLCBteSBodW5jaCBpcyB0aGF0IGB4YXNfZmluZGAgY291bGQgdmVyeSB3ZWxsIGJlIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZS4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdGhlIG9mZnNldCBjYWxjdWxhdGlvbiwgc28gSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGB4YXNfZmluZGAgaXMgdXNlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHBlcmZvcm1hbmNlLWNyaXRpY2FsIHRoaXMgY2hhbmdlIG1pZ2h0IGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgyOCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo1MDoxMS4wODAxNjE1ODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzExNzQ1NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGFzX2ZpbmRcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0PTQxNz1oZWxkLCB3aGlsZSBtb3ZpbmcgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgaW5kZXggZG9lcy5cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDE4LVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0MTk6WW91IGNhbiBzZWFyY2ggZm9yIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgdXNpbmcgeGFzX2ZpbmQoKS4gIFRoaXNcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDIwLWlzIHRoZSBlcXVpdmFsZW50IG9mIGJvdGggeGFfZmluZCgpIGFuZCB4YV9maW5kX2FmdGVyKCk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9NDIzPWVudHJ5IGF0IHRoZSBpbmRleCBvZiB0aGUgeGFfc3RhdGUuICBVc2luZyB4YXNfbmV4dF9lbnRyeSgpIHRvXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjQyNDptb3ZlIHRvIHRoZSBuZXh0IHByZXNlbnQgZW50cnkgaW5zdGVhZCBvZiB4YXNfZmluZCgpIHdpbGwgc2F2ZVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00MjUtYSBmdW5jdGlvbiBjYWxsIGluIHRoZSBtYWpvcml0eSBvZiBjYXNlcyBhdCB0aGUgZXhwZW5zZSBvZiBlbWl0dGluZyBtb3JlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9NDc3PWluIHRoZSB4YV9zdGF0ZSB3aWxsIG5vdCBiZSBjaGFuZ2VkLiAgV2hlbiBpdGVyYXRpbmcgb3ZlciBhbiBYQXJyYXlcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q6NDc4Om9yIGNhbGxpbmcgeGFzX2ZpbmQoKSwgaWYgdGhlIGluaXRpYWwgaW5kZXggaXMgaW4gdGhlIG1pZGRsZVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00Nzktb2YgYSBtdWx0aS1pbmRleCBlbnRyeSwgaXQgd2lsbCBub3QgYmUgYWx0ZXJlZC4gIFN1YnNlcXVlbnQgY2FsbHNcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3Q9MzE1PXhhc19sb2FkKCnkvJrlsL3lj6/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+WbtOWGheeahOesrFxcdWZmZmRcXHVmZmZkLi4uXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE1NDM9dm9pZCAqeGFzX3N0b3JlKHN0cnVjdCB4YV9zdGF0ZSAqLCB2b2lkICplbnRyeSk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNTQ0OnZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqLCB1bnNpZ25lZCBsb25nIG1heCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNTQ1LXZvaWQgKnhhc19maW5kX2NvbmZsaWN0KHN0cnVjdCB4YV9zdGF0ZSAqKTtcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTcwMT1zdGF0aWMgaW5saW5lIHZvaWQgeGFzX3NldF9scnUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzExLSAqIHhhc19uZXh0X2VudHJ5KCkgaXMgYW4gaW5saW5lIGZ1bmN0aW9uIHRvIG9wdGltaXNlIHhhcnJheSB0cmF2ZXJzYWwgZm9yXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzEyOiAqIHNwZWVkLiAgSXQgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIHhhc19maW5kKCksIGFuZCB3aWxsIGNhbGwgeGFzX2ZpbmQoKVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcxMy0gKiBmb3IgYWxsIHRoZSBoYXJkIGNhc2VzLlxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xNzE3PXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFzX25leHRfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzIzLVxcdFxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ICE9ICh4YXMtXFx1MDAzZXhhX2luZGV4IFxcdTAwMjYgWEFfQ0hVTktfTUFTSykpKVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTcyNDpcXHRcXHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyNS1cXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyNy1cXHRcXHRpZiAodW5saWtlbHkoeGFzLVxcdTAwM2V4YV9pbmRleCBcXHUwMDNlPSBtYXgpKVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTcyODpcXHRcXHRcXHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTcyOS1cXHRcXHRpZiAodW5saWtlbHkoeGFzLVxcdTAwM2V4YV9vZmZzZXQgPT0gWEFfQ0hVTktfTUFTSykpXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzMwOlxcdFxcdFxcdHJldHVybiB4YXNfZmluZCh4YXMsIG1heCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzMxLVxcdFxcdGVudHJ5ID0geGFfZW50cnkoeGFzLVxcdTAwM2V4YSwgbm9kZSwgeGFzLVxcdTAwM2V4YV9vZmZzZXQgKyAxKTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3MzItXFx0XFx0aWYgKHVubGlrZWx5KHhhX2lzX2ludGVybmFsKGVudHJ5KSkpXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzMzOlxcdFxcdFxcdHJldHVybiB4YXNfZmluZCh4YXMsIG1heCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzM0LVxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0Kys7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE4MDA9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4MTctI2RlZmluZSB4YXNfZm9yX2VhY2goeGFzLCBlbnRyeSwgbWF4KSBcXFxcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxODE4OlxcdGZvciAoZW50cnkgPSB4YXNfZmluZCh4YXMsIG1heCk7IGVudHJ5OyBcXFxcXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xODE5LVxcdCAgICAgZW50cnkgPSB4YXNfbmV4dF9lbnRyeSh4YXMsIG1heCkpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYz0xMDI9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfeGFzX3JldHJ5KHN0cnVjdCB4YXJyYXkgKnhhKVxcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTEwLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxMTE6XFx0WEFfQlVHX09OKHhhLCB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpICE9IHhhX21rX3ZhbHVlKDApKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMTItXFx0eGFfZXJhc2VfaW5kZXgoeGEsIDEpO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmM9MTI1MD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzQoc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMjYyLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxMjYzOlxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMjY0LVxcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTI2Ni1cXG5saWIvdGVzdF94YXJyYXkuYzoxMjY3OlxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMjY4LVxcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMjcwLVxcbmxpYi90ZXN0X3hhcnJheS5jOjEyNzE6XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbmxpYi90ZXN0X3hhcnJheS5jLTEyNzItXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTEyODQtXFx0cmN1X3JlYWRfbG9jaygpO1xcbmxpYi90ZXN0X3hhcnJheS5jOjEyODU6XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbmxpYi90ZXN0X3hhcnJheS5jLTEyODYtXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMjk3LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxMjk4OlxcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xMjk5LVxcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xMzAxLVxcbmxpYi90ZXN0X3hhcnJheS5jOjEzMDI6XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbmxpYi90ZXN0X3hhcnJheS5jLTEzMDMtXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jPTE1ODY9c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbW92ZV9tYXgoc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5saWIvdGVzdF94YXJyYXkuYy0xNTkxLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxNTkyOlxcdFhBX0JVR19PTih4YSwgeGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKSAhPSB4YV9ta19pbmRleChVTE9OR19NQVgpKTtcXG5saWIvdGVzdF94YXJyYXkuYzoxNTkzOlxcdFhBX0JVR19PTih4YSwgeGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKSAhPSBOVUxMKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xNTk0LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubGliL3Rlc3RfeGFycmF5LmMtMTU5Ny1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubGliL3Rlc3RfeGFycmF5LmM6MTU5ODpcXHRYQV9CVUdfT04oeGEsIHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0geGFfbWtfaW5kZXgoVUxPTkdfTUFYKSk7XFxubGliL3Rlc3RfeGFycmF5LmMtMTU5OS1cXHR4YXNfcGF1c2UoXFx1MDAyNnhhcyk7XFxubGliL3Rlc3RfeGFycmF5LmM6MTYwMDpcXHRYQV9CVUdfT04oeGEsIHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCkgIT0gTlVMTCk7XFxubGliL3Rlc3RfeGFycmF5LmMtMTYwMS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmxpYi94YXJyYXkuYz0xMzc1PUVYUE9SVF9TWU1CT0xfR1BMKF9feGFzX25leHQpO1xcbi0tXFxubGliL3hhcnJheS5jLTEzNzctLyoqXFxubGliL3hhcnJheS5jOjEzNzg6ICogeGFzX2ZpbmQoKSAtIEZpbmQgdGhlIG5leHQgcHJlc2VudCBlbnRyeSBpbiB0aGUgWEFycmF5LlxcbmxpYi94YXJyYXkuYy0xMzc5LSAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXFxuLS1cXG5saWIveGFycmF5LmMtMTM5Mi0gKi9cXG5saWIveGFycmF5LmM6MTM5Mzp2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXFxubGliL3hhcnJheS5jLTEzOTQte1xcbi0tXFxubGliL3hhcnJheS5jPTIxNzI9RVhQT1JUX1NZTUJPTCh4YV9jbGVhcl9tYXJrKTtcXG4tLVxcbmxpYi94YXJyYXkuYy0yMTg1LSAqIGVudHJpZXMgd2hpY2ggYXJlIGJlaW5nIHNpbXVsdGFuZW91c2x5IGFkZGVkLiAgSXQgd2lsbCBub3QgcmV0dXJuIGFuXFxubGliL3hhcnJheS5jOjIxODY6ICogJVhBX1JFVFJZX0VOVFJZOyBpZiB5b3UgbmVlZCB0byBzZWUgcmV0cnkgZW50cmllcywgdXNlIHhhc19maW5kKCkuXFxubGliL3hhcnJheS5jLTIxODctICpcXG4tLVxcbmxpYi94YXJyYXkuYz0yMTkxPXZvaWQgKnhhX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgKmluZGV4cCxcXG4tLVxcbmxpYi94YXJyYXkuYy0yMjAxLVxcdFxcdGVsc2VcXG5saWIveGFycmF5LmM6MjIwMjpcXHRcXHRcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIG1heCk7XFxubGliL3hhcnJheS5jLTIyMDMtXFx0fSB3aGlsZSAoeGFzX3JldHJ5KFxcdTAwMjZ4YXMsIGVudHJ5KSk7XFxuLS1cXG5saWIveGFycmF5LmM9MjIxMj1zdGF0aWMgYm9vbCB4YXNfc2libGluZyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbmxpYi94YXJyYXkuYy0yMjM1LSAqIHdoaWNoIGFyZSBiZWluZyBzaW11bHRhbmVvdXNseSBhZGRlZC4gIEl0IHdpbGwgbm90IHJldHVybiBhblxcbmxpYi94YXJyYXkuYzoyMjM2OiAqICVYQV9SRVRSWV9FTlRSWTsgaWYgeW91IG5lZWQgdG8gc2VlIHJldHJ5IGVudHJpZXMsIHVzZSB4YXNfZmluZCgpLlxcbmxpYi94YXJyYXkuYy0yMjM3LSAqXFxuLS1cXG5saWIveGFycmF5LmM9MjI0MT12b2lkICp4YV9maW5kX2FmdGVyKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nICppbmRleHAsXFxuLS1cXG5saWIveGFycmF5LmMtMjI1NC1cXHRcXHRlbHNlXFxubGliL3hhcnJheS5jOjIyNTU6XFx0XFx0XFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBtYXgpO1xcbmxpYi94YXJyYXkuYy0yMjU2LVxcbi0tXFxubW0vZmlsZW1hcC5jPTQ3OT1ib29sIGZpbGVtYXBfcmFuZ2VfaGFzX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9maWxlbWFwLmMtNDkwLVxcdGZvciAoOzspIHtcXG5tbS9maWxlbWFwLmM6NDkxOlxcdFxcdGZvbGlvID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgbWF4KTtcXG5tbS9maWxlbWFwLmMtNDkyLVxcdFxcdGlmICh4YXNfcmV0cnkoXFx1MDAyNnhhcywgZm9saW8pKVxcbi0tXFxubW0vZmlsZW1hcC5jPTIwNzg9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmZpbmRfZ2V0X2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBwZ29mZl90IG1heCxcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yMDg0LVxcdGlmIChtYXJrID09IFhBX1BSRVNFTlQpXFxubW0vZmlsZW1hcC5jOjIwODU6XFx0XFx0Zm9saW8gPSB4YXNfZmluZCh4YXMsIG1heCk7XFxubW0vZmlsZW1hcC5jLTIwODYtXFx0ZWxzZVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yNDM0PWJvb2wga3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NDktXFx0aWYgKCFhdHRycylcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI0NTA6XFx0XFx0cmV0dXJuICF4YXNfZmluZChcXHUwMDI2eGFzLCBlbmQgLSAxKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjUwOjEzLjAxMTM0MTgyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDQ4MTU0ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IGFuZCBDb25maWd1cmF0aW9uIGZvciBYQXJyYXkgQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiBpdCBlZmZlY3RpdmVseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHhhc19maW5kYCBpcyBkZWZpbml0ZWx5IGEgaG90LXBhdGggZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWQgaW4gc2V2ZXJhbCBjcml0aWNhbCBhcmVhcyBsaWtlIGBmaWxlbWFwX3JhbmdlX2hhc19wYWdlYCBhbmQgYGZpbmRfZ2V0X2VudHJ5YC4gU28sIGFzIHBlciB0aGUgaW5zdHJ1Y3Rpb25zLCBJICpzaG91bGQgbm90KiBsaXN0IGB4YXNfZmluZGAgaW4gYEZvY3VzU3ltYm9sc2AgYmVjYXVzZSBkb2luZyBzbyB3b3VsZCBza2V3IHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbnMsIGFuZCBpdCBpcyBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24uXG5cbldoYXQgYWJvdXQgdGhlIHRlc3QgZnVuY3Rpb24gYGNoZWNrX211bHRpX2ZpbmRfNGAgdGhvdWdoPyBJdOKAmXMgYSBzdGF0aWMsIGxpa2VseSBpbmxpbmVkIChvciBgc3RhdGljIG5vaW5saW5lYCkgdGVzdCBmdW5jdGlvbi4gQnV0LCBmdXp6aW5nIGEgdGVzdCBmdW5jdGlvbiBkaXJlY3RseSBkb2VzbuKAmXQgcmVhbGx5IG1ha2Ugc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgU3l6a2FsbGVyJ3MgZ29hbHMuIEkgYW0gYWltaW5nIHRvIGZpbmQga2VybmVsLWxldmVsIGVudHJ5cG9pbnRzLlxuXG5UaGVyZWZvcmUsIGBGb2N1c1N5bWJvbHNgIHdpbGwgcmVtYWluIGVtcHR5LiBDaGVja2luZyBmb3Igb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zIGNvbmZpcm1zIHRoaXMuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uLCB0aGUgZ29hbCBpcyB0byBlbmFibGUgdGhlIHRlc3QgY2FzZSB0aGF0IHNwZWNpZmljYWxseSB0YXJnZXRzIHRoZSBidWcuIFRoZSBwcm9tcHQgc2F5cyB0aGF0IEkgc2hvdWxkIGVuYWJsZSB0aGUgdGVzdCBjYXNlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHhhc19maW5kYCBhbmQgYGNoZWNrX211bHRpX2ZpbmRfNGAgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdGVzdCBjYXNlIGNhbiBiZSBydW4uIEluaXRpYWxseSwgSSB0aG91Z2h0IGFib3V0IGBURVNUX1hBUlJBWWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNpbmNlIHRoZSBsYXR0ZXIgc2VsZWN0cyBgWEFSUkFZX01VTFRJYC4gQnV0IGBIVUdFVExCRlNgICphbHNvKiBzZWxlY3RzIGBYQVJSQVlfTVVMVElgIGFuZCBzZWVtcyBsaWtlIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgb3B0aW9uLCByZXZpZXdpbmcgYGxpYi9LY29uZmlnYCBjb25maXJtcyB0aGlzLlxuXG5UaGlua2luZyBhYm91dCBgVEVTVF9YQVJSQVlgLCBpZiBpdCdzIGJ1aWx0LWluIChgQ09ORklHX1RFU1RfWEFSUkFZPXlgKSwgaXQgcnVucyBhdCBib290LiBJZiBpdCdzIGEgbW9kdWxlIChgQ09ORklHX1RFU1RfWEFSUkFZPW1gKSwgaXQgcnVucyBvbiBtb2R1bGUgbG9hZC4gU3l6a2FsbGVyIGNhbiBsb2FkIG1vZHVsZXMgaWYgdGhleSBhcmUgcHJlc2VudC4gQnV0IHRoZSBhY3R1YWwgYnVnIGlzIGluIGB4YXNfZmluZGAsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHBsYWNlcyBsaWtlIGBtbWFwYCwgYHJlYWRgLCBgd3JpdGVgLCBhbmQgc28gb24uIFNvIHRoZSBidWcgaXMgcmVhY2hhYmxlIGV2ZW4gd2l0aG91dCBgVEVTVF9YQVJSQVlgLiBIb3dldmVyLCB0aGUgdGVzdCBjYXNlIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBleHBvc2UgdGhlIGJ1Zy4gRW5hYmxpbmcgYFRFU1RfWEFSUkFZPXlgIGVuc3VyZXMgdGhhdCB0aGUga2VybmVsIHJ1bnMgdGhlIHRlc3QgYXQgYm9vdCwgY3Jhc2hpbmcgaW1tZWRpYXRlbHkgaWYgdGhlIGJ1ZyBpcyBwcmVzZW50LiBUaGlzIGlzIGlkZWFsIVxuXG5TbywgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBpbmNsdWRlIGBURVNUX1hBUlJBWWAgYW5kIGBIVUdFVExCRlNgICh0byBlbmFibGUgYFhBUlJBWV9NVUxUSWApLiBJIGNvbmZpcm1lZCB0aGF0IGBIVUdFVExCRlNgIGlzIGEgY29tbW9uIGNvbmZpZyBhbmQgaXMgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIHRvIHVzZS4gTGV0IG1lIGRvdWJsZSBjaGVjay4uLiBZZXMsIGl0J3MgdGhlIHJpZ2h0IGNob2ljZS5cblxuSW4gc3VtbWFyeSwgdGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB4YXNfZmluZCgpYCB3aXRoaW4gdGhlIFhBcnJheSBjb2RlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLWluZGV4IGVudHJpZXMuIFRoaXMgaXMgY29yZSBYQXJyYXkgbG9naWMgYW5kIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSB0ZXN0IGNhc2UsIGBjaGVja19tdWx0aV9maW5kXzRgLiBUbyBtYXhpbWl6ZSBmdXp6aW5nIGVmZmVjdGl2ZW5lc3MsIEknbGwgZXhjbHVkZSBgeGFzX2ZpbmRgIGZyb20gYEZvY3VzU3ltYm9sc2AuIFRvIGVuc3VyZSB0aGUgYWRkZWQgdGVzdCBjYXNlIHJ1bnMgYW5kIGNhdGNoZXMgcG90ZW50aWFsIGlzc3VlcywgYENPTkZJR19URVNUX1hBUlJBWWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCAod2hpY2ggZW5hYmxlcyBgQ09ORklHX1hBUlJBWV9NVUxUSWApIHdpbGwgYmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjUwOjQ0LjA1OTQ5OTA3NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE2Nzg0MjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo1MDo0NC4zNzYyODc4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzE4NDcxMzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipWZXJpZnlpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgYEhVR0VUTEJGU2DigJR5ZXAsIHRoYXQncyB3aGF0IEkgZXhwZWN0ZWQuIENvbmZpcm1lZC4gTm93LCBsZXQncyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBDT05GSUdfVEVTVF9YQVJSQVlgLiBJdCdzIGEga2V5IHBpZWNlLCBhbmQgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgc2V0IGFwcHJvcHJpYXRlbHkgZ2l2ZW4gdGhlIGRpcmVjdGlvbiBvZiB0aGlzIHByb2plY3QuIE5vIHJvb20gZm9yIGFzc3VtcHRpb25zIGhlcmUuIExldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTQ5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6NTA6NTAuNjk0NzY1Nzk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA3MDQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVEVTVF9YQVJSQVlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL0tjb25maWcuZGVidWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MjU1Nz1jb25maWcgVEVTVF9CSVRNQVBcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTI1NjMtXFxubGliL0tjb25maWcuZGVidWc6MjU2NDpjb25maWcgVEVTVF9YQVJSQVlcXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTY1LVxcdHRyaXN0YXRlIFxcXCJUZXN0IHRoZSBYQXJyYXkgY29kZSBhdCBydW50aW1lXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo1MDo1MC43Mzk4Mzg1MjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwMjQwMTU2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWEFycmF5IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgVEVTVF9YQVJSQVlgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBmb2N1cyBvbiBoZXJlLiBMZXQncyBicmVhayB0aGlzIGRvd24gZnVydGhlciwgZ2l2ZW4gbXkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwgaW50ZXJuYWxzIGFuZCBYQXJyYXkgc3BlY2lmaWNhbGx5LlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBidWcgd2l0aGluIGB4YXNfZmluZCgpYC4gVGhhdCdzIGEgKm1ham9yKiBmdW5jdGlvbiB3aXRoaW4gdGhlIFhBcnJheSBzeXN0ZW07IGl0J3MgcHJhY3RpY2FsbHkgYSBsaW5jaHBpbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgcGFnZSBjYWNoZSBhbmQgb3RoZXIgY3JpdGljYWwgc3Vic3lzdGVtcy4gVGhlIGJ1ZyBpdHNlbGYgdGFyZ2V0cyBtdWx0aS1pbmRleCBlbnRyeSBzZWFyY2hlcywgd2hpY2gsIGFzIHdlIGtub3csIGNhbiBnZXQgdHJpY2t5LlxuXG5Gcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBtYWtlcyB0aGUgcGF0Y2ggaGlnaGx5IHJlbGV2YW50LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBhcHByb3ByaWF0ZWx5IHNldCB0byBgdHJ1ZWAuIEJlY2F1c2UgYHhhc19maW5kKClgIGlzIGEgZ2VuZXJpYywgY29yZSBmdW5jdGlvbiBpbiBhIGhvdCBwYXRoLCBpdCdzIGNvcnJlY3QgdG8gZXhjbHVkZSBpdCBmcm9tIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBUaGUgcmVhbCBiZW5lZml0IGhlcmUgY29tZXMgZnJvbSBlbnN1cmluZyB0aGlzIG5ldyB0ZXN0IGNhc2UsIGBjaGVja19tdWx0aV9maW5kXzRgLCB3aXRoaW4gYGxpYi90ZXN0X3hhcnJheS5jYCwgYWN0dWFsbHkgKnJ1bnMqIGR1cmluZyBmdXp6aW5nLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIGFyZSBgVEVTVF9YQVJSQVlgICh0aGF0J3Mgb2J2aW91cykgYW5kIGBIVUdFVExCRlNgLiBUaGUgbGF0dGVyIGlzIGVzc2VudGlhbCBiZWNhdXNlIGl0IHNlbGVjdHMgYENPTkZJR19YQVJSQVlfTVVMVElgLCB3aGljaCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIG11bHRpLWluZGV4IHRlc3QgYWRkZWQgYnkgdGhlIHBhdGNoLiBUaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBhcHByb2FjaCB0byBtYXhpbWl6ZSB0ZXN0IGNvdmVyYWdlIG9mIHRoaXMgcGFydGljdWxhciBidWcgZml4IHdpdGhpbiB0aGUgZnV6emluZyBmcmFtZXdvcmsuIEl0IGNvcnJlY3RseSBpZGVudGlmaWVzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGVzdCBleGVjdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDAxLCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo1MTowMy43NjM4NTczMjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzk3NzQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9YQVJSQVlcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgeGFzX2ZpbmQoKWAsIGEgY29yZSBYQXJyYXkgZnVuY3Rpb24gdXNlZCBleHRlbnNpdmVseSBpbiB0aGUga2VybmVsIChlLmcuLCBwYWdlIGNhY2hlKS4gVGhlIGJ1ZyBvY2N1cnMgd2hlbiBzZWFyY2hpbmcgZm9yIG11bHRpLWluZGV4IGVudHJpZXMuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSB0ZXN0IGNhc2UgYGNoZWNrX211bHRpX2ZpbmRfNGAgdG8gYGxpYi90ZXN0X3hhcnJheS5jYC4gU2luY2UgYHhhc19maW5kKClgIGlzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgaXQgaXMgZXhjbHVkZWQgZnJvbSBGb2N1c1N5bWJvbHMuIFRvIGVuc3VyZSB0aGUgbmV3IHRlc3QgY2FzZSBpcyBleGVjdXRlZCwgYENPTkZJR19URVNUX1hBUlJBWWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCAod2hpY2ggc2VsZWN0cyBgQ09ORklHX1hBUlJBWV9NVUxUSWAgcmVxdWlyZWQgYnkgdGhlIHRlc3QpIHNob3VsZCBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfWEFSUkFZXCIsXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHhhc19maW5kKClgLCBhIGNvcmUgWEFycmF5IGZ1bmN0aW9uIHVzZWQgZXh0ZW5zaXZlbHkgaW4gdGhlIGtlcm5lbCAoZS5nLiwgcGFnZSBjYWNoZSkuIFRoZSBidWcgb2NjdXJzIHdoZW4gc2VhcmNoaW5nIGZvciBtdWx0aS1pbmRleCBlbnRyaWVzLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgdGVzdCBjYXNlIGBjaGVja19tdWx0aV9maW5kXzRgIHRvIGBsaWIvdGVzdF94YXJyYXkuY2AuIFNpbmNlIGB4YXNfZmluZCgpYCBpcyBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24sIGl0IGlzIGV4Y2x1ZGVkIGZyb20gRm9jdXNTeW1ib2xzLiBUbyBlbnN1cmUgdGhlIG5ldyB0ZXN0IGNhc2UgaXMgZXhlY3V0ZWQsIGBDT05GSUdfVEVTVF9YQVJSQVlgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgKHdoaWNoIHNlbGVjdHMgYENPTkZJR19YQVJSQVlfTVVMVElgIHJlcXVpcmVkIGJ5IHRoZSB0ZXN0KSBzaG91bGQgYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6NTE6MDMuODM3ODQxMTQyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE0NzA3OTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjUxOjAzLjgzODI4ODMyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDE0NjYyOTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIHhhcnJheSBtdWx0aS1pbmRleCBmaW5kIGltcGxlbWVudGF0aW9uIChgeGFzX2ZpbmRgKS4gVGhlIGlzc3VlIGludm9sdmVzIGluY29ycmVjdCBvZmZzZXQgY2FsY3VsYXRpb25zIGR1cmluZyB4YXJyYXkgdHJhdmVyc2FsLCB3aGljaCBjb3VsZCBsZWFkIHRvIHJldHVybmluZyBpbmNvcnJlY3QgZW50cmllcywgaW5maW5pdGUgbG9vcHMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4gKGlmIHRoZXkgbGVhZCB0byBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyksIG9yIG90aGVyIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjc5MzUzNjM1NDViZTExMDA0MTEyYTNiZGZmYTY2ZTMzMTJjNWY2Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDEyOjQ2OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfeGFycmF5LmMgYi9saWIvdGVzdF94YXJyYXkuY1xuaW5kZXggNWNhMGFlZmVlOWFhNS4uN2QwZGVjY2RmNTlhMCAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X3hhcnJheS5jXG4rKysgYi9saWIvdGVzdF94YXJyYXkuY1xuQEAgLTEyNDcsNiArMTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSlcbit7XG4rI2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbitcdFhBX1NUQVRFKHhhcywgeGEsIDEwMCk7XG4rXHRYQV9TVEFURV9PUkRFUih4YXNfc3BsaXQsIHhhLCAwLCAwKTtcbitcdHZvaWQgKmVudHJ5O1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0LyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovXG4rXHR4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpO1xuK1x0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcbitcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7XG4rXHR4YV9lcmFzZV9pbmRleCh4YSwgMCk7XG4rXHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuK1xuK1x0LyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi9cbitcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XG4rXHRYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpO1xuK1xuK1x0eGFzX3NldChcdTAwMjZ4YXMsIDEwMCk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFzX3NwbGl0X2FsbG9jKFx1MDAyNnhhc19zcGxpdCwgeGEsIDcsIEdGUF9LRVJORUwpO1xuK1x0eGFzX2xvY2soXHUwMDI2eGFzX3NwbGl0KTtcbitcdHhhc19zcGxpdChcdTAwMjZ4YXNfc3BsaXQsIHhhLCA3KTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEyODsgaSsrKVxuK1x0XHRfX3hhX3N0b3JlKHhhLCBpLCB4YV9ta19pbmRleChpKSwgMCk7XG4rXHR4YXNfdW5sb2NrKFx1MDAyNnhhc19zcGxpdCk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHR4YV9kZXN0cm95KHhhKTtcbitcdFhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGksIGosIGs7XG5AQCAtMTM3MCw2ICsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSlcbiBcdFx0Y2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTtcbiBcdGNoZWNrX211bHRpX2ZpbmRfMih4YSk7XG4gXHRjaGVja19tdWx0aV9maW5kXzMoeGEpO1xuK1x0Y2hlY2tfbXVsdGlfZmluZF80KHhhKTtcbiB9XG4gXG4gLyogU2VlIGZpbmRfc3dhcF9lbnRyeSgpIGluIG1tL3NobWVtLmMgKi9cbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcbmluZGV4IDlhOGI0OTE2NTQwY2YuLjk4MDMyNGQ2ODZiZDAgMTAwNjQ0XG4tLS0gYS9saWIveGFycmF5LmNcbisrKyBiL2xpYi94YXJyYXkuY1xuQEAgLTE0MDYsOSArMTQwNiwxMSBAQCB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXG4gXHRcdGVudHJ5ID0geGFzX2xvYWQoeGFzKTtcbiBcdFx0aWYgKGVudHJ5IHx8IHhhc19ub3Rfbm9kZSh4YXMtXHUwMDNleGFfbm9kZSkpXG4gXHRcdFx0cmV0dXJuIGVudHJ5O1xuLVx0fSBlbHNlIGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICB4YXMtXHUwMDNleGFfb2Zmc2V0ICE9ICh4YXMtXHUwMDNleGFfaW5kZXggXHUwMDI2IFhBX0NIVU5LX01BU0spKSB7XG4tXHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHR9IGVsc2UgaWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSkge1xuK1x0XHRpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0KVxuK1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHRcdGVsc2VcbitcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbiBcdH1cbiBcbiBcdHhhc19uZXh0X29mZnNldCh4YXMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6NTE6MDMuODM4Mjg5MzQyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTQ2NjA2MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhhcnJheSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbGliL3hhcnJheS5jYCBhbmQgYWRkaW5nIGEgbmV3IHRlc3QsIGBsaWIvdGVzdF94YXJyYXkuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gdGhlIGB4YXNfZmluZGAgZnVuY3Rpb24gd2l0aGluIGB4YXJyYXkuY2AuICBMb29raW5nIGF0IHRoZSBjb2RlLCB0aGUgb3JpZ2luYWwgY2hlY2sgZm9yIG9mZnNldCBoYXMgYmVlbiBtb2RpZmllZC4gIFNwZWNpZmljYWxseTpcblxuYGBgY1xuLVx0fSBlbHNlIGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICB4YXMtXHUwMDNleGFfb2Zmc2V0ICE9ICh4YXMtXHUwMDNleGFfaW5kZXggXHUwMDI2IFhBX0NIVU5LX01BU0spKSB7XG4tXHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHR9IGVsc2UgaWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSkge1xuK1x0XHRpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0KVxuK1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSAoKHhhcy1cdTAwM2V4YV9pbmRleCAtIDEpIFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XG4rXHRcdGVsc2VcbitcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKTtcbiBcdH1cbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcgYSBidWcgaW4gaG93IGB4YXNfZmluZGAgaGFuZGxlcyBtdWx0aS1pbmRleCBzZWFyY2hlcywgbGlrZWx5IHJlbGF0ZWQgdG8gY2FzZXMgd2hlcmUgZW50cmllcyBhcmUgc3BsaXQgYWNyb3NzIGJvdW5kYXJpZXMuIFRoZSBvcmlnaW5hbCBsb2dpYyBzZWVtcyB0byBoYXZlIGEgZmxhdyByZWxhdGVkIHRvIG9mZnNldCBjYWxjdWxhdGlvbiwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2VzcywgYW4gaW5maW5pdGUgbG9vcCwgb3IganVzdCB0aGUgd3JvbmcgZW50cnkgYmVpbmcgcmV0dXJuZWQuICBUaGlzIGlzIGEgdHJhdmVyc2FsIGlzc3VlLlxuXG5Ob3csIGNvbmNlcm5pbmcgbWVtb3J5IHNhZmV0eSwgdGhpcyBpcyB3aGVyZSBteSBleHBlcnRpc2UgY29tZXMgaW4uICBJIGRvbid0IHNlZSBhbnkgZXZpZGVuY2UgaGVyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IEtNU0FOIHdvdWxkIGNhdGNoLiBUaGUgYHhhc19maW5kYCBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBhbiBlbnRyeTsgaWYgaXQgcmV0dXJucyB0aGUgd3JvbmcgZW50cnksIGl0IGlzIGxpa2VseSBhIGNyYXNoIG9yIGxvZ2ljIGJ1ZyBidXQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIHRoZSBtYWluIHVzZSBjYXNlIGZvciBLTVNBTi4gVGhlIGNvZGUgY2hhbmdlcyBhcHBlYXIgdG8gYmUgZW50aXJlbHkgY29uY2VybmVkIHdpdGggdGhlICpsb2dpYyogb2YgdGhlIHRyYXZlcnNhbCwgYW5kIG5vdCB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvciBoYW5kbGluZyBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkgaXRzZWxmLiBLQVNBTiBpcyBzdGlsbCByZWxldmFudCBoZXJlLCBhcyB0aGVyZSAqY291bGQqIGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBIb3dldmVyLCBJJ2QgYmV0IHRoZSBwcmltYXJ5IGlzc3VlIGlzIGxvZ2ljLCBub3QgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZSBuZXcgdGVzdCwgYGNoZWNrX211bHRpX2ZpbmRfNGAsIHNlZW1zIHRvIGJlIGV4ZXJjaXNpbmcgYHhhX3N0b3JlX29yZGVyYCwgYHhhc19maW5kYCwgYHhhc19zcGxpdGAsIGV0Yy4sIHNvIGl0J3MgYSBnb29kIHNpZ24gdGhleSdyZSBjb3ZlcmluZyB0aGVzZSBib3VuZGFyeSBjb25kaXRpb25zLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gIFRoaXMgaXMgYSBsb2dpYyBidWcgZml4LCBub3QgYSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgbGVhayBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxMSwiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjo1MToxNy45ODQ4OTg2NTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSB4YXJyYXkgbXVsdGktaW5kZXggZmluZCBpbXBsZW1lbnRhdGlvbiAoYHhhc19maW5kYCkuIFRoZSBpc3N1ZSBpbnZvbHZlcyBpbmNvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9ucyBkdXJpbmcgeGFycmF5IHRyYXZlcnNhbCwgd2hpY2ggY291bGQgbGVhZCB0byByZXR1cm5pbmcgaW5jb3JyZWN0IGVudHJpZXMsIGluZmluaXRlIGxvb3BzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOIChpZiB0aGV5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMpLCBvciBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSB4YXJyYXkgbXVsdGktaW5kZXggZmluZCBpbXBsZW1lbnRhdGlvbiAoYHhhc19maW5kYCkuIFRoZSBpc3N1ZSBpbnZvbHZlcyBpbmNvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9ucyBkdXJpbmcgeGFycmF5IHRyYXZlcnNhbCwgd2hpY2ggY291bGQgbGVhZCB0byByZXR1cm5pbmcgaW5jb3JyZWN0IGVudHJpZXMsIGluZmluaXRlIGxvb3BzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOIChpZiB0aGV5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMpLCBvciBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow89zx4[1] Phase: Succeeded StartedAt: 2026-08-27 12:51:30 +0000 UTC FinishedAt: 2026-08-27 12:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 12:51:30 +0000 UTC FinishedAt: 2026-08-27 12:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[2] Phase: Succeeded StartedAt: 2026-08-27 12:51:30 +0000 UTC FinishedAt: 2026-08-27 13:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-27 12:51:30 +0000 UTC FinishedAt: 2026-08-27 13:23:26 +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":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 12:51:30 +0000 UTC FinishedAt: 2026-08-27 12:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 12:51:30 +0000 UTC FinishedAt: 2026-08-27 12:51:34 +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":["TEST_XARRAY","HUGETLBFS"],"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-workflow89zx4/series-workflow89zx4-convert-artifact-2279009794/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 12:51:40 +0000 UTC FinishedAt: 2026-08-27 13:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 12:51:40 +0000 UTC FinishedAt: 2026-08-27 13:07:13 +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:*9adcc750-8744-4074-b2f8-3411e7ee536d,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-workflow89zx4/series-workflow89zx4-convert-artifact-2279009794/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": "b63310ba-174c-4901-86f6-bd08763a951c", "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-workflow89zx4/series-workflow89zx4-build-action-3954605248/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 12:51:40 +0000 UTC FinishedAt: 2026-08-27 13:07:03 +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:*9adcc750-8744-4074-b2f8-3411e7ee536d,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-workflow89zx4/series-workflow89zx4-convert-artifact-2279009794/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": "b63310ba-174c-4901-86f6-bd08763a951c", "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-workflow89zx4/series-workflow89zx4-build-action-3954605248/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 13:07:13 +0000 UTC FinishedAt: 2026-08-27 13:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 13:07:13 +0000 UTC FinishedAt: 2026-08-27 13:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 13:07:13 +0000 UTC FinishedAt: 2026-08-27 13:07:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 13:07:13 +0000 UTC FinishedAt: 2026-08-27 13:07:17 +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":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-workflow89zx4/series-workflow89zx4-convert-artifact-567779933/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 13:07:23 +0000 UTC FinishedAt: 2026-08-27 13:12:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 13:07:23 +0000 UTC FinishedAt: 2026-08-27 13:11:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b63310ba-174c-4901-86f6-bd08763a951c,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-workflow89zx4/series-workflow89zx4-build-action-3954605248/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-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 13:12:01 +0000 UTC FinishedAt: 2026-08-27 13:12:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 13:12:01 +0000 UTC FinishedAt: 2026-08-27 13:12:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 13:12:01 +0000 UTC FinishedAt: 2026-08-27 13:23:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 13:12:01 +0000 UTC FinishedAt: 2026-08-27 13:23:16 +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:*9adcc750-8744-4074-b2f8-3411e7ee536d,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-workflow89zx4/series-workflow89zx4-convert-artifact-567779933/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": "07121e85-b7e3-496e-be00-422a64a25361", "success": false },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-workflow89zx4/series-workflow89zx4-build-action-1294787385/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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-08-27 13:12:01 +0000 UTC FinishedAt: 2026-08-27 13:23:06 +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:*9adcc750-8744-4074-b2f8-3411e7ee536d,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-workflow89zx4/series-workflow89zx4-convert-artifact-567779933/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": "07121e85-b7e3-496e-be00-422a64a25361", "success": false },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-workflow89zx4/series-workflow89zx4-build-action-1294787385/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-08-27 13:23:16 +0000 UTC FinishedAt: 2026-08-27 13:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow89zx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"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"],"focus":null,"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_XARRAY","HUGETLBFS"],"series_id":"c03cb276-83ca-4dcf-9b35-e7a078619e6c","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: Failed StartedAt: 2026-08-27 13:23:16 +0000 UTC FinishedAt: 2026-08-27 13:23:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}