Name: series-workflowm44h8 Phase: Succeeded StartedAt: 2026-06-29 16:04:57 +0000 UTC FinishedAt: 2026-06-29 20:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[0] Phase: Succeeded StartedAt: 2026-06-29 16:04:57 +0000 UTC FinishedAt: 2026-06-29 16:13:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 16:04:57 +0000 UTC FinishedAt: 2026-06-29 16:13:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR", "DAMON_KUNIT_TEST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR", "DAMON_KUNIT_TEST" ], "series_id": "033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_split_some_regions", "kdamond_split_regions" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX0tVTklUX1RFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnMmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9zcGxpdF9yZWdpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHJlZ2lvbiBzcGxpdHRpbmcgbG9naWMgaW4gREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpLCBpbnRyb2R1Y2luZyBgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zYCB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIG51bWJlciBvZiByZWdpb25zIGFwcHJvYWNoZXMgdGhlIG1heGltdW0gbGltaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIGJ5IGNvbmZpZ3VyaW5nIGFuZCBydW5uaW5nIERBTU9OIHZpYSBpdHMgc3lzZnMgaW50ZXJmYWNlIG9yIG90aGVyIERBTU9OIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NGUxOGIyMDFhZDE3MTljOGQ2ZjlkYzgyZjQ2NmIwZWY2MTQ2NWM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTY6MTI6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCAwMjcyNTBlNDNjNjZmMi4uOWJiYzYwYTJhOGMwNWIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMyMzQsNiAmIzQzOzMyMzQsMzcgQEAgc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gXHR9XG4gfVxuIFxuJiM0MzsvKiBTcGxpdCBvbmUgaW4gZXZlcnkgQHNwbGl0X3N0ZXAgcmVnaW9ucyBpbnRvIHR3bywgZnJvbSBhIHJvdGF0aW5nIG9mZnNldCAqL1xuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBzcGxpdF9zdGVwKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIHVuc2lnbmVkIGxvbmcgcm90YXRpb247XG4mIzQzO1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqbmV4dDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IHJvdGF0aW9uJiM0MzsmIzQzOyAlIHNwbGl0X3N0ZXA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpZHggPSAwO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XG4mIzQzO1x0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZShyLCBuZXh0LCB0KSB7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9uLCBzel9zdWI7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaWR4JiM0MzsmIzQzOyAlIHNwbGl0X3N0ZXAgIT0gb2Zmc2V0KVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRzel9yZWdpb24gPSBkYW1vbl9zel9yZWdpb24ocik7XG4mIzQzO1x0XHRcdGlmIChzel9yZWdpb24gXHUwMDNjIDIgKiBjdHgtXHUwMDNlbWluX3JlZ2lvbl9zeilcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHN6X3N1YiA9IEFMSUdOX0RPV04oZGFtb25fcmFuZChjdHgsIDEsIDEwKSAqXG4mIzQzO1x0XHRcdFx0XHRzel9yZWdpb24gLyAxMCwgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opO1xuJiM0MztcdFx0XHQvKiBEbyBub3QgYWxsb3cgYmxhbmsgcmVnaW9uICovXG4mIzQzO1x0XHRcdGlmIChzel9zdWIgPT0gMCB8fCBzel9zdWIgXHUwMDNlPSBzel9yZWdpb24pXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfc3ViKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBTcGxpdCBldmVyeSB0YXJnZXQgcmVnaW9uIGludG8gcmFuZG9tbHktc2l6ZWQgc21hbGwgcmVnaW9uc1xuICAqXG5AQCAtMzI0NywyNSAmIzQzOzMyNzgsMzMgQEAgc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gc3RhdGljIHZvaWQga2RhbW9uZF9zcGxpdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuLVx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnMgPSAwO1xuLVx0c3RhdGljIHVuc2lnbmVkIGludCBsYXN0X25yX3JlZ2lvbnM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9yZWdpb25zID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1heF9ucl9yZWdpb25zID0gY3R4LVx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zO1xuJiM0MztcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfbnJfcmVnaW9ucztcbiBcdGludCBucl9zdWJyZWdpb25zID0gMjtcbiBcbiBcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpXG4gXHRcdG5yX3JlZ2lvbnMgJiM0Mzs9IGRhbW9uX25yX3JlZ2lvbnModCk7XG4gXG4tXHRpZiAobnJfcmVnaW9ucyBcdTAwM2UgY3R4LVx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zIC8gMilcbi1cdFx0cmV0dXJuO1xuJiM0MztcdGlmIChucl9yZWdpb25zIFx1MDAzZT0gbWF4X25yX3JlZ2lvbnMpXG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4mIzQzO1xuJiM0MztcdGlmIChucl9yZWdpb25zIFx1MDAzZSBtYXhfbnJfcmVnaW9ucyAvIDIpIHtcbiYjNDM7XHRcdGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9ucyhjdHgsXG4mIzQzO1x0XHRcdG1heF9ucl9yZWdpb25zIC8gKG1heF9ucl9yZWdpb25zIC0gbnJfcmVnaW9ucykpO1xuJiM0MztcdFx0Z290byBkb25lO1xuJiM0MztcdH1cbiBcbiBcdC8qIE1heWJlIHRoZSBtaWRkbGUgb2YgdGhlIHJlZ2lvbiBoYXMgZGlmZmVyZW50IGFjY2VzcyBmcmVxdWVuY3kgKi9cbiBcdGlmIChsYXN0X25yX3JlZ2lvbnMgPT0gbnJfcmVnaW9ucyBcdTAwMjZcdTAwMjZcbi1cdFx0XHRucl9yZWdpb25zIFx1MDAzYyBjdHgtXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMgLyAzKVxuJiM0MztcdFx0XHRucl9yZWdpb25zIFx1MDAzYyBtYXhfbnJfcmVnaW9ucyAvIDMpXG4gXHRcdG5yX3N1YnJlZ2lvbnMgPSAzO1xuIFxuIFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eClcbiBcdFx0ZGFtb25fc3BsaXRfcmVnaW9uc19vZihjdHgsIHQsIG5yX3N1YnJlZ2lvbnMsXG4gXHRcdFx0XHQgICAgICAgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opO1xuIFxuJiM0Mztkb25lOlxuIFx0bGFzdF9ucl9yZWdpb25zID0gbnJfcmVnaW9ucztcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCBmY2Y3YzdmYWRiNWZlNS4uZDA5Y2JiMTQyOGI3NzMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTMzNSw2ICYjNDM7MzM1LDY5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFdoZW4gdGhlIHRvdGFsIHJlZ2lvbiBjb3VudCBpcyBhbHJlYWR5IGFib3ZlIG1heF9ucl9yZWdpb25zIC8gMixcbiYjNDM7ICoga2RhbW9uZF9zcGxpdF9yZWdpb25zKCkgbXVzdCBrZWVwIHJlZmluaW5nIHRoZSByZXNvbHV0aW9uIGJ5IHNwbGl0dGluZyBhXG4mIzQzOyAqIGZyYWN0aW9uIG9mIHRoZSByZWdpb25zIChtYWtpbmcgcHJvZ3Jlc3MpLCB3aXRob3V0IGV4Y2VlZGluZ1xuJiM0MzsgKiBtYXhfbnJfcmVnaW9ucy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9jdHggKmM7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yX2JlZm9yZSwgbnJfYWZ0ZXIsIGk7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgaW50IG5yX2luaXQgPSA3NjA7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgbG9uZyByZWdpb25fc3ogPSAxMDA7XG4mIzQzO1xuJiM0MztcdGMgPSBkYW1vbl9uZXdfY3R4KCk7XG4mIzQzO1x0aWYgKCFjKVxuJiM0MztcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtjdHggYWxsb2MgZmFpbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIEtlZXAgdGhlIHNwbGl0IGFyaXRobWV0aWMgaW5kZXBlbmRlbnQgb2YgdGhlIHBhZ2Ugc2l6ZSAqL1xuJiM0MztcdGMtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDE7XG4mIzQzO1x0Yy1cdTAwM2VhdHRycy5taW5fbnJfcmVnaW9ucyA9IDEwO1xuJiM0MztcdGMtXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMgPSAxNTAwO1xuJiM0MztcbiYjNDM7XHR0ID0gZGFtb25fbmV3X3RhcmdldCgpO1xuJiM0MztcdGlmICghdCkge1xuJiM0MztcdFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4mIzQzO1x0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3RhcmdldCBhbGxvYyBmYWlsXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2luaXQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdGFydCA9IGkgKiByZWdpb25fc3o7XG4mIzQzO1x0XHRyID0gZGFtb25fbmV3X3JlZ2lvbihzdGFydCwgc3RhcnQgJiM0MzsgcmVnaW9uX3N6KTtcbiYjNDM7XHRcdGlmICghcikge1xuJiM0MztcdFx0XHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbiYjNDM7XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4mIzQzO1x0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7cmVnaW9uIGFsbG9jIGZhaWxcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IChpIFx1MDAyNiAxKSA/IDAgOiAxMDA7XG4mIzQzO1x0XHRyLVx1MDAzZWFnZSA9IDU7XG4mIzQzO1x0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGFtb25fYWRkX3RhcmdldChjLCB0KTtcbiYjNDM7XG4mIzQzO1x0bnJfYmVmb3JlID0gZGFtb25fbnJfcmVnaW9ucyh0KTtcbiYjNDM7XHQvKiBBYm92ZSBtYXhfbnJfcmVnaW9ucyAvIDIsIHNvIHRoZSBibGFua2V0LXNwbGl0IHBhdGggaXMgc2tpcHBlZCAqL1xuJiM0MztcdEtVTklUX0VYUEVDVF9HVCh0ZXN0LCAodW5zaWduZWQgbG9uZylucl9iZWZvcmUsXG4mIzQzO1x0XHRcdGMtXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMgLyAyKTtcbiYjNDM7XG4mIzQzO1x0a2RhbW9uZF9zcGxpdF9yZWdpb25zKGMpO1xuJiM0MztcbiYjNDM7XHRucl9hZnRlciA9IGRhbW9uX25yX3JlZ2lvbnModCk7XG4mIzQzO1x0LyogU3RpbGwgbWFkZSBwcm9ncmVzcyAuLi4gKi9cbiYjNDM7XHRLVU5JVF9FWFBFQ1RfR1QodGVzdCwgbnJfYWZ0ZXIsIG5yX2JlZm9yZSk7XG4mIzQzO1x0LyogLi4uIGJ1dCBkaWQgbm90IG92ZXJzaG9vdCB0aGUgY29uZmlndXJlZCBtYXhpbXVtICovXG4mIzQzO1x0S1VOSVRfRVhQRUNUX0xFKHRlc3QsICh1bnNpZ25lZCBsb25nKW5yX2FmdGVyLFxuJiM0MztcdFx0XHRjLVx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zKTtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpO1xuQEAgLTE0NjQsNiAmIzQzOzE1MjcsNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X21lcmdlX3R3byksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZiksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZiksXG4mIzQzO1x0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NwbGl0X2Fib3ZlX2hhbGZfcHJvZ3Jlc3NlcyksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbiksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9LVU5JVF9URVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3BsaXRfc29tZV9yZWdpb25zJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfc3BsaXRfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSByZWdpb24gc3BsaXR0aW5nIGxvZ2ljIGluIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSwgaW50cm9kdWNpbmcgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBudW1iZXIgb2YgcmVnaW9ucyBhcHByb2FjaGVzIHRoZSBtYXhpbXVtIGxpbWl0LiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBjb25maWd1cmluZyBhbmQgcnVubmluZyBEQU1PTiB2aWEgaXRzIHN5c2ZzIGludGVyZmFjZSBvciBvdGhlciBEQU1PTiBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NGUxOGIyMDFhZDE3MTljOGQ2ZjlkYzgyZjQ2NmIwZWY2MTQ2NWM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdW4gMjkgMTY6MTI6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggMDI3MjUwZTQzYzY2ZjIuLjliYmM2MGEyYThjMDViIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zMjM0LDYgJiM0MzszMjM0LDM3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogCX0KIH0KIAomIzQzOy8qIFNwbGl0IG9uZSBpbiBldmVyeSBAc3BsaXRfc3RlcCByZWdpb25zIGludG8gdHdvLCBmcm9tIGEgcm90YXRpbmcgb2Zmc2V0ICovCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBsb25nIHNwbGl0X3N0ZXApCiYjNDM7ewomIzQzOwlzdGF0aWMgdW5zaWduZWQgbG9uZyByb3RhdGlvbjsKJiM0MzsJc3RydWN0IGRhbW9uX3RhcmdldCAqdDsKJiM0MzsJc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcm90YXRpb24mIzQzOyYjNDM7ICUgc3BsaXRfc3RlcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpZHggPSAwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7CiYjNDM7CQlkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZShyLCBuZXh0LCB0KSB7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBzel9yZWdpb24sIHN6X3N1YjsKJiM0MzsKJiM0MzsJCQlpZiAoaWR4JiM0MzsmIzQzOyAlIHNwbGl0X3N0ZXAgIT0gb2Zmc2V0KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlzel9yZWdpb24gPSBkYW1vbl9zel9yZWdpb24ocik7CiYjNDM7CQkJaWYgKHN6X3JlZ2lvbiAmbHQ7IDIgKiBjdHgtJmd0O21pbl9yZWdpb25fc3opCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCXN6X3N1YiA9IEFMSUdOX0RPV04oZGFtb25fcmFuZChjdHgsIDEsIDEwKSAqCiYjNDM7CQkJCQlzel9yZWdpb24gLyAxMCwgY3R4LSZndDttaW5fcmVnaW9uX3N6KTsKJiM0MzsJCQkvKiBEbyBub3QgYWxsb3cgYmxhbmsgcmVnaW9uICovCiYjNDM7CQkJaWYgKHN6X3N1YiA9PSAwIHx8IHN6X3N1YiAmZ3Q7PSBzel9yZWdpb24pCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCWRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzel9zdWIpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKICAqIFNwbGl0IGV2ZXJ5IHRhcmdldCByZWdpb24gaW50byByYW5kb21seS1zaXplZCBzbWFsbCByZWdpb25zCiAgKgpAQCAtMzI0NywyNSAmIzQzOzMyNzgsMzMgQEAgc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiBzdGF0aWMgdm9pZCBrZGFtb25kX3NwbGl0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogewogCXN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7Ci0JdW5zaWduZWQgaW50IG5yX3JlZ2lvbnMgPSAwOwotCXN0YXRpYyB1bnNpZ25lZCBpbnQgbGFzdF9ucl9yZWdpb25zOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3JlZ2lvbnMgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIG1heF9ucl9yZWdpb25zID0gY3R4LSZndDthdHRycy5tYXhfbnJfcmVnaW9uczsKJiM0MzsJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9ucl9yZWdpb25zOwogCWludCBucl9zdWJyZWdpb25zID0gMjsKIAogCWRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpCiAJCW5yX3JlZ2lvbnMgJiM0Mzs9IGRhbW9uX25yX3JlZ2lvbnModCk7CiAKLQlpZiAobnJfcmVnaW9ucyAmZ3Q7IGN0eC0mZ3Q7YXR0cnMubWF4X25yX3JlZ2lvbnMgLyAyKQotCQlyZXR1cm47CiYjNDM7CWlmIChucl9yZWdpb25zICZndDs9IG1heF9ucl9yZWdpb25zKQomIzQzOwkJZ290byBkb25lOwomIzQzOwomIzQzOwlpZiAobnJfcmVnaW9ucyAmZ3Q7IG1heF9ucl9yZWdpb25zIC8gMikgewomIzQzOwkJZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKGN0eCwKJiM0MzsJCQltYXhfbnJfcmVnaW9ucyAvIChtYXhfbnJfcmVnaW9ucyAtIG5yX3JlZ2lvbnMpKTsKJiM0MzsJCWdvdG8gZG9uZTsKJiM0MzsJfQogCiAJLyogTWF5YmUgdGhlIG1pZGRsZSBvZiB0aGUgcmVnaW9uIGhhcyBkaWZmZXJlbnQgYWNjZXNzIGZyZXF1ZW5jeSAqLwogCWlmIChsYXN0X25yX3JlZ2lvbnMgPT0gbnJfcmVnaW9ucyAmYW1wOyZhbXA7Ci0JCQlucl9yZWdpb25zICZsdDsgY3R4LSZndDthdHRycy5tYXhfbnJfcmVnaW9ucyAvIDMpCiYjNDM7CQkJbnJfcmVnaW9ucyAmbHQ7IG1heF9ucl9yZWdpb25zIC8gMykKIAkJbnJfc3VicmVnaW9ucyA9IDM7CiAKIAlkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KQogCQlkYW1vbl9zcGxpdF9yZWdpb25zX29mKGN0eCwgdCwgbnJfc3VicmVnaW9ucywKIAkJCQkgICAgICAgY3R4LSZndDttaW5fcmVnaW9uX3N6KTsKIAomIzQzO2RvbmU6CiAJbGFzdF9ucl9yZWdpb25zID0gbnJfcmVnaW9uczsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCmluZGV4IGZjZjdjN2ZhZGI1ZmU1Li5kMDljYmIxNDI4Yjc3MyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtMzM1LDYgJiM0MzszMzUsNjkgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlkYW1vbl9kZXN0cm95X2N0eChjKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogV2hlbiB0aGUgdG90YWwgcmVnaW9uIGNvdW50IGlzIGFscmVhZHkgYWJvdmUgbWF4X25yX3JlZ2lvbnMgLyAyLAomIzQzOyAqIGtkYW1vbmRfc3BsaXRfcmVnaW9ucygpIG11c3Qga2VlcCByZWZpbmluZyB0aGUgcmVzb2x1dGlvbiBieSBzcGxpdHRpbmcgYQomIzQzOyAqIGZyYWN0aW9uIG9mIHRoZSByZWdpb25zIChtYWtpbmcgcHJvZ3Jlc3MpLCB3aXRob3V0IGV4Y2VlZGluZwomIzQzOyAqIG1heF9ucl9yZWdpb25zLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9jdHggKmM7CiYjNDM7CXN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7CiYjNDM7CXN0cnVjdCBkYW1vbl9yZWdpb24gKnI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnQ7CiYjNDM7CXVuc2lnbmVkIGludCBucl9iZWZvcmUsIG5yX2FmdGVyLCBpOwomIzQzOwljb25zdCB1bnNpZ25lZCBpbnQgbnJfaW5pdCA9IDc2MDsKJiM0MzsJY29uc3QgdW5zaWduZWQgbG9uZyByZWdpb25fc3ogPSAxMDA7CiYjNDM7CiYjNDM7CWMgPSBkYW1vbl9uZXdfY3R4KCk7CiYjNDM7CWlmICghYykKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtjdHggYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogS2VlcCB0aGUgc3BsaXQgYXJpdGhtZXRpYyBpbmRlcGVuZGVudCBvZiB0aGUgcGFnZSBzaXplICovCiYjNDM7CWMtJmd0O21pbl9yZWdpb25fc3ogPSAxOwomIzQzOwljLSZndDthdHRycy5taW5fbnJfcmVnaW9ucyA9IDEwOwomIzQzOwljLSZndDthdHRycy5tYXhfbnJfcmVnaW9ucyA9IDE1MDA7CiYjNDM7CiYjNDM7CXQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7CiYjNDM7CWlmICghdCkgewomIzQzOwkJZGFtb25fZGVzdHJveV9jdHgoYyk7CiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7dGFyZ2V0IGFsbG9jIGZhaWwmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2luaXQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdGFydCA9IGkgKiByZWdpb25fc3o7CiYjNDM7CQlyID0gZGFtb25fbmV3X3JlZ2lvbihzdGFydCwgc3RhcnQgJiM0MzsgcmVnaW9uX3N6KTsKJiM0MzsJCWlmICghcikgewomIzQzOwkJCWRhbW9uX2ZyZWVfdGFyZ2V0KHQpOwomIzQzOwkJCWRhbW9uX2Rlc3Ryb3lfY3R4KGMpOwomIzQzOwkJCWt1bml0X3NraXAodGVzdCwgJiMzNDtyZWdpb24gYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsJCXItJmd0O25yX2FjY2Vzc2VzID0gKGkgJmFtcDsgMSkgPyAwIDogMTAwOwomIzQzOwkJci0mZ3Q7YWdlID0gNTsKJiM0MzsJCWRhbW9uX2FkZF9yZWdpb24ociwgdCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGFtb25fYWRkX3RhcmdldChjLCB0KTsKJiM0MzsKJiM0MzsJbnJfYmVmb3JlID0gZGFtb25fbnJfcmVnaW9ucyh0KTsKJiM0MzsJLyogQWJvdmUgbWF4X25yX3JlZ2lvbnMgLyAyLCBzbyB0aGUgYmxhbmtldC1zcGxpdCBwYXRoIGlzIHNraXBwZWQgKi8KJiM0MzsJS1VOSVRfRVhQRUNUX0dUKHRlc3QsICh1bnNpZ25lZCBsb25nKW5yX2JlZm9yZSwKJiM0MzsJCQljLSZndDthdHRycy5tYXhfbnJfcmVnaW9ucyAvIDIpOwomIzQzOwomIzQzOwlrZGFtb25kX3NwbGl0X3JlZ2lvbnMoYyk7CiYjNDM7CiYjNDM7CW5yX2FmdGVyID0gZGFtb25fbnJfcmVnaW9ucyh0KTsKJiM0MzsJLyogU3RpbGwgbWFkZSBwcm9ncmVzcyAuLi4gKi8KJiM0MzsJS1VOSVRfRVhQRUNUX0dUKHRlc3QsIG5yX2FmdGVyLCBucl9iZWZvcmUpOwomIzQzOwkvKiAuLi4gYnV0IGRpZCBub3Qgb3ZlcnNob290IHRoZSBjb25maWd1cmVkIG1heGltdW0gKi8KJiM0MzsJS1VOSVRfRVhQRUNUX0xFKHRlc3QsICh1bnNpZ25lZCBsb25nKW5yX2FmdGVyLAomIzQzOwkJCWMtJmd0O2F0dHJzLm1heF9ucl9yZWdpb25zKTsKJiM0MzsKJiM0MzsJZGFtb25fZGVzdHJveV9jdHgoYyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdCkKIHsKIAlzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpOwpAQCAtMTQ2NCw2ICYjNDM7MTUyNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7CiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X21lcmdlX3R3byksCiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2YpLAogCUtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKSwKJiM0MzsJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NwbGl0X2Fib3ZlX2hhbGZfcHJvZ3Jlc3NlcyksCiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLAogCUtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfcmVnaW9ucyksCiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBSZWdpb24gU3BsaXR0aW5nIFBhdGNoIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgYW5kIG1vZGlmeWluZyBga2RhbW9uZF9zcGxpdF9yZWdpb25zYCwgd2hpY2ggaW5zdGFudGx5IHRlbGxzIG1lIHRoaXMgaXMgYWJvdXQgcmVnaW9uIHNwbGl0dGluZyB3aXRoaW4gREFNT04uIEZyb20gdGhlIGluaXRpYWwgZ2xhbmNlLCBpdCBzZWVtcyBmdW5jdGlvbmFsIOKAkyB0aGUgY29yZSBsb2dpYyBmb3IgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyByZWdpb24gc3BsaXR0aW5nIGlzIGJlaW5nIHR3ZWFrZWQuCgpOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSBEQU1PTiYjMzk7cyByZWFjaGFiaWxpdHkgYW5kIHF1aWNrbHkgY2hlY2sgYW55IHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IOKAkyBga2RhbW9uZF9zcGxpdF9yZWdpb25zYCBhbmQgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2Ag4oCTIGJ1dCBhbHNvIGEgZ2VuZXJhbCBzZWFyY2ggZm9yIGBEQU1PTmAgdG8gc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGFyZSB0aWVkIGludG8gdGhlIGJyb2FkZXIgY29udGV4dC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMuIFRoaXMgaW5pdGlhbCBjaGVjayB3aWxsIHRlbGwgbWUgaWYgREFNT04gaXMgZXZlbiBlbmFibGVkIGluIHRoZSByZWxldmFudCBjb25maWdzIGFuZCB3aGF0LCBpZiBhbnl0aGluZywgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBwYXRjaCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2RhbW9uZF9zcGxpdF9yZWdpb25zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zMTA0PXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTM1LSAqIG92ZXJoZWFkIHVuZGVyIHRoZSBkeW5hbWljYWxseSBjaGFuZ2VhYmxlIGFjY2VzcyBwYXR0ZXJuLiAgSWYgYSBtZXJnZSB3YXNcbm1tL2RhbW9uL2NvcmUuYzozMTM2OiAqIHVubmVjZXNzYXJpbHkgbWFkZSwgbGF0ZXIgJiMzOTtrZGFtb25kX3NwbGl0X3JlZ2lvbnMoKSYjMzk7IHdpbGwgcmV2ZXJ0IGl0LlxubW0vZGFtb24vY29yZS5jLTMxMzctICpcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzIzOD1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjc3LSAqL1xubW0vZGFtb24vY29yZS5jOjMyNzg6c3RhdGljIHZvaWQga2RhbW9uZF9zcGxpdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0zMjc5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzUxNj1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzYzMy1cdFx0XHRrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYzozNjM0Olx0XHRcdGtkYW1vbmRfc3BsaXRfcmVnaW9ucyhjdHgpO1xubW0vZGFtb24vY29yZS5jLTM2MzUtXHRcdH1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MjcwPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTMzOS0gKiBXaGVuIHRoZSB0b3RhbCByZWdpb24gY291bnQgaXMgYWxyZWFkeSBhYm92ZSBtYXhfbnJfcmVnaW9ucyAvIDIsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzQwOiAqIGtkYW1vbmRfc3BsaXRfcmVnaW9ucygpIG11c3Qga2VlcCByZWZpbmluZyB0aGUgcmVzb2x1dGlvbiBieSBzcGxpdHRpbmcgYVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM0MS0gKiBmcmFjdGlvbiBvZiB0aGUgcmVnaW9ucyAobWFraW5nIHByb2dyZXNzKSwgd2l0aG91dCBleGNlZWRpbmdcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MzQ0PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzg4LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM4OTpcdGtkYW1vbmRfc3BsaXRfcmVnaW9ucyhjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zOTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYyMAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEQU1PTiBBcmNoaXRlY3R1cmUqKgoKQWxyaWdodCwgc28gYGtkYW1vbmRfc3BsaXRfcmVnaW9uc2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgYnkgYGtkYW1vbmRfZm5gLCB3aGljaCBtYWtlcyBga2RhbW9uZF9mbmAgdGhlIGNlbnRyYWwgdGhyZWFkIGZ1bmN0aW9uIGZvciBEQU1PTi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGhlbHBzIG1lIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoZSBjb250cm9sIGZsb3cuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgREFNT04gY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIGBtbS9kYW1vbi9LY29uZmlnYCB0byBzZWUgd2hhdCBrZXJuZWwgY29uZmlncyBhcmUgbmVjZXNzYXJ5IGZvciBEQU1PTiB0byBmdW5jdGlvbiBwcm9wZXJseS4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgZW5hYmxlZCBhbmQgc2V0IHVwIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU2MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgSSYjMzk7bSB0aGlua2luZyBoZXJl4oCmCgoqKkFuYWx5emluZyB0aGUgREFNT04gQ29kZSBDaGFuZ2VzKioKCkFscmlnaHQsIHNvIHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucyBzZWVtIHRvIGNlbnRlciBhcm91bmQgcmVnaW9uIHNwbGl0dGluZyB3aXRoaW4gREFNT04uIFRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgbG9jYXRlZCBpbiBgbW0vZGFtb24vY29yZS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgdGhhdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIG5vdGluZyB0aGF0IHRoZXJlJiMzOTtzIGEgbmV3IGZ1bmN0aW9uIGNhbGxlZCBgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zYCwgd2hpY2ggaXMgYSBrZXkgYWRkaXRpb24sIGFuZCBga2RhbW9uZF9zcGxpdF9yZWdpb25zYCBoYXMgYmVlbiB1cGRhdGVkIGFzIHdlbGwsIGxpa2VseSB0byBpbnRlZ3JhdGUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gR2l2ZW4gdGhlc2UgZmlsZXMsIHRoZSBuZWNlc3NhcnkgZ2VuZXJhbCBjb25maWcgaXMgYERBTU9OYC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiB0byBjb250cm9sIHRoaXMgbmV3IHNwbGl0dGluZyBiZWhhdmlvciBpbiBkZXRhaWw/IEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3JlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZS0yLVxubW0vZGFtb24vTWFrZWZpbGU6MzpvYmoteVx0XHRcdFx0Oj0gY29yZS5vXG5tbS9kYW1vbi9NYWtlZmlsZS00LW9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MDgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVbmNvbmRpdGlvbmFsIEJ1aWxkIG9mIGBjb3JlLm9gKioKCk9rYXksIHNvIGBjb3JlLm9gIGlzIGJlaW5nIGJ1aWx0IG5vIG1hdHRlciB3aGF0IGlmIHdlJiMzOTtyZSBpbiBgbW0vZGFtb24vYC4gVGhhdCBzdHJpa2VzIG1lIGFzIGEgYml0IG9kZDsgSSB1c3VhbGx5IHByZWZlciBtb3JlIGNvbmRpdGlvbmFsIGJ1aWxkcyB1bmxlc3MgdGhlcmUmIzM5O3MgYSByZWFsbHkgZ29vZCByZWFzb24gZm9yIGl0IHRvIGJlIGFsd2F5cyBpbmNsdWRlZC4gVGltZSB0byBpbnZlc3RpZ2F0ZSB3aHkgdGhpcyBpcyBoYXBwZW5pbmcuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBvYmplY3QgZmlsZSBpbmNsdXNpb24gaXMgaGFuZGxlZCwgYW5kIGl0IHNob3VsZCByZXZlYWwgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgZm9yIHRoZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgbWFpbiBNYWtlZmlsZSBhbmQgdGhpcyBzcGVjaWZpYyBidWlsZCBwcm9jZXNzLiBJJiMzOTtsbCBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGN1bHByaXRzLCBjb25kaXRpb25hbCBmbGFncyBvciBwYXR0ZXJucyB0aGF0IGFyZSBmb3JjaW5nIHRoZSBidWlsZCwgb3IgZXZlbiBpZiBpdCYjMzk7cyBpbXBsaWNpdGx5IGluY2x1ZGVkIGJ5IGFub3RoZXIgZGVwZW5kZW5jeS4gVW5kZXJzdGFuZGluZyB0aGUgbG9naWMgaW4gdGhlIE1ha2VmaWxlIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGJ1aWxkLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEzND1vYmotJChDT05GSUdfREVCVUdfUEFHRV9SRUYpICYjNDM7PSBkZWJ1Z19wYWdlX3JlZi5vXG5tbS9NYWtlZmlsZToxMzU6b2JqLSQoQ09ORklHX0RBTU9OKSAmIzQzOz0gZGFtb24vXG5tbS9NYWtlZmlsZS0xMzYtb2JqLSQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSAmIzQzOz0gdXNlcmNvcHkub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjYyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERBTU9OIENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCB0aGlzIERBTU9OIHRlc3Rpbmcgc2V0dXAgcmlnaHQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDT05GSUdfREFNT05gIGlzIGRlZmluaXRlbHkgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIEFuZCBmb3IgdGVzdGluZywgYENPTkZJR19EQU1PTl9LVU5JVF9URVNUYCBsb29rcyB1c2VmdWwgc2luY2UgaXQgYnVuZGxlcyBhIEtVbml0IHRlc3QuIE5vdywgSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgc3l6a2FsbGVyIGlzIGdvaW5nIHRvIGJlIGZ1enppbmcgdGhlICprZXJuZWwqLCBub3QganVzdCBydW5uaW5nIGlzb2xhdGVkIEtVbml0IHRlc3RzLiBIb3dldmVyLCBzeXprYWxsZXIgKmNhbiogcnVuIEtVbml0IHRlc3RzIGlmIHRoZXkmIzM5O3JlIGJ1aWx0LWluIG9yIGxvYWRlZC4KClRoZSBjcml0aWNhbCBwaWVjZSBvZiBEQU1PTiBmdW5jdGlvbmFsaXR5IGlzIGBrZGFtb25kX3NwbGl0X3JlZ2lvbnNgLCB0aGF0JiMzOTtzIHBhcnQgb2YgdGhlIGNvcmUgbG9naWMuIFRvIGdldCB0byB0aGF0IGZ1bmN0aW9uLCBJIGhhdmUgdG8gaW50ZXJhY3Qgd2l0aCBEQU1PTiBpdHNlbGYuIFR5cGljYWxseSwgdGhhdCBoYXBwZW5zIHRocm91Z2ggc3lzZnMgKGBDT05GSUdfREFNT05fU1lTRlNgKSwgd2hpY2ggc2VlbXMgdGhlIG1vc3QgcHJhY3RpY2FsIG1ldGhvZC4gQWx0aG91Z2ggZGVidWdmcyBpcyBhbHNvIGFuIG9wdGlvbiwgdGhhdCBpcyBkZXByZWNhdGVkLiBLZXJuZWwgbW9kdWxlcyBsaWtlIGBEQU1PTl9SRUNMQUlNYCBhbmQgYERBTU9OX0xSVV9TT1JUYCBhcmUgYWxzbyBhdmFpbGFibGUsIGJ1dCB0aGUgc3lzZnMgcm91dGUgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuCgpUaGVyZWZvcmUsIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9WQUREUmAsIGFuZCBgREFNT05fUEFERFJgLiBOb3csIEkgc2hvdWxkIGZvY3VzIG9uIHdoaWNoIHN5bWJvbHMgd2lsbCBiZSB0aGUgbW9zdCB1c2VmdWwgZm9yIHRlc3RpbmcuCgpMZXQmIzM5O3Mgc2VlLCB0aGUgZm9jdXMgc3ltYm9scyBsb29rIHRvIGJlIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgIGFuZCBga2RhbW9uZF9zcGxpdF9yZWdpb25zYC4gQXJlIHRob3NlIGhvdCBwYXRocywgdGhvdWdoPyBga2RhbW9uZF9zcGxpdF9yZWdpb25zYCBpcyBjYWxsZWQgYnkgYGtkYW1vbmRfZm5gLCB3aGljaCBpcyBhIGt0aHJlYWQgdGhhdCBleGVjdXRlcyBwZXJpb2RpY2FsbHksIGJhc2VkIG9uIHRoZSBgc2FtcGxlX2ludGVydmFsYCBhbmQgYGFnZ3JfaW50ZXJ2YWxgLiBJdCYjMzk7cyBub3QgYSAqZ2VuZXJpYyogaG90IHBhdGgsIGxpa2UgYGttYWxsb2NgIG9yIGBzY2hlZHVsZWAsIGl0JiMzOTtzICpzcGVjaWZpYyogdG8gREFNT04uIFNvLCBga2RhbW9uZF9zcGxpdF9yZWdpb25zYCBhbmQgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgYXJlIGV4YWN0bHkgdGhlIHR5cGUgb2YgZm9jdXMgc3ltYm9scyBJIGFtIGxvb2tpbmcgZm9yLgoKSnVzdCB0byBiZSBzdXJlLCBsZXQgbWUgZG91YmxlIGNoZWNrIHRoYXQgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgaXMgc3RhdGljLi4uIFllcCwgaXQgaXMuIEFuZCBga2RhbW9uZF9zcGxpdF9yZWdpb25zYC4uLiBZZXMsIHN0YXRpYyBhcyB3ZWxsLgoKTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIHRvIHdvcnJ5IGFib3V0LiBBaCwgYGRhbW9uX3NwbGl0X3JlZ2lvbnNfb2ZgLCBidXQgdGhhdCBsb29rcyBsaWtlIGl0JiMzOTtzIGp1c3QgYmVpbmcgY2FsbGVkIGFuZCBub3QgbW9kaWZpZWQuIEdvb2QuCgpTbyB0byByZWNhcCwgbXkgZm9jdXMgc3ltYm9scyBhcmU6CgoqICAgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AKKiAgIGBrZGFtb25kX3NwbGl0X3JlZ2lvbnNgCgpBbmQgbXkgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlOgoKKiAgIGBEQU1PTmAKKiAgIGBEQU1PTl9TWVNGU2AKKiAgIGBEQU1PTl9WQUREUmAKKiAgIGBEQU1PTl9QQUREUmAKKiAgIGBEQU1PTl9LVU5JVF9URVNUYCAoYmVjYXVzZSBhIEtVbml0IHRlc3Qgd2FzIGFkZGVkKS4KCkp1c3QgbmVlZCB0byB2ZXJpZnkgdGhlIGV4YWN0IG5hbWUgZm9yIGBEQU1PTl9LVU5JVF9URVNUYCwgYW5kIEkgYW0gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT05fS1VOSVRfVEVTVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTE1PWNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTE2CgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBDb3JlIExvZ2ljIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgREFNT05fS1VOSVRfVEVTVGAgcGF0Y2guIFJpZ2h0LCBpdCYjMzk7cyBtZXNzaW5nIHdpdGggdGhlIGNvcmUgcmVnaW9uIHNwbGl0dGluZyBsb2dpYyBpbiBEQU1PTiwgc3BlY2lmaWNhbGx5IGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBoYW5kbGUgc2NlbmFyaW9zIHdoZXJlIHRoZSBudW1iZXIgb2YgcmVnaW9ucyBpcyBoaXR0aW5nIHRoZSBjZWlsaW5nLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMsIHNvbWV0aGluZyB0aGF0IHdvdWxkIGJlIGRpcmVjdGx5IHRyaWdnZXJlZCB0aHJvdWdoIERBTU9OJiMzOTtzIHN5c2ZzIGludGVyZmFjZSBhZnRlciBzb21lIGNvbmZpZ3VyYXRpb24uCgpIbW0sIGxldCYjMzk7cyBzZWUsIHdoYXQgZWxzZSBzaG91bGQgSSBjb25zaWRlciBoZXJlIHRvIGVuc3VyZSB0aGUgdGVzdHMgYXJlIGNvbXByZWhlbnNpdmU/IFJpZ2h0LCBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBjb25maWd1cmF0aW9ucyBsaWtlIGBEQU1PTl9SRUNMQUlNYCBhbmQgYERBTU9OX0xSVV9TT1JUYC4gRW5hYmxpbmcgdGhvc2Ugd291bGQgcHJvdmlkZSBldmVuIG1vcmUgYXZlbnVlcyB0byB0cmlnZ2VyIERBTU9OIGFuZCB0aHVzIHRlc3QgdGhlIG5ldyByZWdpb24gc3BsaXR0aW5nIG1vcmUgdGhvcm91Z2hseSwgZ2l2aW5nIG1lIGEgbXVjaCB3aWRlciB0ZXN0IHNwYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fS1VOSVRfVEVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3NwbGl0X3NvbWVfcmVnaW9ucyYjMzQ7LAogICAgJiMzNDtrZGFtb25kX3NwbGl0X3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcmVnaW9uIHNwbGl0dGluZyBsb2dpYyBpbiBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvciksIGludHJvZHVjaW5nIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgYXBwcm9hY2hlcyB0aGUgbWF4aW11bSBsaW1pdC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgYnkgY29uZmlndXJpbmcgYW5kIHJ1bm5pbmcgREFNT04gdmlhIGl0cyBzeXNmcyBpbnRlcmZhY2Ugb3Igb3RoZXIgREFNT04gbW9kdWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fS1VOSVRfVEVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3NwbGl0X3NvbWVfcmVnaW9ucyYjMzQ7LAogICAgJiMzNDtrZGFtb25kX3NwbGl0X3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcmVnaW9uIHNwbGl0dGluZyBsb2dpYyBpbiBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvciksIGludHJvZHVjaW5nIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgYXBwcm9hY2hlcyB0aGUgbWF4aW11bSBsaW1pdC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgYnkgY29uZmlndXJpbmcgYW5kIHJ1bm5pbmcgREFNT04gdmlhIGl0cyBzeXNmcyBpbnRlcmZhY2Ugb3Igb3RoZXIgREFNT04gbW9kdWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjEyOjMxLjA5ODA2MTk0MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1ODM2ODM0NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9LVU5JVF9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3BsaXRfc29tZV9yZWdpb25zXCIsXG4gICAgXCJrZGFtb25kX3NwbGl0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSByZWdpb24gc3BsaXR0aW5nIGxvZ2ljIGluIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSwgaW50cm9kdWNpbmcgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBudW1iZXIgb2YgcmVnaW9ucyBhcHByb2FjaGVzIHRoZSBtYXhpbXVtIGxpbWl0LiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBjb25maWd1cmluZyBhbmQgcnVubmluZyBEQU1PTiB2aWEgaXRzIHN5c2ZzIGludGVyZmFjZSBvciBvdGhlciBEQU1PTiBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjozMS4wOTgwNjk0MzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0Njk0ODM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg0ZTE4YjIwMWFkMTcxOWM4ZDZmOWRjODJmNDY2YjBlZjYxNDY1YzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTY6MTI6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggMDI3MjUwZTQzYzY2ZjIuLjliYmM2MGEyYThjMDViIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0zMjM0LDYgKzMyMzQsMzcgQEAgc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIFxcdH1cXG4gfVxcbiBcXG4rLyogU3BsaXQgb25lIGluIGV2ZXJ5IEBzcGxpdF9zdGVwIHJlZ2lvbnMgaW50byB0d28sIGZyb20gYSByb3RhdGluZyBvZmZzZXQgKi9cXG4rc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHNwbGl0X3N0ZXApXFxuK3tcXG4rXFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgcm90YXRpb247XFxuK1xcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuK1xcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpuZXh0O1xcbitcXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IHJvdGF0aW9uKysgJSBzcGxpdF9zdGVwO1xcbitcXHR1bnNpZ25lZCBsb25nIGlkeCA9IDA7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XFxuK1xcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpIHtcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzel9yZWdpb24sIHN6X3N1YjtcXG4rXFxuK1xcdFxcdFxcdGlmIChpZHgrKyAlIHNwbGl0X3N0ZXAgIT0gb2Zmc2V0KVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0c3pfcmVnaW9uID0gZGFtb25fc3pfcmVnaW9uKHIpO1xcbitcXHRcXHRcXHRpZiAoc3pfcmVnaW9uIFxcdTAwM2MgMiAqIGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRzel9zdWIgPSBBTElHTl9ET1dOKGRhbW9uX3JhbmQoY3R4LCAxLCAxMCkgKlxcbitcXHRcXHRcXHRcXHRcXHRzel9yZWdpb24gLyAxMCwgY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6KTtcXG4rXFx0XFx0XFx0LyogRG8gbm90IGFsbG93IGJsYW5rIHJlZ2lvbiAqL1xcbitcXHRcXHRcXHRpZiAoc3pfc3ViID09IDAgfHwgc3pfc3ViIFxcdTAwM2U9IHN6X3JlZ2lvbilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfc3ViKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuIC8qXFxuICAqIFNwbGl0IGV2ZXJ5IHRhcmdldCByZWdpb24gaW50byByYW5kb21seS1zaXplZCBzbWFsbCByZWdpb25zXFxuICAqXFxuQEAgLTMyNDcsMjUgKzMyNzgsMzMgQEAgc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIHN0YXRpYyB2b2lkIGtkYW1vbmRfc3BsaXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4tXFx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnMgPSAwO1xcbi1cXHRzdGF0aWMgdW5zaWduZWQgaW50IGxhc3RfbnJfcmVnaW9ucztcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9yZWdpb25zID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXhfbnJfcmVnaW9ucyA9IGN0eC1cXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnM7XFxuK1xcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfbnJfcmVnaW9ucztcXG4gXFx0aW50IG5yX3N1YnJlZ2lvbnMgPSAyO1xcbiBcXG4gXFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eClcXG4gXFx0XFx0bnJfcmVnaW9ucyArPSBkYW1vbl9ucl9yZWdpb25zKHQpO1xcbiBcXG4tXFx0aWYgKG5yX3JlZ2lvbnMgXFx1MDAzZSBjdHgtXFx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zIC8gMilcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAobnJfcmVnaW9ucyBcXHUwMDNlPSBtYXhfbnJfcmVnaW9ucylcXG4rXFx0XFx0Z290byBkb25lO1xcbitcXG4rXFx0aWYgKG5yX3JlZ2lvbnMgXFx1MDAzZSBtYXhfbnJfcmVnaW9ucyAvIDIpIHtcXG4rXFx0XFx0ZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKGN0eCxcXG4rXFx0XFx0XFx0bWF4X25yX3JlZ2lvbnMgLyAobWF4X25yX3JlZ2lvbnMgLSBucl9yZWdpb25zKSk7XFxuK1xcdFxcdGdvdG8gZG9uZTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogTWF5YmUgdGhlIG1pZGRsZSBvZiB0aGUgcmVnaW9uIGhhcyBkaWZmZXJlbnQgYWNjZXNzIGZyZXF1ZW5jeSAqL1xcbiBcXHRpZiAobGFzdF9ucl9yZWdpb25zID09IG5yX3JlZ2lvbnMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0bnJfcmVnaW9ucyBcXHUwMDNjIGN0eC1cXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMgLyAzKVxcbitcXHRcXHRcXHRucl9yZWdpb25zIFxcdTAwM2MgbWF4X25yX3JlZ2lvbnMgLyAzKVxcbiBcXHRcXHRucl9zdWJyZWdpb25zID0gMztcXG4gXFxuIFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpXFxuIFxcdFxcdGRhbW9uX3NwbGl0X3JlZ2lvbnNfb2YoY3R4LCB0LCBucl9zdWJyZWdpb25zLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6KTtcXG4gXFxuK2RvbmU6XFxuIFxcdGxhc3RfbnJfcmVnaW9ucyA9IG5yX3JlZ2lvbnM7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbmluZGV4IGZjZjdjN2ZhZGI1ZmU1Li5kMDljYmIxNDI4Yjc3MyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5AQCAtMzM1LDYgKzMzNSw2OSBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcXG4gfVxcbiBcXG4rLypcXG4rICogV2hlbiB0aGUgdG90YWwgcmVnaW9uIGNvdW50IGlzIGFscmVhZHkgYWJvdmUgbWF4X25yX3JlZ2lvbnMgLyAyLFxcbisgKiBrZGFtb25kX3NwbGl0X3JlZ2lvbnMoKSBtdXN0IGtlZXAgcmVmaW5pbmcgdGhlIHJlc29sdXRpb24gYnkgc3BsaXR0aW5nIGFcXG4rICogZnJhY3Rpb24gb2YgdGhlIHJlZ2lvbnMgKG1ha2luZyBwcm9ncmVzcyksIHdpdGhvdXQgZXhjZWVkaW5nXFxuKyAqIG1heF9ucl9yZWdpb25zLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9jdHggKmM7XFxuK1xcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuK1xcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XFxuK1xcdHVuc2lnbmVkIGludCBucl9iZWZvcmUsIG5yX2FmdGVyLCBpO1xcbitcXHRjb25zdCB1bnNpZ25lZCBpbnQgbnJfaW5pdCA9IDc2MDtcXG4rXFx0Y29uc3QgdW5zaWduZWQgbG9uZyByZWdpb25fc3ogPSAxMDA7XFxuK1xcbitcXHRjID0gZGFtb25fbmV3X2N0eCgpO1xcbitcXHRpZiAoIWMpXFxuK1xcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImN0eCBhbGxvYyBmYWlsXFxcIik7XFxuK1xcbitcXHQvKiBLZWVwIHRoZSBzcGxpdCBhcml0aG1ldGljIGluZGVwZW5kZW50IG9mIHRoZSBwYWdlIHNpemUgKi9cXG4rXFx0Yy1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDE7XFxuK1xcdGMtXFx1MDAzZWF0dHJzLm1pbl9ucl9yZWdpb25zID0gMTA7XFxuK1xcdGMtXFx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zID0gMTUwMDtcXG4rXFxuK1xcdHQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XFxuK1xcdGlmICghdCkge1xcbitcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcXG4rXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwidGFyZ2V0IGFsbG9jIGZhaWxcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2luaXQ7IGkrKykge1xcbitcXHRcXHRzdGFydCA9IGkgKiByZWdpb25fc3o7XFxuK1xcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKHN0YXJ0LCBzdGFydCArIHJlZ2lvbl9zeik7XFxuK1xcdFxcdGlmICghcikge1xcbitcXHRcXHRcXHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcXG4rXFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XFxuK1xcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInJlZ2lvbiBhbGxvYyBmYWlsXFxcIik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ci1cXHUwMDNlbnJfYWNjZXNzZXMgPSAoaSBcXHUwMDI2IDEpID8gMCA6IDEwMDtcXG4rXFx0XFx0ci1cXHUwMDNlYWdlID0gNTtcXG4rXFx0XFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcXG4rXFx0fVxcbitcXG4rXFx0ZGFtb25fYWRkX3RhcmdldChjLCB0KTtcXG4rXFxuK1xcdG5yX2JlZm9yZSA9IGRhbW9uX25yX3JlZ2lvbnModCk7XFxuK1xcdC8qIEFib3ZlIG1heF9ucl9yZWdpb25zIC8gMiwgc28gdGhlIGJsYW5rZXQtc3BsaXQgcGF0aCBpcyBza2lwcGVkICovXFxuK1xcdEtVTklUX0VYUEVDVF9HVCh0ZXN0LCAodW5zaWduZWQgbG9uZylucl9iZWZvcmUsXFxuK1xcdFxcdFxcdGMtXFx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zIC8gMik7XFxuK1xcbitcXHRrZGFtb25kX3NwbGl0X3JlZ2lvbnMoYyk7XFxuK1xcbitcXHRucl9hZnRlciA9IGRhbW9uX25yX3JlZ2lvbnModCk7XFxuK1xcdC8qIFN0aWxsIG1hZGUgcHJvZ3Jlc3MgLi4uICovXFxuK1xcdEtVTklUX0VYUEVDVF9HVCh0ZXN0LCBucl9hZnRlciwgbnJfYmVmb3JlKTtcXG4rXFx0LyogLi4uIGJ1dCBkaWQgbm90IG92ZXJzaG9vdCB0aGUgY29uZmlndXJlZCBtYXhpbXVtICovXFxuK1xcdEtVTklUX0VYUEVDVF9MRSh0ZXN0LCAodW5zaWduZWQgbG9uZylucl9hZnRlcixcXG4rXFx0XFx0XFx0Yy1cXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMpO1xcbitcXG4rXFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcXG5AQCAtMTQ2NCw2ICsxNTI3LDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X21lcmdlX3R3byksXFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NwbGl0X3JlZ2lvbnNfb2YpLFxcbitcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnApLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjozMS40NDU4NDk0ODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDg5MDMyNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9LVU5JVF9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3BsaXRfc29tZV9yZWdpb25zXCIsXG4gICAgXCJrZGFtb25kX3NwbGl0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSByZWdpb24gc3BsaXR0aW5nIGxvZ2ljIGluIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSwgaW50cm9kdWNpbmcgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBudW1iZXIgb2YgcmVnaW9ucyBhcHByb2FjaGVzIHRoZSBtYXhpbXVtIGxpbWl0LiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBjb25maWd1cmluZyBhbmQgcnVubmluZyBEQU1PTiB2aWEgaXRzIHN5c2ZzIGludGVyZmFjZSBvciBvdGhlciBEQU1PTiBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg0ZTE4YjIwMWFkMTcxOWM4ZDZmOWRjODJmNDY2YjBlZjYxNDY1YzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxNjoxMjozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggMDI3MjUwZTQzYzY2ZjIuLjliYmM2MGEyYThjMDViIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMjM0LDYgKzMyMzQsMzcgQEAgc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gXHR9XG4gfVxuIFxuKy8qIFNwbGl0IG9uZSBpbiBldmVyeSBAc3BsaXRfc3RlcCByZWdpb25zIGludG8gdHdvLCBmcm9tIGEgcm90YXRpbmcgb2Zmc2V0ICovXG4rc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbitcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBzcGxpdF9zdGVwKVxuK3tcbitcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHJvdGF0aW9uO1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbitcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpuZXh0O1xuK1x0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSByb3RhdGlvbisrICUgc3BsaXRfc3RlcDtcbitcdHVuc2lnbmVkIGxvbmcgaWR4ID0gMDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbitcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUociwgbmV4dCwgdCkge1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9uLCBzel9zdWI7XG4rXG4rXHRcdFx0aWYgKGlkeCsrICUgc3BsaXRfc3RlcCAhPSBvZmZzZXQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRzel9yZWdpb24gPSBkYW1vbl9zel9yZWdpb24ocik7XG4rXHRcdFx0aWYgKHN6X3JlZ2lvbiBcdTAwM2MgMiAqIGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0c3pfc3ViID0gQUxJR05fRE9XTihkYW1vbl9yYW5kKGN0eCwgMSwgMTApICpcbitcdFx0XHRcdFx0c3pfcmVnaW9uIC8gMTAsIGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbitcdFx0XHQvKiBEbyBub3QgYWxsb3cgYmxhbmsgcmVnaW9uICovXG4rXHRcdFx0aWYgKHN6X3N1YiA9PSAwIHx8IHN6X3N1YiBcdTAwM2U9IHN6X3JlZ2lvbilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzel9zdWIpO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogU3BsaXQgZXZlcnkgdGFyZ2V0IHJlZ2lvbiBpbnRvIHJhbmRvbWx5LXNpemVkIHNtYWxsIHJlZ2lvbnNcbiAgKlxuQEAgLTMyNDcsMjUgKzMyNzgsMzMgQEAgc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gc3RhdGljIHZvaWQga2RhbW9uZF9zcGxpdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuLVx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnMgPSAwO1xuLVx0c3RhdGljIHVuc2lnbmVkIGludCBsYXN0X25yX3JlZ2lvbnM7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3JlZ2lvbnMgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBtYXhfbnJfcmVnaW9ucyA9IGN0eC1cdTAwM2VhdHRycy5tYXhfbnJfcmVnaW9ucztcbitcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfbnJfcmVnaW9ucztcbiBcdGludCBucl9zdWJyZWdpb25zID0gMjtcbiBcbiBcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpXG4gXHRcdG5yX3JlZ2lvbnMgKz0gZGFtb25fbnJfcmVnaW9ucyh0KTtcbiBcbi1cdGlmIChucl9yZWdpb25zIFx1MDAzZSBjdHgtXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMgLyAyKVxuLVx0XHRyZXR1cm47XG4rXHRpZiAobnJfcmVnaW9ucyBcdTAwM2U9IG1heF9ucl9yZWdpb25zKVxuK1x0XHRnb3RvIGRvbmU7XG4rXG4rXHRpZiAobnJfcmVnaW9ucyBcdTAwM2UgbWF4X25yX3JlZ2lvbnMgLyAyKSB7XG4rXHRcdGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9ucyhjdHgsXG4rXHRcdFx0bWF4X25yX3JlZ2lvbnMgLyAobWF4X25yX3JlZ2lvbnMgLSBucl9yZWdpb25zKSk7XG4rXHRcdGdvdG8gZG9uZTtcbitcdH1cbiBcbiBcdC8qIE1heWJlIHRoZSBtaWRkbGUgb2YgdGhlIHJlZ2lvbiBoYXMgZGlmZmVyZW50IGFjY2VzcyBmcmVxdWVuY3kgKi9cbiBcdGlmIChsYXN0X25yX3JlZ2lvbnMgPT0gbnJfcmVnaW9ucyBcdTAwMjZcdTAwMjZcbi1cdFx0XHRucl9yZWdpb25zIFx1MDAzYyBjdHgtXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMgLyAzKVxuK1x0XHRcdG5yX3JlZ2lvbnMgXHUwMDNjIG1heF9ucl9yZWdpb25zIC8gMylcbiBcdFx0bnJfc3VicmVnaW9ucyA9IDM7XG4gXG4gXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KVxuIFx0XHRkYW1vbl9zcGxpdF9yZWdpb25zX29mKGN0eCwgdCwgbnJfc3VicmVnaW9ucyxcbiBcdFx0XHRcdCAgICAgICBjdHgtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4gXG4rZG9uZTpcbiBcdGxhc3RfbnJfcmVnaW9ucyA9IG5yX3JlZ2lvbnM7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggZmNmN2M3ZmFkYjVmZTUuLmQwOWNiYjE0MjhiNzczIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbkBAIC0zMzUsNiArMzM1LDY5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiB9XG4gXG4rLypcbisgKiBXaGVuIHRoZSB0b3RhbCByZWdpb24gY291bnQgaXMgYWxyZWFkeSBhYm92ZSBtYXhfbnJfcmVnaW9ucyAvIDIsXG4rICoga2RhbW9uZF9zcGxpdF9yZWdpb25zKCkgbXVzdCBrZWVwIHJlZmluaW5nIHRoZSByZXNvbHV0aW9uIGJ5IHNwbGl0dGluZyBhXG4rICogZnJhY3Rpb24gb2YgdGhlIHJlZ2lvbnMgKG1ha2luZyBwcm9ncmVzcyksIHdpdGhvdXQgZXhjZWVkaW5nXG4rICogbWF4X25yX3JlZ2lvbnMuXG4rICovXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBkYW1vbl9jdHggKmM7XG4rXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuK1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbitcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XG4rXHR1bnNpZ25lZCBpbnQgbnJfYmVmb3JlLCBucl9hZnRlciwgaTtcbitcdGNvbnN0IHVuc2lnbmVkIGludCBucl9pbml0ID0gNzYwO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyByZWdpb25fc3ogPSAxMDA7XG4rXG4rXHRjID0gZGFtb25fbmV3X2N0eCgpO1xuK1x0aWYgKCFjKVxuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwiY3R4IGFsbG9jIGZhaWxcIik7XG4rXG4rXHQvKiBLZWVwIHRoZSBzcGxpdCBhcml0aG1ldGljIGluZGVwZW5kZW50IG9mIHRoZSBwYWdlIHNpemUgKi9cbitcdGMtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDE7XG4rXHRjLVx1MDAzZWF0dHJzLm1pbl9ucl9yZWdpb25zID0gMTA7XG4rXHRjLVx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zID0gMTUwMDtcbitcbitcdHQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XG4rXHRpZiAoIXQpIHtcbitcdFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJ0YXJnZXQgYWxsb2MgZmFpbFwiKTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2luaXQ7IGkrKykge1xuK1x0XHRzdGFydCA9IGkgKiByZWdpb25fc3o7XG4rXHRcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKHN0YXJ0LCBzdGFydCArIHJlZ2lvbl9zeik7XG4rXHRcdGlmICghcikge1xuK1x0XHRcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xuK1x0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGMpO1xuK1x0XHRcdGt1bml0X3NraXAodGVzdCwgXCJyZWdpb24gYWxsb2MgZmFpbFwiKTtcbitcdFx0fVxuK1x0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gKGkgXHUwMDI2IDEpID8gMCA6IDEwMDtcbitcdFx0ci1cdTAwM2VhZ2UgPSA1O1xuK1x0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xuK1x0fVxuK1xuK1x0ZGFtb25fYWRkX3RhcmdldChjLCB0KTtcbitcbitcdG5yX2JlZm9yZSA9IGRhbW9uX25yX3JlZ2lvbnModCk7XG4rXHQvKiBBYm92ZSBtYXhfbnJfcmVnaW9ucyAvIDIsIHNvIHRoZSBibGFua2V0LXNwbGl0IHBhdGggaXMgc2tpcHBlZCAqL1xuK1x0S1VOSVRfRVhQRUNUX0dUKHRlc3QsICh1bnNpZ25lZCBsb25nKW5yX2JlZm9yZSxcbitcdFx0XHRjLVx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zIC8gMik7XG4rXG4rXHRrZGFtb25kX3NwbGl0X3JlZ2lvbnMoYyk7XG4rXG4rXHRucl9hZnRlciA9IGRhbW9uX25yX3JlZ2lvbnModCk7XG4rXHQvKiBTdGlsbCBtYWRlIHByb2dyZXNzIC4uLiAqL1xuK1x0S1VOSVRfRVhQRUNUX0dUKHRlc3QsIG5yX2FmdGVyLCBucl9iZWZvcmUpO1xuK1x0LyogLi4uIGJ1dCBkaWQgbm90IG92ZXJzaG9vdCB0aGUgY29uZmlndXJlZCBtYXhpbXVtICovXG4rXHRLVU5JVF9FWFBFQ1RfTEUodGVzdCwgKHVuc2lnbmVkIGxvbmcpbnJfYWZ0ZXIsXG4rXHRcdFx0Yy1cdTAwM2VhdHRycy5tYXhfbnJfcmVnaW9ucyk7XG4rXG4rXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpO1xuQEAgLTE0NjQsNiArMTUyNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKSxcbitcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9yZWdpb25zKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjozMS40NDU4NTI0NzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDgzOTY0NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFJlZ2lvbiBTcGxpdHRpbmcgUGF0Y2ggQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkaW5nIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgIGFuZCBtb2RpZnlpbmcgYGtkYW1vbmRfc3BsaXRfcmVnaW9uc2AsIHdoaWNoIGluc3RhbnRseSB0ZWxscyBtZSB0aGlzIGlzIGFib3V0IHJlZ2lvbiBzcGxpdHRpbmcgd2l0aGluIERBTU9OLiBGcm9tIHRoZSBpbml0aWFsIGdsYW5jZSwgaXQgc2VlbXMgZnVuY3Rpb25hbCDigJMgdGhlIGNvcmUgbG9naWMgZm9yIGRhdGEgYWNjZXNzIG1vbml0b3JpbmcgcmVnaW9uIHNwbGl0dGluZyBpcyBiZWluZyB0d2Vha2VkLlxuXG5Ob3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSBEQU1PTidzIHJlYWNoYWJpbGl0eSBhbmQgcXVpY2tseSBjaGVjayBhbnkgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEknbGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSDigJMgYGtkYW1vbmRfc3BsaXRfcmVnaW9uc2AgYW5kIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgIOKAkyBidXQgYWxzbyBhIGdlbmVyYWwgc2VhcmNoIGZvciBgREFNT05gIHRvIHNlZSBob3cgdGhlc2UgY2hhbmdlcyBhcmUgdGllZCBpbnRvIHRoZSBicm9hZGVyIGNvbnRleHQuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMuIFRoaXMgaW5pdGlhbCBjaGVjayB3aWxsIHRlbGwgbWUgaWYgREFNT04gaXMgZXZlbiBlbmFibGVkIGluIHRoZSByZWxldmFudCBjb25maWdzIGFuZCB3aGF0LCBpZiBhbnl0aGluZywgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBwYXRjaCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjozNS45Mjk4MTkzMjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NDQxNTE0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZGFtb25kX3NwbGl0X3JlZ2lvbnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMxMDQ9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzEzNS0gKiBvdmVyaGVhZCB1bmRlciB0aGUgZHluYW1pY2FsbHkgY2hhbmdlYWJsZSBhY2Nlc3MgcGF0dGVybi4gIElmIGEgbWVyZ2Ugd2FzXFxubW0vZGFtb24vY29yZS5jOjMxMzY6ICogdW5uZWNlc3NhcmlseSBtYWRlLCBsYXRlciAna2RhbW9uZF9zcGxpdF9yZWdpb25zKCknIHdpbGwgcmV2ZXJ0IGl0Llxcbm1tL2RhbW9uL2NvcmUuYy0zMTM3LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzIzOD1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyNzctICovXFxubW0vZGFtb24vY29yZS5jOjMyNzg6c3RhdGljIHZvaWQga2RhbW9uZF9zcGxpdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMzI3OS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzUxNj1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjMzLVxcdFxcdFxcdGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZChjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYzozNjM0OlxcdFxcdFxcdGtkYW1vbmRfc3BsaXRfcmVnaW9ucyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNjM1LVxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0yNzA9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zMzktICogV2hlbiB0aGUgdG90YWwgcmVnaW9uIGNvdW50IGlzIGFscmVhZHkgYWJvdmUgbWF4X25yX3JlZ2lvbnMgLyAyLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNDA6ICoga2RhbW9uZF9zcGxpdF9yZWdpb25zKCkgbXVzdCBrZWVwIHJlZmluaW5nIHRoZSByZXNvbHV0aW9uIGJ5IHNwbGl0dGluZyBhXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM0MS0gKiBmcmFjdGlvbiBvZiB0aGUgcmVnaW9ucyAobWFraW5nIHByb2dyZXNzKSwgd2l0aG91dCBleGNlZWRpbmdcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0zNDQ9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM4OC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Mzg5OlxcdGtkYW1vbmRfc3BsaXRfcmVnaW9ucyhjKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzkwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjozOC4zMTQyNDE5NjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzI4ODkyMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgREFNT04gQXJjaGl0ZWN0dXJlKipcblxuQWxyaWdodCwgc28gYGtkYW1vbmRfc3BsaXRfcmVnaW9uc2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgYnkgYGtkYW1vbmRfZm5gLCB3aGljaCBtYWtlcyBga2RhbW9uZF9mbmAgdGhlIGNlbnRyYWwgdGhyZWFkIGZ1bmN0aW9uIGZvciBEQU1PTi4gVGhhdCdzIGdvb2QgdG8ga25vdywgaGVscHMgbWUgYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhlIGNvbnRyb2wgZmxvdy4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBEQU1PTiBjb25maWd1cmF0aW9uLiBMZXQncyBkaWcgaW50byBgbW0vZGFtb24vS2NvbmZpZ2AgdG8gc2VlIHdoYXQga2VybmVsIGNvbmZpZ3MgYXJlIG5lY2Vzc2FyeSBmb3IgREFNT04gdG8gZnVuY3Rpb24gcHJvcGVybHkuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGVuYWJsZWQgYW5kIHNldCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MjAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjo0MS4wNDMxMzY0NjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMTA4NjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjo0My4yNTQyMzI2MDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODcxMDU1OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCBJJ20gdGhpbmtpbmcgaGVyZeKAplxuXG4qKkFuYWx5emluZyB0aGUgREFNT04gQ29kZSBDaGFuZ2VzKipcblxuQWxyaWdodCwgc28gdGhlIHJlY2VudCBtb2RpZmljYXRpb25zIHNlZW0gdG8gY2VudGVyIGFyb3VuZCByZWdpb24gc3BsaXR0aW5nIHdpdGhpbiBEQU1PTi4gVGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBsb2NhdGVkIGluIGBtbS9kYW1vbi9jb3JlLmNgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyB0aGF0J3MgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSdtIG5vdGluZyB0aGF0IHRoZXJlJ3MgYSBuZXcgZnVuY3Rpb24gY2FsbGVkIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgLCB3aGljaCBpcyBhIGtleSBhZGRpdGlvbiwgYW5kIGBrZGFtb25kX3NwbGl0X3JlZ2lvbnNgIGhhcyBiZWVuIHVwZGF0ZWQgYXMgd2VsbCwgbGlrZWx5IHRvIGludGVncmF0ZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBHaXZlbiB0aGVzZSBmaWxlcywgdGhlIG5lY2Vzc2FyeSBnZW5lcmFsIGNvbmZpZyBpcyBgREFNT05gLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mIHRvIGNvbnRyb2wgdGhpcyBuZXcgc3BsaXR0aW5nIGJlaGF2aW9yIGluIGRldGFpbD8gSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhhdCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTYzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6MTI6NDcuMTI1MjkxMTk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDI1NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9NYWtlZmlsZS0yLVxcbm1tL2RhbW9uL01ha2VmaWxlOjM6b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG5tbS9kYW1vbi9NYWtlZmlsZS00LW9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjo0Ny4xODM3MzMyNDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc3NDMzNjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBVbmNvbmRpdGlvbmFsIEJ1aWxkIG9mIGBjb3JlLm9gKipcblxuT2theSwgc28gYGNvcmUub2AgaXMgYmVpbmcgYnVpbHQgbm8gbWF0dGVyIHdoYXQgaWYgd2UncmUgaW4gYG1tL2RhbW9uL2AuIFRoYXQgc3RyaWtlcyBtZSBhcyBhIGJpdCBvZGQ7IEkgdXN1YWxseSBwcmVmZXIgbW9yZSBjb25kaXRpb25hbCBidWlsZHMgdW5sZXNzIHRoZXJlJ3MgYSByZWFsbHkgZ29vZCByZWFzb24gZm9yIGl0IHRvIGJlIGFsd2F5cyBpbmNsdWRlZC4gVGltZSB0byBpbnZlc3RpZ2F0ZSB3aHkgdGhpcyBpcyBoYXBwZW5pbmcuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIG9iamVjdCBmaWxlIGluY2x1c2lvbiBpcyBoYW5kbGVkLCBhbmQgaXQgc2hvdWxkIHJldmVhbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyBmb3IgdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBtYWluIE1ha2VmaWxlIGFuZCB0aGlzIHNwZWNpZmljIGJ1aWxkIHByb2Nlc3MuIEknbGwgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjdWxwcml0cywgY29uZGl0aW9uYWwgZmxhZ3Mgb3IgcGF0dGVybnMgdGhhdCBhcmUgZm9yY2luZyB0aGUgYnVpbGQsIG9yIGV2ZW4gaWYgaXQncyBpbXBsaWNpdGx5IGluY2x1ZGVkIGJ5IGFub3RoZXIgZGVwZW5kZW5jeS4gVW5kZXJzdGFuZGluZyB0aGUgbG9naWMgaW4gdGhlIE1ha2VmaWxlIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGJ1aWxkLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MDgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjo1MC45NjExNzA1NzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTQ2NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEzND1vYmotJChDT05GSUdfREVCVUdfUEFHRV9SRUYpICs9IGRlYnVnX3BhZ2VfcmVmLm9cXG5tbS9NYWtlZmlsZToxMzU6b2JqLSQoQ09ORklHX0RBTU9OKSArPSBkYW1vbi9cXG5tbS9NYWtlZmlsZS0xMzYtb2JqLSQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSArPSB1c2VyY29weS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjEyOjUxLjAyMDEyNTY1N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Nzk5NzMwNzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERBTU9OIENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRoaXMgREFNT04gdGVzdGluZyBzZXR1cCByaWdodC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYENPTkZJR19EQU1PTmAgaXMgZGVmaW5pdGVseSB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoYXQncyBhIGdpdmVuLiBBbmQgZm9yIHRlc3RpbmcsIGBDT05GSUdfREFNT05fS1VOSVRfVEVTVGAgbG9va3MgdXNlZnVsIHNpbmNlIGl0IGJ1bmRsZXMgYSBLVW5pdCB0ZXN0LiBOb3csIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IHN5emthbGxlciBpcyBnb2luZyB0byBiZSBmdXp6aW5nIHRoZSAqa2VybmVsKiwgbm90IGp1c3QgcnVubmluZyBpc29sYXRlZCBLVW5pdCB0ZXN0cy4gSG93ZXZlciwgc3l6a2FsbGVyICpjYW4qIHJ1biBLVW5pdCB0ZXN0cyBpZiB0aGV5J3JlIGJ1aWx0LWluIG9yIGxvYWRlZC5cblxuVGhlIGNyaXRpY2FsIHBpZWNlIG9mIERBTU9OIGZ1bmN0aW9uYWxpdHkgaXMgYGtkYW1vbmRfc3BsaXRfcmVnaW9uc2AsIHRoYXQncyBwYXJ0IG9mIHRoZSBjb3JlIGxvZ2ljLiBUbyBnZXQgdG8gdGhhdCBmdW5jdGlvbiwgSSBoYXZlIHRvIGludGVyYWN0IHdpdGggREFNT04gaXRzZWxmLiBUeXBpY2FsbHksIHRoYXQgaGFwcGVucyB0aHJvdWdoIHN5c2ZzIChgQ09ORklHX0RBTU9OX1NZU0ZTYCksIHdoaWNoIHNlZW1zIHRoZSBtb3N0IHByYWN0aWNhbCBtZXRob2QuIEFsdGhvdWdoIGRlYnVnZnMgaXMgYWxzbyBhbiBvcHRpb24sIHRoYXQgaXMgZGVwcmVjYXRlZC4gS2VybmVsIG1vZHVsZXMgbGlrZSBgREFNT05fUkVDTEFJTWAgYW5kIGBEQU1PTl9MUlVfU09SVGAgYXJlIGFsc28gYXZhaWxhYmxlLCBidXQgdGhlIHN5c2ZzIHJvdXRlIG1ha2VzIHRoZSBtb3N0IHNlbnNlLlxuXG5UaGVyZWZvcmUsIEknbGwgbmVlZCB0byBlbmFibGUgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1ZBRERSYCwgYW5kIGBEQU1PTl9QQUREUmAuIE5vdywgSSBzaG91bGQgZm9jdXMgb24gd2hpY2ggc3ltYm9scyB3aWxsIGJlIHRoZSBtb3N0IHVzZWZ1bCBmb3IgdGVzdGluZy5cblxuTGV0J3Mgc2VlLCB0aGUgZm9jdXMgc3ltYm9scyBsb29rIHRvIGJlIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgIGFuZCBga2RhbW9uZF9zcGxpdF9yZWdpb25zYC4gQXJlIHRob3NlIGhvdCBwYXRocywgdGhvdWdoPyBga2RhbW9uZF9zcGxpdF9yZWdpb25zYCBpcyBjYWxsZWQgYnkgYGtkYW1vbmRfZm5gLCB3aGljaCBpcyBhIGt0aHJlYWQgdGhhdCBleGVjdXRlcyBwZXJpb2RpY2FsbHksIGJhc2VkIG9uIHRoZSBgc2FtcGxlX2ludGVydmFsYCBhbmQgYGFnZ3JfaW50ZXJ2YWxgLiBJdCdzIG5vdCBhICpnZW5lcmljKiBob3QgcGF0aCwgbGlrZSBga21hbGxvY2Agb3IgYHNjaGVkdWxlYCwgaXQncyAqc3BlY2lmaWMqIHRvIERBTU9OLiBTbywgYGtkYW1vbmRfc3BsaXRfcmVnaW9uc2AgYW5kIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgIGFyZSBleGFjdGx5IHRoZSB0eXBlIG9mIGZvY3VzIHN5bWJvbHMgSSBhbSBsb29raW5nIGZvci5cblxuSnVzdCB0byBiZSBzdXJlLCBsZXQgbWUgZG91YmxlIGNoZWNrIHRoYXQgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgaXMgc3RhdGljLi4uIFllcCwgaXQgaXMuIEFuZCBga2RhbW9uZF9zcGxpdF9yZWdpb25zYC4uLiBZZXMsIHN0YXRpYyBhcyB3ZWxsLlxuXG5MZXQncyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyB0byB3b3JyeSBhYm91dC4gQWgsIGBkYW1vbl9zcGxpdF9yZWdpb25zX29mYCwgYnV0IHRoYXQgbG9va3MgbGlrZSBpdCdzIGp1c3QgYmVpbmcgY2FsbGVkIGFuZCBub3QgbW9kaWZpZWQuIEdvb2QuXG5cblNvIHRvIHJlY2FwLCBteSBmb2N1cyBzeW1ib2xzIGFyZTpcblxuKiAgIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgXG4qICAgYGtkYW1vbmRfc3BsaXRfcmVnaW9uc2BcblxuQW5kIG15IHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZTpcblxuKiAgIGBEQU1PTmBcbiogICBgREFNT05fU1lTRlNgXG4qICAgYERBTU9OX1ZBRERSYFxuKiAgIGBEQU1PTl9QQUREUmBcbiogICBgREFNT05fS1VOSVRfVEVTVGAgKGJlY2F1c2UgYSBLVW5pdCB0ZXN0IHdhcyBhZGRlZCkuXG5cbkp1c3QgbmVlZCB0byB2ZXJpZnkgdGhlIGV4YWN0IG5hbWUgZm9yIGBEQU1PTl9LVU5JVF9URVNUYCwgYW5kIEkgYW0gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjYyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjEyOjU5LjgxOTg2MDAxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI0ODc5ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9MTU9Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMzowMS44NDQ3NTE4ODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwMTU1OTYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBDb3JlIExvZ2ljIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYERBTU9OX0tVTklUX1RFU1RgIHBhdGNoLiBSaWdodCwgaXQncyBtZXNzaW5nIHdpdGggdGhlIGNvcmUgcmVnaW9uIHNwbGl0dGluZyBsb2dpYyBpbiBEQU1PTiwgc3BlY2lmaWNhbGx5IGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCdzIGRlc2lnbmVkIHRvIGhhbmRsZSBzY2VuYXJpb3Mgd2hlcmUgdGhlIG51bWJlciBvZiByZWdpb25zIGlzIGhpdHRpbmcgdGhlIGNlaWxpbmcuIEl0J3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljLCBzb21ldGhpbmcgdGhhdCB3b3VsZCBiZSBkaXJlY3RseSB0cmlnZ2VyZWQgdGhyb3VnaCBEQU1PTidzIHN5c2ZzIGludGVyZmFjZSBhZnRlciBzb21lIGNvbmZpZ3VyYXRpb24uXG5cbkhtbSwgbGV0J3Mgc2VlLCB3aGF0IGVsc2Ugc2hvdWxkIEkgY29uc2lkZXIgaGVyZSB0byBlbnN1cmUgdGhlIHRlc3RzIGFyZSBjb21wcmVoZW5zaXZlPyBSaWdodCwgSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgY29uZmlndXJhdGlvbnMgbGlrZSBgREFNT05fUkVDTEFJTWAgYW5kIGBEQU1PTl9MUlVfU09SVGAuIEVuYWJsaW5nIHRob3NlIHdvdWxkIHByb3ZpZGUgZXZlbiBtb3JlIGF2ZW51ZXMgdG8gdHJpZ2dlciBEQU1PTiBhbmQgdGh1cyB0ZXN0IHRoZSBuZXcgcmVnaW9uIHNwbGl0dGluZyBtb3JlIHRob3JvdWdobHksIGdpdmluZyBtZSBhIG11Y2ggd2lkZXIgdGVzdCBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUxNiwiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6MTM6MDYuODQ2MzE0MjQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1NjA3NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9LVU5JVF9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3BsaXRfc29tZV9yZWdpb25zXCIsXG4gICAgXCJrZGFtb25kX3NwbGl0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSByZWdpb24gc3BsaXR0aW5nIGxvZ2ljIGluIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSwgaW50cm9kdWNpbmcgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBudW1iZXIgb2YgcmVnaW9ucyBhcHByb2FjaGVzIHRoZSBtYXhpbXVtIGxpbWl0LiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBjb25maWd1cmluZyBhbmQgcnVubmluZyBEQU1PTiB2aWEgaXRzIHN5c2ZzIGludGVyZmFjZSBvciBvdGhlciBEQU1PTiBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9LVU5JVF9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3BsaXRfc29tZV9yZWdpb25zXCIsXG4gICAgXCJrZGFtb25kX3NwbGl0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSByZWdpb24gc3BsaXR0aW5nIGxvZ2ljIGluIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSwgaW50cm9kdWNpbmcgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBudW1iZXIgb2YgcmVnaW9ucyBhcHByb2FjaGVzIHRoZSBtYXhpbXVtIGxpbWl0LiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBjb25maWd1cmluZyBhbmQgcnVubmluZyBEQU1PTiB2aWEgaXRzIHN5c2ZzIGludGVyZmFjZSBvciBvdGhlciBEQU1PTiBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44h8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 16:04:57 +0000 UTC FinishedAt: 2026-06-29 16:13:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR", "DAMON_KUNIT_TEST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR", "DAMON_KUNIT_TEST" ], "series_id": "033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_split_some_regions", "kdamond_split_regions" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX0tVTklUX1RFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnMmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9zcGxpdF9yZWdpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHJlZ2lvbiBzcGxpdHRpbmcgbG9naWMgaW4gREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpLCBpbnRyb2R1Y2luZyBgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zYCB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIG51bWJlciBvZiByZWdpb25zIGFwcHJvYWNoZXMgdGhlIG1heGltdW0gbGltaXQuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIGJ5IGNvbmZpZ3VyaW5nIGFuZCBydW5uaW5nIERBTU9OIHZpYSBpdHMgc3lzZnMgaW50ZXJmYWNlIG9yIG90aGVyIERBTU9OIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NGUxOGIyMDFhZDE3MTljOGQ2ZjlkYzgyZjQ2NmIwZWY2MTQ2NWM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTY6MTI6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCAwMjcyNTBlNDNjNjZmMi4uOWJiYzYwYTJhOGMwNWIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMyMzQsNiAmIzQzOzMyMzQsMzcgQEAgc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gXHR9XG4gfVxuIFxuJiM0MzsvKiBTcGxpdCBvbmUgaW4gZXZlcnkgQHNwbGl0X3N0ZXAgcmVnaW9ucyBpbnRvIHR3bywgZnJvbSBhIHJvdGF0aW5nIG9mZnNldCAqL1xuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBzcGxpdF9zdGVwKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIHVuc2lnbmVkIGxvbmcgcm90YXRpb247XG4mIzQzO1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqbmV4dDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IHJvdGF0aW9uJiM0MzsmIzQzOyAlIHNwbGl0X3N0ZXA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpZHggPSAwO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XG4mIzQzO1x0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZShyLCBuZXh0LCB0KSB7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9uLCBzel9zdWI7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaWR4JiM0MzsmIzQzOyAlIHNwbGl0X3N0ZXAgIT0gb2Zmc2V0KVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRzel9yZWdpb24gPSBkYW1vbl9zel9yZWdpb24ocik7XG4mIzQzO1x0XHRcdGlmIChzel9yZWdpb24gXHUwMDNjIDIgKiBjdHgtXHUwMDNlbWluX3JlZ2lvbl9zeilcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHN6X3N1YiA9IEFMSUdOX0RPV04oZGFtb25fcmFuZChjdHgsIDEsIDEwKSAqXG4mIzQzO1x0XHRcdFx0XHRzel9yZWdpb24gLyAxMCwgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opO1xuJiM0MztcdFx0XHQvKiBEbyBub3QgYWxsb3cgYmxhbmsgcmVnaW9uICovXG4mIzQzO1x0XHRcdGlmIChzel9zdWIgPT0gMCB8fCBzel9zdWIgXHUwMDNlPSBzel9yZWdpb24pXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfc3ViKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBTcGxpdCBldmVyeSB0YXJnZXQgcmVnaW9uIGludG8gcmFuZG9tbHktc2l6ZWQgc21hbGwgcmVnaW9uc1xuICAqXG5AQCAtMzI0NywyNSAmIzQzOzMyNzgsMzMgQEAgc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gc3RhdGljIHZvaWQga2RhbW9uZF9zcGxpdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuLVx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnMgPSAwO1xuLVx0c3RhdGljIHVuc2lnbmVkIGludCBsYXN0X25yX3JlZ2lvbnM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9yZWdpb25zID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1heF9ucl9yZWdpb25zID0gY3R4LVx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zO1xuJiM0MztcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfbnJfcmVnaW9ucztcbiBcdGludCBucl9zdWJyZWdpb25zID0gMjtcbiBcbiBcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpXG4gXHRcdG5yX3JlZ2lvbnMgJiM0Mzs9IGRhbW9uX25yX3JlZ2lvbnModCk7XG4gXG4tXHRpZiAobnJfcmVnaW9ucyBcdTAwM2UgY3R4LVx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zIC8gMilcbi1cdFx0cmV0dXJuO1xuJiM0MztcdGlmIChucl9yZWdpb25zIFx1MDAzZT0gbWF4X25yX3JlZ2lvbnMpXG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4mIzQzO1xuJiM0MztcdGlmIChucl9yZWdpb25zIFx1MDAzZSBtYXhfbnJfcmVnaW9ucyAvIDIpIHtcbiYjNDM7XHRcdGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9ucyhjdHgsXG4mIzQzO1x0XHRcdG1heF9ucl9yZWdpb25zIC8gKG1heF9ucl9yZWdpb25zIC0gbnJfcmVnaW9ucykpO1xuJiM0MztcdFx0Z290byBkb25lO1xuJiM0MztcdH1cbiBcbiBcdC8qIE1heWJlIHRoZSBtaWRkbGUgb2YgdGhlIHJlZ2lvbiBoYXMgZGlmZmVyZW50IGFjY2VzcyBmcmVxdWVuY3kgKi9cbiBcdGlmIChsYXN0X25yX3JlZ2lvbnMgPT0gbnJfcmVnaW9ucyBcdTAwMjZcdTAwMjZcbi1cdFx0XHRucl9yZWdpb25zIFx1MDAzYyBjdHgtXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMgLyAzKVxuJiM0MztcdFx0XHRucl9yZWdpb25zIFx1MDAzYyBtYXhfbnJfcmVnaW9ucyAvIDMpXG4gXHRcdG5yX3N1YnJlZ2lvbnMgPSAzO1xuIFxuIFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eClcbiBcdFx0ZGFtb25fc3BsaXRfcmVnaW9uc19vZihjdHgsIHQsIG5yX3N1YnJlZ2lvbnMsXG4gXHRcdFx0XHQgICAgICAgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opO1xuIFxuJiM0Mztkb25lOlxuIFx0bGFzdF9ucl9yZWdpb25zID0gbnJfcmVnaW9ucztcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCBmY2Y3YzdmYWRiNWZlNS4uZDA5Y2JiMTQyOGI3NzMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTMzNSw2ICYjNDM7MzM1LDY5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFdoZW4gdGhlIHRvdGFsIHJlZ2lvbiBjb3VudCBpcyBhbHJlYWR5IGFib3ZlIG1heF9ucl9yZWdpb25zIC8gMixcbiYjNDM7ICoga2RhbW9uZF9zcGxpdF9yZWdpb25zKCkgbXVzdCBrZWVwIHJlZmluaW5nIHRoZSByZXNvbHV0aW9uIGJ5IHNwbGl0dGluZyBhXG4mIzQzOyAqIGZyYWN0aW9uIG9mIHRoZSByZWdpb25zIChtYWtpbmcgcHJvZ3Jlc3MpLCB3aXRob3V0IGV4Y2VlZGluZ1xuJiM0MzsgKiBtYXhfbnJfcmVnaW9ucy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9jdHggKmM7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yX2JlZm9yZSwgbnJfYWZ0ZXIsIGk7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgaW50IG5yX2luaXQgPSA3NjA7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgbG9uZyByZWdpb25fc3ogPSAxMDA7XG4mIzQzO1xuJiM0MztcdGMgPSBkYW1vbl9uZXdfY3R4KCk7XG4mIzQzO1x0aWYgKCFjKVxuJiM0MztcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtjdHggYWxsb2MgZmFpbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIEtlZXAgdGhlIHNwbGl0IGFyaXRobWV0aWMgaW5kZXBlbmRlbnQgb2YgdGhlIHBhZ2Ugc2l6ZSAqL1xuJiM0MztcdGMtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDE7XG4mIzQzO1x0Yy1cdTAwM2VhdHRycy5taW5fbnJfcmVnaW9ucyA9IDEwO1xuJiM0MztcdGMtXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMgPSAxNTAwO1xuJiM0MztcbiYjNDM7XHR0ID0gZGFtb25fbmV3X3RhcmdldCgpO1xuJiM0MztcdGlmICghdCkge1xuJiM0MztcdFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4mIzQzO1x0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3RhcmdldCBhbGxvYyBmYWlsXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2luaXQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdGFydCA9IGkgKiByZWdpb25fc3o7XG4mIzQzO1x0XHRyID0gZGFtb25fbmV3X3JlZ2lvbihzdGFydCwgc3RhcnQgJiM0MzsgcmVnaW9uX3N6KTtcbiYjNDM7XHRcdGlmICghcikge1xuJiM0MztcdFx0XHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbiYjNDM7XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4mIzQzO1x0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7cmVnaW9uIGFsbG9jIGZhaWxcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IChpIFx1MDAyNiAxKSA/IDAgOiAxMDA7XG4mIzQzO1x0XHRyLVx1MDAzZWFnZSA9IDU7XG4mIzQzO1x0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGFtb25fYWRkX3RhcmdldChjLCB0KTtcbiYjNDM7XG4mIzQzO1x0bnJfYmVmb3JlID0gZGFtb25fbnJfcmVnaW9ucyh0KTtcbiYjNDM7XHQvKiBBYm92ZSBtYXhfbnJfcmVnaW9ucyAvIDIsIHNvIHRoZSBibGFua2V0LXNwbGl0IHBhdGggaXMgc2tpcHBlZCAqL1xuJiM0MztcdEtVTklUX0VYUEVDVF9HVCh0ZXN0LCAodW5zaWduZWQgbG9uZylucl9iZWZvcmUsXG4mIzQzO1x0XHRcdGMtXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMgLyAyKTtcbiYjNDM7XG4mIzQzO1x0a2RhbW9uZF9zcGxpdF9yZWdpb25zKGMpO1xuJiM0MztcbiYjNDM7XHRucl9hZnRlciA9IGRhbW9uX25yX3JlZ2lvbnModCk7XG4mIzQzO1x0LyogU3RpbGwgbWFkZSBwcm9ncmVzcyAuLi4gKi9cbiYjNDM7XHRLVU5JVF9FWFBFQ1RfR1QodGVzdCwgbnJfYWZ0ZXIsIG5yX2JlZm9yZSk7XG4mIzQzO1x0LyogLi4uIGJ1dCBkaWQgbm90IG92ZXJzaG9vdCB0aGUgY29uZmlndXJlZCBtYXhpbXVtICovXG4mIzQzO1x0S1VOSVRfRVhQRUNUX0xFKHRlc3QsICh1bnNpZ25lZCBsb25nKW5yX2FmdGVyLFxuJiM0MztcdFx0XHRjLVx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zKTtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpO1xuQEAgLTE0NjQsNiAmIzQzOzE1MjcsNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X21lcmdlX3R3byksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZiksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZiksXG4mIzQzO1x0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NwbGl0X2Fib3ZlX2hhbGZfcHJvZ3Jlc3NlcyksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbiksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9LVU5JVF9URVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3BsaXRfc29tZV9yZWdpb25zJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfc3BsaXRfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSByZWdpb24gc3BsaXR0aW5nIGxvZ2ljIGluIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSwgaW50cm9kdWNpbmcgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBudW1iZXIgb2YgcmVnaW9ucyBhcHByb2FjaGVzIHRoZSBtYXhpbXVtIGxpbWl0LiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBjb25maWd1cmluZyBhbmQgcnVubmluZyBEQU1PTiB2aWEgaXRzIHN5c2ZzIGludGVyZmFjZSBvciBvdGhlciBEQU1PTiBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NGUxOGIyMDFhZDE3MTljOGQ2ZjlkYzgyZjQ2NmIwZWY2MTQ2NWM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdW4gMjkgMTY6MTI6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggMDI3MjUwZTQzYzY2ZjIuLjliYmM2MGEyYThjMDViIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zMjM0LDYgJiM0MzszMjM0LDM3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogCX0KIH0KIAomIzQzOy8qIFNwbGl0IG9uZSBpbiBldmVyeSBAc3BsaXRfc3RlcCByZWdpb25zIGludG8gdHdvLCBmcm9tIGEgcm90YXRpbmcgb2Zmc2V0ICovCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBsb25nIHNwbGl0X3N0ZXApCiYjNDM7ewomIzQzOwlzdGF0aWMgdW5zaWduZWQgbG9uZyByb3RhdGlvbjsKJiM0MzsJc3RydWN0IGRhbW9uX3RhcmdldCAqdDsKJiM0MzsJc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKm5leHQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcm90YXRpb24mIzQzOyYjNDM7ICUgc3BsaXRfc3RlcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpZHggPSAwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7CiYjNDM7CQlkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZShyLCBuZXh0LCB0KSB7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBzel9yZWdpb24sIHN6X3N1YjsKJiM0MzsKJiM0MzsJCQlpZiAoaWR4JiM0MzsmIzQzOyAlIHNwbGl0X3N0ZXAgIT0gb2Zmc2V0KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlzel9yZWdpb24gPSBkYW1vbl9zel9yZWdpb24ocik7CiYjNDM7CQkJaWYgKHN6X3JlZ2lvbiAmbHQ7IDIgKiBjdHgtJmd0O21pbl9yZWdpb25fc3opCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCXN6X3N1YiA9IEFMSUdOX0RPV04oZGFtb25fcmFuZChjdHgsIDEsIDEwKSAqCiYjNDM7CQkJCQlzel9yZWdpb24gLyAxMCwgY3R4LSZndDttaW5fcmVnaW9uX3N6KTsKJiM0MzsJCQkvKiBEbyBub3QgYWxsb3cgYmxhbmsgcmVnaW9uICovCiYjNDM7CQkJaWYgKHN6X3N1YiA9PSAwIHx8IHN6X3N1YiAmZ3Q7PSBzel9yZWdpb24pCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCWRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzel9zdWIpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKICAqIFNwbGl0IGV2ZXJ5IHRhcmdldCByZWdpb24gaW50byByYW5kb21seS1zaXplZCBzbWFsbCByZWdpb25zCiAgKgpAQCAtMzI0NywyNSAmIzQzOzMyNzgsMzMgQEAgc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiBzdGF0aWMgdm9pZCBrZGFtb25kX3NwbGl0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogewogCXN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7Ci0JdW5zaWduZWQgaW50IG5yX3JlZ2lvbnMgPSAwOwotCXN0YXRpYyB1bnNpZ25lZCBpbnQgbGFzdF9ucl9yZWdpb25zOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3JlZ2lvbnMgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIG1heF9ucl9yZWdpb25zID0gY3R4LSZndDthdHRycy5tYXhfbnJfcmVnaW9uczsKJiM0MzsJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9ucl9yZWdpb25zOwogCWludCBucl9zdWJyZWdpb25zID0gMjsKIAogCWRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpCiAJCW5yX3JlZ2lvbnMgJiM0Mzs9IGRhbW9uX25yX3JlZ2lvbnModCk7CiAKLQlpZiAobnJfcmVnaW9ucyAmZ3Q7IGN0eC0mZ3Q7YXR0cnMubWF4X25yX3JlZ2lvbnMgLyAyKQotCQlyZXR1cm47CiYjNDM7CWlmIChucl9yZWdpb25zICZndDs9IG1heF9ucl9yZWdpb25zKQomIzQzOwkJZ290byBkb25lOwomIzQzOwomIzQzOwlpZiAobnJfcmVnaW9ucyAmZ3Q7IG1heF9ucl9yZWdpb25zIC8gMikgewomIzQzOwkJZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKGN0eCwKJiM0MzsJCQltYXhfbnJfcmVnaW9ucyAvIChtYXhfbnJfcmVnaW9ucyAtIG5yX3JlZ2lvbnMpKTsKJiM0MzsJCWdvdG8gZG9uZTsKJiM0MzsJfQogCiAJLyogTWF5YmUgdGhlIG1pZGRsZSBvZiB0aGUgcmVnaW9uIGhhcyBkaWZmZXJlbnQgYWNjZXNzIGZyZXF1ZW5jeSAqLwogCWlmIChsYXN0X25yX3JlZ2lvbnMgPT0gbnJfcmVnaW9ucyAmYW1wOyZhbXA7Ci0JCQlucl9yZWdpb25zICZsdDsgY3R4LSZndDthdHRycy5tYXhfbnJfcmVnaW9ucyAvIDMpCiYjNDM7CQkJbnJfcmVnaW9ucyAmbHQ7IG1heF9ucl9yZWdpb25zIC8gMykKIAkJbnJfc3VicmVnaW9ucyA9IDM7CiAKIAlkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KQogCQlkYW1vbl9zcGxpdF9yZWdpb25zX29mKGN0eCwgdCwgbnJfc3VicmVnaW9ucywKIAkJCQkgICAgICAgY3R4LSZndDttaW5fcmVnaW9uX3N6KTsKIAomIzQzO2RvbmU6CiAJbGFzdF9ucl9yZWdpb25zID0gbnJfcmVnaW9uczsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCmluZGV4IGZjZjdjN2ZhZGI1ZmU1Li5kMDljYmIxNDI4Yjc3MyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtMzM1LDYgJiM0MzszMzUsNjkgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlkYW1vbl9kZXN0cm95X2N0eChjKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogV2hlbiB0aGUgdG90YWwgcmVnaW9uIGNvdW50IGlzIGFscmVhZHkgYWJvdmUgbWF4X25yX3JlZ2lvbnMgLyAyLAomIzQzOyAqIGtkYW1vbmRfc3BsaXRfcmVnaW9ucygpIG11c3Qga2VlcCByZWZpbmluZyB0aGUgcmVzb2x1dGlvbiBieSBzcGxpdHRpbmcgYQomIzQzOyAqIGZyYWN0aW9uIG9mIHRoZSByZWdpb25zIChtYWtpbmcgcHJvZ3Jlc3MpLCB3aXRob3V0IGV4Y2VlZGluZwomIzQzOyAqIG1heF9ucl9yZWdpb25zLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9jdHggKmM7CiYjNDM7CXN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7CiYjNDM7CXN0cnVjdCBkYW1vbl9yZWdpb24gKnI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnQ7CiYjNDM7CXVuc2lnbmVkIGludCBucl9iZWZvcmUsIG5yX2FmdGVyLCBpOwomIzQzOwljb25zdCB1bnNpZ25lZCBpbnQgbnJfaW5pdCA9IDc2MDsKJiM0MzsJY29uc3QgdW5zaWduZWQgbG9uZyByZWdpb25fc3ogPSAxMDA7CiYjNDM7CiYjNDM7CWMgPSBkYW1vbl9uZXdfY3R4KCk7CiYjNDM7CWlmICghYykKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtjdHggYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogS2VlcCB0aGUgc3BsaXQgYXJpdGhtZXRpYyBpbmRlcGVuZGVudCBvZiB0aGUgcGFnZSBzaXplICovCiYjNDM7CWMtJmd0O21pbl9yZWdpb25fc3ogPSAxOwomIzQzOwljLSZndDthdHRycy5taW5fbnJfcmVnaW9ucyA9IDEwOwomIzQzOwljLSZndDthdHRycy5tYXhfbnJfcmVnaW9ucyA9IDE1MDA7CiYjNDM7CiYjNDM7CXQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7CiYjNDM7CWlmICghdCkgewomIzQzOwkJZGFtb25fZGVzdHJveV9jdHgoYyk7CiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7dGFyZ2V0IGFsbG9jIGZhaWwmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2luaXQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdGFydCA9IGkgKiByZWdpb25fc3o7CiYjNDM7CQlyID0gZGFtb25fbmV3X3JlZ2lvbihzdGFydCwgc3RhcnQgJiM0MzsgcmVnaW9uX3N6KTsKJiM0MzsJCWlmICghcikgewomIzQzOwkJCWRhbW9uX2ZyZWVfdGFyZ2V0KHQpOwomIzQzOwkJCWRhbW9uX2Rlc3Ryb3lfY3R4KGMpOwomIzQzOwkJCWt1bml0X3NraXAodGVzdCwgJiMzNDtyZWdpb24gYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsJCXItJmd0O25yX2FjY2Vzc2VzID0gKGkgJmFtcDsgMSkgPyAwIDogMTAwOwomIzQzOwkJci0mZ3Q7YWdlID0gNTsKJiM0MzsJCWRhbW9uX2FkZF9yZWdpb24ociwgdCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGFtb25fYWRkX3RhcmdldChjLCB0KTsKJiM0MzsKJiM0MzsJbnJfYmVmb3JlID0gZGFtb25fbnJfcmVnaW9ucyh0KTsKJiM0MzsJLyogQWJvdmUgbWF4X25yX3JlZ2lvbnMgLyAyLCBzbyB0aGUgYmxhbmtldC1zcGxpdCBwYXRoIGlzIHNraXBwZWQgKi8KJiM0MzsJS1VOSVRfRVhQRUNUX0dUKHRlc3QsICh1bnNpZ25lZCBsb25nKW5yX2JlZm9yZSwKJiM0MzsJCQljLSZndDthdHRycy5tYXhfbnJfcmVnaW9ucyAvIDIpOwomIzQzOwomIzQzOwlrZGFtb25kX3NwbGl0X3JlZ2lvbnMoYyk7CiYjNDM7CiYjNDM7CW5yX2FmdGVyID0gZGFtb25fbnJfcmVnaW9ucyh0KTsKJiM0MzsJLyogU3RpbGwgbWFkZSBwcm9ncmVzcyAuLi4gKi8KJiM0MzsJS1VOSVRfRVhQRUNUX0dUKHRlc3QsIG5yX2FmdGVyLCBucl9iZWZvcmUpOwomIzQzOwkvKiAuLi4gYnV0IGRpZCBub3Qgb3ZlcnNob290IHRoZSBjb25maWd1cmVkIG1heGltdW0gKi8KJiM0MzsJS1VOSVRfRVhQRUNUX0xFKHRlc3QsICh1bnNpZ25lZCBsb25nKW5yX2FmdGVyLAomIzQzOwkJCWMtJmd0O2F0dHJzLm1heF9ucl9yZWdpb25zKTsKJiM0MzsKJiM0MzsJZGFtb25fZGVzdHJveV9jdHgoYyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdCkKIHsKIAlzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpOwpAQCAtMTQ2NCw2ICYjNDM7MTUyNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7CiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X21lcmdlX3R3byksCiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2YpLAogCUtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKSwKJiM0MzsJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NwbGl0X2Fib3ZlX2hhbGZfcHJvZ3Jlc3NlcyksCiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLAogCUtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfcmVnaW9ucyksCiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBSZWdpb24gU3BsaXR0aW5nIFBhdGNoIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgYW5kIG1vZGlmeWluZyBga2RhbW9uZF9zcGxpdF9yZWdpb25zYCwgd2hpY2ggaW5zdGFudGx5IHRlbGxzIG1lIHRoaXMgaXMgYWJvdXQgcmVnaW9uIHNwbGl0dGluZyB3aXRoaW4gREFNT04uIEZyb20gdGhlIGluaXRpYWwgZ2xhbmNlLCBpdCBzZWVtcyBmdW5jdGlvbmFsIOKAkyB0aGUgY29yZSBsb2dpYyBmb3IgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyByZWdpb24gc3BsaXR0aW5nIGlzIGJlaW5nIHR3ZWFrZWQuCgpOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSBEQU1PTiYjMzk7cyByZWFjaGFiaWxpdHkgYW5kIHF1aWNrbHkgY2hlY2sgYW55IHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IOKAkyBga2RhbW9uZF9zcGxpdF9yZWdpb25zYCBhbmQgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2Ag4oCTIGJ1dCBhbHNvIGEgZ2VuZXJhbCBzZWFyY2ggZm9yIGBEQU1PTmAgdG8gc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGFyZSB0aWVkIGludG8gdGhlIGJyb2FkZXIgY29udGV4dC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMuIFRoaXMgaW5pdGlhbCBjaGVjayB3aWxsIHRlbGwgbWUgaWYgREFNT04gaXMgZXZlbiBlbmFibGVkIGluIHRoZSByZWxldmFudCBjb25maWdzIGFuZCB3aGF0LCBpZiBhbnl0aGluZywgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBwYXRjaCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2RhbW9uZF9zcGxpdF9yZWdpb25zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zMTA0PXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMTM1LSAqIG92ZXJoZWFkIHVuZGVyIHRoZSBkeW5hbWljYWxseSBjaGFuZ2VhYmxlIGFjY2VzcyBwYXR0ZXJuLiAgSWYgYSBtZXJnZSB3YXNcbm1tL2RhbW9uL2NvcmUuYzozMTM2OiAqIHVubmVjZXNzYXJpbHkgbWFkZSwgbGF0ZXIgJiMzOTtrZGFtb25kX3NwbGl0X3JlZ2lvbnMoKSYjMzk7IHdpbGwgcmV2ZXJ0IGl0LlxubW0vZGFtb24vY29yZS5jLTMxMzctICpcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzIzOD1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjc3LSAqL1xubW0vZGFtb24vY29yZS5jOjMyNzg6c3RhdGljIHZvaWQga2RhbW9uZF9zcGxpdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0zMjc5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzUxNj1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzYzMy1cdFx0XHRrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYzozNjM0Olx0XHRcdGtkYW1vbmRfc3BsaXRfcmVnaW9ucyhjdHgpO1xubW0vZGFtb24vY29yZS5jLTM2MzUtXHRcdH1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MjcwPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTMzOS0gKiBXaGVuIHRoZSB0b3RhbCByZWdpb24gY291bnQgaXMgYWxyZWFkeSBhYm92ZSBtYXhfbnJfcmVnaW9ucyAvIDIsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzQwOiAqIGtkYW1vbmRfc3BsaXRfcmVnaW9ucygpIG11c3Qga2VlcCByZWZpbmluZyB0aGUgcmVzb2x1dGlvbiBieSBzcGxpdHRpbmcgYVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM0MS0gKiBmcmFjdGlvbiBvZiB0aGUgcmVnaW9ucyAobWFraW5nIHByb2dyZXNzKSwgd2l0aG91dCBleGNlZWRpbmdcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MzQ0PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzg4LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM4OTpcdGtkYW1vbmRfc3BsaXRfcmVnaW9ucyhjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zOTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYyMAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEQU1PTiBBcmNoaXRlY3R1cmUqKgoKQWxyaWdodCwgc28gYGtkYW1vbmRfc3BsaXRfcmVnaW9uc2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgYnkgYGtkYW1vbmRfZm5gLCB3aGljaCBtYWtlcyBga2RhbW9uZF9mbmAgdGhlIGNlbnRyYWwgdGhyZWFkIGZ1bmN0aW9uIGZvciBEQU1PTi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGhlbHBzIG1lIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoZSBjb250cm9sIGZsb3cuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgREFNT04gY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIGBtbS9kYW1vbi9LY29uZmlnYCB0byBzZWUgd2hhdCBrZXJuZWwgY29uZmlncyBhcmUgbmVjZXNzYXJ5IGZvciBEQU1PTiB0byBmdW5jdGlvbiBwcm9wZXJseS4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgZW5hYmxlZCBhbmQgc2V0IHVwIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU2MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgSSYjMzk7bSB0aGlua2luZyBoZXJl4oCmCgoqKkFuYWx5emluZyB0aGUgREFNT04gQ29kZSBDaGFuZ2VzKioKCkFscmlnaHQsIHNvIHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucyBzZWVtIHRvIGNlbnRlciBhcm91bmQgcmVnaW9uIHNwbGl0dGluZyB3aXRoaW4gREFNT04uIFRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgbG9jYXRlZCBpbiBgbW0vZGFtb24vY29yZS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgdGhhdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIG5vdGluZyB0aGF0IHRoZXJlJiMzOTtzIGEgbmV3IGZ1bmN0aW9uIGNhbGxlZCBgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zYCwgd2hpY2ggaXMgYSBrZXkgYWRkaXRpb24sIGFuZCBga2RhbW9uZF9zcGxpdF9yZWdpb25zYCBoYXMgYmVlbiB1cGRhdGVkIGFzIHdlbGwsIGxpa2VseSB0byBpbnRlZ3JhdGUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gR2l2ZW4gdGhlc2UgZmlsZXMsIHRoZSBuZWNlc3NhcnkgZ2VuZXJhbCBjb25maWcgaXMgYERBTU9OYC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiB0byBjb250cm9sIHRoaXMgbmV3IHNwbGl0dGluZyBiZWhhdmlvciBpbiBkZXRhaWw/IEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3JlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZS0yLVxubW0vZGFtb24vTWFrZWZpbGU6MzpvYmoteVx0XHRcdFx0Oj0gY29yZS5vXG5tbS9kYW1vbi9NYWtlZmlsZS00LW9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MDgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVbmNvbmRpdGlvbmFsIEJ1aWxkIG9mIGBjb3JlLm9gKioKCk9rYXksIHNvIGBjb3JlLm9gIGlzIGJlaW5nIGJ1aWx0IG5vIG1hdHRlciB3aGF0IGlmIHdlJiMzOTtyZSBpbiBgbW0vZGFtb24vYC4gVGhhdCBzdHJpa2VzIG1lIGFzIGEgYml0IG9kZDsgSSB1c3VhbGx5IHByZWZlciBtb3JlIGNvbmRpdGlvbmFsIGJ1aWxkcyB1bmxlc3MgdGhlcmUmIzM5O3MgYSByZWFsbHkgZ29vZCByZWFzb24gZm9yIGl0IHRvIGJlIGFsd2F5cyBpbmNsdWRlZC4gVGltZSB0byBpbnZlc3RpZ2F0ZSB3aHkgdGhpcyBpcyBoYXBwZW5pbmcuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBvYmplY3QgZmlsZSBpbmNsdXNpb24gaXMgaGFuZGxlZCwgYW5kIGl0IHNob3VsZCByZXZlYWwgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgZm9yIHRoZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgbWFpbiBNYWtlZmlsZSBhbmQgdGhpcyBzcGVjaWZpYyBidWlsZCBwcm9jZXNzLiBJJiMzOTtsbCBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGN1bHByaXRzLCBjb25kaXRpb25hbCBmbGFncyBvciBwYXR0ZXJucyB0aGF0IGFyZSBmb3JjaW5nIHRoZSBidWlsZCwgb3IgZXZlbiBpZiBpdCYjMzk7cyBpbXBsaWNpdGx5IGluY2x1ZGVkIGJ5IGFub3RoZXIgZGVwZW5kZW5jeS4gVW5kZXJzdGFuZGluZyB0aGUgbG9naWMgaW4gdGhlIE1ha2VmaWxlIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGJ1aWxkLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEzND1vYmotJChDT05GSUdfREVCVUdfUEFHRV9SRUYpICYjNDM7PSBkZWJ1Z19wYWdlX3JlZi5vXG5tbS9NYWtlZmlsZToxMzU6b2JqLSQoQ09ORklHX0RBTU9OKSAmIzQzOz0gZGFtb24vXG5tbS9NYWtlZmlsZS0xMzYtb2JqLSQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSAmIzQzOz0gdXNlcmNvcHkub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjYyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERBTU9OIENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCB0aGlzIERBTU9OIHRlc3Rpbmcgc2V0dXAgcmlnaHQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDT05GSUdfREFNT05gIGlzIGRlZmluaXRlbHkgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIEFuZCBmb3IgdGVzdGluZywgYENPTkZJR19EQU1PTl9LVU5JVF9URVNUYCBsb29rcyB1c2VmdWwgc2luY2UgaXQgYnVuZGxlcyBhIEtVbml0IHRlc3QuIE5vdywgSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgc3l6a2FsbGVyIGlzIGdvaW5nIHRvIGJlIGZ1enppbmcgdGhlICprZXJuZWwqLCBub3QganVzdCBydW5uaW5nIGlzb2xhdGVkIEtVbml0IHRlc3RzLiBIb3dldmVyLCBzeXprYWxsZXIgKmNhbiogcnVuIEtVbml0IHRlc3RzIGlmIHRoZXkmIzM5O3JlIGJ1aWx0LWluIG9yIGxvYWRlZC4KClRoZSBjcml0aWNhbCBwaWVjZSBvZiBEQU1PTiBmdW5jdGlvbmFsaXR5IGlzIGBrZGFtb25kX3NwbGl0X3JlZ2lvbnNgLCB0aGF0JiMzOTtzIHBhcnQgb2YgdGhlIGNvcmUgbG9naWMuIFRvIGdldCB0byB0aGF0IGZ1bmN0aW9uLCBJIGhhdmUgdG8gaW50ZXJhY3Qgd2l0aCBEQU1PTiBpdHNlbGYuIFR5cGljYWxseSwgdGhhdCBoYXBwZW5zIHRocm91Z2ggc3lzZnMgKGBDT05GSUdfREFNT05fU1lTRlNgKSwgd2hpY2ggc2VlbXMgdGhlIG1vc3QgcHJhY3RpY2FsIG1ldGhvZC4gQWx0aG91Z2ggZGVidWdmcyBpcyBhbHNvIGFuIG9wdGlvbiwgdGhhdCBpcyBkZXByZWNhdGVkLiBLZXJuZWwgbW9kdWxlcyBsaWtlIGBEQU1PTl9SRUNMQUlNYCBhbmQgYERBTU9OX0xSVV9TT1JUYCBhcmUgYWxzbyBhdmFpbGFibGUsIGJ1dCB0aGUgc3lzZnMgcm91dGUgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuCgpUaGVyZWZvcmUsIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9WQUREUmAsIGFuZCBgREFNT05fUEFERFJgLiBOb3csIEkgc2hvdWxkIGZvY3VzIG9uIHdoaWNoIHN5bWJvbHMgd2lsbCBiZSB0aGUgbW9zdCB1c2VmdWwgZm9yIHRlc3RpbmcuCgpMZXQmIzM5O3Mgc2VlLCB0aGUgZm9jdXMgc3ltYm9scyBsb29rIHRvIGJlIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgIGFuZCBga2RhbW9uZF9zcGxpdF9yZWdpb25zYC4gQXJlIHRob3NlIGhvdCBwYXRocywgdGhvdWdoPyBga2RhbW9uZF9zcGxpdF9yZWdpb25zYCBpcyBjYWxsZWQgYnkgYGtkYW1vbmRfZm5gLCB3aGljaCBpcyBhIGt0aHJlYWQgdGhhdCBleGVjdXRlcyBwZXJpb2RpY2FsbHksIGJhc2VkIG9uIHRoZSBgc2FtcGxlX2ludGVydmFsYCBhbmQgYGFnZ3JfaW50ZXJ2YWxgLiBJdCYjMzk7cyBub3QgYSAqZ2VuZXJpYyogaG90IHBhdGgsIGxpa2UgYGttYWxsb2NgIG9yIGBzY2hlZHVsZWAsIGl0JiMzOTtzICpzcGVjaWZpYyogdG8gREFNT04uIFNvLCBga2RhbW9uZF9zcGxpdF9yZWdpb25zYCBhbmQgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgYXJlIGV4YWN0bHkgdGhlIHR5cGUgb2YgZm9jdXMgc3ltYm9scyBJIGFtIGxvb2tpbmcgZm9yLgoKSnVzdCB0byBiZSBzdXJlLCBsZXQgbWUgZG91YmxlIGNoZWNrIHRoYXQgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgaXMgc3RhdGljLi4uIFllcCwgaXQgaXMuIEFuZCBga2RhbW9uZF9zcGxpdF9yZWdpb25zYC4uLiBZZXMsIHN0YXRpYyBhcyB3ZWxsLgoKTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIHRvIHdvcnJ5IGFib3V0LiBBaCwgYGRhbW9uX3NwbGl0X3JlZ2lvbnNfb2ZgLCBidXQgdGhhdCBsb29rcyBsaWtlIGl0JiMzOTtzIGp1c3QgYmVpbmcgY2FsbGVkIGFuZCBub3QgbW9kaWZpZWQuIEdvb2QuCgpTbyB0byByZWNhcCwgbXkgZm9jdXMgc3ltYm9scyBhcmU6CgoqICAgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AKKiAgIGBrZGFtb25kX3NwbGl0X3JlZ2lvbnNgCgpBbmQgbXkgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlOgoKKiAgIGBEQU1PTmAKKiAgIGBEQU1PTl9TWVNGU2AKKiAgIGBEQU1PTl9WQUREUmAKKiAgIGBEQU1PTl9QQUREUmAKKiAgIGBEQU1PTl9LVU5JVF9URVNUYCAoYmVjYXVzZSBhIEtVbml0IHRlc3Qgd2FzIGFkZGVkKS4KCkp1c3QgbmVlZCB0byB2ZXJpZnkgdGhlIGV4YWN0IG5hbWUgZm9yIGBEQU1PTl9LVU5JVF9URVNUYCwgYW5kIEkgYW0gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT05fS1VOSVRfVEVTVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTE1PWNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTE2CgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBDb3JlIExvZ2ljIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgREFNT05fS1VOSVRfVEVTVGAgcGF0Y2guIFJpZ2h0LCBpdCYjMzk7cyBtZXNzaW5nIHdpdGggdGhlIGNvcmUgcmVnaW9uIHNwbGl0dGluZyBsb2dpYyBpbiBEQU1PTiwgc3BlY2lmaWNhbGx5IGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBoYW5kbGUgc2NlbmFyaW9zIHdoZXJlIHRoZSBudW1iZXIgb2YgcmVnaW9ucyBpcyBoaXR0aW5nIHRoZSBjZWlsaW5nLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMsIHNvbWV0aGluZyB0aGF0IHdvdWxkIGJlIGRpcmVjdGx5IHRyaWdnZXJlZCB0aHJvdWdoIERBTU9OJiMzOTtzIHN5c2ZzIGludGVyZmFjZSBhZnRlciBzb21lIGNvbmZpZ3VyYXRpb24uCgpIbW0sIGxldCYjMzk7cyBzZWUsIHdoYXQgZWxzZSBzaG91bGQgSSBjb25zaWRlciBoZXJlIHRvIGVuc3VyZSB0aGUgdGVzdHMgYXJlIGNvbXByZWhlbnNpdmU/IFJpZ2h0LCBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBjb25maWd1cmF0aW9ucyBsaWtlIGBEQU1PTl9SRUNMQUlNYCBhbmQgYERBTU9OX0xSVV9TT1JUYC4gRW5hYmxpbmcgdGhvc2Ugd291bGQgcHJvdmlkZSBldmVuIG1vcmUgYXZlbnVlcyB0byB0cmlnZ2VyIERBTU9OIGFuZCB0aHVzIHRlc3QgdGhlIG5ldyByZWdpb24gc3BsaXR0aW5nIG1vcmUgdGhvcm91Z2hseSwgZ2l2aW5nIG1lIGEgbXVjaCB3aWRlciB0ZXN0IHNwYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fS1VOSVRfVEVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3NwbGl0X3NvbWVfcmVnaW9ucyYjMzQ7LAogICAgJiMzNDtrZGFtb25kX3NwbGl0X3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcmVnaW9uIHNwbGl0dGluZyBsb2dpYyBpbiBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvciksIGludHJvZHVjaW5nIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgYXBwcm9hY2hlcyB0aGUgbWF4aW11bSBsaW1pdC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgYnkgY29uZmlndXJpbmcgYW5kIHJ1bm5pbmcgREFNT04gdmlhIGl0cyBzeXNmcyBpbnRlcmZhY2Ugb3Igb3RoZXIgREFNT04gbW9kdWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fS1VOSVRfVEVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3NwbGl0X3NvbWVfcmVnaW9ucyYjMzQ7LAogICAgJiMzNDtrZGFtb25kX3NwbGl0X3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcmVnaW9uIHNwbGl0dGluZyBsb2dpYyBpbiBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvciksIGludHJvZHVjaW5nIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgYXBwcm9hY2hlcyB0aGUgbWF4aW11bSBsaW1pdC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgYnkgY29uZmlndXJpbmcgYW5kIHJ1bm5pbmcgREFNT04gdmlhIGl0cyBzeXNmcyBpbnRlcmZhY2Ugb3Igb3RoZXIgREFNT04gbW9kdWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjEyOjMxLjA5ODA2MTk0MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1ODM2ODM0NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9LVU5JVF9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3BsaXRfc29tZV9yZWdpb25zXCIsXG4gICAgXCJrZGFtb25kX3NwbGl0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSByZWdpb24gc3BsaXR0aW5nIGxvZ2ljIGluIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSwgaW50cm9kdWNpbmcgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBudW1iZXIgb2YgcmVnaW9ucyBhcHByb2FjaGVzIHRoZSBtYXhpbXVtIGxpbWl0LiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBjb25maWd1cmluZyBhbmQgcnVubmluZyBEQU1PTiB2aWEgaXRzIHN5c2ZzIGludGVyZmFjZSBvciBvdGhlciBEQU1PTiBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjozMS4wOTgwNjk0MzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0Njk0ODM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg0ZTE4YjIwMWFkMTcxOWM4ZDZmOWRjODJmNDY2YjBlZjYxNDY1YzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTY6MTI6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggMDI3MjUwZTQzYzY2ZjIuLjliYmM2MGEyYThjMDViIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0zMjM0LDYgKzMyMzQsMzcgQEAgc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIFxcdH1cXG4gfVxcbiBcXG4rLyogU3BsaXQgb25lIGluIGV2ZXJ5IEBzcGxpdF9zdGVwIHJlZ2lvbnMgaW50byB0d28sIGZyb20gYSByb3RhdGluZyBvZmZzZXQgKi9cXG4rc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHNwbGl0X3N0ZXApXFxuK3tcXG4rXFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgcm90YXRpb247XFxuK1xcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuK1xcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpuZXh0O1xcbitcXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IHJvdGF0aW9uKysgJSBzcGxpdF9zdGVwO1xcbitcXHR1bnNpZ25lZCBsb25nIGlkeCA9IDA7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XFxuK1xcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpIHtcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzel9yZWdpb24sIHN6X3N1YjtcXG4rXFxuK1xcdFxcdFxcdGlmIChpZHgrKyAlIHNwbGl0X3N0ZXAgIT0gb2Zmc2V0KVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0c3pfcmVnaW9uID0gZGFtb25fc3pfcmVnaW9uKHIpO1xcbitcXHRcXHRcXHRpZiAoc3pfcmVnaW9uIFxcdTAwM2MgMiAqIGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRzel9zdWIgPSBBTElHTl9ET1dOKGRhbW9uX3JhbmQoY3R4LCAxLCAxMCkgKlxcbitcXHRcXHRcXHRcXHRcXHRzel9yZWdpb24gLyAxMCwgY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6KTtcXG4rXFx0XFx0XFx0LyogRG8gbm90IGFsbG93IGJsYW5rIHJlZ2lvbiAqL1xcbitcXHRcXHRcXHRpZiAoc3pfc3ViID09IDAgfHwgc3pfc3ViIFxcdTAwM2U9IHN6X3JlZ2lvbilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfc3ViKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuIC8qXFxuICAqIFNwbGl0IGV2ZXJ5IHRhcmdldCByZWdpb24gaW50byByYW5kb21seS1zaXplZCBzbWFsbCByZWdpb25zXFxuICAqXFxuQEAgLTMyNDcsMjUgKzMyNzgsMzMgQEAgc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIHN0YXRpYyB2b2lkIGtkYW1vbmRfc3BsaXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4tXFx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnMgPSAwO1xcbi1cXHRzdGF0aWMgdW5zaWduZWQgaW50IGxhc3RfbnJfcmVnaW9ucztcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9yZWdpb25zID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXhfbnJfcmVnaW9ucyA9IGN0eC1cXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnM7XFxuK1xcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfbnJfcmVnaW9ucztcXG4gXFx0aW50IG5yX3N1YnJlZ2lvbnMgPSAyO1xcbiBcXG4gXFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eClcXG4gXFx0XFx0bnJfcmVnaW9ucyArPSBkYW1vbl9ucl9yZWdpb25zKHQpO1xcbiBcXG4tXFx0aWYgKG5yX3JlZ2lvbnMgXFx1MDAzZSBjdHgtXFx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zIC8gMilcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAobnJfcmVnaW9ucyBcXHUwMDNlPSBtYXhfbnJfcmVnaW9ucylcXG4rXFx0XFx0Z290byBkb25lO1xcbitcXG4rXFx0aWYgKG5yX3JlZ2lvbnMgXFx1MDAzZSBtYXhfbnJfcmVnaW9ucyAvIDIpIHtcXG4rXFx0XFx0ZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKGN0eCxcXG4rXFx0XFx0XFx0bWF4X25yX3JlZ2lvbnMgLyAobWF4X25yX3JlZ2lvbnMgLSBucl9yZWdpb25zKSk7XFxuK1xcdFxcdGdvdG8gZG9uZTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogTWF5YmUgdGhlIG1pZGRsZSBvZiB0aGUgcmVnaW9uIGhhcyBkaWZmZXJlbnQgYWNjZXNzIGZyZXF1ZW5jeSAqL1xcbiBcXHRpZiAobGFzdF9ucl9yZWdpb25zID09IG5yX3JlZ2lvbnMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0bnJfcmVnaW9ucyBcXHUwMDNjIGN0eC1cXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMgLyAzKVxcbitcXHRcXHRcXHRucl9yZWdpb25zIFxcdTAwM2MgbWF4X25yX3JlZ2lvbnMgLyAzKVxcbiBcXHRcXHRucl9zdWJyZWdpb25zID0gMztcXG4gXFxuIFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpXFxuIFxcdFxcdGRhbW9uX3NwbGl0X3JlZ2lvbnNfb2YoY3R4LCB0LCBucl9zdWJyZWdpb25zLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6KTtcXG4gXFxuK2RvbmU6XFxuIFxcdGxhc3RfbnJfcmVnaW9ucyA9IG5yX3JlZ2lvbnM7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbmluZGV4IGZjZjdjN2ZhZGI1ZmU1Li5kMDljYmIxNDI4Yjc3MyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5AQCAtMzM1LDYgKzMzNSw2OSBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcXG4gfVxcbiBcXG4rLypcXG4rICogV2hlbiB0aGUgdG90YWwgcmVnaW9uIGNvdW50IGlzIGFscmVhZHkgYWJvdmUgbWF4X25yX3JlZ2lvbnMgLyAyLFxcbisgKiBrZGFtb25kX3NwbGl0X3JlZ2lvbnMoKSBtdXN0IGtlZXAgcmVmaW5pbmcgdGhlIHJlc29sdXRpb24gYnkgc3BsaXR0aW5nIGFcXG4rICogZnJhY3Rpb24gb2YgdGhlIHJlZ2lvbnMgKG1ha2luZyBwcm9ncmVzcyksIHdpdGhvdXQgZXhjZWVkaW5nXFxuKyAqIG1heF9ucl9yZWdpb25zLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9jdHggKmM7XFxuK1xcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuK1xcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XFxuK1xcdHVuc2lnbmVkIGludCBucl9iZWZvcmUsIG5yX2FmdGVyLCBpO1xcbitcXHRjb25zdCB1bnNpZ25lZCBpbnQgbnJfaW5pdCA9IDc2MDtcXG4rXFx0Y29uc3QgdW5zaWduZWQgbG9uZyByZWdpb25fc3ogPSAxMDA7XFxuK1xcbitcXHRjID0gZGFtb25fbmV3X2N0eCgpO1xcbitcXHRpZiAoIWMpXFxuK1xcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImN0eCBhbGxvYyBmYWlsXFxcIik7XFxuK1xcbitcXHQvKiBLZWVwIHRoZSBzcGxpdCBhcml0aG1ldGljIGluZGVwZW5kZW50IG9mIHRoZSBwYWdlIHNpemUgKi9cXG4rXFx0Yy1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDE7XFxuK1xcdGMtXFx1MDAzZWF0dHJzLm1pbl9ucl9yZWdpb25zID0gMTA7XFxuK1xcdGMtXFx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zID0gMTUwMDtcXG4rXFxuK1xcdHQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XFxuK1xcdGlmICghdCkge1xcbitcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcXG4rXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwidGFyZ2V0IGFsbG9jIGZhaWxcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2luaXQ7IGkrKykge1xcbitcXHRcXHRzdGFydCA9IGkgKiByZWdpb25fc3o7XFxuK1xcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKHN0YXJ0LCBzdGFydCArIHJlZ2lvbl9zeik7XFxuK1xcdFxcdGlmICghcikge1xcbitcXHRcXHRcXHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcXG4rXFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XFxuK1xcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInJlZ2lvbiBhbGxvYyBmYWlsXFxcIik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ci1cXHUwMDNlbnJfYWNjZXNzZXMgPSAoaSBcXHUwMDI2IDEpID8gMCA6IDEwMDtcXG4rXFx0XFx0ci1cXHUwMDNlYWdlID0gNTtcXG4rXFx0XFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcXG4rXFx0fVxcbitcXG4rXFx0ZGFtb25fYWRkX3RhcmdldChjLCB0KTtcXG4rXFxuK1xcdG5yX2JlZm9yZSA9IGRhbW9uX25yX3JlZ2lvbnModCk7XFxuK1xcdC8qIEFib3ZlIG1heF9ucl9yZWdpb25zIC8gMiwgc28gdGhlIGJsYW5rZXQtc3BsaXQgcGF0aCBpcyBza2lwcGVkICovXFxuK1xcdEtVTklUX0VYUEVDVF9HVCh0ZXN0LCAodW5zaWduZWQgbG9uZylucl9iZWZvcmUsXFxuK1xcdFxcdFxcdGMtXFx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zIC8gMik7XFxuK1xcbitcXHRrZGFtb25kX3NwbGl0X3JlZ2lvbnMoYyk7XFxuK1xcbitcXHRucl9hZnRlciA9IGRhbW9uX25yX3JlZ2lvbnModCk7XFxuK1xcdC8qIFN0aWxsIG1hZGUgcHJvZ3Jlc3MgLi4uICovXFxuK1xcdEtVTklUX0VYUEVDVF9HVCh0ZXN0LCBucl9hZnRlciwgbnJfYmVmb3JlKTtcXG4rXFx0LyogLi4uIGJ1dCBkaWQgbm90IG92ZXJzaG9vdCB0aGUgY29uZmlndXJlZCBtYXhpbXVtICovXFxuK1xcdEtVTklUX0VYUEVDVF9MRSh0ZXN0LCAodW5zaWduZWQgbG9uZylucl9hZnRlcixcXG4rXFx0XFx0XFx0Yy1cXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMpO1xcbitcXG4rXFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcXG5AQCAtMTQ2NCw2ICsxNTI3LDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X21lcmdlX3R3byksXFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NwbGl0X3JlZ2lvbnNfb2YpLFxcbitcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnApLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjozMS40NDU4NDk0ODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDg5MDMyNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9LVU5JVF9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3BsaXRfc29tZV9yZWdpb25zXCIsXG4gICAgXCJrZGFtb25kX3NwbGl0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSByZWdpb24gc3BsaXR0aW5nIGxvZ2ljIGluIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSwgaW50cm9kdWNpbmcgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBudW1iZXIgb2YgcmVnaW9ucyBhcHByb2FjaGVzIHRoZSBtYXhpbXVtIGxpbWl0LiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBjb25maWd1cmluZyBhbmQgcnVubmluZyBEQU1PTiB2aWEgaXRzIHN5c2ZzIGludGVyZmFjZSBvciBvdGhlciBEQU1PTiBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg0ZTE4YjIwMWFkMTcxOWM4ZDZmOWRjODJmNDY2YjBlZjYxNDY1YzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxNjoxMjozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggMDI3MjUwZTQzYzY2ZjIuLjliYmM2MGEyYThjMDViIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMjM0LDYgKzMyMzQsMzcgQEAgc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gXHR9XG4gfVxuIFxuKy8qIFNwbGl0IG9uZSBpbiBldmVyeSBAc3BsaXRfc3RlcCByZWdpb25zIGludG8gdHdvLCBmcm9tIGEgcm90YXRpbmcgb2Zmc2V0ICovXG4rc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbitcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBzcGxpdF9zdGVwKVxuK3tcbitcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHJvdGF0aW9uO1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbitcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpuZXh0O1xuK1x0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSByb3RhdGlvbisrICUgc3BsaXRfc3RlcDtcbitcdHVuc2lnbmVkIGxvbmcgaWR4ID0gMDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbitcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUociwgbmV4dCwgdCkge1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9uLCBzel9zdWI7XG4rXG4rXHRcdFx0aWYgKGlkeCsrICUgc3BsaXRfc3RlcCAhPSBvZmZzZXQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRzel9yZWdpb24gPSBkYW1vbl9zel9yZWdpb24ocik7XG4rXHRcdFx0aWYgKHN6X3JlZ2lvbiBcdTAwM2MgMiAqIGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0c3pfc3ViID0gQUxJR05fRE9XTihkYW1vbl9yYW5kKGN0eCwgMSwgMTApICpcbitcdFx0XHRcdFx0c3pfcmVnaW9uIC8gMTAsIGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbitcdFx0XHQvKiBEbyBub3QgYWxsb3cgYmxhbmsgcmVnaW9uICovXG4rXHRcdFx0aWYgKHN6X3N1YiA9PSAwIHx8IHN6X3N1YiBcdTAwM2U9IHN6X3JlZ2lvbilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzel9zdWIpO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogU3BsaXQgZXZlcnkgdGFyZ2V0IHJlZ2lvbiBpbnRvIHJhbmRvbWx5LXNpemVkIHNtYWxsIHJlZ2lvbnNcbiAgKlxuQEAgLTMyNDcsMjUgKzMyNzgsMzMgQEAgc3RhdGljIHZvaWQgZGFtb25fc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gc3RhdGljIHZvaWQga2RhbW9uZF9zcGxpdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuLVx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnMgPSAwO1xuLVx0c3RhdGljIHVuc2lnbmVkIGludCBsYXN0X25yX3JlZ2lvbnM7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3JlZ2lvbnMgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBtYXhfbnJfcmVnaW9ucyA9IGN0eC1cdTAwM2VhdHRycy5tYXhfbnJfcmVnaW9ucztcbitcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfbnJfcmVnaW9ucztcbiBcdGludCBucl9zdWJyZWdpb25zID0gMjtcbiBcbiBcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpXG4gXHRcdG5yX3JlZ2lvbnMgKz0gZGFtb25fbnJfcmVnaW9ucyh0KTtcbiBcbi1cdGlmIChucl9yZWdpb25zIFx1MDAzZSBjdHgtXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMgLyAyKVxuLVx0XHRyZXR1cm47XG4rXHRpZiAobnJfcmVnaW9ucyBcdTAwM2U9IG1heF9ucl9yZWdpb25zKVxuK1x0XHRnb3RvIGRvbmU7XG4rXG4rXHRpZiAobnJfcmVnaW9ucyBcdTAwM2UgbWF4X25yX3JlZ2lvbnMgLyAyKSB7XG4rXHRcdGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9ucyhjdHgsXG4rXHRcdFx0bWF4X25yX3JlZ2lvbnMgLyAobWF4X25yX3JlZ2lvbnMgLSBucl9yZWdpb25zKSk7XG4rXHRcdGdvdG8gZG9uZTtcbitcdH1cbiBcbiBcdC8qIE1heWJlIHRoZSBtaWRkbGUgb2YgdGhlIHJlZ2lvbiBoYXMgZGlmZmVyZW50IGFjY2VzcyBmcmVxdWVuY3kgKi9cbiBcdGlmIChsYXN0X25yX3JlZ2lvbnMgPT0gbnJfcmVnaW9ucyBcdTAwMjZcdTAwMjZcbi1cdFx0XHRucl9yZWdpb25zIFx1MDAzYyBjdHgtXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMgLyAzKVxuK1x0XHRcdG5yX3JlZ2lvbnMgXHUwMDNjIG1heF9ucl9yZWdpb25zIC8gMylcbiBcdFx0bnJfc3VicmVnaW9ucyA9IDM7XG4gXG4gXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KVxuIFx0XHRkYW1vbl9zcGxpdF9yZWdpb25zX29mKGN0eCwgdCwgbnJfc3VicmVnaW9ucyxcbiBcdFx0XHRcdCAgICAgICBjdHgtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4gXG4rZG9uZTpcbiBcdGxhc3RfbnJfcmVnaW9ucyA9IG5yX3JlZ2lvbnM7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggZmNmN2M3ZmFkYjVmZTUuLmQwOWNiYjE0MjhiNzczIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbkBAIC0zMzUsNiArMzM1LDY5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiB9XG4gXG4rLypcbisgKiBXaGVuIHRoZSB0b3RhbCByZWdpb24gY291bnQgaXMgYWxyZWFkeSBhYm92ZSBtYXhfbnJfcmVnaW9ucyAvIDIsXG4rICoga2RhbW9uZF9zcGxpdF9yZWdpb25zKCkgbXVzdCBrZWVwIHJlZmluaW5nIHRoZSByZXNvbHV0aW9uIGJ5IHNwbGl0dGluZyBhXG4rICogZnJhY3Rpb24gb2YgdGhlIHJlZ2lvbnMgKG1ha2luZyBwcm9ncmVzcyksIHdpdGhvdXQgZXhjZWVkaW5nXG4rICogbWF4X25yX3JlZ2lvbnMuXG4rICovXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBkYW1vbl9jdHggKmM7XG4rXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuK1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbitcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XG4rXHR1bnNpZ25lZCBpbnQgbnJfYmVmb3JlLCBucl9hZnRlciwgaTtcbitcdGNvbnN0IHVuc2lnbmVkIGludCBucl9pbml0ID0gNzYwO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyByZWdpb25fc3ogPSAxMDA7XG4rXG4rXHRjID0gZGFtb25fbmV3X2N0eCgpO1xuK1x0aWYgKCFjKVxuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwiY3R4IGFsbG9jIGZhaWxcIik7XG4rXG4rXHQvKiBLZWVwIHRoZSBzcGxpdCBhcml0aG1ldGljIGluZGVwZW5kZW50IG9mIHRoZSBwYWdlIHNpemUgKi9cbitcdGMtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDE7XG4rXHRjLVx1MDAzZWF0dHJzLm1pbl9ucl9yZWdpb25zID0gMTA7XG4rXHRjLVx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zID0gMTUwMDtcbitcbitcdHQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XG4rXHRpZiAoIXQpIHtcbitcdFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJ0YXJnZXQgYWxsb2MgZmFpbFwiKTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2luaXQ7IGkrKykge1xuK1x0XHRzdGFydCA9IGkgKiByZWdpb25fc3o7XG4rXHRcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKHN0YXJ0LCBzdGFydCArIHJlZ2lvbl9zeik7XG4rXHRcdGlmICghcikge1xuK1x0XHRcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xuK1x0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGMpO1xuK1x0XHRcdGt1bml0X3NraXAodGVzdCwgXCJyZWdpb24gYWxsb2MgZmFpbFwiKTtcbitcdFx0fVxuK1x0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gKGkgXHUwMDI2IDEpID8gMCA6IDEwMDtcbitcdFx0ci1cdTAwM2VhZ2UgPSA1O1xuK1x0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xuK1x0fVxuK1xuK1x0ZGFtb25fYWRkX3RhcmdldChjLCB0KTtcbitcbitcdG5yX2JlZm9yZSA9IGRhbW9uX25yX3JlZ2lvbnModCk7XG4rXHQvKiBBYm92ZSBtYXhfbnJfcmVnaW9ucyAvIDIsIHNvIHRoZSBibGFua2V0LXNwbGl0IHBhdGggaXMgc2tpcHBlZCAqL1xuK1x0S1VOSVRfRVhQRUNUX0dUKHRlc3QsICh1bnNpZ25lZCBsb25nKW5yX2JlZm9yZSxcbitcdFx0XHRjLVx1MDAzZWF0dHJzLm1heF9ucl9yZWdpb25zIC8gMik7XG4rXG4rXHRrZGFtb25kX3NwbGl0X3JlZ2lvbnMoYyk7XG4rXG4rXHRucl9hZnRlciA9IGRhbW9uX25yX3JlZ2lvbnModCk7XG4rXHQvKiBTdGlsbCBtYWRlIHByb2dyZXNzIC4uLiAqL1xuK1x0S1VOSVRfRVhQRUNUX0dUKHRlc3QsIG5yX2FmdGVyLCBucl9iZWZvcmUpO1xuK1x0LyogLi4uIGJ1dCBkaWQgbm90IG92ZXJzaG9vdCB0aGUgY29uZmlndXJlZCBtYXhpbXVtICovXG4rXHRLVU5JVF9FWFBFQ1RfTEUodGVzdCwgKHVuc2lnbmVkIGxvbmcpbnJfYWZ0ZXIsXG4rXHRcdFx0Yy1cdTAwM2VhdHRycy5tYXhfbnJfcmVnaW9ucyk7XG4rXG4rXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpO1xuQEAgLTE0NjQsNiArMTUyNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKSxcbitcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9yZWdpb25zKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjozMS40NDU4NTI0NzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDgzOTY0NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFJlZ2lvbiBTcGxpdHRpbmcgUGF0Y2ggQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkaW5nIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgIGFuZCBtb2RpZnlpbmcgYGtkYW1vbmRfc3BsaXRfcmVnaW9uc2AsIHdoaWNoIGluc3RhbnRseSB0ZWxscyBtZSB0aGlzIGlzIGFib3V0IHJlZ2lvbiBzcGxpdHRpbmcgd2l0aGluIERBTU9OLiBGcm9tIHRoZSBpbml0aWFsIGdsYW5jZSwgaXQgc2VlbXMgZnVuY3Rpb25hbCDigJMgdGhlIGNvcmUgbG9naWMgZm9yIGRhdGEgYWNjZXNzIG1vbml0b3JpbmcgcmVnaW9uIHNwbGl0dGluZyBpcyBiZWluZyB0d2Vha2VkLlxuXG5Ob3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSBEQU1PTidzIHJlYWNoYWJpbGl0eSBhbmQgcXVpY2tseSBjaGVjayBhbnkgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEknbGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSDigJMgYGtkYW1vbmRfc3BsaXRfcmVnaW9uc2AgYW5kIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgIOKAkyBidXQgYWxzbyBhIGdlbmVyYWwgc2VhcmNoIGZvciBgREFNT05gIHRvIHNlZSBob3cgdGhlc2UgY2hhbmdlcyBhcmUgdGllZCBpbnRvIHRoZSBicm9hZGVyIGNvbnRleHQuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMuIFRoaXMgaW5pdGlhbCBjaGVjayB3aWxsIHRlbGwgbWUgaWYgREFNT04gaXMgZXZlbiBlbmFibGVkIGluIHRoZSByZWxldmFudCBjb25maWdzIGFuZCB3aGF0LCBpZiBhbnl0aGluZywgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBwYXRjaCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjozNS45Mjk4MTkzMjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NDQxNTE0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZGFtb25kX3NwbGl0X3JlZ2lvbnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMxMDQ9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzEzNS0gKiBvdmVyaGVhZCB1bmRlciB0aGUgZHluYW1pY2FsbHkgY2hhbmdlYWJsZSBhY2Nlc3MgcGF0dGVybi4gIElmIGEgbWVyZ2Ugd2FzXFxubW0vZGFtb24vY29yZS5jOjMxMzY6ICogdW5uZWNlc3NhcmlseSBtYWRlLCBsYXRlciAna2RhbW9uZF9zcGxpdF9yZWdpb25zKCknIHdpbGwgcmV2ZXJ0IGl0Llxcbm1tL2RhbW9uL2NvcmUuYy0zMTM3LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzIzOD1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyNzctICovXFxubW0vZGFtb24vY29yZS5jOjMyNzg6c3RhdGljIHZvaWQga2RhbW9uZF9zcGxpdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMzI3OS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzUxNj1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjMzLVxcdFxcdFxcdGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZChjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYzozNjM0OlxcdFxcdFxcdGtkYW1vbmRfc3BsaXRfcmVnaW9ucyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNjM1LVxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0yNzA9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zMzktICogV2hlbiB0aGUgdG90YWwgcmVnaW9uIGNvdW50IGlzIGFscmVhZHkgYWJvdmUgbWF4X25yX3JlZ2lvbnMgLyAyLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNDA6ICoga2RhbW9uZF9zcGxpdF9yZWdpb25zKCkgbXVzdCBrZWVwIHJlZmluaW5nIHRoZSByZXNvbHV0aW9uIGJ5IHNwbGl0dGluZyBhXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM0MS0gKiBmcmFjdGlvbiBvZiB0aGUgcmVnaW9ucyAobWFraW5nIHByb2dyZXNzKSwgd2l0aG91dCBleGNlZWRpbmdcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0zNDQ9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM4OC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Mzg5OlxcdGtkYW1vbmRfc3BsaXRfcmVnaW9ucyhjKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzkwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjozOC4zMTQyNDE5NjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzI4ODkyMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgREFNT04gQXJjaGl0ZWN0dXJlKipcblxuQWxyaWdodCwgc28gYGtkYW1vbmRfc3BsaXRfcmVnaW9uc2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgYnkgYGtkYW1vbmRfZm5gLCB3aGljaCBtYWtlcyBga2RhbW9uZF9mbmAgdGhlIGNlbnRyYWwgdGhyZWFkIGZ1bmN0aW9uIGZvciBEQU1PTi4gVGhhdCdzIGdvb2QgdG8ga25vdywgaGVscHMgbWUgYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhlIGNvbnRyb2wgZmxvdy4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBEQU1PTiBjb25maWd1cmF0aW9uLiBMZXQncyBkaWcgaW50byBgbW0vZGFtb24vS2NvbmZpZ2AgdG8gc2VlIHdoYXQga2VybmVsIGNvbmZpZ3MgYXJlIG5lY2Vzc2FyeSBmb3IgREFNT04gdG8gZnVuY3Rpb24gcHJvcGVybHkuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGVuYWJsZWQgYW5kIHNldCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MjAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjo0MS4wNDMxMzY0NjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMTA4NjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjo0My4yNTQyMzI2MDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODcxMDU1OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCBJJ20gdGhpbmtpbmcgaGVyZeKAplxuXG4qKkFuYWx5emluZyB0aGUgREFNT04gQ29kZSBDaGFuZ2VzKipcblxuQWxyaWdodCwgc28gdGhlIHJlY2VudCBtb2RpZmljYXRpb25zIHNlZW0gdG8gY2VudGVyIGFyb3VuZCByZWdpb24gc3BsaXR0aW5nIHdpdGhpbiBEQU1PTi4gVGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBsb2NhdGVkIGluIGBtbS9kYW1vbi9jb3JlLmNgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyB0aGF0J3MgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSdtIG5vdGluZyB0aGF0IHRoZXJlJ3MgYSBuZXcgZnVuY3Rpb24gY2FsbGVkIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgLCB3aGljaCBpcyBhIGtleSBhZGRpdGlvbiwgYW5kIGBrZGFtb25kX3NwbGl0X3JlZ2lvbnNgIGhhcyBiZWVuIHVwZGF0ZWQgYXMgd2VsbCwgbGlrZWx5IHRvIGludGVncmF0ZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBHaXZlbiB0aGVzZSBmaWxlcywgdGhlIG5lY2Vzc2FyeSBnZW5lcmFsIGNvbmZpZyBpcyBgREFNT05gLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mIHRvIGNvbnRyb2wgdGhpcyBuZXcgc3BsaXR0aW5nIGJlaGF2aW9yIGluIGRldGFpbD8gSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhhdCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTYzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6MTI6NDcuMTI1MjkxMTk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDI1NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9NYWtlZmlsZS0yLVxcbm1tL2RhbW9uL01ha2VmaWxlOjM6b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG5tbS9kYW1vbi9NYWtlZmlsZS00LW9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjo0Ny4xODM3MzMyNDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc3NDMzNjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBVbmNvbmRpdGlvbmFsIEJ1aWxkIG9mIGBjb3JlLm9gKipcblxuT2theSwgc28gYGNvcmUub2AgaXMgYmVpbmcgYnVpbHQgbm8gbWF0dGVyIHdoYXQgaWYgd2UncmUgaW4gYG1tL2RhbW9uL2AuIFRoYXQgc3RyaWtlcyBtZSBhcyBhIGJpdCBvZGQ7IEkgdXN1YWxseSBwcmVmZXIgbW9yZSBjb25kaXRpb25hbCBidWlsZHMgdW5sZXNzIHRoZXJlJ3MgYSByZWFsbHkgZ29vZCByZWFzb24gZm9yIGl0IHRvIGJlIGFsd2F5cyBpbmNsdWRlZC4gVGltZSB0byBpbnZlc3RpZ2F0ZSB3aHkgdGhpcyBpcyBoYXBwZW5pbmcuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIG9iamVjdCBmaWxlIGluY2x1c2lvbiBpcyBoYW5kbGVkLCBhbmQgaXQgc2hvdWxkIHJldmVhbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyBmb3IgdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBtYWluIE1ha2VmaWxlIGFuZCB0aGlzIHNwZWNpZmljIGJ1aWxkIHByb2Nlc3MuIEknbGwgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjdWxwcml0cywgY29uZGl0aW9uYWwgZmxhZ3Mgb3IgcGF0dGVybnMgdGhhdCBhcmUgZm9yY2luZyB0aGUgYnVpbGQsIG9yIGV2ZW4gaWYgaXQncyBpbXBsaWNpdGx5IGluY2x1ZGVkIGJ5IGFub3RoZXIgZGVwZW5kZW5jeS4gVW5kZXJzdGFuZGluZyB0aGUgbG9naWMgaW4gdGhlIE1ha2VmaWxlIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGJ1aWxkLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MDgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMjo1MC45NjExNzA1NzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTQ2NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEzND1vYmotJChDT05GSUdfREVCVUdfUEFHRV9SRUYpICs9IGRlYnVnX3BhZ2VfcmVmLm9cXG5tbS9NYWtlZmlsZToxMzU6b2JqLSQoQ09ORklHX0RBTU9OKSArPSBkYW1vbi9cXG5tbS9NYWtlZmlsZS0xMzYtb2JqLSQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSArPSB1c2VyY29weS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjEyOjUxLjAyMDEyNTY1N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Nzk5NzMwNzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERBTU9OIENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRoaXMgREFNT04gdGVzdGluZyBzZXR1cCByaWdodC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYENPTkZJR19EQU1PTmAgaXMgZGVmaW5pdGVseSB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoYXQncyBhIGdpdmVuLiBBbmQgZm9yIHRlc3RpbmcsIGBDT05GSUdfREFNT05fS1VOSVRfVEVTVGAgbG9va3MgdXNlZnVsIHNpbmNlIGl0IGJ1bmRsZXMgYSBLVW5pdCB0ZXN0LiBOb3csIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IHN5emthbGxlciBpcyBnb2luZyB0byBiZSBmdXp6aW5nIHRoZSAqa2VybmVsKiwgbm90IGp1c3QgcnVubmluZyBpc29sYXRlZCBLVW5pdCB0ZXN0cy4gSG93ZXZlciwgc3l6a2FsbGVyICpjYW4qIHJ1biBLVW5pdCB0ZXN0cyBpZiB0aGV5J3JlIGJ1aWx0LWluIG9yIGxvYWRlZC5cblxuVGhlIGNyaXRpY2FsIHBpZWNlIG9mIERBTU9OIGZ1bmN0aW9uYWxpdHkgaXMgYGtkYW1vbmRfc3BsaXRfcmVnaW9uc2AsIHRoYXQncyBwYXJ0IG9mIHRoZSBjb3JlIGxvZ2ljLiBUbyBnZXQgdG8gdGhhdCBmdW5jdGlvbiwgSSBoYXZlIHRvIGludGVyYWN0IHdpdGggREFNT04gaXRzZWxmLiBUeXBpY2FsbHksIHRoYXQgaGFwcGVucyB0aHJvdWdoIHN5c2ZzIChgQ09ORklHX0RBTU9OX1NZU0ZTYCksIHdoaWNoIHNlZW1zIHRoZSBtb3N0IHByYWN0aWNhbCBtZXRob2QuIEFsdGhvdWdoIGRlYnVnZnMgaXMgYWxzbyBhbiBvcHRpb24sIHRoYXQgaXMgZGVwcmVjYXRlZC4gS2VybmVsIG1vZHVsZXMgbGlrZSBgREFNT05fUkVDTEFJTWAgYW5kIGBEQU1PTl9MUlVfU09SVGAgYXJlIGFsc28gYXZhaWxhYmxlLCBidXQgdGhlIHN5c2ZzIHJvdXRlIG1ha2VzIHRoZSBtb3N0IHNlbnNlLlxuXG5UaGVyZWZvcmUsIEknbGwgbmVlZCB0byBlbmFibGUgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1ZBRERSYCwgYW5kIGBEQU1PTl9QQUREUmAuIE5vdywgSSBzaG91bGQgZm9jdXMgb24gd2hpY2ggc3ltYm9scyB3aWxsIGJlIHRoZSBtb3N0IHVzZWZ1bCBmb3IgdGVzdGluZy5cblxuTGV0J3Mgc2VlLCB0aGUgZm9jdXMgc3ltYm9scyBsb29rIHRvIGJlIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgIGFuZCBga2RhbW9uZF9zcGxpdF9yZWdpb25zYC4gQXJlIHRob3NlIGhvdCBwYXRocywgdGhvdWdoPyBga2RhbW9uZF9zcGxpdF9yZWdpb25zYCBpcyBjYWxsZWQgYnkgYGtkYW1vbmRfZm5gLCB3aGljaCBpcyBhIGt0aHJlYWQgdGhhdCBleGVjdXRlcyBwZXJpb2RpY2FsbHksIGJhc2VkIG9uIHRoZSBgc2FtcGxlX2ludGVydmFsYCBhbmQgYGFnZ3JfaW50ZXJ2YWxgLiBJdCdzIG5vdCBhICpnZW5lcmljKiBob3QgcGF0aCwgbGlrZSBga21hbGxvY2Agb3IgYHNjaGVkdWxlYCwgaXQncyAqc3BlY2lmaWMqIHRvIERBTU9OLiBTbywgYGtkYW1vbmRfc3BsaXRfcmVnaW9uc2AgYW5kIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgIGFyZSBleGFjdGx5IHRoZSB0eXBlIG9mIGZvY3VzIHN5bWJvbHMgSSBhbSBsb29raW5nIGZvci5cblxuSnVzdCB0byBiZSBzdXJlLCBsZXQgbWUgZG91YmxlIGNoZWNrIHRoYXQgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgaXMgc3RhdGljLi4uIFllcCwgaXQgaXMuIEFuZCBga2RhbW9uZF9zcGxpdF9yZWdpb25zYC4uLiBZZXMsIHN0YXRpYyBhcyB3ZWxsLlxuXG5MZXQncyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyB0byB3b3JyeSBhYm91dC4gQWgsIGBkYW1vbl9zcGxpdF9yZWdpb25zX29mYCwgYnV0IHRoYXQgbG9va3MgbGlrZSBpdCdzIGp1c3QgYmVpbmcgY2FsbGVkIGFuZCBub3QgbW9kaWZpZWQuIEdvb2QuXG5cblNvIHRvIHJlY2FwLCBteSBmb2N1cyBzeW1ib2xzIGFyZTpcblxuKiAgIGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgXG4qICAgYGtkYW1vbmRfc3BsaXRfcmVnaW9uc2BcblxuQW5kIG15IHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZTpcblxuKiAgIGBEQU1PTmBcbiogICBgREFNT05fU1lTRlNgXG4qICAgYERBTU9OX1ZBRERSYFxuKiAgIGBEQU1PTl9QQUREUmBcbiogICBgREFNT05fS1VOSVRfVEVTVGAgKGJlY2F1c2UgYSBLVW5pdCB0ZXN0IHdhcyBhZGRlZCkuXG5cbkp1c3QgbmVlZCB0byB2ZXJpZnkgdGhlIGV4YWN0IG5hbWUgZm9yIGBEQU1PTl9LVU5JVF9URVNUYCwgYW5kIEkgYW0gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjYyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE2OjEyOjU5LjgxOTg2MDAxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI0ODc5ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9MTU9Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNjoxMzowMS44NDQ3NTE4ODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwMTU1OTYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBDb3JlIExvZ2ljIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYERBTU9OX0tVTklUX1RFU1RgIHBhdGNoLiBSaWdodCwgaXQncyBtZXNzaW5nIHdpdGggdGhlIGNvcmUgcmVnaW9uIHNwbGl0dGluZyBsb2dpYyBpbiBEQU1PTiwgc3BlY2lmaWNhbGx5IGBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnNgLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCdzIGRlc2lnbmVkIHRvIGhhbmRsZSBzY2VuYXJpb3Mgd2hlcmUgdGhlIG51bWJlciBvZiByZWdpb25zIGlzIGhpdHRpbmcgdGhlIGNlaWxpbmcuIEl0J3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljLCBzb21ldGhpbmcgdGhhdCB3b3VsZCBiZSBkaXJlY3RseSB0cmlnZ2VyZWQgdGhyb3VnaCBEQU1PTidzIHN5c2ZzIGludGVyZmFjZSBhZnRlciBzb21lIGNvbmZpZ3VyYXRpb24uXG5cbkhtbSwgbGV0J3Mgc2VlLCB3aGF0IGVsc2Ugc2hvdWxkIEkgY29uc2lkZXIgaGVyZSB0byBlbnN1cmUgdGhlIHRlc3RzIGFyZSBjb21wcmVoZW5zaXZlPyBSaWdodCwgSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgY29uZmlndXJhdGlvbnMgbGlrZSBgREFNT05fUkVDTEFJTWAgYW5kIGBEQU1PTl9MUlVfU09SVGAuIEVuYWJsaW5nIHRob3NlIHdvdWxkIHByb3ZpZGUgZXZlbiBtb3JlIGF2ZW51ZXMgdG8gdHJpZ2dlciBEQU1PTiBhbmQgdGh1cyB0ZXN0IHRoZSBuZXcgcmVnaW9uIHNwbGl0dGluZyBtb3JlIHRob3JvdWdobHksIGdpdmluZyBtZSBhIG11Y2ggd2lkZXIgdGVzdCBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUxNiwiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTY6MTM6MDYuODQ2MzE0MjQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1NjA3NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9LVU5JVF9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3BsaXRfc29tZV9yZWdpb25zXCIsXG4gICAgXCJrZGFtb25kX3NwbGl0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSByZWdpb24gc3BsaXR0aW5nIGxvZ2ljIGluIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSwgaW50cm9kdWNpbmcgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBudW1iZXIgb2YgcmVnaW9ucyBhcHByb2FjaGVzIHRoZSBtYXhpbXVtIGxpbWl0LiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBjb25maWd1cmluZyBhbmQgcnVubmluZyBEQU1PTiB2aWEgaXRzIHN5c2ZzIGludGVyZmFjZSBvciBvdGhlciBEQU1PTiBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9LVU5JVF9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3BsaXRfc29tZV9yZWdpb25zXCIsXG4gICAgXCJrZGFtb25kX3NwbGl0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSByZWdpb24gc3BsaXR0aW5nIGxvZ2ljIGluIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSwgaW50cm9kdWNpbmcgYGRhbW9uX3NwbGl0X3NvbWVfcmVnaW9uc2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBudW1iZXIgb2YgcmVnaW9ucyBhcHByb2FjaGVzIHRoZSBtYXhpbXVtIGxpbWl0LiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBjb25maWd1cmluZyBhbmQgcnVubmluZyBEQU1PTiB2aWEgaXRzIHN5c2ZzIGludGVyZmFjZSBvciBvdGhlciBEQU1PTiBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44h8[1] Phase: Succeeded StartedAt: 2026-06-29 16:13:18 +0000 UTC FinishedAt: 2026-06-29 16:13:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 16:13:18 +0000 UTC FinishedAt: 2026-06-29 16:13:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2] Phase: Succeeded StartedAt: 2026-06-29 16:13:18 +0000 UTC FinishedAt: 2026-06-29 20:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-29 16:13:18 +0000 UTC FinishedAt: 2026-06-29 20:26:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-29 16:13:18 +0000 UTC FinishedAt: 2026-06-29 16:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-29 16:13:18 +0000 UTC FinishedAt: 2026-06-29 16:13:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm44h8/series-workflowm44h8-convert-artifact-2938755736/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-29 16:13:28 +0000 UTC FinishedAt: 2026-06-29 16:41:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-29 16:13:28 +0000 UTC FinishedAt: 2026-06-29 16:41:47 +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:*4cb27b18-cdfe-4c75-8304-af1d37a41057,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-workflowm44h8/series-workflowm44h8-convert-artifact-2938755736/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": "0cd66ee4-5f72-45b6-bd00-51949f7c8919", "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-workflowm44h8/series-workflowm44h8-build-action-223942606/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-29 16:13:28 +0000 UTC FinishedAt: 2026-06-29 16:41:37 +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:*4cb27b18-cdfe-4c75-8304-af1d37a41057,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-workflowm44h8/series-workflowm44h8-convert-artifact-2938755736/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": "0cd66ee4-5f72-45b6-bd00-51949f7c8919", "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-workflowm44h8/series-workflowm44h8-build-action-223942606/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-29 16:41:47 +0000 UTC FinishedAt: 2026-06-29 16:41:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-29 16:41:47 +0000 UTC FinishedAt: 2026-06-29 16:41:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-29 16:41:47 +0000 UTC FinishedAt: 2026-06-29 16:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-29 16:41:47 +0000 UTC FinishedAt: 2026-06-29 16:41:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm44h8/series-workflowm44h8-convert-artifact-3442735871/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-29 16:43:16 +0000 UTC FinishedAt: 2026-06-29 16:45:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-29 16:43:16 +0000 UTC FinishedAt: 2026-06-29 16:45:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0cd66ee4-5f72-45b6-bd00-51949f7c8919,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-workflowm44h8/series-workflowm44h8-build-action-223942606/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-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-29 16:45:17 +0000 UTC FinishedAt: 2026-06-29 16:45:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-29 16:45:17 +0000 UTC FinishedAt: 2026-06-29 16:45:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-29 16:45:17 +0000 UTC FinishedAt: 2026-06-29 17:19:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-29 16:45:17 +0000 UTC FinishedAt: 2026-06-29 17:19:35 +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:*4cb27b18-cdfe-4c75-8304-af1d37a41057,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-workflowm44h8/series-workflowm44h8-convert-artifact-3442735871/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": "608462b5-9070-4d61-a594-b7449af34a42", "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-workflowm44h8/series-workflowm44h8-build-action-692502803/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-29 16:45:17 +0000 UTC FinishedAt: 2026-06-29 17:19:11 +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:*4cb27b18-cdfe-4c75-8304-af1d37a41057,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-workflowm44h8/series-workflowm44h8-convert-artifact-3442735871/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": "608462b5-9070-4d61-a594-b7449af34a42", "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-workflowm44h8/series-workflowm44h8-build-action-692502803/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-29 17:19:35 +0000 UTC FinishedAt: 2026-06-29 17:19:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-29 17:19:35 +0000 UTC FinishedAt: 2026-06-29 17:19:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-29 17:19:35 +0000 UTC FinishedAt: 2026-06-29 17:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-29 17:19:35 +0000 UTC FinishedAt: 2026-06-29 17:21:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*608462b5-9070-4d61-a594-b7449af34a42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm44h8/series-workflowm44h8-build-action-692502803/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-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-29 17:21:33 +0000 UTC FinishedAt: 2026-06-29 20:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-29 17:21:33 +0000 UTC FinishedAt: 2026-06-29 20:26:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0cd66ee4-5f72-45b6-bd00-51949f7c8919,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*608462b5-9070-4d61-a594-b7449af34a42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm44h8/series-workflowm44h8-build-action-223942606/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm44h8/series-workflowm44h8-build-action-692502803/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-29 17:21:33 +0000 UTC FinishedAt: 2026-06-29 17:23:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-29 17:21:33 +0000 UTC FinishedAt: 2026-06-29 17:22:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm44h8/series-workflowm44h8-convert-artifact-1513574808/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-29 17:21:33 +0000 UTC FinishedAt: 2026-06-29 17:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-29 17:21:33 +0000 UTC FinishedAt: 2026-06-29 17:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-29 17:21:33 +0000 UTC FinishedAt: 2026-06-29 17:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-29 17:23:07 +0000 UTC FinishedAt: 2026-06-29 20:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm44h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_split_some_regions","kdamond_split_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR","DAMON_KUNIT_TEST"],"series_id":"033d2c1e-1d79-437e-a5a5-ccabaf4d4cf2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-29 17:23:07 +0000 UTC FinishedAt: 2026-06-29 20:26:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0cd66ee4-5f72-45b6-bd00-51949f7c8919,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*608462b5-9070-4d61-a594-b7449af34a42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm44h8/series-workflowm44h8-build-action-223942606/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm44h8/series-workflowm44h8-build-action-692502803/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm44h8/series-workflowm44h8-convert-artifact-1513574808/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}