Name: series-workflowx4lzc Phase: Failed StartedAt: 2026-07-31 01:05:24 +0000 UTC FinishedAt: 2026-07-31 01:07:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4lzc[0] Phase: Succeeded StartedAt: 2026-07-31 01:05:24 +0000 UTC FinishedAt: 2026-07-31 01:07:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4lzc[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 01:05:24 +0000 UTC FinishedAt: 2026-07-31 01:07:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIHdoaWNoIGFyZSB1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjE4NGE4NmRhODBkNTFjMzI5ZTA4MTdlZTBhYjM3Y2JmYTFiZDEyNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDAxOjA2OjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hY2Nlc3NfdHJhY2tpbmdfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jXG5pbmRleCA0NDE1Yzk0YjI4NjYwLi5mNzhkNTYyNjVkODkzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FjY2Vzc190cmFja2luZ19wZXJmX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FjY2Vzc190cmFja2luZ19wZXJmX3Rlc3QuY1xuQEAgLTQwOSw3ICYjNDM7NDA5LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcbiBcdGludCBucl92Y3B1cyA9IHBhcmFtcy1cdTAwM2Vucl92Y3B1cztcbiBcbiBcdHZtID0gbWVtc3RyZXNzX2NyZWF0ZV92bShtb2RlLCBucl92Y3B1cywgcGFyYW1zLVx1MDAzZXZjcHVfbWVtb3J5X2J5dGVzLCAxLFxuLVx0XHRcdFx0IHBhcmFtcy1cdTAwM2ViYWNraW5nX3NyYywgIW92ZXJsYXBfbWVtb3J5X2FjY2Vzcyk7XG4mIzQzO1x0XHRcdFx0IHBhcmFtcy1cdTAwM2ViYWNraW5nX3NyYywgIW92ZXJsYXBfbWVtb3J5X2FjY2VzcywgMCk7XG4gXG4gXHQvKlxuIFx0ICogSWYgZ3Vlc3RfcGFnZV9zaXplIGlzIGxhcmdlciB0aGFuIHRoZSBob3N0JiMzOTtzIHBhZ2Ugc2l6ZSwgdGhlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jXG5pbmRleCAzMDJjNDkyM2QwOTMwLi45MjI0NmUyN2VmNzQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmNcbkBAIC0xNjIsNyAmIzQzOzE2Miw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRpbnQgaSwgbnVtX3VmZmRzID0gMDtcbiBcbiBcdHZtID0gbWVtc3RyZXNzX2NyZWF0ZV92bShtb2RlLCBucl92Y3B1cywgZ3Vlc3RfcGVyY3B1X21lbV9zaXplLCAxLFxuLVx0XHRcdFx0IHAtXHUwMDNlc3JjX3R5cGUsIHAtXHUwMDNlcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2Vzcyk7XG4mIzQzO1x0XHRcdFx0IHAtXHUwMDNlc3JjX3R5cGUsIHAtXHUwMDNlcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcywgMCk7XG4gXG4gXHRkZW1hbmRfcGFnaW5nX3NpemUgPSBnZXRfYmFja2luZ19zcmNfcGFnZXN6KHAtXHUwMDNlc3JjX3R5cGUpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jXG5pbmRleCBlZjc3OWZhOTE4MjdjLi42ZTgwZDM2Y2M2MWEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xuQEAgLTEzLDYgJiM0MzsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2JhcnJpZXIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X3V0aWwuaFwmIzM0O1xuQEAgLTI5LDkgJiM0MzszMCw1MyBAQCBzdGF0aWMgYm9vbCBydW5fdmNwdXNfd2hpbGVfZGlzYWJsaW5nX2RpcnR5X2xvZ2dpbmc7XG4gXG4gLyogSG9zdCB2YXJpYWJsZXMgKi9cbiBzdGF0aWMgdTY0IGRpcnR5X2xvZ19tYW51YWxfY2FwcztcbiYjNDM7c3RhdGljIHUzMiBkaXJ0eV9yaW5nX3NpemU7XG4gc3RhdGljIGJvb2wgaG9zdF9xdWl0O1xuIHN0YXRpYyBpbnQgaXRlcmF0aW9uO1xuIHN0YXRpYyBpbnQgdmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25bS1ZNX01BWF9WQ1BVU107XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgdmNwdV9kaXJ0eV9yaW5nX2NvbGxlY3RbS1ZNX01BWF9WQ1BVU107XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkaXJ0eV9yaW5nX2NvbGxlY3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJpbmdfaWR4LFxuJiM0MztcdFx0XHRcdHN0cnVjdCB0aW1lc3BlYyAqdHMpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgcHRocmVhZF9tdXRleF90IGNvbGxlY3QgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYyBzdGFydDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZGlydHlfZ2ZucyA9IHZjcHVfbWFwX2RpcnR5X3JpbmcodmNwdSk7XG4mIzQzO1x0dTMyIGlkeCA9ICpyaW5nX2lkeDtcbiYjNDM7XHR1MzIgcmluZ19zaXplID0gdmNwdS1cdTAwM2V2bS1cdTAwM2VkaXJ0eV9yaW5nX3NpemUgLyBzaXplb2Yoc3RydWN0IGt2bV9kaXJ0eV9nZm4pO1xuJiM0MztcdGludCBjbGVhcmVkLCBjb3VudDtcbiYjNDM7XG4mIzQzO1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNmNvbGxlY3QpO1xuJiM0MztcbiYjNDM7XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2c3RhcnQpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAodHJ1ZSkge1xuJiM0MztcdFx0c3RydWN0IGt2bV9kaXJ0eV9nZm4gKmN1cjtcbiYjNDM7XG4mIzQzO1x0XHRjdXIgPSBcdTAwMjZkaXJ0eV9nZm5zW2lkeCAlIHJpbmdfc2l6ZV07XG4mIzQzO1x0XHRpZiAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjdXItXHUwMDNlZmxhZ3MpICE9IEtWTV9ESVJUWV9HRk5fRl9ESVJUWSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Y3VyLVx1MDAzZWZsYWdzLCBLVk1fRElSVFlfR0ZOX0ZfUkVTRVQpO1xuJiM0MztcdFx0aWR4JiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNvdW50ID0gaWR4IC0gKnJpbmdfaWR4O1xuJiM0MztcdCpyaW5nX2lkeCA9IGlkeDtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJlZCA9IGt2bV92bV9yZXNldF9kaXJ0eV9yaW5nKHZjcHUtXHUwMDNldm0pO1xuJiM0MztcbiYjNDM7XHQvKiBDbGVhcmVkIHBhZ2VzIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBjb2xsZWN0ZWQsIGFzIEtWTSBpcyBzdXBwb3NlZCB0b1xuJiM0MztcdCAqIGNsZWFyIG9ubHkgdGhlIGVudHJpZXMgdGhhdCBoYXZlIGJlZW4gaGFydmVzdGVkLCBhbmQgYSBzaW5nbGUgdmNwdSB3aWxsXG4mIzQzO1x0ICogaGFydmVzdCBhdCB0aW1lLlxuJiM0MztcdCAqL1xuJiM0MztcdFRFU1RfQVNTRVJUKGNsZWFyZWQgPT0gY291bnQsIFwmIzM0O1Jlc2V0IGRpcnR5IHBhZ2VzICgldSkgbWlzbWF0Y2ggXCYjMzQ7XG4mIzQzO1x0XHQgICAgXCYjMzQ7d2l0aCBjb2xsZWN0ZWQgKCV1KVwmIzM0OywgY2xlYXJlZCwgY291bnQpO1xuJiM0MztcbiYjNDM7XHQqdHMgPSB0aW1lc3BlY19hZGQoKnRzLCB0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KSk7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNmNvbGxlY3QpO1xuJiM0Mzt9XG4gXG4gc3RhdGljIHZvaWQgdmNwdV93b3JrZXIoc3RydWN0IG1lbXN0cmVzc192Y3B1X2FyZ3MgKnZjcHVfYXJncylcbiB7XG5AQCAtNDMsMjQgJiM0Mzs4OCw0NSBAQCBzdGF0aWMgdm9pZCB2Y3B1X3dvcmtlcihzdHJ1Y3QgbWVtc3RyZXNzX3ZjcHVfYXJncyAqdmNwdV9hcmdzKVxuIFx0c3RydWN0IHRpbWVzcGVjIHRzX2RpZmY7XG4gXHRzdHJ1Y3QgdGltZXNwZWMgdG90YWwgPSAoc3RydWN0IHRpbWVzcGVjKXswfTtcbiBcdHN0cnVjdCB0aW1lc3BlYyBhdmc7XG4mIzQzO1x0Ym9vbCB1c2VfZGlydHlfcmluZyA9ICEhdmNwdS1cdTAwM2V2bS1cdTAwM2VkaXJ0eV9yaW5nX3NpemU7XG4mIzQzO1x0dTMyIHJpbmdfaWR4ID0gMDtcbiBcdGludCByZXQ7XG4gXG4gXHRydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbiBcbiBcdHdoaWxlICghUkVBRF9PTkNFKGhvc3RfcXVpdCkpIHtcbiBcdFx0aW50IGN1cnJlbnRfaXRlcmF0aW9uID0gUkVBRF9PTkNFKGl0ZXJhdGlvbik7XG4mIzQzO1x0XHRzdHJ1Y3QgdGltZXNwZWMgY29sbGVjdCA9IChzdHJ1Y3QgdGltZXNwZWMpezB9O1xuIFxuIFx0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2c3RhcnQpO1xuLVx0XHRyZXQgPSBfdmNwdV9ydW4odmNwdSk7XG4mIzQzO1xuJiM0MztcdFx0ZG8ge1xuJiM0MztcdFx0XHRyZXQgPSBfdmNwdV9ydW4odmNwdSk7XG4mIzQzO1x0XHRcdGlmICghdXNlX2RpcnR5X3JpbmcpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0XHRkaXJ0eV9yaW5nX2NvbGxlY3QodmNwdSwgXHUwMDI2cmluZ19pZHgsIFx1MDAyNmNvbGxlY3QpO1xuJiM0MztcdFx0fSB3aGlsZSAoIXJldCBcdTAwMjZcdTAwMjYgcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX0RJUlRZX1JJTkdfRlVMTCk7XG4mIzQzO1xuIFx0XHR0c19kaWZmID0gdGltZXNwZWNfZWxhcHNlZChzdGFydCk7XG4gXG4mIzQzO1x0XHRpZiAodXNlX2RpcnR5X3JpbmcpIHtcbiYjNDM7XHRcdFx0dHNfZGlmZiA9IHRpbWVzcGVjX3N1Yih0c19kaWZmLCBjb2xsZWN0KTtcbiYjNDM7XHRcdFx0dmNwdV9kaXJ0eV9yaW5nX2NvbGxlY3RbdmNwdV9pZHhdID0gY29sbGVjdDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdFRFU1RfQVNTRVJUKHJldCA9PSAwLCBcJiMzNDt2Y3B1X3J1biBmYWlsZWQ6ICVkXCYjMzQ7LCByZXQpO1xuIFx0XHRURVNUX0FTU0VSVChnZXRfdWNhbGwodmNwdSwgTlVMTCkgPT0gVUNBTExfU1lOQyxcbiBcdFx0XHQgICAgXCYjMzQ7SW52YWxpZCBndWVzdCBzeW5jIHN0YXR1czogZXhpdF9yZWFzb249JXNcJiMzNDssXG4gXHRcdFx0ICAgIGV4aXRfcmVhc29uX3N0cihydW4tXHUwMDNlZXhpdF9yZWFzb24pKTtcbiBcbiBcdFx0cHJfZGVidWcoXCYjMzQ7R290IHN5bmMgZXZlbnQgZnJvbSB2Q1BVICVkXFxuXCYjMzQ7LCB2Y3B1X2lkeCk7XG4tXHRcdHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW3ZjcHVfaWR4XSA9IGN1cnJlbnRfaXRlcmF0aW9uO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE1ha2Ugc3VyZSB2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbiB3cml0ZSBoYXBwZW5zIGJlZm9yZVxuJiM0MztcdFx0ICogdXBkYXRpbmcgY3VycmVudCBpdGVyYXRpb24uICBQYWlycyB3aXRoIHJ1bl90ZXN0LCBhZnRlciBwb3B1bGF0aW5nLi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25bdmNwdV9pZHhdLFxuJiM0MztcdFx0XHRcdCAgY3VycmVudF9pdGVyYXRpb24pO1xuIFx0XHRwcl9kZWJ1ZyhcJiMzNDt2Q1BVICVkIHVwZGF0ZWQgbGFzdCBjb21wbGV0ZWQgaXRlcmF0aW9uIHRvICVkXFxuXCYjMzQ7LFxuIFx0XHRcdCB2Y3B1X2lkeCwgdmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25bdmNwdV9pZHhdKTtcbiBcbkBAIC0xMTksNyAmIzQzOzE4NSw4IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXG4gXHR2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSxcbiBcdFx0XHRcdCBwLVx1MDAzZXNsb3RzLCBwLVx1MDAzZWJhY2tpbmdfc3JjLFxuLVx0XHRcdFx0IHAtXHUwMDNlcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2Vzcyk7XG4mIzQzO1x0XHRcdFx0IHAtXHUwMDNlcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcyxcbiYjNDM7XHRcdFx0XHQgZGlydHlfcmluZ19zaXplKTtcbiBcbiBcdG1lbXN0cmVzc19zZXRfd3JpdGVfcGVyY2VudCh2bSwgcC1cdTAwM2V3cml0ZV9wZXJjZW50KTtcbiBcbkBAIC0xMjgsNyAmIzQzOzE5NSw4IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRob3N0X251bV9wYWdlcyA9IHZtX251bV9ob3N0X3BhZ2VzKG1vZGUsIGd1ZXN0X251bV9wYWdlcyk7XG4gXHRwYWdlc19wZXJfc2xvdCA9IGhvc3RfbnVtX3BhZ2VzIC8gcC1cdTAwM2VzbG90cztcbiBcbi1cdGJpdG1hcHMgPSBtZW1zdHJlc3NfYWxsb2NfYml0bWFwcyhwLVx1MDAzZXNsb3RzLCBwYWdlc19wZXJfc2xvdCk7XG4mIzQzO1x0aWYgKCFkaXJ0eV9yaW5nX3NpemUpXG4mIzQzO1x0XHRiaXRtYXBzID0gbWVtc3RyZXNzX2FsbG9jX2JpdG1hcHMocC1cdTAwM2VzbG90cywgcGFnZXNfcGVyX3Nsb3QpO1xuIFxuIFx0aWYgKGRpcnR5X2xvZ19tYW51YWxfY2FwcylcbiBcdFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9NQU5VQUxfRElSVFlfTE9HX1BST1RFQ1QyLFxuQEAgLTEzOSw4ICYjNDM7MjA3LDEwIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRob3N0X3F1aXQgPSBmYWxzZTtcbiBcbiBcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZzdGFydCk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW2ldID0gLTE7XG4mIzQzO1x0XHR2Y3B1X2RpcnR5X3JpbmdfY29sbGVjdFtpXSA9IChzdHJ1Y3QgdGltZXNwZWMpezB9O1xuJiM0MztcdH1cbiBcbiBcdC8qXG4gXHQgKiBVc2UgMTAwJSB3cml0ZXMgZHVyaW5nIHRoZSBwb3B1bGF0aW9uIHBoYXNlIHRvIGVuc3VyZSBhbGxcbkBAIC0xODUsNyAmIzQzOzI1NSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXG4gXHRcdHByX2RlYnVnKFwmIzM0O1N0YXJ0aW5nIGl0ZXJhdGlvbiAlZFxcblwmIzM0OywgaXRlcmF0aW9uKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0d2hpbGUgKFJFQURfT05DRSh2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbltpXSlcbiYjNDM7XHRcdFx0d2hpbGUgKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25baV0pXG4gXHRcdFx0ICAgICAgICE9IGl0ZXJhdGlvbilcbiBcdFx0XHRcdDtcbiBcdFx0fVxuQEAgLTE5NSw2ICYjNDM7MjY1LDIxIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRcdHByX2luZm8oXCYjMzQ7SXRlcmF0aW9uICVkIGRpcnR5IG1lbW9yeSB0aW1lOiAlbGQuJS45bGRzXFxuXCYjMzQ7LFxuIFx0XHRcdGl0ZXJhdGlvbiwgdHNfZGlmZi50dl9zZWMsIHRzX2RpZmYudHZfbnNlYyk7XG4gXG4mIzQzO1x0XHRpZiAoZGlydHlfcmluZ19zaXplKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB0aW1lc3BlYyBpdGVyYXRpb25fc3VtID0gKHN0cnVjdCB0aW1lc3BlYyl7MH07XG4mIzQzO1xuJiM0MztcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFx0aXRlcmF0aW9uX3N1bSA9IHRpbWVzcGVjX2FkZChpdGVyYXRpb25fc3VtLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgdmNwdV9kaXJ0eV9yaW5nX2NvbGxlY3RbaV0pO1xuJiM0MztcbiYjNDM7XHRcdFx0cHJfaW5mbyhcJiMzNDtJdGVyYXRpb24gJWQgY2xlYXIgZGlydHkgcmluZyB0aW1lOiAlbGQuJS45bGRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdGl0ZXJhdGlvbiwgaXRlcmF0aW9uX3N1bS50dl9zZWMsIGl0ZXJhdGlvbl9zdW0udHZfbnNlYyk7XG4mIzQzO1xuJiM0MztcdFx0XHRjbGVhcl9kaXJ0eV9sb2dfdG90YWwgPSB0aW1lc3BlY19hZGQoY2xlYXJfZGlydHlfbG9nX3RvdGFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgaXRlcmF0aW9uX3N1bSk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNnN0YXJ0KTtcbiBcdFx0bWVtc3RyZXNzX2dldF9kaXJ0eV9sb2codm0sIGJpdG1hcHMsIHAtXHUwMDNlc2xvdHMpO1xuIFx0XHR0c19kaWZmID0gdGltZXNwZWNfZWxhcHNlZChzdGFydCk7XG5AQCAtMjM4LDE5ICYjNDM7MzIzLDIyIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRob3N0X3F1aXQgPSB0cnVlO1xuIFx0bWVtc3RyZXNzX2pvaW5fdmNwdV90aHJlYWRzKG5yX3ZjcHVzKTtcbiBcbi1cdGF2ZyA9IHRpbWVzcGVjX2RpdihnZXRfZGlydHlfbG9nX3RvdGFsLCBwLVx1MDAzZWl0ZXJhdGlvbnMpO1xuLVx0cHJfaW5mbyhcJiMzNDtHZXQgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxcblwmIzM0Oyxcbi1cdFx0cC1cdTAwM2VpdGVyYXRpb25zLCBnZXRfZGlydHlfbG9nX3RvdGFsLnR2X3NlYyxcbi1cdFx0Z2V0X2RpcnR5X2xvZ190b3RhbC50dl9uc2VjLCBhdmcudHZfc2VjLCBhdmcudHZfbnNlYyk7XG4mIzQzO1x0aWYgKCFkaXJ0eV9yaW5nX3NpemUpIHtcbiYjNDM7XHRcdGF2ZyA9IHRpbWVzcGVjX2RpdihnZXRfZGlydHlfbG9nX3RvdGFsLCBwLVx1MDAzZWl0ZXJhdGlvbnMpO1xuJiM0MztcdFx0cHJfaW5mbyhcJiMzNDtHZXQgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cC1cdTAwM2VpdGVyYXRpb25zLCBnZXRfZGlydHlfbG9nX3RvdGFsLnR2X3NlYyxcbiYjNDM7XHRcdFx0Z2V0X2RpcnR5X2xvZ190b3RhbC50dl9uc2VjLCBhdmcudHZfc2VjLCBhdmcudHZfbnNlYyk7XG4mIzQzO1x0fVxuIFxuLVx0aWYgKGRpcnR5X2xvZ19tYW51YWxfY2Fwcykge1xuJiM0MztcdGlmIChkaXJ0eV9sb2dfbWFudWFsX2NhcHMgfHwgZGlydHlfcmluZ19zaXplKSB7XG4gXHRcdGF2ZyA9IHRpbWVzcGVjX2RpdihjbGVhcl9kaXJ0eV9sb2dfdG90YWwsIHAtXHUwMDNlaXRlcmF0aW9ucyk7XG4gXHRcdHByX2luZm8oXCYjMzQ7Q2xlYXIgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxcblwmIzM0OyxcbiBcdFx0XHRwLVx1MDAzZWl0ZXJhdGlvbnMsIGNsZWFyX2RpcnR5X2xvZ190b3RhbC50dl9zZWMsXG4gXHRcdFx0Y2xlYXJfZGlydHlfbG9nX3RvdGFsLnR2X25zZWMsIGF2Zy50dl9zZWMsIGF2Zy50dl9uc2VjKTtcbiBcdH1cbiBcbi1cdG1lbXN0cmVzc19mcmVlX2JpdG1hcHMoYml0bWFwcywgcC1cdTAwM2VzbG90cyk7XG4mIzQzO1x0aWYgKCFkaXJ0eV9yaW5nX3NpemUpXG4mIzQzO1x0XHRtZW1zdHJlc3NfZnJlZV9iaXRtYXBzKGJpdG1hcHMsIHAtXHUwMDNlc2xvdHMpO1xuIFx0bWVtc3RyZXNzX2Rlc3Ryb3lfdm0odm0pO1xuIH1cbiBcbkBAIC0yNTksMTEgJiM0MzszNDcsMTUgQEAgc3RhdGljIHZvaWQgaGVscChjaGFyICpuYW1lKVxuIFx0cHV0cyhcJiMzNDtcJiMzNDspO1xuIFx0cHJpbnRmKFwmIzM0O3VzYWdlOiAlcyBbLWhdIFstYV0gWy1pIGl0ZXJhdGlvbnNdIFstcCBvZmZzZXRdIFstZ10gXCYjMzQ7XG4gXHQgICAgICAgXCYjMzQ7Wy1tIG1vZGVdIFstbl0gWy1iIHZjcHUgYnl0ZXNdIFstdiB2Y3B1c10gWy1vXSBbLXIgcmFuZG9tIHNlZWQgXSBbLXMgbWVtIHR5cGVdXCYjMzQ7XG4tXHQgICAgICAgXCYjMzQ7Wy14IG1lbXNsb3RzXSBbLXcgcGVyY2VudGFnZV0gWy1jIHBoeXNpY2FsIGNwdXMgdG8gcnVuIHRlc3Qgb25dXFxuXCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHQgICAgICAgXCYjMzQ7Wy14IG1lbXNsb3RzXSBbLXcgcGVyY2VudGFnZV0gWy1jIHBoeXNpY2FsIGNwdXMgdG8gcnVuIHRlc3Qgb25dIFxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDtbLWQgZGlydHktcmluZyBlbnRyaWVzXVxcblwmIzM0OywgbmFtZSk7XG4gXHRwdXRzKFwmIzM0O1wmIzM0Oyk7XG4gXHRwcmludGYoXCYjMzQ7IC1hOiBhY2Nlc3MgbWVtb3J5IHJhbmRvbWx5IHJhdGhlciB0aGFuIGluIG9yZGVyLlxcblwmIzM0Oyk7XG4gXHRwcmludGYoXCYjMzQ7IC1pOiBzcGVjaWZ5IGl0ZXJhdGlvbiBjb3VudHMgKGRlZmF1bHQ6ICVcJiMzNDtQUkl1NjRcJiMzNDspXFxuXCYjMzQ7LFxuIFx0ICAgICAgIFRFU1RfSE9TVF9MT09QX04pO1xuJiM0MztcdHByaW50ZihcJiMzNDsgLWQ6IGVuYWJsZSBkaXJ0eS1yaW5nIGZvciB0cmFja2luZyBkaXJ0eSBwYWdlcywgd2l0aCBnaXZlbiBlbnRyaWVzIGNvdW50LlxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgIElmIG5vbi16ZXJvLCB3aWxsIGNhdXNlIGRpcnR5LXJpbmcgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mXFxuXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0OyAgICAgZGlydHktYml0bWFwLiBNdXN0IGJlIGEgcG93ZXIgb2YgdHdvLlxcblwmIzM0Oyk7XG4gXHRwcmludGYoXCYjMzQ7IC1nOiBEbyBub3QgZW5hYmxlIEtWTV9DQVBfTUFOVUFMX0RJUlRZX0xPR19QUk9URUNUMi4gVGhpc1xcblwmIzM0O1xuIFx0ICAgICAgIFwmIzM0OyAgICAgbWFrZXMgS1ZNX0dFVF9ESVJUWV9MT0cgY2xlYXIgdGhlIGRpcnR5IGxvZyAoaS5lLlxcblwmIzM0O1xuIFx0ICAgICAgIFwmIzM0OyAgICAgS1ZNX0RJUlRZX0xPR19NQU5VQUxfUFJPVEVDVF9FTkFCTEUgaXMgbm90IGVuYWJsZWQpXFxuXCYjMzQ7XG5AQCAtMzA5LDYgJiM0Mzs0MDEsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHQud3JpdGVfcGVyY2VudCA9IDEwMCxcbiBcdH07XG4gXHRpbnQgb3B0O1xuJiM0MztcdHU2NCB0bXA7XG4gXG4gXHQvKiBPdmVycmlkZSB0aGUgc2VlZCB0byBiZSBkZXRlcm1pbmlzdGljIGJ5IGRlZmF1bHQuICovXG4gXHRndWVzdF9yYW5kb21fc2VlZCA9IDE7XG5AQCAtMzIwLDcgJiM0Mzs0MTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0Z3Vlc3RfbW9kZXNfYXBwZW5kX2RlZmF1bHQoKTtcbiBcbi1cdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O2FiOmM6ZWdoaTptOm5vcDpyOnM6djp4Onc6XCYjMzQ7KSkgIT0gLTEpIHtcbiYjNDM7XHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDthYjpjOmQ6ZWdoaTptOm5vcDpyOnM6djp4Onc6XCYjMzQ7KSkgIT0gLTEpIHtcbiBcdFx0c3dpdGNoIChvcHQpIHtcbiBcdFx0Y2FzZSAmIzM5O2EmIzM5OzpcbiBcdFx0XHRwLnJhbmRvbV9hY2Nlc3MgPSB0cnVlO1xuQEAgLTMzMSw2ICYjNDM7NDI0LDEzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdGNhc2UgJiMzOTtjJiMzOTs6XG4gXHRcdFx0cGNwdV9saXN0ID0gb3B0YXJnO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O2QmIzM5OzpcbiYjNDM7XHRcdFx0dG1wID0gcGFyc2Vfc2l6ZShvcHRhcmcpO1xuJiM0MztcdFx0XHRURVNUX0FTU0VSVCh0bXAsIFwmIzM0O0RpcnR5LXJpbmcgc2l6ZSBzaG91bGQgYmUgXHUwMDNlIDBcJiMzNDspO1xuJiM0MztcdFx0XHRURVNUX0FTU0VSVCh0bXAgXHUwMDNjPSBVSU5UMzJfTUFYIC8gc2l6ZW9mKHN0cnVjdCBrdm1fZGlydHlfZ2ZuKSxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7RGlydHktcmluZyBzaXplICglbHUpIGlzIHRvbyBsYXJnZS5cJiMzNDssIHRtcCk7XG4mIzQzO1x0XHRcdGRpcnR5X3Jpbmdfc2l6ZSA9IHRtcCAqIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbik7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7ZSYjMzk7OlxuIFx0XHRcdC8qICYjMzk7ZSYjMzk7IGlzIGZvciBldmlsLiAqL1xuIFx0XHRcdHJ1bl92Y3B1c193aGlsZV9kaXNhYmxpbmdfZGlydHlfbG9nZ2luZyA9IHRydWU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbWVtc3RyZXNzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9tZW1zdHJlc3MuaFxuaW5kZXggMGQxZDYyMzBjYzA1MS4uZTE3ZjM0NDk3OGFmNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL21lbXN0cmVzcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9tZW1zdHJlc3MuaFxuQEAgLTU4LDcgJiM0Mzs1OCw4IEBAIGV4dGVybiBzdHJ1Y3QgbWVtc3RyZXNzX2FyZ3MgbWVtc3RyZXNzX2FyZ3M7XG4gc3RydWN0IGt2bV92bSAqbWVtc3RyZXNzX2NyZWF0ZV92bShlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgaW50IG5yX3ZjcHVzLFxuIFx0XHRcdFx0ICAgdTY0IHZjcHVfbWVtb3J5X2J5dGVzLCBpbnQgc2xvdHMsXG4gXHRcdFx0XHQgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIGJhY2tpbmdfc3JjLFxuLVx0XHRcdFx0ICAgYm9vbCBwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKTtcbiYjNDM7XHRcdFx0XHQgICBib29sIHBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsXG4mIzQzO1x0XHRcdFx0ICAgdTMyIGRpcnR5X3Jpbmdfc2l6ZSk7XG4gdm9pZCBtZW1zdHJlc3NfZGVzdHJveV92bShzdHJ1Y3Qga3ZtX3ZtICp2bSk7XG4gXG4gdm9pZCBtZW1zdHJlc3Nfc2V0X3dyaXRlX3BlcmNlbnQoc3RydWN0IGt2bV92bSAqdm0sIHUzMiB3cml0ZV9wZXJjZW50KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbmluZGV4IDE5NWYzZmRhZTFlMzkuLmYxZWJkNzEyMjc2M2EgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xuQEAgLTE2NywxMCAmIzQzOzE2NywyMyBAQCB1bnNpZ25lZCBpbnQga3ZtX2NoZWNrX2NhcChsb25nIGNhcClcbiBcbiB2b2lkIHZtX2VuYWJsZV9kaXJ0eV9yaW5nKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgcmluZ19zaXplKVxuIHtcbi1cdGlmICh2bV9jaGVja19jYXAodm0sIEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfQUNRX1JFTCkpXG4tXHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfQUNRX1JFTCwgcmluZ19zaXplKTtcbi1cdGVsc2Vcbi1cdFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9ESVJUWV9MT0dfUklORywgcmluZ19zaXplKTtcbiYjNDM7XHRsb25nIGNhcCA9IEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfQUNRX1JFTDtcbiYjNDM7XHRpbnQgbWF4X3NpemUgPSB2bV9jaGVja19jYXAodm0sIGNhcCk7XG4mIzQzO1xuJiM0MztcdGlmICghbWF4X3NpemUpIHtcbiYjNDM7XHRcdGNhcCA9IEtWTV9DQVBfRElSVFlfTE9HX1JJTkc7XG4mIzQzO1x0XHRtYXhfc2l6ZSA9IHZtX2NoZWNrX2NhcCh2bSwgY2FwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdFRFU1RfQVNTRVJUKG1heF9zaXplIFx1MDAzZSAwLCBcJiMzNDtEaXJ0eS1yaW5nIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBrZXJuZWxcXG5cJiMzNDspO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJpbmdfc2l6ZSBcdTAwM2M9IG1heF9zaXplIFx1MDAyNlx1MDAyNiBpc19wb3dlcl9vZl8yKHJpbmdfc2l6ZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcmluZ19zaXplIFx1MDAzZT0gZ2V0cGFnZXNpemUoKSxcbiYjNDM7XHRcdCAgICBcJiMzNDtJbnZhbGlkIGRpcnR5LXJpbmcgc2l6ZTogU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvIFwmIzM0O1xuJiM0MztcdFx0ICAgIFwmIzM0O2JldHdlZW4gJWx1IGFuZCAlbHUgZW50cmllc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgICBnZXRwYWdlc2l6ZSgpIC8gc2l6ZW9mKHN0cnVjdCBrdm1fZGlydHlfZ2ZuKSxcbiYjNDM7XHRcdCAgICBtYXhfc2l6ZSAvIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbikpO1xuJiM0MztcbiYjNDM7XHR2bV9lbmFibGVfY2FwKHZtLCBjYXAsIHJpbmdfc2l6ZSk7XG4gXHR2bS1cdTAwM2VkaXJ0eV9yaW5nX3NpemUgPSByaW5nX3NpemU7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXG5pbmRleCA2ZGNkMTU5MTBhMDYwLi5jOWY4NTUzM2ZmZmZkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuQEAgLTEyMSwxMCAmIzQzOzEyMSwzNSBAQCB2b2lkIG1lbXN0cmVzc19zZXR1cF92Y3B1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG5yX3ZjcHVzLFxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBrdm1fdm0gKm1lbXN0cmVzc192bV9jcmVhdGVfd2l0aF92Y3B1cyhzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgdTMyIG5yX3ZjcHVzLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIHU2NCBleHRyYV9tZW1fcGFnZXMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgdm9pZCAqZ3Vlc3RfY29kZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW10sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgdTMyIGRpcnR5X3Jpbmdfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVCghbnJfdmNwdXMgfHwgdmNwdXMsIFwmIzM0O011c3QgcHJvdmlkZSB2Q1BVIGFycmF5XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0dm0gPSBfX3ZtX2NyZWF0ZShzaGFwZSwgbnJfdmNwdXMsIGV4dHJhX21lbV9wYWdlcyk7XG4mIzQzO1xuJiM0MztcdGlmIChkaXJ0eV9yaW5nX3NpemUpXG4mIzQzO1x0XHR2bV9lbmFibGVfZGlydHlfcmluZyh2bSwgZGlydHlfcmluZ19zaXplKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7ICYjNDM7JiM0MztpKVxuJiM0MztcdFx0dmNwdXNbaV0gPSB2bV92Y3B1X2FkZCh2bSwgaSwgZ3Vlc3RfY29kZSk7XG4mIzQzO1xuJiM0MztcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcbiYjNDM7XHRyZXR1cm4gdm07XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGt2bV92bSAqbWVtc3RyZXNzX2NyZWF0ZV92bShlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgaW50IG5yX3ZjcHVzLFxuIFx0XHRcdFx0ICAgdTY0IHZjcHVfbWVtb3J5X2J5dGVzLCBpbnQgc2xvdHMsXG4gXHRcdFx0XHQgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIGJhY2tpbmdfc3JjLFxuLVx0XHRcdFx0ICAgYm9vbCBwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKVxuJiM0MztcdFx0XHRcdCAgIGJvb2wgcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcyxcbiYjNDM7XHRcdFx0XHQgICB1MzIgZGlydHlfcmluZ19zaXplKVxuIHtcbiBcdHN0cnVjdCBtZW1zdHJlc3NfYXJncyAqYXJncyA9IFx1MDAyNm1lbXN0cmVzc19hcmdzO1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG5AQCAtMTY3LDkgJiM0MzsxOTIsMTAgQEAgc3RydWN0IGt2bV92bSAqbWVtc3RyZXNzX2NyZWF0ZV92bShlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgaW50IG5yX3ZjcHVzLFxuIFx0ICogVGhlIG1lbW9yeSBpcyBhbHNvIGFkZGVkIHRvIG1lbXNsb3QgMCwgYnV0IHRoYXQmIzM5O3MgYSBiZW5pZ24gc2lkZVxuIFx0ICogZWZmZWN0IGFzIEtWTSBhbGxvd3MgYWxpYXNpbmcgSFZBcyBpbiBtZXNsb3RzLlxuIFx0ICovXG4tXHR2bSA9IF9fdm1fY3JlYXRlX3dpdGhfdmNwdXMoVk1fU0hBUEUobW9kZSksIG5yX3ZjcHVzLFxuLVx0XHRcdFx0ICAgIHNsb3QwX3BhZ2VzICYjNDM7IGd1ZXN0X251bV9wYWdlcyxcbi1cdFx0XHRcdCAgICBtZW1zdHJlc3NfZ3Vlc3RfY29kZSwgdmNwdXMpO1xuJiM0MztcdHZtID0gbWVtc3RyZXNzX3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKFZNX1NIQVBFKG1vZGUpLCBucl92Y3B1cyxcbiYjNDM7XHRcdFx0XHRcdCAgICBzbG90MF9wYWdlcyAmIzQzOyBndWVzdF9udW1fcGFnZXMsXG4mIzQzO1x0XHRcdFx0XHQgICAgbWVtc3RyZXNzX2d1ZXN0X2NvZGUsIHZjcHVzLFxuJiM0MztcdFx0XHRcdFx0ICAgIGRpcnR5X3Jpbmdfc2l6ZSk7XG4gXG4gXHRhcmdzLVx1MDAzZXZtID0gdm07XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfbW9kaWZpY2F0aW9uX3N0cmVzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9tb2RpZmljYXRpb25fc3RyZXNzX3Rlc3QuY1xuaW5kZXggOWM3NTc4YTA5OGMzZS4uM2ExYmU5Yjc1ZTAxZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9tb2RpZmljYXRpb25fc3RyZXNzX3Rlc3QuY1xuQEAgLTkwLDcgJiM0Mzs5MCw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXG4gXHR2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSwgMSxcbiBcdFx0XHRcdCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbi1cdFx0XHRcdCBwLVx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpO1xuJiM0MztcdFx0XHRcdCBwLVx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsIDApO1xuICNpZmRlZiBfX3g4Nl82NF9fXG4gXHRpZiAocC1cdTAwM2VkaXNhYmxlX3Nsb3RfemFwX3F1aXJrKVxuIFx0XHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0RJU0FCTEVfUVVJUktTMiwgS1ZNX1g4Nl9RVUlSS19TTE9UX1pBUF9BTEwpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZGlydHlfbG9nX3BhZ2Vfc3BsaXR0aW5nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZGlydHlfbG9nX3BhZ2Vfc3BsaXR0aW5nX3Rlc3QuY1xuaW5kZXggMzg4YmE0MTAxZjk3My4uNjYxZTlhYmZiNDM5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZGlydHlfbG9nX3BhZ2Vfc3BsaXR0aW5nX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9kaXJ0eV9sb2dfcGFnZV9zcGxpdHRpbmdfdGVzdC5jXG5AQCAtMTAxLDcgJiM0MzsxMDEsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqdW51c2VkKVxuIFx0c3RydWN0IGt2bV9wYWdlX3N0YXRzIHN0YXRzX3JlcG9wdWxhdGVkO1xuIFxuIFx0dm0gPSBtZW1zdHJlc3NfY3JlYXRlX3ZtKG1vZGUsIFZDUFVTLCBndWVzdF9wZXJjcHVfbWVtX3NpemUsXG4tXHRcdFx0XHQgU0xPVFMsIGJhY2tpbmdfc3JjLCBmYWxzZSk7XG4mIzQzO1x0XHRcdFx0IFNMT1RTLCBiYWNraW5nX3NyYywgZmFsc2UsIDApO1xuIFxuIFx0Z3Vlc3RfbnVtX3BhZ2VzID0gKFZDUFVTICogZ3Vlc3RfcGVyY3B1X21lbV9zaXplKSBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdDtcbiBcdGd1ZXN0X251bV9wYWdlcyA9IHZtX2FkanVzdF9udW1fZ3Vlc3RfcGFnZXMobW9kZSwgZ3Vlc3RfbnVtX3BhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gd2hpY2ggYXJlIHVzZXJzcGFjZSB0ZXN0IHByb2dyYW1zLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMTg0YTg2ZGE4MGQ1MWMzMjllMDgxN2VlMGFiMzdjYmZhMWJkMTI2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMDE6MDY6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FjY2Vzc190cmFja2luZ19wZXJmX3Rlc3QuYwppbmRleCA0NDE1Yzk0YjI4NjYwLi5mNzhkNTYyNjVkODkzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hY2Nlc3NfdHJhY2tpbmdfcGVyZl90ZXN0LmMKQEAgLTQwOSw3ICYjNDM7NDA5LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZykKIAlpbnQgbnJfdmNwdXMgPSBwYXJhbXMtJmd0O25yX3ZjcHVzOwogCiAJdm0gPSBtZW1zdHJlc3NfY3JlYXRlX3ZtKG1vZGUsIG5yX3ZjcHVzLCBwYXJhbXMtJmd0O3ZjcHVfbWVtb3J5X2J5dGVzLCAxLAotCQkJCSBwYXJhbXMtJmd0O2JhY2tpbmdfc3JjLCAhb3ZlcmxhcF9tZW1vcnlfYWNjZXNzKTsKJiM0MzsJCQkJIHBhcmFtcy0mZ3Q7YmFja2luZ19zcmMsICFvdmVybGFwX21lbW9yeV9hY2Nlc3MsIDApOwogCiAJLyoKIAkgKiBJZiBndWVzdF9wYWdlX3NpemUgaXMgbGFyZ2VyIHRoYW4gdGhlIGhvc3QmIzM5O3MgcGFnZSBzaXplLCB0aGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuYwppbmRleCAzMDJjNDkyM2QwOTMwLi45MjI0NmUyN2VmNzQ0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jCkBAIC0xNjIsNyAmIzQzOzE2Miw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpCiAJaW50IGksIG51bV91ZmZkcyA9IDA7CiAKIAl2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSwgMSwKLQkJCQkgcC0mZ3Q7c3JjX3R5cGUsIHAtJmd0O3BhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpOwomIzQzOwkJCQkgcC0mZ3Q7c3JjX3R5cGUsIHAtJmd0O3BhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsIDApOwogCiAJZGVtYW5kX3BhZ2luZ19zaXplID0gZ2V0X2JhY2tpbmdfc3JjX3BhZ2VzeihwLSZndDtzcmNfdHlwZSk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jCmluZGV4IGVmNzc5ZmE5MTgyN2MuLjZlODBkMzZjYzYxYTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuYwpAQCAtMTMsNiAmIzQzOzEzLDcgQEAKICNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG1hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vYmFycmllci5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CkBAIC0yOSw5ICYjNDM7MzAsNTMgQEAgc3RhdGljIGJvb2wgcnVuX3ZjcHVzX3doaWxlX2Rpc2FibGluZ19kaXJ0eV9sb2dnaW5nOwogCiAvKiBIb3N0IHZhcmlhYmxlcyAqLwogc3RhdGljIHU2NCBkaXJ0eV9sb2dfbWFudWFsX2NhcHM7CiYjNDM7c3RhdGljIHUzMiBkaXJ0eV9yaW5nX3NpemU7CiBzdGF0aWMgYm9vbCBob3N0X3F1aXQ7CiBzdGF0aWMgaW50IGl0ZXJhdGlvbjsKIHN0YXRpYyBpbnQgdmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25bS1ZNX01BWF9WQ1BVU107CiYjNDM7c3RhdGljIHN0cnVjdCB0aW1lc3BlYyB2Y3B1X2RpcnR5X3JpbmdfY29sbGVjdFtLVk1fTUFYX1ZDUFVTXTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkaXJ0eV9yaW5nX2NvbGxlY3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJpbmdfaWR4LAomIzQzOwkJCQlzdHJ1Y3QgdGltZXNwZWMgKnRzKQomIzQzO3sKJiM0MzsJc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBjb2xsZWN0ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKJiM0MzsJc3RydWN0IHRpbWVzcGVjIHN0YXJ0OwomIzQzOwlzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZGlydHlfZ2ZucyA9IHZjcHVfbWFwX2RpcnR5X3JpbmcodmNwdSk7CiYjNDM7CXUzMiBpZHggPSAqcmluZ19pZHg7CiYjNDM7CXUzMiByaW5nX3NpemUgPSB2Y3B1LSZndDt2bS0mZ3Q7ZGlydHlfcmluZ19zaXplIC8gc2l6ZW9mKHN0cnVjdCBrdm1fZGlydHlfZ2ZuKTsKJiM0MzsJaW50IGNsZWFyZWQsIGNvdW50OwomIzQzOwomIzQzOwlwdGhyZWFkX211dGV4X2xvY2soJmFtcDtjb2xsZWN0KTsKJiM0MzsKJiM0MzsJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7c3RhcnQpOwomIzQzOwomIzQzOwl3aGlsZSAodHJ1ZSkgewomIzQzOwkJc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmN1cjsKJiM0MzsKJiM0MzsJCWN1ciA9ICZhbXA7ZGlydHlfZ2Zuc1tpZHggJSByaW5nX3NpemVdOwomIzQzOwkJaWYgKHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtjdXItJmd0O2ZsYWdzKSAhPSBLVk1fRElSVFlfR0ZOX0ZfRElSVFkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2N1ci0mZ3Q7ZmxhZ3MsIEtWTV9ESVJUWV9HRk5fRl9SRVNFVCk7CiYjNDM7CQlpZHgmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CWNvdW50ID0gaWR4IC0gKnJpbmdfaWR4OwomIzQzOwkqcmluZ19pZHggPSBpZHg7CiYjNDM7CiYjNDM7CWNsZWFyZWQgPSBrdm1fdm1fcmVzZXRfZGlydHlfcmluZyh2Y3B1LSZndDt2bSk7CiYjNDM7CiYjNDM7CS8qIENsZWFyZWQgcGFnZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGNvbGxlY3RlZCwgYXMgS1ZNIGlzIHN1cHBvc2VkIHRvCiYjNDM7CSAqIGNsZWFyIG9ubHkgdGhlIGVudHJpZXMgdGhhdCBoYXZlIGJlZW4gaGFydmVzdGVkLCBhbmQgYSBzaW5nbGUgdmNwdSB3aWxsCiYjNDM7CSAqIGhhcnZlc3QgYXQgdGltZS4KJiM0MzsJICovCiYjNDM7CVRFU1RfQVNTRVJUKGNsZWFyZWQgPT0gY291bnQsICYjMzQ7UmVzZXQgZGlydHkgcGFnZXMgKCV1KSBtaXNtYXRjaCAmIzM0OwomIzQzOwkJICAgICYjMzQ7d2l0aCBjb2xsZWN0ZWQgKCV1KSYjMzQ7LCBjbGVhcmVkLCBjb3VudCk7CiYjNDM7CiYjNDM7CSp0cyA9IHRpbWVzcGVjX2FkZCgqdHMsIHRpbWVzcGVjX2VsYXBzZWQoc3RhcnQpKTsKJiM0MzsKJiM0MzsJcHRocmVhZF9tdXRleF91bmxvY2soJmFtcDtjb2xsZWN0KTsKJiM0Mzt9CiAKIHN0YXRpYyB2b2lkIHZjcHVfd29ya2VyKHN0cnVjdCBtZW1zdHJlc3NfdmNwdV9hcmdzICp2Y3B1X2FyZ3MpCiB7CkBAIC00MywyNCAmIzQzOzg4LDQ1IEBAIHN0YXRpYyB2b2lkIHZjcHVfd29ya2VyKHN0cnVjdCBtZW1zdHJlc3NfdmNwdV9hcmdzICp2Y3B1X2FyZ3MpCiAJc3RydWN0IHRpbWVzcGVjIHRzX2RpZmY7CiAJc3RydWN0IHRpbWVzcGVjIHRvdGFsID0gKHN0cnVjdCB0aW1lc3BlYyl7MH07CiAJc3RydWN0IHRpbWVzcGVjIGF2ZzsKJiM0MzsJYm9vbCB1c2VfZGlydHlfcmluZyA9ICEhdmNwdS0mZ3Q7dm0tJmd0O2RpcnR5X3Jpbmdfc2l6ZTsKJiM0MzsJdTMyIHJpbmdfaWR4ID0gMDsKIAlpbnQgcmV0OwogCiAJcnVuID0gdmNwdS0mZ3Q7cnVuOwogCiAJd2hpbGUgKCFSRUFEX09OQ0UoaG9zdF9xdWl0KSkgewogCQlpbnQgY3VycmVudF9pdGVyYXRpb24gPSBSRUFEX09OQ0UoaXRlcmF0aW9uKTsKJiM0MzsJCXN0cnVjdCB0aW1lc3BlYyBjb2xsZWN0ID0gKHN0cnVjdCB0aW1lc3BlYyl7MH07CiAKIAkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7c3RhcnQpOwotCQlyZXQgPSBfdmNwdV9ydW4odmNwdSk7CiYjNDM7CiYjNDM7CQlkbyB7CiYjNDM7CQkJcmV0ID0gX3ZjcHVfcnVuKHZjcHUpOwomIzQzOwkJCWlmICghdXNlX2RpcnR5X3JpbmcpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwomIzQzOwkJCWRpcnR5X3JpbmdfY29sbGVjdCh2Y3B1LCAmYW1wO3JpbmdfaWR4LCAmYW1wO2NvbGxlY3QpOwomIzQzOwkJfSB3aGlsZSAoIXJldCAmYW1wOyZhbXA7IHJ1bi0mZ3Q7ZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfRElSVFlfUklOR19GVUxMKTsKJiM0MzsKIAkJdHNfZGlmZiA9IHRpbWVzcGVjX2VsYXBzZWQoc3RhcnQpOwogCiYjNDM7CQlpZiAodXNlX2RpcnR5X3JpbmcpIHsKJiM0MzsJCQl0c19kaWZmID0gdGltZXNwZWNfc3ViKHRzX2RpZmYsIGNvbGxlY3QpOwomIzQzOwkJCXZjcHVfZGlydHlfcmluZ19jb2xsZWN0W3ZjcHVfaWR4XSA9IGNvbGxlY3Q7CiYjNDM7CQl9CiYjNDM7CiAJCVRFU1RfQVNTRVJUKHJldCA9PSAwLCAmIzM0O3ZjcHVfcnVuIGZhaWxlZDogJWQmIzM0OywgcmV0KTsKIAkJVEVTVF9BU1NFUlQoZ2V0X3VjYWxsKHZjcHUsIE5VTEwpID09IFVDQUxMX1NZTkMsCiAJCQkgICAgJiMzNDtJbnZhbGlkIGd1ZXN0IHN5bmMgc3RhdHVzOiBleGl0X3JlYXNvbj0lcyYjMzQ7LAogCQkJICAgIGV4aXRfcmVhc29uX3N0cihydW4tJmd0O2V4aXRfcmVhc29uKSk7CiAKIAkJcHJfZGVidWcoJiMzNDtHb3Qgc3luYyBldmVudCBmcm9tIHZDUFUgJWRcbiYjMzQ7LCB2Y3B1X2lkeCk7Ci0JCXZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW3ZjcHVfaWR4XSA9IGN1cnJlbnRfaXRlcmF0aW9uOwomIzQzOwkJLyoKJiM0MzsJCSAqIE1ha2Ugc3VyZSB2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbiB3cml0ZSBoYXBwZW5zIGJlZm9yZQomIzQzOwkJICogdXBkYXRpbmcgY3VycmVudCBpdGVyYXRpb24uICBQYWlycyB3aXRoIHJ1bl90ZXN0LCBhZnRlciBwb3B1bGF0aW5nLi4KJiM0MzsJCSAqLwomIzQzOwkJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvblt2Y3B1X2lkeF0sCiYjNDM7CQkJCSAgY3VycmVudF9pdGVyYXRpb24pOwogCQlwcl9kZWJ1ZygmIzM0O3ZDUFUgJWQgdXBkYXRlZCBsYXN0IGNvbXBsZXRlZCBpdGVyYXRpb24gdG8gJWRcbiYjMzQ7LAogCQkJIHZjcHVfaWR4LCB2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvblt2Y3B1X2lkeF0pOwogCkBAIC0xMTksNyAmIzQzOzE4NSw4IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpCiAKIAl2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSwKIAkJCQkgcC0mZ3Q7c2xvdHMsIHAtJmd0O2JhY2tpbmdfc3JjLAotCQkJCSBwLSZndDtwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKTsKJiM0MzsJCQkJIHAtJmd0O3BhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsCiYjNDM7CQkJCSBkaXJ0eV9yaW5nX3NpemUpOwogCiAJbWVtc3RyZXNzX3NldF93cml0ZV9wZXJjZW50KHZtLCBwLSZndDt3cml0ZV9wZXJjZW50KTsKIApAQCAtMTI4LDcgJiM0MzsxOTUsOCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKQogCWhvc3RfbnVtX3BhZ2VzID0gdm1fbnVtX2hvc3RfcGFnZXMobW9kZSwgZ3Vlc3RfbnVtX3BhZ2VzKTsKIAlwYWdlc19wZXJfc2xvdCA9IGhvc3RfbnVtX3BhZ2VzIC8gcC0mZ3Q7c2xvdHM7CiAKLQliaXRtYXBzID0gbWVtc3RyZXNzX2FsbG9jX2JpdG1hcHMocC0mZ3Q7c2xvdHMsIHBhZ2VzX3Blcl9zbG90KTsKJiM0MzsJaWYgKCFkaXJ0eV9yaW5nX3NpemUpCiYjNDM7CQliaXRtYXBzID0gbWVtc3RyZXNzX2FsbG9jX2JpdG1hcHMocC0mZ3Q7c2xvdHMsIHBhZ2VzX3Blcl9zbG90KTsKIAogCWlmIChkaXJ0eV9sb2dfbWFudWFsX2NhcHMpCiAJCXZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfTUFOVUFMX0RJUlRZX0xPR19QUk9URUNUMiwKQEAgLTEzOSw4ICYjNDM7MjA3LDEwIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpCiAJaG9zdF9xdWl0ID0gZmFsc2U7CiAKIAljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFtcDtzdGFydCk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IG5yX3ZjcHVzOyBpJiM0MzsmIzQzOykKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3ZjcHVzOyBpJiM0MzsmIzQzOykgewogCQl2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbltpXSA9IC0xOwomIzQzOwkJdmNwdV9kaXJ0eV9yaW5nX2NvbGxlY3RbaV0gPSAoc3RydWN0IHRpbWVzcGVjKXswfTsKJiM0MzsJfQogCiAJLyoKIAkgKiBVc2UgMTAwJSB3cml0ZXMgZHVyaW5nIHRoZSBwb3B1bGF0aW9uIHBoYXNlIHRvIGVuc3VyZSBhbGwKQEAgLTE4NSw3ICYjNDM7MjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZykKIAogCQlwcl9kZWJ1ZygmIzM0O1N0YXJ0aW5nIGl0ZXJhdGlvbiAlZFxuJiMzNDssIGl0ZXJhdGlvbik7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHsKLQkJCXdoaWxlIChSRUFEX09OQ0UodmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25baV0pCiYjNDM7CQkJd2hpbGUgKHNtcF9sb2FkX2FjcXVpcmUoJmFtcDt2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbltpXSkKIAkJCSAgICAgICAhPSBpdGVyYXRpb24pCiAJCQkJOwogCQl9CkBAIC0xOTUsNiAmIzQzOzI2NSwyMSBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKQogCQlwcl9pbmZvKCYjMzQ7SXRlcmF0aW9uICVkIGRpcnR5IG1lbW9yeSB0aW1lOiAlbGQuJS45bGRzXG4mIzM0OywKIAkJCWl0ZXJhdGlvbiwgdHNfZGlmZi50dl9zZWMsIHRzX2RpZmYudHZfbnNlYyk7CiAKJiM0MzsJCWlmIChkaXJ0eV9yaW5nX3NpemUpIHsKJiM0MzsJCQlzdHJ1Y3QgdGltZXNwZWMgaXRlcmF0aW9uX3N1bSA9IChzdHJ1Y3QgdGltZXNwZWMpezB9OwomIzQzOwomIzQzOwkJCWZvciAoaSA9IDA7IGkgJmx0OyBucl92Y3B1czsgaSYjNDM7JiM0MzspCiYjNDM7CQkJCWl0ZXJhdGlvbl9zdW0gPSB0aW1lc3BlY19hZGQoaXRlcmF0aW9uX3N1bSwKJiM0MzsJCQkJCQkJICAgICB2Y3B1X2RpcnR5X3JpbmdfY29sbGVjdFtpXSk7CiYjNDM7CiYjNDM7CQkJcHJfaW5mbygmIzM0O0l0ZXJhdGlvbiAlZCBjbGVhciBkaXJ0eSByaW5nIHRpbWU6ICVsZC4lLjlsZHNcbiYjMzQ7LAomIzQzOwkJCQlpdGVyYXRpb24sIGl0ZXJhdGlvbl9zdW0udHZfc2VjLCBpdGVyYXRpb25fc3VtLnR2X25zZWMpOwomIzQzOwomIzQzOwkJCWNsZWFyX2RpcnR5X2xvZ190b3RhbCA9IHRpbWVzcGVjX2FkZChjbGVhcl9kaXJ0eV9sb2dfdG90YWwsCiYjNDM7CQkJCQkJCSAgICAgaXRlcmF0aW9uX3N1bSk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmYW1wO3N0YXJ0KTsKIAkJbWVtc3RyZXNzX2dldF9kaXJ0eV9sb2codm0sIGJpdG1hcHMsIHAtJmd0O3Nsb3RzKTsKIAkJdHNfZGlmZiA9IHRpbWVzcGVjX2VsYXBzZWQoc3RhcnQpOwpAQCAtMjM4LDE5ICYjNDM7MzIzLDIyIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpCiAJaG9zdF9xdWl0ID0gdHJ1ZTsKIAltZW1zdHJlc3Nfam9pbl92Y3B1X3RocmVhZHMobnJfdmNwdXMpOwogCi0JYXZnID0gdGltZXNwZWNfZGl2KGdldF9kaXJ0eV9sb2dfdG90YWwsIHAtJmd0O2l0ZXJhdGlvbnMpOwotCXByX2luZm8oJiMzNDtHZXQgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxuJiMzNDssCi0JCXAtJmd0O2l0ZXJhdGlvbnMsIGdldF9kaXJ0eV9sb2dfdG90YWwudHZfc2VjLAotCQlnZXRfZGlydHlfbG9nX3RvdGFsLnR2X25zZWMsIGF2Zy50dl9zZWMsIGF2Zy50dl9uc2VjKTsKJiM0MzsJaWYgKCFkaXJ0eV9yaW5nX3NpemUpIHsKJiM0MzsJCWF2ZyA9IHRpbWVzcGVjX2RpdihnZXRfZGlydHlfbG9nX3RvdGFsLCBwLSZndDtpdGVyYXRpb25zKTsKJiM0MzsJCXByX2luZm8oJiMzNDtHZXQgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxuJiMzNDssCiYjNDM7CQkJcC0mZ3Q7aXRlcmF0aW9ucywgZ2V0X2RpcnR5X2xvZ190b3RhbC50dl9zZWMsCiYjNDM7CQkJZ2V0X2RpcnR5X2xvZ190b3RhbC50dl9uc2VjLCBhdmcudHZfc2VjLCBhdmcudHZfbnNlYyk7CiYjNDM7CX0KIAotCWlmIChkaXJ0eV9sb2dfbWFudWFsX2NhcHMpIHsKJiM0MzsJaWYgKGRpcnR5X2xvZ19tYW51YWxfY2FwcyB8fCBkaXJ0eV9yaW5nX3NpemUpIHsKIAkJYXZnID0gdGltZXNwZWNfZGl2KGNsZWFyX2RpcnR5X2xvZ190b3RhbCwgcC0mZ3Q7aXRlcmF0aW9ucyk7CiAJCXByX2luZm8oJiMzNDtDbGVhciBkaXJ0eSBsb2cgb3ZlciAlbHUgaXRlcmF0aW9ucyB0b29rICVsZC4lLjlsZHMuIChBdmcgJWxkLiUuOWxkcy9pdGVyYXRpb24pXG4mIzM0OywKIAkJCXAtJmd0O2l0ZXJhdGlvbnMsIGNsZWFyX2RpcnR5X2xvZ190b3RhbC50dl9zZWMsCiAJCQljbGVhcl9kaXJ0eV9sb2dfdG90YWwudHZfbnNlYywgYXZnLnR2X3NlYywgYXZnLnR2X25zZWMpOwogCX0KIAotCW1lbXN0cmVzc19mcmVlX2JpdG1hcHMoYml0bWFwcywgcC0mZ3Q7c2xvdHMpOwomIzQzOwlpZiAoIWRpcnR5X3Jpbmdfc2l6ZSkKJiM0MzsJCW1lbXN0cmVzc19mcmVlX2JpdG1hcHMoYml0bWFwcywgcC0mZ3Q7c2xvdHMpOwogCW1lbXN0cmVzc19kZXN0cm95X3ZtKHZtKTsKIH0KIApAQCAtMjU5LDExICYjNDM7MzQ3LDE1IEBAIHN0YXRpYyB2b2lkIGhlbHAoY2hhciAqbmFtZSkKIAlwdXRzKCYjMzQ7JiMzNDspOwogCXByaW50ZigmIzM0O3VzYWdlOiAlcyBbLWhdIFstYV0gWy1pIGl0ZXJhdGlvbnNdIFstcCBvZmZzZXRdIFstZ10gJiMzNDsKIAkgICAgICAgJiMzNDtbLW0gbW9kZV0gWy1uXSBbLWIgdmNwdSBieXRlc10gWy12IHZjcHVzXSBbLW9dIFstciByYW5kb20gc2VlZCBdIFstcyBtZW0gdHlwZV0mIzM0OwotCSAgICAgICAmIzM0O1steCBtZW1zbG90c10gWy13IHBlcmNlbnRhZ2VdIFstYyBwaHlzaWNhbCBjcHVzIHRvIHJ1biB0ZXN0IG9uXVxuJiMzNDssIG5hbWUpOwomIzQzOwkgICAgICAgJiMzNDtbLXggbWVtc2xvdHNdIFstdyBwZXJjZW50YWdlXSBbLWMgcGh5c2ljYWwgY3B1cyB0byBydW4gdGVzdCBvbl0gXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDtbLWQgZGlydHktcmluZyBlbnRyaWVzXVxuJiMzNDssIG5hbWUpOwogCXB1dHMoJiMzNDsmIzM0Oyk7CiAJcHJpbnRmKCYjMzQ7IC1hOiBhY2Nlc3MgbWVtb3J5IHJhbmRvbWx5IHJhdGhlciB0aGFuIGluIG9yZGVyLlxuJiMzNDspOwogCXByaW50ZigmIzM0OyAtaTogc3BlY2lmeSBpdGVyYXRpb24gY291bnRzIChkZWZhdWx0OiAlJiMzNDtQUkl1NjQmIzM0OylcbiYjMzQ7LAogCSAgICAgICBURVNUX0hPU1RfTE9PUF9OKTsKJiM0MzsJcHJpbnRmKCYjMzQ7IC1kOiBlbmFibGUgZGlydHktcmluZyBmb3IgdHJhY2tpbmcgZGlydHkgcGFnZXMsIHdpdGggZ2l2ZW4gZW50cmllcyBjb3VudC5cbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgSWYgbm9uLXplcm8sIHdpbGwgY2F1c2UgZGlydHktcmluZyB0byBiZSB1c2VkIGluc3RlYWQgb2ZcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgZGlydHktYml0bWFwLiBNdXN0IGJlIGEgcG93ZXIgb2YgdHdvLlxuJiMzNDspOwogCXByaW50ZigmIzM0OyAtZzogRG8gbm90IGVuYWJsZSBLVk1fQ0FQX01BTlVBTF9ESVJUWV9MT0dfUFJPVEVDVDIuIFRoaXNcbiYjMzQ7CiAJICAgICAgICYjMzQ7ICAgICBtYWtlcyBLVk1fR0VUX0RJUlRZX0xPRyBjbGVhciB0aGUgZGlydHkgbG9nIChpLmUuXG4mIzM0OwogCSAgICAgICAmIzM0OyAgICAgS1ZNX0RJUlRZX0xPR19NQU5VQUxfUFJPVEVDVF9FTkFCTEUgaXMgbm90IGVuYWJsZWQpXG4mIzM0OwpAQCAtMzA5LDYgJiM0Mzs0MDEsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkud3JpdGVfcGVyY2VudCA9IDEwMCwKIAl9OwogCWludCBvcHQ7CiYjNDM7CXU2NCB0bXA7CiAKIAkvKiBPdmVycmlkZSB0aGUgc2VlZCB0byBiZSBkZXRlcm1pbmlzdGljIGJ5IGRlZmF1bHQuICovCiAJZ3Vlc3RfcmFuZG9tX3NlZWQgPSAxOwpAQCAtMzIwLDcgJiM0Mzs0MTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJZ3Vlc3RfbW9kZXNfYXBwZW5kX2RlZmF1bHQoKTsKIAotCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICYjMzQ7YWI6YzplZ2hpOm06bm9wOnI6czp2Ong6dzomIzM0OykpICE9IC0xKSB7CiYjNDM7CXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICYjMzQ7YWI6YzpkOmVnaGk6bTpub3A6cjpzOnY6eDp3OiYjMzQ7KSkgIT0gLTEpIHsKIAkJc3dpdGNoIChvcHQpIHsKIAkJY2FzZSAmIzM5O2EmIzM5OzoKIAkJCXAucmFuZG9tX2FjY2VzcyA9IHRydWU7CkBAIC0zMzEsNiAmIzQzOzQyNCwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQljYXNlICYjMzk7YyYjMzk7OgogCQkJcGNwdV9saXN0ID0gb3B0YXJnOwogCQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7ZCYjMzk7OgomIzQzOwkJCXRtcCA9IHBhcnNlX3NpemUob3B0YXJnKTsKJiM0MzsJCQlURVNUX0FTU0VSVCh0bXAsICYjMzQ7RGlydHktcmluZyBzaXplIHNob3VsZCBiZSAmZ3Q7IDAmIzM0Oyk7CiYjNDM7CQkJVEVTVF9BU1NFUlQodG1wICZsdDs9IFVJTlQzMl9NQVggLyBzaXplb2Yoc3RydWN0IGt2bV9kaXJ0eV9nZm4pLAomIzQzOwkJCQkgICAgJiMzNDtEaXJ0eS1yaW5nIHNpemUgKCVsdSkgaXMgdG9vIGxhcmdlLiYjMzQ7LCB0bXApOwomIzQzOwkJCWRpcnR5X3Jpbmdfc2l6ZSA9IHRtcCAqIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbik7CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtlJiMzOTs6CiAJCQkvKiAmIzM5O2UmIzM5OyBpcyBmb3IgZXZpbC4gKi8KIAkJCXJ1bl92Y3B1c193aGlsZV9kaXNhYmxpbmdfZGlydHlfbG9nZ2luZyA9IHRydWU7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9tZW1zdHJlc3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL21lbXN0cmVzcy5oCmluZGV4IDBkMWQ2MjMwY2MwNTEuLmUxN2YzNDQ5NzhhZjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL21lbXN0cmVzcy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL21lbXN0cmVzcy5oCkBAIC01OCw3ICYjNDM7NTgsOCBAQCBleHRlcm4gc3RydWN0IG1lbXN0cmVzc19hcmdzIG1lbXN0cmVzc19hcmdzOwogc3RydWN0IGt2bV92bSAqbWVtc3RyZXNzX2NyZWF0ZV92bShlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgaW50IG5yX3ZjcHVzLAogCQkJCSAgIHU2NCB2Y3B1X21lbW9yeV9ieXRlcywgaW50IHNsb3RzLAogCQkJCSAgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgYmFja2luZ19zcmMsCi0JCQkJICAgYm9vbCBwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKTsKJiM0MzsJCQkJICAgYm9vbCBwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzLAomIzQzOwkJCQkgICB1MzIgZGlydHlfcmluZ19zaXplKTsKIHZvaWQgbWVtc3RyZXNzX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bV92bSAqdm0pOwogCiB2b2lkIG1lbXN0cmVzc19zZXRfd3JpdGVfcGVyY2VudChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHdyaXRlX3BlcmNlbnQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jCmluZGV4IDE5NWYzZmRhZTFlMzkuLmYxZWJkNzEyMjc2M2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMKQEAgLTE2NywxMCAmIzQzOzE2NywyMyBAQCB1bnNpZ25lZCBpbnQga3ZtX2NoZWNrX2NhcChsb25nIGNhcCkKIAogdm9pZCB2bV9lbmFibGVfZGlydHlfcmluZyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHJpbmdfc2l6ZSkKIHsKLQlpZiAodm1fY2hlY2tfY2FwKHZtLCBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HX0FDUV9SRUwpKQotCQl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HX0FDUV9SRUwsIHJpbmdfc2l6ZSk7Ci0JZWxzZQotCQl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HLCByaW5nX3NpemUpOwomIzQzOwlsb25nIGNhcCA9IEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfQUNRX1JFTDsKJiM0MzsJaW50IG1heF9zaXplID0gdm1fY2hlY2tfY2FwKHZtLCBjYXApOwomIzQzOwomIzQzOwlpZiAoIW1heF9zaXplKSB7CiYjNDM7CQljYXAgPSBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HOwomIzQzOwkJbWF4X3NpemUgPSB2bV9jaGVja19jYXAodm0sIGNhcCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQobWF4X3NpemUgJmd0OyAwLCAmIzM0O0RpcnR5LXJpbmcgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGtlcm5lbFxuJiMzNDspOwomIzQzOwlURVNUX0FTU0VSVChyaW5nX3NpemUgJmx0Oz0gbWF4X3NpemUgJmFtcDsmYW1wOyBpc19wb3dlcl9vZl8yKHJpbmdfc2l6ZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIHJpbmdfc2l6ZSAmZ3Q7PSBnZXRwYWdlc2l6ZSgpLAomIzQzOwkJICAgICYjMzQ7SW52YWxpZCBkaXJ0eS1yaW5nIHNpemU6IFNob3VsZCBiZSBhIHBvd2VyIG9mIHR3byAmIzM0OwomIzQzOwkJICAgICYjMzQ7YmV0d2VlbiAlbHUgYW5kICVsdSBlbnRyaWVzXG4mIzM0OywKJiM0MzsJCSAgICBnZXRwYWdlc2l6ZSgpIC8gc2l6ZW9mKHN0cnVjdCBrdm1fZGlydHlfZ2ZuKSwKJiM0MzsJCSAgICBtYXhfc2l6ZSAvIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbikpOwomIzQzOwomIzQzOwl2bV9lbmFibGVfY2FwKHZtLCBjYXAsIHJpbmdfc2l6ZSk7CiAJdm0tJmd0O2RpcnR5X3Jpbmdfc2l6ZSA9IHJpbmdfc2l6ZTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmMKaW5kZXggNmRjZDE1OTEwYTA2MC4uYzlmODU1MzNmZmZmZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jCkBAIC0xMjEsMTAgJiM0MzsxMjEsMzUgQEAgdm9pZCBtZW1zdHJlc3Nfc2V0dXBfdmNwdXMoc3RydWN0IGt2bV92bSAqdm0sIGludCBucl92Y3B1cywKIAl9CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGt2bV92bSAqbWVtc3RyZXNzX3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwKJiM0MzsJCQkJCQkgICAgIHUzMiBucl92Y3B1cywKJiM0MzsJCQkJCQkgICAgIHU2NCBleHRyYV9tZW1fcGFnZXMsCiYjNDM7CQkJCQkJICAgICB2b2lkICpndWVzdF9jb2RlLAomIzQzOwkJCQkJCSAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdLAomIzQzOwkJCQkJCSAgICAgdTMyIGRpcnR5X3Jpbmdfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQoIW5yX3ZjcHVzIHx8IHZjcHVzLCAmIzM0O011c3QgcHJvdmlkZSB2Q1BVIGFycmF5JiMzNDspOwomIzQzOwomIzQzOwl2bSA9IF9fdm1fY3JlYXRlKHNoYXBlLCBucl92Y3B1cywgZXh0cmFfbWVtX3BhZ2VzKTsKJiM0MzsKJiM0MzsJaWYgKGRpcnR5X3Jpbmdfc2l6ZSkKJiM0MzsJCXZtX2VuYWJsZV9kaXJ0eV9yaW5nKHZtLCBkaXJ0eV9yaW5nX3NpemUpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7ICYjNDM7JiM0MztpKQomIzQzOwkJdmNwdXNbaV0gPSB2bV92Y3B1X2FkZCh2bSwgaSwgZ3Vlc3RfY29kZSk7CiYjNDM7CiYjNDM7CWt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTsKJiM0MzsJcmV0dXJuIHZtOwomIzQzO30KJiM0MzsKIHN0cnVjdCBrdm1fdm0gKm1lbXN0cmVzc19jcmVhdGVfdm0oZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIGludCBucl92Y3B1cywKIAkJCQkgICB1NjQgdmNwdV9tZW1vcnlfYnl0ZXMsIGludCBzbG90cywKIAkJCQkgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIGJhY2tpbmdfc3JjLAotCQkJCSAgIGJvb2wgcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcykKJiM0MzsJCQkJICAgYm9vbCBwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzLAomIzQzOwkJCQkgICB1MzIgZGlydHlfcmluZ19zaXplKQogewogCXN0cnVjdCBtZW1zdHJlc3NfYXJncyAqYXJncyA9ICZhbXA7bWVtc3RyZXNzX2FyZ3M7CiAJc3RydWN0IGt2bV92bSAqdm07CkBAIC0xNjcsOSAmIzQzOzE5MiwxMCBAQCBzdHJ1Y3Qga3ZtX3ZtICptZW1zdHJlc3NfY3JlYXRlX3ZtKGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCBpbnQgbnJfdmNwdXMsCiAJICogVGhlIG1lbW9yeSBpcyBhbHNvIGFkZGVkIHRvIG1lbXNsb3QgMCwgYnV0IHRoYXQmIzM5O3MgYSBiZW5pZ24gc2lkZQogCSAqIGVmZmVjdCBhcyBLVk0gYWxsb3dzIGFsaWFzaW5nIEhWQXMgaW4gbWVzbG90cy4KIAkgKi8KLQl2bSA9IF9fdm1fY3JlYXRlX3dpdGhfdmNwdXMoVk1fU0hBUEUobW9kZSksIG5yX3ZjcHVzLAotCQkJCSAgICBzbG90MF9wYWdlcyAmIzQzOyBndWVzdF9udW1fcGFnZXMsCi0JCQkJICAgIG1lbXN0cmVzc19ndWVzdF9jb2RlLCB2Y3B1cyk7CiYjNDM7CXZtID0gbWVtc3RyZXNzX3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKFZNX1NIQVBFKG1vZGUpLCBucl92Y3B1cywKJiM0MzsJCQkJCSAgICBzbG90MF9wYWdlcyAmIzQzOyBndWVzdF9udW1fcGFnZXMsCiYjNDM7CQkJCQkgICAgbWVtc3RyZXNzX2d1ZXN0X2NvZGUsIHZjcHVzLAomIzQzOwkJCQkJICAgIGRpcnR5X3Jpbmdfc2l6ZSk7CiAKIAlhcmdzLSZndDt2bSA9IHZtOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9tb2RpZmljYXRpb25fc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jCmluZGV4IDljNzU3OGEwOThjM2UuLjNhMWJlOWI3NWUwMWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jCkBAIC05MCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKQogCiAJdm0gPSBtZW1zdHJlc3NfY3JlYXRlX3ZtKG1vZGUsIG5yX3ZjcHVzLCBndWVzdF9wZXJjcHVfbWVtX3NpemUsIDEsCiAJCQkJIFZNX01FTV9TUkNfQU5PTllNT1VTLAotCQkJCSBwLSZndDtwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKTsKJiM0MzsJCQkJIHAtJmd0O3BhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsIDApOwogI2lmZGVmIF9feDg2XzY0X18KIAlpZiAocC0mZ3Q7ZGlzYWJsZV9zbG90X3phcF9xdWlyaykKIAkJdm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9ESVNBQkxFX1FVSVJLUzIsIEtWTV9YODZfUVVJUktfU0xPVF9aQVBfQUxMKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZGlydHlfbG9nX3BhZ2Vfc3BsaXR0aW5nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZGlydHlfbG9nX3BhZ2Vfc3BsaXR0aW5nX3Rlc3QuYwppbmRleCAzODhiYTQxMDFmOTczLi42NjFlOWFiZmI0Mzk1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2RpcnR5X2xvZ19wYWdlX3NwbGl0dGluZ190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9kaXJ0eV9sb2dfcGFnZV9zcGxpdHRpbmdfdGVzdC5jCkBAIC0xMDEsNyAmIzQzOzEwMSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICp1bnVzZWQpCiAJc3RydWN0IGt2bV9wYWdlX3N0YXRzIHN0YXRzX3JlcG9wdWxhdGVkOwogCiAJdm0gPSBtZW1zdHJlc3NfY3JlYXRlX3ZtKG1vZGUsIFZDUFVTLCBndWVzdF9wZXJjcHVfbWVtX3NpemUsCi0JCQkJIFNMT1RTLCBiYWNraW5nX3NyYywgZmFsc2UpOwomIzQzOwkJCQkgU0xPVFMsIGJhY2tpbmdfc3JjLCBmYWxzZSwgMCk7CiAKIAlndWVzdF9udW1fcGFnZXMgPSAoVkNQVVMgKiBndWVzdF9wZXJjcHVfbWVtX3NpemUpICZndDsmZ3Q7IHZtLSZndDtwYWdlX3NoaWZ0OwogCWd1ZXN0X251bV9wYWdlcyA9IHZtX2FkanVzdF9udW1fZ3Vlc3RfcGFnZXMobW9kZSwgZ3Vlc3RfbnVtX3BhZ2VzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMzMwoJCQkJCQkJb3V0cHV0OiA3MgoJCQkJCQkJdGhvdWdodHM6IDc0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgS1ZNIHNlbGZ0ZXN0cywgc3BlY2lmaWNhbGx5IHRoZXNlIGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2A6IGBkaXJ0eV9sb2dfcGVyZl90ZXN0LmNgLCBgbWVtc3RyZXNzLmNgLCBga3ZtX3V0aWwuY2AsIGFuZCBhIGZldyBvdGhlcnMuIEl0JiMzOTtzIGFib3V0IGFkZGluZyBzdXBwb3J0IGZvciB0ZXN0aW5nIHRoZSBLVk0gZGlydHkgcmluZyBmZWF0dXJlIChgS1ZNX0NBUF9ESVJUWV9MT0dfUklOR2AgYW5kIGBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HX0FDUV9SRUxgKSB3aXRoaW4gYGRpcnR5X2xvZ19wZXJmX3Rlc3QuY2AuIFRoZSBjcml0aWNhbCB0aGluZyBpcyB0aGF0IGFsbCB0aGVzZSBtb2RpZmljYXRpb25zIGFyZSBjb250YWluZWQgZW50aXJlbHkgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5LiBObyBjaGFuZ2VzIGFyZSBiZWluZyBtYWRlIHRvIHRoZSBrZXJuZWwmIzM5O3MgY29yZSBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuCgpOb3csIHRoZSBwcm9tcHQgZ2l2ZXMgYSBsaXN0IG9mIGNvbmRpdGlvbnMgd2hlcmUgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQgZG9lc24mIzM5O3QgZXhwbGljaXRseSBtZW50aW9uIHNlbGZ0ZXN0cywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBIb3dldmVyLCBzZWxmdGVzdHMgYXJlICp1c2VyLXNwYWNlKiB0ZXN0aW5nIHRvb2xzLiBUaGUgcHJvbXB0IGRvZXMgc2F5ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBbLi4uXSBtb2RpZmljYXRpb25zIHRvIFsuLi5dIGRvY3VtZW50YXRpb24sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuIC0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuIC0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiAtIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKSB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuJiMzNDsKVGhlIHByb21wdCBhbHNvIHNheXMgJiMzNDtJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLiYjMzQ7CgpTaW5jZSB0aGlzICpvbmx5KiB0b3VjaGVzIHVzZXJzcGFjZSBzZWxmdGVzdHMsIG5vdCBhbnkgb2YgdGhvc2UgYXJlYXMsIGl0JiMzOTtzIGEgY2xlYXIgY2FzZS4gVGhlIHBhdGNoIGRvZXMgKm5vdCogbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlIGZpbGVzIGFyZSBkZWZpbml0ZWx5IGp1c3QgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCBkaXJlY3RvcnksIGFuZCBhcmUgYWxsIHNlbGZ0ZXN0cywgdXNlci1zcGFjZSB0b29scy4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgZmlsZSBsaXN0OiBgYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jYCwgYGRlbWFuZF9wYWdpbmdfdGVzdC5jYCwgYGRpcnR5X2xvZ19wZXJmX3Rlc3QuY2AsIGBpbmNsdWRlL21lbXN0cmVzcy5oYCwgYGxpYi9rdm1fdXRpbC5jYCwgYGxpYi9tZW1zdHJlc3MuY2AsIGBtZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jYCwgYW5kIGB4ODYvZGlydHlfbG9nX3BhZ2Vfc3BsaXR0aW5nX3Rlc3QuY2AuIFRoZXNlIGFyZSBhbGwgdXNlci1zcGFjZSB0ZXN0cywgc28gaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgZGV0ZXJtaW5hdGlvbi4KClRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByYXRpb25hbGUgaXMgdGhhdCB0aGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHVzZXIgc3BhY2UgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBjaGFuZ2VzIHRvIGtlcm5lbCBjb2RlLiBJdCBkb2VzbiYjMzk7dCBtb2RpZnkga2VybmVsIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gd2hpY2ggYXJlIHVzZXJzcGFjZSB0ZXN0IHByb2dyYW1zLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIHdoaWNoIGFyZSB1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MDY6NTkuOTQwNTc3NDIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNzMzMDczMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIHdoaWNoIGFyZSB1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMTowNjo1OS45NDA1ODI5MzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDMzNDk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIxODRhODZkYTgwZDUxYzMyOWUwODE3ZWUwYWIzN2NiZmExYmQxMjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDE6MDY6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FjY2Vzc190cmFja2luZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hY2Nlc3NfdHJhY2tpbmdfcGVyZl90ZXN0LmNcXG5pbmRleCA0NDE1Yzk0YjI4NjYwLi5mNzhkNTYyNjVkODkzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hY2Nlc3NfdHJhY2tpbmdfcGVyZl90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jXFxuQEAgLTQwOSw3ICs0MDksNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXHRpbnQgbnJfdmNwdXMgPSBwYXJhbXMtXFx1MDAzZW5yX3ZjcHVzO1xcbiBcXG4gXFx0dm0gPSBtZW1zdHJlc3NfY3JlYXRlX3ZtKG1vZGUsIG5yX3ZjcHVzLCBwYXJhbXMtXFx1MDAzZXZjcHVfbWVtb3J5X2J5dGVzLCAxLFxcbi1cXHRcXHRcXHRcXHQgcGFyYW1zLVxcdTAwM2ViYWNraW5nX3NyYywgIW92ZXJsYXBfbWVtb3J5X2FjY2Vzcyk7XFxuK1xcdFxcdFxcdFxcdCBwYXJhbXMtXFx1MDAzZWJhY2tpbmdfc3JjLCAhb3ZlcmxhcF9tZW1vcnlfYWNjZXNzLCAwKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIGd1ZXN0X3BhZ2Vfc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCdzIHBhZ2Ugc2l6ZSwgdGhlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuY1xcbmluZGV4IDMwMmM0OTIzZDA5MzAuLjkyMjQ2ZTI3ZWY3NDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jXFxuQEAgLTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXHRpbnQgaSwgbnVtX3VmZmRzID0gMDtcXG4gXFxuIFxcdHZtID0gbWVtc3RyZXNzX2NyZWF0ZV92bShtb2RlLCBucl92Y3B1cywgZ3Vlc3RfcGVyY3B1X21lbV9zaXplLCAxLFxcbi1cXHRcXHRcXHRcXHQgcC1cXHUwMDNlc3JjX3R5cGUsIHAtXFx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpO1xcbitcXHRcXHRcXHRcXHQgcC1cXHUwMDNlc3JjX3R5cGUsIHAtXFx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsIDApO1xcbiBcXG4gXFx0ZGVtYW5kX3BhZ2luZ19zaXplID0gZ2V0X2JhY2tpbmdfc3JjX3BhZ2VzeihwLVxcdTAwM2VzcmNfdHlwZSk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xcbmluZGV4IGVmNzc5ZmE5MTgyN2MuLjZlODBkMzZjYzYxYTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmNcXG5AQCAtMTMsNiArMTMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdGltZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0bWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vYmFycmllci5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImt2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZXN0X3V0aWwuaFxcXCJcXG5AQCAtMjksOSArMzAsNTMgQEAgc3RhdGljIGJvb2wgcnVuX3ZjcHVzX3doaWxlX2Rpc2FibGluZ19kaXJ0eV9sb2dnaW5nO1xcbiBcXG4gLyogSG9zdCB2YXJpYWJsZXMgKi9cXG4gc3RhdGljIHU2NCBkaXJ0eV9sb2dfbWFudWFsX2NhcHM7XFxuK3N0YXRpYyB1MzIgZGlydHlfcmluZ19zaXplO1xcbiBzdGF0aWMgYm9vbCBob3N0X3F1aXQ7XFxuIHN0YXRpYyBpbnQgaXRlcmF0aW9uO1xcbiBzdGF0aWMgaW50IHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW0tWTV9NQVhfVkNQVVNdO1xcbitzdGF0aWMgc3RydWN0IHRpbWVzcGVjIHZjcHVfZGlydHlfcmluZ19jb2xsZWN0W0tWTV9NQVhfVkNQVVNdO1xcbitcXG4rc3RhdGljIHZvaWQgZGlydHlfcmluZ19jb2xsZWN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyaW5nX2lkeCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHRpbWVzcGVjICp0cylcXG4re1xcbitcXHRzdGF0aWMgcHRocmVhZF9tdXRleF90IGNvbGxlY3QgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7XFxuK1xcdHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpkaXJ0eV9nZm5zID0gdmNwdV9tYXBfZGlydHlfcmluZyh2Y3B1KTtcXG4rXFx0dTMyIGlkeCA9ICpyaW5nX2lkeDtcXG4rXFx0dTMyIHJpbmdfc2l6ZSA9IHZjcHUtXFx1MDAzZXZtLVxcdTAwM2VkaXJ0eV9yaW5nX3NpemUgLyBzaXplb2Yoc3RydWN0IGt2bV9kaXJ0eV9nZm4pO1xcbitcXHRpbnQgY2xlYXJlZCwgY291bnQ7XFxuK1xcbitcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNmNvbGxlY3QpO1xcbitcXG4rXFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFxcdTAwMjZzdGFydCk7XFxuK1xcbitcXHR3aGlsZSAodHJ1ZSkge1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqY3VyO1xcbitcXG4rXFx0XFx0Y3VyID0gXFx1MDAyNmRpcnR5X2dmbnNbaWR4ICUgcmluZ19zaXplXTtcXG4rXFx0XFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmN1ci1cXHUwMDNlZmxhZ3MpICE9IEtWTV9ESVJUWV9HRk5fRl9ESVJUWSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2Y3VyLVxcdTAwM2VmbGFncywgS1ZNX0RJUlRZX0dGTl9GX1JFU0VUKTtcXG4rXFx0XFx0aWR4Kys7XFxuK1xcdH1cXG4rXFxuK1xcdGNvdW50ID0gaWR4IC0gKnJpbmdfaWR4O1xcbitcXHQqcmluZ19pZHggPSBpZHg7XFxuK1xcbitcXHRjbGVhcmVkID0ga3ZtX3ZtX3Jlc2V0X2RpcnR5X3JpbmcodmNwdS1cXHUwMDNldm0pO1xcbitcXG4rXFx0LyogQ2xlYXJlZCBwYWdlcyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgY29sbGVjdGVkLCBhcyBLVk0gaXMgc3VwcG9zZWQgdG9cXG4rXFx0ICogY2xlYXIgb25seSB0aGUgZW50cmllcyB0aGF0IGhhdmUgYmVlbiBoYXJ2ZXN0ZWQsIGFuZCBhIHNpbmdsZSB2Y3B1IHdpbGxcXG4rXFx0ICogaGFydmVzdCBhdCB0aW1lLlxcbitcXHQgKi9cXG4rXFx0VEVTVF9BU1NFUlQoY2xlYXJlZCA9PSBjb3VudCwgXFxcIlJlc2V0IGRpcnR5IHBhZ2VzICgldSkgbWlzbWF0Y2ggXFxcIlxcbitcXHRcXHQgICAgXFxcIndpdGggY29sbGVjdGVkICgldSlcXFwiLCBjbGVhcmVkLCBjb3VudCk7XFxuK1xcbitcXHQqdHMgPSB0aW1lc3BlY19hZGQoKnRzLCB0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KSk7XFxuK1xcbitcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2Y29sbGVjdCk7XFxuK31cXG4gXFxuIHN0YXRpYyB2b2lkIHZjcHVfd29ya2VyKHN0cnVjdCBtZW1zdHJlc3NfdmNwdV9hcmdzICp2Y3B1X2FyZ3MpXFxuIHtcXG5AQCAtNDMsMjQgKzg4LDQ1IEBAIHN0YXRpYyB2b2lkIHZjcHVfd29ya2VyKHN0cnVjdCBtZW1zdHJlc3NfdmNwdV9hcmdzICp2Y3B1X2FyZ3MpXFxuIFxcdHN0cnVjdCB0aW1lc3BlYyB0c19kaWZmO1xcbiBcXHRzdHJ1Y3QgdGltZXNwZWMgdG90YWwgPSAoc3RydWN0IHRpbWVzcGVjKXswfTtcXG4gXFx0c3RydWN0IHRpbWVzcGVjIGF2ZztcXG4rXFx0Ym9vbCB1c2VfZGlydHlfcmluZyA9ICEhdmNwdS1cXHUwMDNldm0tXFx1MDAzZWRpcnR5X3Jpbmdfc2l6ZTtcXG4rXFx0dTMyIHJpbmdfaWR4ID0gMDtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHJ1biA9IHZjcHUtXFx1MDAzZXJ1bjtcXG4gXFxuIFxcdHdoaWxlICghUkVBRF9PTkNFKGhvc3RfcXVpdCkpIHtcXG4gXFx0XFx0aW50IGN1cnJlbnRfaXRlcmF0aW9uID0gUkVBRF9PTkNFKGl0ZXJhdGlvbik7XFxuK1xcdFxcdHN0cnVjdCB0aW1lc3BlYyBjb2xsZWN0ID0gKHN0cnVjdCB0aW1lc3BlYyl7MH07XFxuIFxcbiBcXHRcXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXFx1MDAyNnN0YXJ0KTtcXG4tXFx0XFx0cmV0ID0gX3ZjcHVfcnVuKHZjcHUpO1xcbitcXG4rXFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRyZXQgPSBfdmNwdV9ydW4odmNwdSk7XFxuK1xcdFxcdFxcdGlmICghdXNlX2RpcnR5X3JpbmcpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0XFx0ZGlydHlfcmluZ19jb2xsZWN0KHZjcHUsIFxcdTAwMjZyaW5nX2lkeCwgXFx1MDAyNmNvbGxlY3QpO1xcbitcXHRcXHR9IHdoaWxlICghcmV0IFxcdTAwMjZcXHUwMDI2IHJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfRElSVFlfUklOR19GVUxMKTtcXG4rXFxuIFxcdFxcdHRzX2RpZmYgPSB0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KTtcXG4gXFxuK1xcdFxcdGlmICh1c2VfZGlydHlfcmluZykge1xcbitcXHRcXHRcXHR0c19kaWZmID0gdGltZXNwZWNfc3ViKHRzX2RpZmYsIGNvbGxlY3QpO1xcbitcXHRcXHRcXHR2Y3B1X2RpcnR5X3JpbmdfY29sbGVjdFt2Y3B1X2lkeF0gPSBjb2xsZWN0O1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRURVNUX0FTU0VSVChyZXQgPT0gMCwgXFxcInZjcHVfcnVuIGZhaWxlZDogJWRcXFwiLCByZXQpO1xcbiBcXHRcXHRURVNUX0FTU0VSVChnZXRfdWNhbGwodmNwdSwgTlVMTCkgPT0gVUNBTExfU1lOQyxcXG4gXFx0XFx0XFx0ICAgIFxcXCJJbnZhbGlkIGd1ZXN0IHN5bmMgc3RhdHVzOiBleGl0X3JlYXNvbj0lc1xcXCIsXFxuIFxcdFxcdFxcdCAgICBleGl0X3JlYXNvbl9zdHIocnVuLVxcdTAwM2VleGl0X3JlYXNvbikpO1xcbiBcXG4gXFx0XFx0cHJfZGVidWcoXFxcIkdvdCBzeW5jIGV2ZW50IGZyb20gdkNQVSAlZFxcXFxuXFxcIiwgdmNwdV9pZHgpO1xcbi1cXHRcXHR2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvblt2Y3B1X2lkeF0gPSBjdXJyZW50X2l0ZXJhdGlvbjtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTWFrZSBzdXJlIHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uIHdyaXRlIGhhcHBlbnMgYmVmb3JlXFxuK1xcdFxcdCAqIHVwZGF0aW5nIGN1cnJlbnQgaXRlcmF0aW9uLiAgUGFpcnMgd2l0aCBydW5fdGVzdCwgYWZ0ZXIgcG9wdWxhdGluZy4uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25bdmNwdV9pZHhdLFxcbitcXHRcXHRcXHRcXHQgIGN1cnJlbnRfaXRlcmF0aW9uKTtcXG4gXFx0XFx0cHJfZGVidWcoXFxcInZDUFUgJWQgdXBkYXRlZCBsYXN0IGNvbXBsZXRlZCBpdGVyYXRpb24gdG8gJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCB2Y3B1X2lkeCwgdmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25bdmNwdV9pZHhdKTtcXG4gXFxuQEAgLTExOSw3ICsxODUsOCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXG4gXFx0dm0gPSBtZW1zdHJlc3NfY3JlYXRlX3ZtKG1vZGUsIG5yX3ZjcHVzLCBndWVzdF9wZXJjcHVfbWVtX3NpemUsXFxuIFxcdFxcdFxcdFxcdCBwLVxcdTAwM2VzbG90cywgcC1cXHUwMDNlYmFja2luZ19zcmMsXFxuLVxcdFxcdFxcdFxcdCBwLVxcdTAwM2VwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKTtcXG4rXFx0XFx0XFx0XFx0IHAtXFx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsXFxuK1xcdFxcdFxcdFxcdCBkaXJ0eV9yaW5nX3NpemUpO1xcbiBcXG4gXFx0bWVtc3RyZXNzX3NldF93cml0ZV9wZXJjZW50KHZtLCBwLVxcdTAwM2V3cml0ZV9wZXJjZW50KTtcXG4gXFxuQEAgLTEyOCw3ICsxOTUsOCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXHRob3N0X251bV9wYWdlcyA9IHZtX251bV9ob3N0X3BhZ2VzKG1vZGUsIGd1ZXN0X251bV9wYWdlcyk7XFxuIFxcdHBhZ2VzX3Blcl9zbG90ID0gaG9zdF9udW1fcGFnZXMgLyBwLVxcdTAwM2VzbG90cztcXG4gXFxuLVxcdGJpdG1hcHMgPSBtZW1zdHJlc3NfYWxsb2NfYml0bWFwcyhwLVxcdTAwM2VzbG90cywgcGFnZXNfcGVyX3Nsb3QpO1xcbitcXHRpZiAoIWRpcnR5X3Jpbmdfc2l6ZSlcXG4rXFx0XFx0Yml0bWFwcyA9IG1lbXN0cmVzc19hbGxvY19iaXRtYXBzKHAtXFx1MDAzZXNsb3RzLCBwYWdlc19wZXJfc2xvdCk7XFxuIFxcbiBcXHRpZiAoZGlydHlfbG9nX21hbnVhbF9jYXBzKVxcbiBcXHRcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX01BTlVBTF9ESVJUWV9MT0dfUFJPVEVDVDIsXFxuQEAgLTEzOSw4ICsyMDcsMTAgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcXG4gXFx0aG9zdF9xdWl0ID0gZmFsc2U7XFxuIFxcbiBcXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXFx1MDAyNnN0YXJ0KTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl92Y3B1czsgaSsrKSB7XFxuIFxcdFxcdHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW2ldID0gLTE7XFxuK1xcdFxcdHZjcHVfZGlydHlfcmluZ19jb2xsZWN0W2ldID0gKHN0cnVjdCB0aW1lc3BlYyl7MH07XFxuK1xcdH1cXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFVzZSAxMDAlIHdyaXRlcyBkdXJpbmcgdGhlIHBvcHVsYXRpb24gcGhhc2UgdG8gZW5zdXJlIGFsbFxcbkBAIC0xODUsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcXG4gXFxuIFxcdFxcdHByX2RlYnVnKFxcXCJTdGFydGluZyBpdGVyYXRpb24gJWRcXFxcblxcXCIsIGl0ZXJhdGlvbik7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl92Y3B1czsgaSsrKSB7XFxuLVxcdFxcdFxcdHdoaWxlIChSRUFEX09OQ0UodmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25baV0pXFxuK1xcdFxcdFxcdHdoaWxlIChzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZ2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbltpXSlcXG4gXFx0XFx0XFx0ICAgICAgICE9IGl0ZXJhdGlvbilcXG4gXFx0XFx0XFx0XFx0O1xcbiBcXHRcXHR9XFxuQEAgLTE5NSw2ICsyNjUsMjEgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcXG4gXFx0XFx0cHJfaW5mbyhcXFwiSXRlcmF0aW9uICVkIGRpcnR5IG1lbW9yeSB0aW1lOiAlbGQuJS45bGRzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRpdGVyYXRpb24sIHRzX2RpZmYudHZfc2VjLCB0c19kaWZmLnR2X25zZWMpO1xcbiBcXG4rXFx0XFx0aWYgKGRpcnR5X3Jpbmdfc2l6ZSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgdGltZXNwZWMgaXRlcmF0aW9uX3N1bSA9IChzdHJ1Y3QgdGltZXNwZWMpezB9O1xcbitcXG4rXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspXFxuK1xcdFxcdFxcdFxcdGl0ZXJhdGlvbl9zdW0gPSB0aW1lc3BlY19hZGQoaXRlcmF0aW9uX3N1bSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB2Y3B1X2RpcnR5X3JpbmdfY29sbGVjdFtpXSk7XFxuK1xcbitcXHRcXHRcXHRwcl9pbmZvKFxcXCJJdGVyYXRpb24gJWQgY2xlYXIgZGlydHkgcmluZyB0aW1lOiAlbGQuJS45bGRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRpdGVyYXRpb24sIGl0ZXJhdGlvbl9zdW0udHZfc2VjLCBpdGVyYXRpb25fc3VtLnR2X25zZWMpO1xcbitcXG4rXFx0XFx0XFx0Y2xlYXJfZGlydHlfbG9nX3RvdGFsID0gdGltZXNwZWNfYWRkKGNsZWFyX2RpcnR5X2xvZ190b3RhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBpdGVyYXRpb25fc3VtKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2c3RhcnQpO1xcbiBcXHRcXHRtZW1zdHJlc3NfZ2V0X2RpcnR5X2xvZyh2bSwgYml0bWFwcywgcC1cXHUwMDNlc2xvdHMpO1xcbiBcXHRcXHR0c19kaWZmID0gdGltZXNwZWNfZWxhcHNlZChzdGFydCk7XFxuQEAgLTIzOCwxOSArMzIzLDIyIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXFxuIFxcdGhvc3RfcXVpdCA9IHRydWU7XFxuIFxcdG1lbXN0cmVzc19qb2luX3ZjcHVfdGhyZWFkcyhucl92Y3B1cyk7XFxuIFxcbi1cXHRhdmcgPSB0aW1lc3BlY19kaXYoZ2V0X2RpcnR5X2xvZ190b3RhbCwgcC1cXHUwMDNlaXRlcmF0aW9ucyk7XFxuLVxcdHByX2luZm8oXFxcIkdldCBkaXJ0eSBsb2cgb3ZlciAlbHUgaXRlcmF0aW9ucyB0b29rICVsZC4lLjlsZHMuIChBdmcgJWxkLiUuOWxkcy9pdGVyYXRpb24pXFxcXG5cXFwiLFxcbi1cXHRcXHRwLVxcdTAwM2VpdGVyYXRpb25zLCBnZXRfZGlydHlfbG9nX3RvdGFsLnR2X3NlYyxcXG4tXFx0XFx0Z2V0X2RpcnR5X2xvZ190b3RhbC50dl9uc2VjLCBhdmcudHZfc2VjLCBhdmcudHZfbnNlYyk7XFxuK1xcdGlmICghZGlydHlfcmluZ19zaXplKSB7XFxuK1xcdFxcdGF2ZyA9IHRpbWVzcGVjX2RpdihnZXRfZGlydHlfbG9nX3RvdGFsLCBwLVxcdTAwM2VpdGVyYXRpb25zKTtcXG4rXFx0XFx0cHJfaW5mbyhcXFwiR2V0IGRpcnR5IGxvZyBvdmVyICVsdSBpdGVyYXRpb25zIHRvb2sgJWxkLiUuOWxkcy4gKEF2ZyAlbGQuJS45bGRzL2l0ZXJhdGlvbilcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHAtXFx1MDAzZWl0ZXJhdGlvbnMsIGdldF9kaXJ0eV9sb2dfdG90YWwudHZfc2VjLFxcbitcXHRcXHRcXHRnZXRfZGlydHlfbG9nX3RvdGFsLnR2X25zZWMsIGF2Zy50dl9zZWMsIGF2Zy50dl9uc2VjKTtcXG4rXFx0fVxcbiBcXG4tXFx0aWYgKGRpcnR5X2xvZ19tYW51YWxfY2Fwcykge1xcbitcXHRpZiAoZGlydHlfbG9nX21hbnVhbF9jYXBzIHx8IGRpcnR5X3Jpbmdfc2l6ZSkge1xcbiBcXHRcXHRhdmcgPSB0aW1lc3BlY19kaXYoY2xlYXJfZGlydHlfbG9nX3RvdGFsLCBwLVxcdTAwM2VpdGVyYXRpb25zKTtcXG4gXFx0XFx0cHJfaW5mbyhcXFwiQ2xlYXIgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0cC1cXHUwMDNlaXRlcmF0aW9ucywgY2xlYXJfZGlydHlfbG9nX3RvdGFsLnR2X3NlYyxcXG4gXFx0XFx0XFx0Y2xlYXJfZGlydHlfbG9nX3RvdGFsLnR2X25zZWMsIGF2Zy50dl9zZWMsIGF2Zy50dl9uc2VjKTtcXG4gXFx0fVxcbiBcXG4tXFx0bWVtc3RyZXNzX2ZyZWVfYml0bWFwcyhiaXRtYXBzLCBwLVxcdTAwM2VzbG90cyk7XFxuK1xcdGlmICghZGlydHlfcmluZ19zaXplKVxcbitcXHRcXHRtZW1zdHJlc3NfZnJlZV9iaXRtYXBzKGJpdG1hcHMsIHAtXFx1MDAzZXNsb3RzKTtcXG4gXFx0bWVtc3RyZXNzX2Rlc3Ryb3lfdm0odm0pO1xcbiB9XFxuIFxcbkBAIC0yNTksMTEgKzM0NywxNSBAQCBzdGF0aWMgdm9pZCBoZWxwKGNoYXIgKm5hbWUpXFxuIFxcdHB1dHMoXFxcIlxcXCIpO1xcbiBcXHRwcmludGYoXFxcInVzYWdlOiAlcyBbLWhdIFstYV0gWy1pIGl0ZXJhdGlvbnNdIFstcCBvZmZzZXRdIFstZ10gXFxcIlxcbiBcXHQgICAgICAgXFxcIlstbSBtb2RlXSBbLW5dIFstYiB2Y3B1IGJ5dGVzXSBbLXYgdmNwdXNdIFstb10gWy1yIHJhbmRvbSBzZWVkIF0gWy1zIG1lbSB0eXBlXVxcXCJcXG4tXFx0ICAgICAgIFxcXCJbLXggbWVtc2xvdHNdIFstdyBwZXJjZW50YWdlXSBbLWMgcGh5c2ljYWwgY3B1cyB0byBydW4gdGVzdCBvbl1cXFxcblxcXCIsIG5hbWUpO1xcbitcXHQgICAgICAgXFxcIlsteCBtZW1zbG90c10gWy13IHBlcmNlbnRhZ2VdIFstYyBwaHlzaWNhbCBjcHVzIHRvIHJ1biB0ZXN0IG9uXSBcXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCJbLWQgZGlydHktcmluZyBlbnRyaWVzXVxcXFxuXFxcIiwgbmFtZSk7XFxuIFxcdHB1dHMoXFxcIlxcXCIpO1xcbiBcXHRwcmludGYoXFxcIiAtYTogYWNjZXNzIG1lbW9yeSByYW5kb21seSByYXRoZXIgdGhhbiBpbiBvcmRlci5cXFxcblxcXCIpO1xcbiBcXHRwcmludGYoXFxcIiAtaTogc3BlY2lmeSBpdGVyYXRpb24gY291bnRzIChkZWZhdWx0OiAlXFxcIlBSSXU2NFxcXCIpXFxcXG5cXFwiLFxcbiBcXHQgICAgICAgVEVTVF9IT1NUX0xPT1BfTik7XFxuK1xcdHByaW50ZihcXFwiIC1kOiBlbmFibGUgZGlydHktcmluZyBmb3IgdHJhY2tpbmcgZGlydHkgcGFnZXMsIHdpdGggZ2l2ZW4gZW50cmllcyBjb3VudC5cXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgICAgIElmIG5vbi16ZXJvLCB3aWxsIGNhdXNlIGRpcnR5LXJpbmcgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mXFxcXG5cXFwiXFxuK1xcdCAgICAgICBcXFwiICAgICBkaXJ0eS1iaXRtYXAuIE11c3QgYmUgYSBwb3dlciBvZiB0d28uXFxcXG5cXFwiKTtcXG4gXFx0cHJpbnRmKFxcXCIgLWc6IERvIG5vdCBlbmFibGUgS1ZNX0NBUF9NQU5VQUxfRElSVFlfTE9HX1BST1RFQ1QyLiBUaGlzXFxcXG5cXFwiXFxuIFxcdCAgICAgICBcXFwiICAgICBtYWtlcyBLVk1fR0VUX0RJUlRZX0xPRyBjbGVhciB0aGUgZGlydHkgbG9nIChpLmUuXFxcXG5cXFwiXFxuIFxcdCAgICAgICBcXFwiICAgICBLVk1fRElSVFlfTE9HX01BTlVBTF9QUk9URUNUX0VOQUJMRSBpcyBub3QgZW5hYmxlZClcXFxcblxcXCJcXG5AQCAtMzA5LDYgKzQwMSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdFxcdC53cml0ZV9wZXJjZW50ID0gMTAwLFxcbiBcXHR9O1xcbiBcXHRpbnQgb3B0O1xcbitcXHR1NjQgdG1wO1xcbiBcXG4gXFx0LyogT3ZlcnJpZGUgdGhlIHNlZWQgdG8gYmUgZGV0ZXJtaW5pc3RpYyBieSBkZWZhdWx0LiAqL1xcbiBcXHRndWVzdF9yYW5kb21fc2VlZCA9IDE7XFxuQEAgLTMyMCw3ICs0MTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXG4gXFx0Z3Vlc3RfbW9kZXNfYXBwZW5kX2RlZmF1bHQoKTtcXG4gXFxuLVxcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFxcXCJhYjpjOmVnaGk6bTpub3A6cjpzOnY6eDp3OlxcXCIpKSAhPSAtMSkge1xcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwiYWI6YzpkOmVnaGk6bTpub3A6cjpzOnY6eDp3OlxcXCIpKSAhPSAtMSkge1xcbiBcXHRcXHRzd2l0Y2ggKG9wdCkge1xcbiBcXHRcXHRjYXNlICdhJzpcXG4gXFx0XFx0XFx0cC5yYW5kb21fYWNjZXNzID0gdHJ1ZTtcXG5AQCAtMzMxLDYgKzQyNCwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHRjYXNlICdjJzpcXG4gXFx0XFx0XFx0cGNwdV9saXN0ID0gb3B0YXJnO1xcbiBcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnZCc6XFxuK1xcdFxcdFxcdHRtcCA9IHBhcnNlX3NpemUob3B0YXJnKTtcXG4rXFx0XFx0XFx0VEVTVF9BU1NFUlQodG1wLCBcXFwiRGlydHktcmluZyBzaXplIHNob3VsZCBiZSBcXHUwMDNlIDBcXFwiKTtcXG4rXFx0XFx0XFx0VEVTVF9BU1NFUlQodG1wIFxcdTAwM2M9IFVJTlQzMl9NQVggLyBzaXplb2Yoc3RydWN0IGt2bV9kaXJ0eV9nZm4pLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIkRpcnR5LXJpbmcgc2l6ZSAoJWx1KSBpcyB0b28gbGFyZ2UuXFxcIiwgdG1wKTtcXG4rXFx0XFx0XFx0ZGlydHlfcmluZ19zaXplID0gdG1wICogc2l6ZW9mKHN0cnVjdCBrdm1fZGlydHlfZ2ZuKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ2UnOlxcbiBcXHRcXHRcXHQvKiAnZScgaXMgZm9yIGV2aWwuICovXFxuIFxcdFxcdFxcdHJ1bl92Y3B1c193aGlsZV9kaXNhYmxpbmdfZGlydHlfbG9nZ2luZyA9IHRydWU7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL21lbXN0cmVzcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbWVtc3RyZXNzLmhcXG5pbmRleCAwZDFkNjIzMGNjMDUxLi5lMTdmMzQ0OTc4YWY2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL21lbXN0cmVzcy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbWVtc3RyZXNzLmhcXG5AQCAtNTgsNyArNTgsOCBAQCBleHRlcm4gc3RydWN0IG1lbXN0cmVzc19hcmdzIG1lbXN0cmVzc19hcmdzO1xcbiBzdHJ1Y3Qga3ZtX3ZtICptZW1zdHJlc3NfY3JlYXRlX3ZtKGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCBpbnQgbnJfdmNwdXMsXFxuIFxcdFxcdFxcdFxcdCAgIHU2NCB2Y3B1X21lbW9yeV9ieXRlcywgaW50IHNsb3RzLFxcbiBcXHRcXHRcXHRcXHQgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIGJhY2tpbmdfc3JjLFxcbi1cXHRcXHRcXHRcXHQgICBib29sIHBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpO1xcbitcXHRcXHRcXHRcXHQgICBib29sIHBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsXFxuK1xcdFxcdFxcdFxcdCAgIHUzMiBkaXJ0eV9yaW5nX3NpemUpO1xcbiB2b2lkIG1lbXN0cmVzc19kZXN0cm95X3ZtKHN0cnVjdCBrdm1fdm0gKnZtKTtcXG4gXFxuIHZvaWQgbWVtc3RyZXNzX3NldF93cml0ZV9wZXJjZW50KHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgd3JpdGVfcGVyY2VudCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xcbmluZGV4IDE5NWYzZmRhZTFlMzkuLmYxZWJkNzEyMjc2M2EgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXFxuQEAgLTE2NywxMCArMTY3LDIzIEBAIHVuc2lnbmVkIGludCBrdm1fY2hlY2tfY2FwKGxvbmcgY2FwKVxcbiBcXG4gdm9pZCB2bV9lbmFibGVfZGlydHlfcmluZyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHJpbmdfc2l6ZSlcXG4ge1xcbi1cXHRpZiAodm1fY2hlY2tfY2FwKHZtLCBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HX0FDUV9SRUwpKVxcbi1cXHRcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HX0FDUV9SRUwsIHJpbmdfc2l6ZSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9ESVJUWV9MT0dfUklORywgcmluZ19zaXplKTtcXG4rXFx0bG9uZyBjYXAgPSBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HX0FDUV9SRUw7XFxuK1xcdGludCBtYXhfc2l6ZSA9IHZtX2NoZWNrX2NhcCh2bSwgY2FwKTtcXG4rXFxuK1xcdGlmICghbWF4X3NpemUpIHtcXG4rXFx0XFx0Y2FwID0gS1ZNX0NBUF9ESVJUWV9MT0dfUklORztcXG4rXFx0XFx0bWF4X3NpemUgPSB2bV9jaGVja19jYXAodm0sIGNhcCk7XFxuK1xcdH1cXG4rXFxuK1xcdFRFU1RfQVNTRVJUKG1heF9zaXplIFxcdTAwM2UgMCwgXFxcIkRpcnR5LXJpbmcgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGtlcm5lbFxcXFxuXFxcIik7XFxuK1xcdFRFU1RfQVNTRVJUKHJpbmdfc2l6ZSBcXHUwMDNjPSBtYXhfc2l6ZSBcXHUwMDI2XFx1MDAyNiBpc19wb3dlcl9vZl8yKHJpbmdfc2l6ZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHJpbmdfc2l6ZSBcXHUwMDNlPSBnZXRwYWdlc2l6ZSgpLFxcbitcXHRcXHQgICAgXFxcIkludmFsaWQgZGlydHktcmluZyBzaXplOiBTaG91bGQgYmUgYSBwb3dlciBvZiB0d28gXFxcIlxcbitcXHRcXHQgICAgXFxcImJldHdlZW4gJWx1IGFuZCAlbHUgZW50cmllc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgIGdldHBhZ2VzaXplKCkgLyBzaXplb2Yoc3RydWN0IGt2bV9kaXJ0eV9nZm4pLFxcbitcXHRcXHQgICAgbWF4X3NpemUgLyBzaXplb2Yoc3RydWN0IGt2bV9kaXJ0eV9nZm4pKTtcXG4rXFxuK1xcdHZtX2VuYWJsZV9jYXAodm0sIGNhcCwgcmluZ19zaXplKTtcXG4gXFx0dm0tXFx1MDAzZWRpcnR5X3Jpbmdfc2l6ZSA9IHJpbmdfc2l6ZTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcXG5pbmRleCA2ZGNkMTU5MTBhMDYwLi5jOWY4NTUzM2ZmZmZkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXFxuQEAgLTEyMSwxMCArMTIxLDM1IEBAIHZvaWQgbWVtc3RyZXNzX3NldHVwX3ZjcHVzKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgbnJfdmNwdXMsXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBrdm1fdm0gKm1lbXN0cmVzc192bV9jcmVhdGVfd2l0aF92Y3B1cyhzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgdTMyIG5yX3ZjcHVzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHU2NCBleHRyYV9tZW1fcGFnZXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgdm9pZCAqZ3Vlc3RfY29kZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW10sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgdTMyIGRpcnR5X3Jpbmdfc2l6ZSlcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRURVNUX0FTU0VSVCghbnJfdmNwdXMgfHwgdmNwdXMsIFxcXCJNdXN0IHByb3ZpZGUgdkNQVSBhcnJheVxcXCIpO1xcbitcXG4rXFx0dm0gPSBfX3ZtX2NyZWF0ZShzaGFwZSwgbnJfdmNwdXMsIGV4dHJhX21lbV9wYWdlcyk7XFxuK1xcbitcXHRpZiAoZGlydHlfcmluZ19zaXplKVxcbitcXHRcXHR2bV9lbmFibGVfZGlydHlfcmluZyh2bSwgZGlydHlfcmluZ19zaXplKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl92Y3B1czsgKytpKVxcbitcXHRcXHR2Y3B1c1tpXSA9IHZtX3ZjcHVfYWRkKHZtLCBpLCBndWVzdF9jb2RlKTtcXG4rXFxuK1xcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcXG4rXFx0cmV0dXJuIHZtO1xcbit9XFxuK1xcbiBzdHJ1Y3Qga3ZtX3ZtICptZW1zdHJlc3NfY3JlYXRlX3ZtKGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCBpbnQgbnJfdmNwdXMsXFxuIFxcdFxcdFxcdFxcdCAgIHU2NCB2Y3B1X21lbW9yeV9ieXRlcywgaW50IHNsb3RzLFxcbiBcXHRcXHRcXHRcXHQgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIGJhY2tpbmdfc3JjLFxcbi1cXHRcXHRcXHRcXHQgICBib29sIHBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpXFxuK1xcdFxcdFxcdFxcdCAgIGJvb2wgcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcyxcXG4rXFx0XFx0XFx0XFx0ICAgdTMyIGRpcnR5X3Jpbmdfc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtc3RyZXNzX2FyZ3MgKmFyZ3MgPSBcXHUwMDI2bWVtc3RyZXNzX2FyZ3M7XFxuIFxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbkBAIC0xNjcsOSArMTkyLDEwIEBAIHN0cnVjdCBrdm1fdm0gKm1lbXN0cmVzc19jcmVhdGVfdm0oZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIGludCBucl92Y3B1cyxcXG4gXFx0ICogVGhlIG1lbW9yeSBpcyBhbHNvIGFkZGVkIHRvIG1lbXNsb3QgMCwgYnV0IHRoYXQncyBhIGJlbmlnbiBzaWRlXFxuIFxcdCAqIGVmZmVjdCBhcyBLVk0gYWxsb3dzIGFsaWFzaW5nIEhWQXMgaW4gbWVzbG90cy5cXG4gXFx0ICovXFxuLVxcdHZtID0gX192bV9jcmVhdGVfd2l0aF92Y3B1cyhWTV9TSEFQRShtb2RlKSwgbnJfdmNwdXMsXFxuLVxcdFxcdFxcdFxcdCAgICBzbG90MF9wYWdlcyArIGd1ZXN0X251bV9wYWdlcyxcXG4tXFx0XFx0XFx0XFx0ICAgIG1lbXN0cmVzc19ndWVzdF9jb2RlLCB2Y3B1cyk7XFxuK1xcdHZtID0gbWVtc3RyZXNzX3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKFZNX1NIQVBFKG1vZGUpLCBucl92Y3B1cyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHNsb3QwX3BhZ2VzICsgZ3Vlc3RfbnVtX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgbWVtc3RyZXNzX2d1ZXN0X2NvZGUsIHZjcHVzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgZGlydHlfcmluZ19zaXplKTtcXG4gXFxuIFxcdGFyZ3MtXFx1MDAzZXZtID0gdm07XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9tb2RpZmljYXRpb25fc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jXFxuaW5kZXggOWM3NTc4YTA5OGMzZS4uM2ExYmU5Yjc1ZTAxZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9tb2RpZmljYXRpb25fc3RyZXNzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jXFxuQEAgLTkwLDcgKzkwLDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcXG4gXFxuIFxcdHZtID0gbWVtc3RyZXNzX2NyZWF0ZV92bShtb2RlLCBucl92Y3B1cywgZ3Vlc3RfcGVyY3B1X21lbV9zaXplLCAxLFxcbiBcXHRcXHRcXHRcXHQgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXFxuLVxcdFxcdFxcdFxcdCBwLVxcdTAwM2VwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKTtcXG4rXFx0XFx0XFx0XFx0IHAtXFx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsIDApO1xcbiAjaWZkZWYgX194ODZfNjRfX1xcbiBcXHRpZiAocC1cXHUwMDNlZGlzYWJsZV9zbG90X3phcF9xdWlyaylcXG4gXFx0XFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9ESVNBQkxFX1FVSVJLUzIsIEtWTV9YODZfUVVJUktfU0xPVF9aQVBfQUxMKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9kaXJ0eV9sb2dfcGFnZV9zcGxpdHRpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9kaXJ0eV9sb2dfcGFnZV9zcGxpdHRpbmdfdGVzdC5jXFxuaW5kZXggMzg4YmE0MTAxZjk3My4uNjYxZTlhYmZiNDM5NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2RpcnR5X2xvZ19wYWdlX3NwbGl0dGluZ190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2RpcnR5X2xvZ19wYWdlX3NwbGl0dGluZ190ZXN0LmNcXG5AQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICp1bnVzZWQpXFxuIFxcdHN0cnVjdCBrdm1fcGFnZV9zdGF0cyBzdGF0c19yZXBvcHVsYXRlZDtcXG4gXFxuIFxcdHZtID0gbWVtc3RyZXNzX2NyZWF0ZV92bShtb2RlLCBWQ1BVUywgZ3Vlc3RfcGVyY3B1X21lbV9zaXplLFxcbi1cXHRcXHRcXHRcXHQgU0xPVFMsIGJhY2tpbmdfc3JjLCBmYWxzZSk7XFxuK1xcdFxcdFxcdFxcdCBTTE9UUywgYmFja2luZ19zcmMsIGZhbHNlLCAwKTtcXG4gXFxuIFxcdGd1ZXN0X251bV9wYWdlcyA9IChWQ1BVUyAqIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSkgXFx1MDAzZVxcdTAwM2Ugdm0tXFx1MDAzZXBhZ2Vfc2hpZnQ7XFxuIFxcdGd1ZXN0X251bV9wYWdlcyA9IHZtX2FkanVzdF9udW1fZ3Vlc3RfcGFnZXMobW9kZSwgZ3Vlc3RfbnVtX3BhZ2VzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MDc6MDAuNTY4MzMwODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NzQ1NTQ0NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyB3aGljaCBhcmUgdXNlcnNwYWNlIHRlc3QgcHJvZ3JhbXMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjE4NGE4NmRhODBkNTFjMzI5ZTA4MTdlZTBhYjM3Y2JmYTFiZDEyNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDAxOjA2OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FjY2Vzc190cmFja2luZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hY2Nlc3NfdHJhY2tpbmdfcGVyZl90ZXN0LmNcbmluZGV4IDQ0MTVjOTRiMjg2NjAuLmY3OGQ1NjI2NWQ4OTMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jXG5AQCAtNDA5LDcgKzQwOSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRpbnQgbnJfdmNwdXMgPSBwYXJhbXMtXHUwMDNlbnJfdmNwdXM7XG4gXG4gXHR2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIHBhcmFtcy1cdTAwM2V2Y3B1X21lbW9yeV9ieXRlcywgMSxcbi1cdFx0XHRcdCBwYXJhbXMtXHUwMDNlYmFja2luZ19zcmMsICFvdmVybGFwX21lbW9yeV9hY2Nlc3MpO1xuK1x0XHRcdFx0IHBhcmFtcy1cdTAwM2ViYWNraW5nX3NyYywgIW92ZXJsYXBfbWVtb3J5X2FjY2VzcywgMCk7XG4gXG4gXHQvKlxuIFx0ICogSWYgZ3Vlc3RfcGFnZV9zaXplIGlzIGxhcmdlciB0aGFuIHRoZSBob3N0J3MgcGFnZSBzaXplLCB0aGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmNcbmluZGV4IDMwMmM0OTIzZDA5MzAuLjkyMjQ2ZTI3ZWY3NDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuY1xuQEAgLTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxuIFx0aW50IGksIG51bV91ZmZkcyA9IDA7XG4gXG4gXHR2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSwgMSxcbi1cdFx0XHRcdCBwLVx1MDAzZXNyY190eXBlLCBwLVx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpO1xuK1x0XHRcdFx0IHAtXHUwMDNlc3JjX3R5cGUsIHAtXHUwMDNlcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcywgMCk7XG4gXG4gXHRkZW1hbmRfcGFnaW5nX3NpemUgPSBnZXRfYmFja2luZ19zcmNfcGFnZXN6KHAtXHUwMDNlc3JjX3R5cGUpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jXG5pbmRleCBlZjc3OWZhOTE4MjdjLi42ZTgwZDM2Y2M2MWEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xuQEAgLTEzLDYgKzEzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImt2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuQEAgLTI5LDkgKzMwLDUzIEBAIHN0YXRpYyBib29sIHJ1bl92Y3B1c193aGlsZV9kaXNhYmxpbmdfZGlydHlfbG9nZ2luZztcbiBcbiAvKiBIb3N0IHZhcmlhYmxlcyAqL1xuIHN0YXRpYyB1NjQgZGlydHlfbG9nX21hbnVhbF9jYXBzO1xuK3N0YXRpYyB1MzIgZGlydHlfcmluZ19zaXplO1xuIHN0YXRpYyBib29sIGhvc3RfcXVpdDtcbiBzdGF0aWMgaW50IGl0ZXJhdGlvbjtcbiBzdGF0aWMgaW50IHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW0tWTV9NQVhfVkNQVVNdO1xuK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgdmNwdV9kaXJ0eV9yaW5nX2NvbGxlY3RbS1ZNX01BWF9WQ1BVU107XG4rXG4rc3RhdGljIHZvaWQgZGlydHlfcmluZ19jb2xsZWN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyaW5nX2lkeCxcbitcdFx0XHRcdHN0cnVjdCB0aW1lc3BlYyAqdHMpXG4re1xuK1x0c3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBjb2xsZWN0ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjtcbitcdHN0cnVjdCB0aW1lc3BlYyBzdGFydDtcbitcdHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpkaXJ0eV9nZm5zID0gdmNwdV9tYXBfZGlydHlfcmluZyh2Y3B1KTtcbitcdHUzMiBpZHggPSAqcmluZ19pZHg7XG4rXHR1MzIgcmluZ19zaXplID0gdmNwdS1cdTAwM2V2bS1cdTAwM2VkaXJ0eV9yaW5nX3NpemUgLyBzaXplb2Yoc3RydWN0IGt2bV9kaXJ0eV9nZm4pO1xuK1x0aW50IGNsZWFyZWQsIGNvdW50O1xuK1xuK1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNmNvbGxlY3QpO1xuK1xuK1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNnN0YXJ0KTtcbitcbitcdHdoaWxlICh0cnVlKSB7XG4rXHRcdHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpjdXI7XG4rXG4rXHRcdGN1ciA9IFx1MDAyNmRpcnR5X2dmbnNbaWR4ICUgcmluZ19zaXplXTtcbitcdFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y3VyLVx1MDAzZWZsYWdzKSAhPSBLVk1fRElSVFlfR0ZOX0ZfRElSVFkpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmN1ci1cdTAwM2VmbGFncywgS1ZNX0RJUlRZX0dGTl9GX1JFU0VUKTtcbitcdFx0aWR4Kys7XG4rXHR9XG4rXG4rXHRjb3VudCA9IGlkeCAtICpyaW5nX2lkeDtcbitcdCpyaW5nX2lkeCA9IGlkeDtcbitcbitcdGNsZWFyZWQgPSBrdm1fdm1fcmVzZXRfZGlydHlfcmluZyh2Y3B1LVx1MDAzZXZtKTtcbitcbitcdC8qIENsZWFyZWQgcGFnZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGNvbGxlY3RlZCwgYXMgS1ZNIGlzIHN1cHBvc2VkIHRvXG4rXHQgKiBjbGVhciBvbmx5IHRoZSBlbnRyaWVzIHRoYXQgaGF2ZSBiZWVuIGhhcnZlc3RlZCwgYW5kIGEgc2luZ2xlIHZjcHUgd2lsbFxuK1x0ICogaGFydmVzdCBhdCB0aW1lLlxuK1x0ICovXG4rXHRURVNUX0FTU0VSVChjbGVhcmVkID09IGNvdW50LCBcIlJlc2V0IGRpcnR5IHBhZ2VzICgldSkgbWlzbWF0Y2ggXCJcbitcdFx0ICAgIFwid2l0aCBjb2xsZWN0ZWQgKCV1KVwiLCBjbGVhcmVkLCBjb3VudCk7XG4rXG4rXHQqdHMgPSB0aW1lc3BlY19hZGQoKnRzLCB0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KSk7XG4rXG4rXHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZjb2xsZWN0KTtcbit9XG4gXG4gc3RhdGljIHZvaWQgdmNwdV93b3JrZXIoc3RydWN0IG1lbXN0cmVzc192Y3B1X2FyZ3MgKnZjcHVfYXJncylcbiB7XG5AQCAtNDMsMjQgKzg4LDQ1IEBAIHN0YXRpYyB2b2lkIHZjcHVfd29ya2VyKHN0cnVjdCBtZW1zdHJlc3NfdmNwdV9hcmdzICp2Y3B1X2FyZ3MpXG4gXHRzdHJ1Y3QgdGltZXNwZWMgdHNfZGlmZjtcbiBcdHN0cnVjdCB0aW1lc3BlYyB0b3RhbCA9IChzdHJ1Y3QgdGltZXNwZWMpezB9O1xuIFx0c3RydWN0IHRpbWVzcGVjIGF2ZztcbitcdGJvb2wgdXNlX2RpcnR5X3JpbmcgPSAhIXZjcHUtXHUwMDNldm0tXHUwMDNlZGlydHlfcmluZ19zaXplO1xuK1x0dTMyIHJpbmdfaWR4ID0gMDtcbiBcdGludCByZXQ7XG4gXG4gXHRydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbiBcbiBcdHdoaWxlICghUkVBRF9PTkNFKGhvc3RfcXVpdCkpIHtcbiBcdFx0aW50IGN1cnJlbnRfaXRlcmF0aW9uID0gUkVBRF9PTkNFKGl0ZXJhdGlvbik7XG4rXHRcdHN0cnVjdCB0aW1lc3BlYyBjb2xsZWN0ID0gKHN0cnVjdCB0aW1lc3BlYyl7MH07XG4gXG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZzdGFydCk7XG4tXHRcdHJldCA9IF92Y3B1X3J1bih2Y3B1KTtcbitcbitcdFx0ZG8ge1xuK1x0XHRcdHJldCA9IF92Y3B1X3J1bih2Y3B1KTtcbitcdFx0XHRpZiAoIXVzZV9kaXJ0eV9yaW5nKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0ZGlydHlfcmluZ19jb2xsZWN0KHZjcHUsIFx1MDAyNnJpbmdfaWR4LCBcdTAwMjZjb2xsZWN0KTtcbitcdFx0fSB3aGlsZSAoIXJldCBcdTAwMjZcdTAwMjYgcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX0RJUlRZX1JJTkdfRlVMTCk7XG4rXG4gXHRcdHRzX2RpZmYgPSB0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KTtcbiBcbitcdFx0aWYgKHVzZV9kaXJ0eV9yaW5nKSB7XG4rXHRcdFx0dHNfZGlmZiA9IHRpbWVzcGVjX3N1Yih0c19kaWZmLCBjb2xsZWN0KTtcbitcdFx0XHR2Y3B1X2RpcnR5X3JpbmdfY29sbGVjdFt2Y3B1X2lkeF0gPSBjb2xsZWN0O1xuK1x0XHR9XG4rXG4gXHRcdFRFU1RfQVNTRVJUKHJldCA9PSAwLCBcInZjcHVfcnVuIGZhaWxlZDogJWRcIiwgcmV0KTtcbiBcdFx0VEVTVF9BU1NFUlQoZ2V0X3VjYWxsKHZjcHUsIE5VTEwpID09IFVDQUxMX1NZTkMsXG4gXHRcdFx0ICAgIFwiSW52YWxpZCBndWVzdCBzeW5jIHN0YXR1czogZXhpdF9yZWFzb249JXNcIixcbiBcdFx0XHQgICAgZXhpdF9yZWFzb25fc3RyKHJ1bi1cdTAwM2VleGl0X3JlYXNvbikpO1xuIFxuIFx0XHRwcl9kZWJ1ZyhcIkdvdCBzeW5jIGV2ZW50IGZyb20gdkNQVSAlZFxcblwiLCB2Y3B1X2lkeCk7XG4tXHRcdHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW3ZjcHVfaWR4XSA9IGN1cnJlbnRfaXRlcmF0aW9uO1xuK1x0XHQvKlxuK1x0XHQgKiBNYWtlIHN1cmUgdmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb24gd3JpdGUgaGFwcGVucyBiZWZvcmVcbitcdFx0ICogdXBkYXRpbmcgY3VycmVudCBpdGVyYXRpb24uICBQYWlycyB3aXRoIHJ1bl90ZXN0LCBhZnRlciBwb3B1bGF0aW5nLi5cbitcdFx0ICovXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW3ZjcHVfaWR4XSxcbitcdFx0XHRcdCAgY3VycmVudF9pdGVyYXRpb24pO1xuIFx0XHRwcl9kZWJ1ZyhcInZDUFUgJWQgdXBkYXRlZCBsYXN0IGNvbXBsZXRlZCBpdGVyYXRpb24gdG8gJWRcXG5cIixcbiBcdFx0XHQgdmNwdV9pZHgsIHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW3ZjcHVfaWR4XSk7XG4gXG5AQCAtMTE5LDcgKzE4NSw4IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXG4gXHR2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSxcbiBcdFx0XHRcdCBwLVx1MDAzZXNsb3RzLCBwLVx1MDAzZWJhY2tpbmdfc3JjLFxuLVx0XHRcdFx0IHAtXHUwMDNlcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2Vzcyk7XG4rXHRcdFx0XHQgcC1cdTAwM2VwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzLFxuK1x0XHRcdFx0IGRpcnR5X3Jpbmdfc2l6ZSk7XG4gXG4gXHRtZW1zdHJlc3Nfc2V0X3dyaXRlX3BlcmNlbnQodm0sIHAtXHUwMDNld3JpdGVfcGVyY2VudCk7XG4gXG5AQCAtMTI4LDcgKzE5NSw4IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRob3N0X251bV9wYWdlcyA9IHZtX251bV9ob3N0X3BhZ2VzKG1vZGUsIGd1ZXN0X251bV9wYWdlcyk7XG4gXHRwYWdlc19wZXJfc2xvdCA9IGhvc3RfbnVtX3BhZ2VzIC8gcC1cdTAwM2VzbG90cztcbiBcbi1cdGJpdG1hcHMgPSBtZW1zdHJlc3NfYWxsb2NfYml0bWFwcyhwLVx1MDAzZXNsb3RzLCBwYWdlc19wZXJfc2xvdCk7XG4rXHRpZiAoIWRpcnR5X3Jpbmdfc2l6ZSlcbitcdFx0Yml0bWFwcyA9IG1lbXN0cmVzc19hbGxvY19iaXRtYXBzKHAtXHUwMDNlc2xvdHMsIHBhZ2VzX3Blcl9zbG90KTtcbiBcbiBcdGlmIChkaXJ0eV9sb2dfbWFudWFsX2NhcHMpXG4gXHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfTUFOVUFMX0RJUlRZX0xPR19QUk9URUNUMixcbkBAIC0xMzksOCArMjA3LDEwIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRob3N0X3F1aXQgPSBmYWxzZTtcbiBcbiBcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZzdGFydCk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkrKykge1xuIFx0XHR2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbltpXSA9IC0xO1xuK1x0XHR2Y3B1X2RpcnR5X3JpbmdfY29sbGVjdFtpXSA9IChzdHJ1Y3QgdGltZXNwZWMpezB9O1xuK1x0fVxuIFxuIFx0LypcbiBcdCAqIFVzZSAxMDAlIHdyaXRlcyBkdXJpbmcgdGhlIHBvcHVsYXRpb24gcGhhc2UgdG8gZW5zdXJlIGFsbFxuQEAgLTE4NSw3ICsyNTUsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxuIFxuIFx0XHRwcl9kZWJ1ZyhcIlN0YXJ0aW5nIGl0ZXJhdGlvbiAlZFxcblwiLCBpdGVyYXRpb24pO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSsrKSB7XG4tXHRcdFx0d2hpbGUgKFJFQURfT05DRSh2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbltpXSlcbitcdFx0XHR3aGlsZSAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbltpXSlcbiBcdFx0XHQgICAgICAgIT0gaXRlcmF0aW9uKVxuIFx0XHRcdFx0O1xuIFx0XHR9XG5AQCAtMTk1LDYgKzI2NSwyMSBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxuIFx0XHRwcl9pbmZvKFwiSXRlcmF0aW9uICVkIGRpcnR5IG1lbW9yeSB0aW1lOiAlbGQuJS45bGRzXFxuXCIsXG4gXHRcdFx0aXRlcmF0aW9uLCB0c19kaWZmLnR2X3NlYywgdHNfZGlmZi50dl9uc2VjKTtcbiBcbitcdFx0aWYgKGRpcnR5X3Jpbmdfc2l6ZSkge1xuK1x0XHRcdHN0cnVjdCB0aW1lc3BlYyBpdGVyYXRpb25fc3VtID0gKHN0cnVjdCB0aW1lc3BlYyl7MH07XG4rXG4rXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkrKylcbitcdFx0XHRcdGl0ZXJhdGlvbl9zdW0gPSB0aW1lc3BlY19hZGQoaXRlcmF0aW9uX3N1bSxcbitcdFx0XHRcdFx0XHRcdCAgICAgdmNwdV9kaXJ0eV9yaW5nX2NvbGxlY3RbaV0pO1xuK1xuK1x0XHRcdHByX2luZm8oXCJJdGVyYXRpb24gJWQgY2xlYXIgZGlydHkgcmluZyB0aW1lOiAlbGQuJS45bGRzXFxuXCIsXG4rXHRcdFx0XHRpdGVyYXRpb24sIGl0ZXJhdGlvbl9zdW0udHZfc2VjLCBpdGVyYXRpb25fc3VtLnR2X25zZWMpO1xuK1xuK1x0XHRcdGNsZWFyX2RpcnR5X2xvZ190b3RhbCA9IHRpbWVzcGVjX2FkZChjbGVhcl9kaXJ0eV9sb2dfdG90YWwsXG4rXHRcdFx0XHRcdFx0XHQgICAgIGl0ZXJhdGlvbl9zdW0pO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZzdGFydCk7XG4gXHRcdG1lbXN0cmVzc19nZXRfZGlydHlfbG9nKHZtLCBiaXRtYXBzLCBwLVx1MDAzZXNsb3RzKTtcbiBcdFx0dHNfZGlmZiA9IHRpbWVzcGVjX2VsYXBzZWQoc3RhcnQpO1xuQEAgLTIzOCwxOSArMzIzLDIyIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRob3N0X3F1aXQgPSB0cnVlO1xuIFx0bWVtc3RyZXNzX2pvaW5fdmNwdV90aHJlYWRzKG5yX3ZjcHVzKTtcbiBcbi1cdGF2ZyA9IHRpbWVzcGVjX2RpdihnZXRfZGlydHlfbG9nX3RvdGFsLCBwLVx1MDAzZWl0ZXJhdGlvbnMpO1xuLVx0cHJfaW5mbyhcIkdldCBkaXJ0eSBsb2cgb3ZlciAlbHUgaXRlcmF0aW9ucyB0b29rICVsZC4lLjlsZHMuIChBdmcgJWxkLiUuOWxkcy9pdGVyYXRpb24pXFxuXCIsXG4tXHRcdHAtXHUwMDNlaXRlcmF0aW9ucywgZ2V0X2RpcnR5X2xvZ190b3RhbC50dl9zZWMsXG4tXHRcdGdldF9kaXJ0eV9sb2dfdG90YWwudHZfbnNlYywgYXZnLnR2X3NlYywgYXZnLnR2X25zZWMpO1xuK1x0aWYgKCFkaXJ0eV9yaW5nX3NpemUpIHtcbitcdFx0YXZnID0gdGltZXNwZWNfZGl2KGdldF9kaXJ0eV9sb2dfdG90YWwsIHAtXHUwMDNlaXRlcmF0aW9ucyk7XG4rXHRcdHByX2luZm8oXCJHZXQgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxcblwiLFxuK1x0XHRcdHAtXHUwMDNlaXRlcmF0aW9ucywgZ2V0X2RpcnR5X2xvZ190b3RhbC50dl9zZWMsXG4rXHRcdFx0Z2V0X2RpcnR5X2xvZ190b3RhbC50dl9uc2VjLCBhdmcudHZfc2VjLCBhdmcudHZfbnNlYyk7XG4rXHR9XG4gXG4tXHRpZiAoZGlydHlfbG9nX21hbnVhbF9jYXBzKSB7XG4rXHRpZiAoZGlydHlfbG9nX21hbnVhbF9jYXBzIHx8IGRpcnR5X3Jpbmdfc2l6ZSkge1xuIFx0XHRhdmcgPSB0aW1lc3BlY19kaXYoY2xlYXJfZGlydHlfbG9nX3RvdGFsLCBwLVx1MDAzZWl0ZXJhdGlvbnMpO1xuIFx0XHRwcl9pbmZvKFwiQ2xlYXIgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxcblwiLFxuIFx0XHRcdHAtXHUwMDNlaXRlcmF0aW9ucywgY2xlYXJfZGlydHlfbG9nX3RvdGFsLnR2X3NlYyxcbiBcdFx0XHRjbGVhcl9kaXJ0eV9sb2dfdG90YWwudHZfbnNlYywgYXZnLnR2X3NlYywgYXZnLnR2X25zZWMpO1xuIFx0fVxuIFxuLVx0bWVtc3RyZXNzX2ZyZWVfYml0bWFwcyhiaXRtYXBzLCBwLVx1MDAzZXNsb3RzKTtcbitcdGlmICghZGlydHlfcmluZ19zaXplKVxuK1x0XHRtZW1zdHJlc3NfZnJlZV9iaXRtYXBzKGJpdG1hcHMsIHAtXHUwMDNlc2xvdHMpO1xuIFx0bWVtc3RyZXNzX2Rlc3Ryb3lfdm0odm0pO1xuIH1cbiBcbkBAIC0yNTksMTEgKzM0NywxNSBAQCBzdGF0aWMgdm9pZCBoZWxwKGNoYXIgKm5hbWUpXG4gXHRwdXRzKFwiXCIpO1xuIFx0cHJpbnRmKFwidXNhZ2U6ICVzIFstaF0gWy1hXSBbLWkgaXRlcmF0aW9uc10gWy1wIG9mZnNldF0gWy1nXSBcIlxuIFx0ICAgICAgIFwiWy1tIG1vZGVdIFstbl0gWy1iIHZjcHUgYnl0ZXNdIFstdiB2Y3B1c10gWy1vXSBbLXIgcmFuZG9tIHNlZWQgXSBbLXMgbWVtIHR5cGVdXCJcbi1cdCAgICAgICBcIlsteCBtZW1zbG90c10gWy13IHBlcmNlbnRhZ2VdIFstYyBwaHlzaWNhbCBjcHVzIHRvIHJ1biB0ZXN0IG9uXVxcblwiLCBuYW1lKTtcbitcdCAgICAgICBcIlsteCBtZW1zbG90c10gWy13IHBlcmNlbnRhZ2VdIFstYyBwaHlzaWNhbCBjcHVzIHRvIHJ1biB0ZXN0IG9uXSBcXG5cIlxuK1x0ICAgICAgIFwiWy1kIGRpcnR5LXJpbmcgZW50cmllc11cXG5cIiwgbmFtZSk7XG4gXHRwdXRzKFwiXCIpO1xuIFx0cHJpbnRmKFwiIC1hOiBhY2Nlc3MgbWVtb3J5IHJhbmRvbWx5IHJhdGhlciB0aGFuIGluIG9yZGVyLlxcblwiKTtcbiBcdHByaW50ZihcIiAtaTogc3BlY2lmeSBpdGVyYXRpb24gY291bnRzIChkZWZhdWx0OiAlXCJQUkl1NjRcIilcXG5cIixcbiBcdCAgICAgICBURVNUX0hPU1RfTE9PUF9OKTtcbitcdHByaW50ZihcIiAtZDogZW5hYmxlIGRpcnR5LXJpbmcgZm9yIHRyYWNraW5nIGRpcnR5IHBhZ2VzLCB3aXRoIGdpdmVuIGVudHJpZXMgY291bnQuXFxuXCJcbitcdCAgICAgICBcIiAgICAgSWYgbm9uLXplcm8sIHdpbGwgY2F1c2UgZGlydHktcmluZyB0byBiZSB1c2VkIGluc3RlYWQgb2ZcXG5cIlxuK1x0ICAgICAgIFwiICAgICBkaXJ0eS1iaXRtYXAuIE11c3QgYmUgYSBwb3dlciBvZiB0d28uXFxuXCIpO1xuIFx0cHJpbnRmKFwiIC1nOiBEbyBub3QgZW5hYmxlIEtWTV9DQVBfTUFOVUFMX0RJUlRZX0xPR19QUk9URUNUMi4gVGhpc1xcblwiXG4gXHQgICAgICAgXCIgICAgIG1ha2VzIEtWTV9HRVRfRElSVFlfTE9HIGNsZWFyIHRoZSBkaXJ0eSBsb2cgKGkuZS5cXG5cIlxuIFx0ICAgICAgIFwiICAgICBLVk1fRElSVFlfTE9HX01BTlVBTF9QUk9URUNUX0VOQUJMRSBpcyBub3QgZW5hYmxlZClcXG5cIlxuQEAgLTMwOSw2ICs0MDEsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHQud3JpdGVfcGVyY2VudCA9IDEwMCxcbiBcdH07XG4gXHRpbnQgb3B0O1xuK1x0dTY0IHRtcDtcbiBcbiBcdC8qIE92ZXJyaWRlIHRoZSBzZWVkIHRvIGJlIGRldGVybWluaXN0aWMgYnkgZGVmYXVsdC4gKi9cbiBcdGd1ZXN0X3JhbmRvbV9zZWVkID0gMTtcbkBAIC0zMjAsNyArNDEzLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcbiBcdGd1ZXN0X21vZGVzX2FwcGVuZF9kZWZhdWx0KCk7XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcImFiOmM6ZWdoaTptOm5vcDpyOnM6djp4Onc6XCIpKSAhPSAtMSkge1xuK1x0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCJhYjpjOmQ6ZWdoaTptOm5vcDpyOnM6djp4Onc6XCIpKSAhPSAtMSkge1xuIFx0XHRzd2l0Y2ggKG9wdCkge1xuIFx0XHRjYXNlICdhJzpcbiBcdFx0XHRwLnJhbmRvbV9hY2Nlc3MgPSB0cnVlO1xuQEAgLTMzMSw2ICs0MjQsMTMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0Y2FzZSAnYyc6XG4gXHRcdFx0cGNwdV9saXN0ID0gb3B0YXJnO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdkJzpcbitcdFx0XHR0bXAgPSBwYXJzZV9zaXplKG9wdGFyZyk7XG4rXHRcdFx0VEVTVF9BU1NFUlQodG1wLCBcIkRpcnR5LXJpbmcgc2l6ZSBzaG91bGQgYmUgXHUwMDNlIDBcIik7XG4rXHRcdFx0VEVTVF9BU1NFUlQodG1wIFx1MDAzYz0gVUlOVDMyX01BWCAvIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiksXG4rXHRcdFx0XHQgICAgXCJEaXJ0eS1yaW5nIHNpemUgKCVsdSkgaXMgdG9vIGxhcmdlLlwiLCB0bXApO1xuK1x0XHRcdGRpcnR5X3Jpbmdfc2l6ZSA9IHRtcCAqIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbik7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ2UnOlxuIFx0XHRcdC8qICdlJyBpcyBmb3IgZXZpbC4gKi9cbiBcdFx0XHRydW5fdmNwdXNfd2hpbGVfZGlzYWJsaW5nX2RpcnR5X2xvZ2dpbmcgPSB0cnVlO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL21lbXN0cmVzcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbWVtc3RyZXNzLmhcbmluZGV4IDBkMWQ2MjMwY2MwNTEuLmUxN2YzNDQ5NzhhZjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9tZW1zdHJlc3MuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbWVtc3RyZXNzLmhcbkBAIC01OCw3ICs1OCw4IEBAIGV4dGVybiBzdHJ1Y3QgbWVtc3RyZXNzX2FyZ3MgbWVtc3RyZXNzX2FyZ3M7XG4gc3RydWN0IGt2bV92bSAqbWVtc3RyZXNzX2NyZWF0ZV92bShlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgaW50IG5yX3ZjcHVzLFxuIFx0XHRcdFx0ICAgdTY0IHZjcHVfbWVtb3J5X2J5dGVzLCBpbnQgc2xvdHMsXG4gXHRcdFx0XHQgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIGJhY2tpbmdfc3JjLFxuLVx0XHRcdFx0ICAgYm9vbCBwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKTtcbitcdFx0XHRcdCAgIGJvb2wgcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcyxcbitcdFx0XHRcdCAgIHUzMiBkaXJ0eV9yaW5nX3NpemUpO1xuIHZvaWQgbWVtc3RyZXNzX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bV92bSAqdm0pO1xuIFxuIHZvaWQgbWVtc3RyZXNzX3NldF93cml0ZV9wZXJjZW50KHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgd3JpdGVfcGVyY2VudCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG5pbmRleCAxOTVmM2ZkYWUxZTM5Li5mMWViZDcxMjI3NjNhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbkBAIC0xNjcsMTAgKzE2NywyMyBAQCB1bnNpZ25lZCBpbnQga3ZtX2NoZWNrX2NhcChsb25nIGNhcClcbiBcbiB2b2lkIHZtX2VuYWJsZV9kaXJ0eV9yaW5nKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgcmluZ19zaXplKVxuIHtcbi1cdGlmICh2bV9jaGVja19jYXAodm0sIEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfQUNRX1JFTCkpXG4tXHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfQUNRX1JFTCwgcmluZ19zaXplKTtcbi1cdGVsc2Vcbi1cdFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9ESVJUWV9MT0dfUklORywgcmluZ19zaXplKTtcbitcdGxvbmcgY2FwID0gS1ZNX0NBUF9ESVJUWV9MT0dfUklOR19BQ1FfUkVMO1xuK1x0aW50IG1heF9zaXplID0gdm1fY2hlY2tfY2FwKHZtLCBjYXApO1xuK1xuK1x0aWYgKCFtYXhfc2l6ZSkge1xuK1x0XHRjYXAgPSBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HO1xuK1x0XHRtYXhfc2l6ZSA9IHZtX2NoZWNrX2NhcCh2bSwgY2FwKTtcbitcdH1cbitcbitcdFRFU1RfQVNTRVJUKG1heF9zaXplIFx1MDAzZSAwLCBcIkRpcnR5LXJpbmcgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGtlcm5lbFxcblwiKTtcbitcdFRFU1RfQVNTRVJUKHJpbmdfc2l6ZSBcdTAwM2M9IG1heF9zaXplIFx1MDAyNlx1MDAyNiBpc19wb3dlcl9vZl8yKHJpbmdfc2l6ZSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICByaW5nX3NpemUgXHUwMDNlPSBnZXRwYWdlc2l6ZSgpLFxuK1x0XHQgICAgXCJJbnZhbGlkIGRpcnR5LXJpbmcgc2l6ZTogU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvIFwiXG4rXHRcdCAgICBcImJldHdlZW4gJWx1IGFuZCAlbHUgZW50cmllc1xcblwiLFxuK1x0XHQgICAgZ2V0cGFnZXNpemUoKSAvIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiksXG4rXHRcdCAgICBtYXhfc2l6ZSAvIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbikpO1xuK1xuK1x0dm1fZW5hYmxlX2NhcCh2bSwgY2FwLCByaW5nX3NpemUpO1xuIFx0dm0tXHUwMDNlZGlydHlfcmluZ19zaXplID0gcmluZ19zaXplO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuaW5kZXggNmRjZDE1OTEwYTA2MC4uYzlmODU1MzNmZmZmZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcbkBAIC0xMjEsMTAgKzEyMSwzNSBAQCB2b2lkIG1lbXN0cmVzc19zZXR1cF92Y3B1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG5yX3ZjcHVzLFxuIFx0fVxuIH1cbiBcbitzdGF0aWMgc3RydWN0IGt2bV92bSAqbWVtc3RyZXNzX3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSxcbitcdFx0XHRcdFx0XHQgICAgIHUzMiBucl92Y3B1cyxcbitcdFx0XHRcdFx0XHQgICAgIHU2NCBleHRyYV9tZW1fcGFnZXMsXG4rXHRcdFx0XHRcdFx0ICAgICB2b2lkICpndWVzdF9jb2RlLFxuK1x0XHRcdFx0XHRcdCAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdLFxuK1x0XHRcdFx0XHRcdCAgICAgdTMyIGRpcnR5X3Jpbmdfc2l6ZSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBpO1xuK1xuK1x0VEVTVF9BU1NFUlQoIW5yX3ZjcHVzIHx8IHZjcHVzLCBcIk11c3QgcHJvdmlkZSB2Q1BVIGFycmF5XCIpO1xuK1xuK1x0dm0gPSBfX3ZtX2NyZWF0ZShzaGFwZSwgbnJfdmNwdXMsIGV4dHJhX21lbV9wYWdlcyk7XG4rXG4rXHRpZiAoZGlydHlfcmluZ19zaXplKVxuK1x0XHR2bV9lbmFibGVfZGlydHlfcmluZyh2bSwgZGlydHlfcmluZ19zaXplKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyArK2kpXG4rXHRcdHZjcHVzW2ldID0gdm1fdmNwdV9hZGQodm0sIGksIGd1ZXN0X2NvZGUpO1xuK1xuK1x0a3ZtX2FyY2hfdm1fZmluYWxpemVfdmNwdXModm0pO1xuK1x0cmV0dXJuIHZtO1xuK31cbitcbiBzdHJ1Y3Qga3ZtX3ZtICptZW1zdHJlc3NfY3JlYXRlX3ZtKGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCBpbnQgbnJfdmNwdXMsXG4gXHRcdFx0XHQgICB1NjQgdmNwdV9tZW1vcnlfYnl0ZXMsIGludCBzbG90cyxcbiBcdFx0XHRcdCAgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgYmFja2luZ19zcmMsXG4tXHRcdFx0XHQgICBib29sIHBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpXG4rXHRcdFx0XHQgICBib29sIHBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsXG4rXHRcdFx0XHQgICB1MzIgZGlydHlfcmluZ19zaXplKVxuIHtcbiBcdHN0cnVjdCBtZW1zdHJlc3NfYXJncyAqYXJncyA9IFx1MDAyNm1lbXN0cmVzc19hcmdzO1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG5AQCAtMTY3LDkgKzE5MiwxMCBAQCBzdHJ1Y3Qga3ZtX3ZtICptZW1zdHJlc3NfY3JlYXRlX3ZtKGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCBpbnQgbnJfdmNwdXMsXG4gXHQgKiBUaGUgbWVtb3J5IGlzIGFsc28gYWRkZWQgdG8gbWVtc2xvdCAwLCBidXQgdGhhdCdzIGEgYmVuaWduIHNpZGVcbiBcdCAqIGVmZmVjdCBhcyBLVk0gYWxsb3dzIGFsaWFzaW5nIEhWQXMgaW4gbWVzbG90cy5cbiBcdCAqL1xuLVx0dm0gPSBfX3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKFZNX1NIQVBFKG1vZGUpLCBucl92Y3B1cyxcbi1cdFx0XHRcdCAgICBzbG90MF9wYWdlcyArIGd1ZXN0X251bV9wYWdlcyxcbi1cdFx0XHRcdCAgICBtZW1zdHJlc3NfZ3Vlc3RfY29kZSwgdmNwdXMpO1xuK1x0dm0gPSBtZW1zdHJlc3Nfdm1fY3JlYXRlX3dpdGhfdmNwdXMoVk1fU0hBUEUobW9kZSksIG5yX3ZjcHVzLFxuK1x0XHRcdFx0XHQgICAgc2xvdDBfcGFnZXMgKyBndWVzdF9udW1fcGFnZXMsXG4rXHRcdFx0XHRcdCAgICBtZW1zdHJlc3NfZ3Vlc3RfY29kZSwgdmNwdXMsXG4rXHRcdFx0XHRcdCAgICBkaXJ0eV9yaW5nX3NpemUpO1xuIFxuIFx0YXJncy1cdTAwM2V2bSA9IHZtO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfbW9kaWZpY2F0aW9uX3N0cmVzc190ZXN0LmNcbmluZGV4IDljNzU3OGEwOThjM2UuLjNhMWJlOWI3NWUwMWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9tb2RpZmljYXRpb25fc3RyZXNzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfbW9kaWZpY2F0aW9uX3N0cmVzc190ZXN0LmNcbkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXG4gXHR2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSwgMSxcbiBcdFx0XHRcdCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbi1cdFx0XHRcdCBwLVx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpO1xuK1x0XHRcdFx0IHAtXHUwMDNlcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcywgMCk7XG4gI2lmZGVmIF9feDg2XzY0X19cbiBcdGlmIChwLVx1MDAzZWRpc2FibGVfc2xvdF96YXBfcXVpcmspXG4gXHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRElTQUJMRV9RVUlSS1MyLCBLVk1fWDg2X1FVSVJLX1NMT1RfWkFQX0FMTCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9kaXJ0eV9sb2dfcGFnZV9zcGxpdHRpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9kaXJ0eV9sb2dfcGFnZV9zcGxpdHRpbmdfdGVzdC5jXG5pbmRleCAzODhiYTQxMDFmOTczLi42NjFlOWFiZmI0Mzk1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9kaXJ0eV9sb2dfcGFnZV9zcGxpdHRpbmdfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2RpcnR5X2xvZ19wYWdlX3NwbGl0dGluZ190ZXN0LmNcbkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKnVudXNlZClcbiBcdHN0cnVjdCBrdm1fcGFnZV9zdGF0cyBzdGF0c19yZXBvcHVsYXRlZDtcbiBcbiBcdHZtID0gbWVtc3RyZXNzX2NyZWF0ZV92bShtb2RlLCBWQ1BVUywgZ3Vlc3RfcGVyY3B1X21lbV9zaXplLFxuLVx0XHRcdFx0IFNMT1RTLCBiYWNraW5nX3NyYywgZmFsc2UpO1xuK1x0XHRcdFx0IFNMT1RTLCBiYWNraW5nX3NyYywgZmFsc2UsIDApO1xuIFxuIFx0Z3Vlc3RfbnVtX3BhZ2VzID0gKFZDUFVTICogZ3Vlc3RfcGVyY3B1X21lbV9zaXplKSBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdDtcbiBcdGd1ZXN0X251bV9wYWdlcyA9IHZtX2FkanVzdF9udW1fZ3Vlc3RfcGFnZXMobW9kZSwgZ3Vlc3RfbnVtX3BhZ2VzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjA3OjAwLjU2ODM1MTAxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc0NTQ4NjM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIEtWTSBzZWxmdGVzdHMsIHNwZWNpZmljYWxseSB0aGVzZSBmaWxlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gOiBgZGlydHlfbG9nX3BlcmZfdGVzdC5jYCwgYG1lbXN0cmVzcy5jYCwgYGt2bV91dGlsLmNgLCBhbmQgYSBmZXcgb3RoZXJzLiBJdCdzIGFib3V0IGFkZGluZyBzdXBwb3J0IGZvciB0ZXN0aW5nIHRoZSBLVk0gZGlydHkgcmluZyBmZWF0dXJlIChgS1ZNX0NBUF9ESVJUWV9MT0dfUklOR2AgYW5kIGBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HX0FDUV9SRUxgKSB3aXRoaW4gYGRpcnR5X2xvZ19wZXJmX3Rlc3QuY2AuIFRoZSBjcml0aWNhbCB0aGluZyBpcyB0aGF0IGFsbCB0aGVzZSBtb2RpZmljYXRpb25zIGFyZSBjb250YWluZWQgZW50aXJlbHkgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5LiBObyBjaGFuZ2VzIGFyZSBiZWluZyBtYWRlIHRvIHRoZSBrZXJuZWwncyBjb3JlIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS5cblxuTm93LCB0aGUgcHJvbXB0IGdpdmVzIGEgbGlzdCBvZiBjb25kaXRpb25zIHdoZXJlIHdlIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEl0IGRvZXNuJ3QgZXhwbGljaXRseSBtZW50aW9uIHNlbGZ0ZXN0cywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBIb3dldmVyLCBzZWxmdGVzdHMgYXJlICp1c2VyLXNwYWNlKiB0ZXN0aW5nIHRvb2xzLiBUaGUgcHJvbXB0IGRvZXMgc2F5IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBbLi4uXSBtb2RpZmljYXRpb25zIHRvIFsuLi5dIGRvY3VtZW50YXRpb24sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuIC0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuIC0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiAtIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKSB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXCJcblRoZSBwcm9tcHQgYWxzbyBzYXlzIFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIlxuXG5TaW5jZSB0aGlzICpvbmx5KiB0b3VjaGVzIHVzZXJzcGFjZSBzZWxmdGVzdHMsIG5vdCBhbnkgb2YgdGhvc2UgYXJlYXMsIGl0J3MgYSBjbGVhciBjYXNlLiBUaGUgcGF0Y2ggZG9lcyAqbm90KiBtb2RpZnkgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGUgZmlsZXMgYXJlIGRlZmluaXRlbHkganVzdCBpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeSwgYW5kIGFyZSBhbGwgc2VsZnRlc3RzLCB1c2VyLXNwYWNlIHRvb2xzLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGUgZmlsZSBsaXN0OiBgYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jYCwgYGRlbWFuZF9wYWdpbmdfdGVzdC5jYCwgYGRpcnR5X2xvZ19wZXJmX3Rlc3QuY2AsIGBpbmNsdWRlL21lbXN0cmVzcy5oYCwgYGxpYi9rdm1fdXRpbC5jYCwgYGxpYi9tZW1zdHJlc3MuY2AsIGBtZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jYCwgYW5kIGB4ODYvZGlydHlfbG9nX3BhZ2Vfc3BsaXR0aW5nX3Rlc3QuY2AuIFRoZXNlIGFyZSBhbGwgdXNlci1zcGFjZSB0ZXN0cywgc28gaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXRlcm1pbmF0aW9uLlxuXG5UaGVyZWZvcmUsIEknbSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByYXRpb25hbGUgaXMgdGhhdCB0aGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHVzZXIgc3BhY2UgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGNoYW5nZXMgdG8ga2VybmVsIGNvZGUuIEl0IGRvZXNuJ3QgbW9kaWZ5IGtlcm5lbCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMzMywiT3V0cHV0VG9rZW5zIjo3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjA3OjEwLjMxMzgzOTkzNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gd2hpY2ggYXJlIHVzZXJzcGFjZSB0ZXN0IHByb2dyYW1zLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIHdoaWNoIGFyZSB1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowx4lzc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 01:05:24 +0000 UTC FinishedAt: 2026-07-31 01:07:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIHdoaWNoIGFyZSB1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjE4NGE4NmRhODBkNTFjMzI5ZTA4MTdlZTBhYjM3Y2JmYTFiZDEyNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDAxOjA2OjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hY2Nlc3NfdHJhY2tpbmdfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jXG5pbmRleCA0NDE1Yzk0YjI4NjYwLi5mNzhkNTYyNjVkODkzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FjY2Vzc190cmFja2luZ19wZXJmX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FjY2Vzc190cmFja2luZ19wZXJmX3Rlc3QuY1xuQEAgLTQwOSw3ICYjNDM7NDA5LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcbiBcdGludCBucl92Y3B1cyA9IHBhcmFtcy1cdTAwM2Vucl92Y3B1cztcbiBcbiBcdHZtID0gbWVtc3RyZXNzX2NyZWF0ZV92bShtb2RlLCBucl92Y3B1cywgcGFyYW1zLVx1MDAzZXZjcHVfbWVtb3J5X2J5dGVzLCAxLFxuLVx0XHRcdFx0IHBhcmFtcy1cdTAwM2ViYWNraW5nX3NyYywgIW92ZXJsYXBfbWVtb3J5X2FjY2Vzcyk7XG4mIzQzO1x0XHRcdFx0IHBhcmFtcy1cdTAwM2ViYWNraW5nX3NyYywgIW92ZXJsYXBfbWVtb3J5X2FjY2VzcywgMCk7XG4gXG4gXHQvKlxuIFx0ICogSWYgZ3Vlc3RfcGFnZV9zaXplIGlzIGxhcmdlciB0aGFuIHRoZSBob3N0JiMzOTtzIHBhZ2Ugc2l6ZSwgdGhlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jXG5pbmRleCAzMDJjNDkyM2QwOTMwLi45MjI0NmUyN2VmNzQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmNcbkBAIC0xNjIsNyAmIzQzOzE2Miw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRpbnQgaSwgbnVtX3VmZmRzID0gMDtcbiBcbiBcdHZtID0gbWVtc3RyZXNzX2NyZWF0ZV92bShtb2RlLCBucl92Y3B1cywgZ3Vlc3RfcGVyY3B1X21lbV9zaXplLCAxLFxuLVx0XHRcdFx0IHAtXHUwMDNlc3JjX3R5cGUsIHAtXHUwMDNlcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2Vzcyk7XG4mIzQzO1x0XHRcdFx0IHAtXHUwMDNlc3JjX3R5cGUsIHAtXHUwMDNlcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcywgMCk7XG4gXG4gXHRkZW1hbmRfcGFnaW5nX3NpemUgPSBnZXRfYmFja2luZ19zcmNfcGFnZXN6KHAtXHUwMDNlc3JjX3R5cGUpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jXG5pbmRleCBlZjc3OWZhOTE4MjdjLi42ZTgwZDM2Y2M2MWEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xuQEAgLTEzLDYgJiM0MzsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2JhcnJpZXIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X3V0aWwuaFwmIzM0O1xuQEAgLTI5LDkgJiM0MzszMCw1MyBAQCBzdGF0aWMgYm9vbCBydW5fdmNwdXNfd2hpbGVfZGlzYWJsaW5nX2RpcnR5X2xvZ2dpbmc7XG4gXG4gLyogSG9zdCB2YXJpYWJsZXMgKi9cbiBzdGF0aWMgdTY0IGRpcnR5X2xvZ19tYW51YWxfY2FwcztcbiYjNDM7c3RhdGljIHUzMiBkaXJ0eV9yaW5nX3NpemU7XG4gc3RhdGljIGJvb2wgaG9zdF9xdWl0O1xuIHN0YXRpYyBpbnQgaXRlcmF0aW9uO1xuIHN0YXRpYyBpbnQgdmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25bS1ZNX01BWF9WQ1BVU107XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgdmNwdV9kaXJ0eV9yaW5nX2NvbGxlY3RbS1ZNX01BWF9WQ1BVU107XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkaXJ0eV9yaW5nX2NvbGxlY3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJpbmdfaWR4LFxuJiM0MztcdFx0XHRcdHN0cnVjdCB0aW1lc3BlYyAqdHMpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgcHRocmVhZF9tdXRleF90IGNvbGxlY3QgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYyBzdGFydDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZGlydHlfZ2ZucyA9IHZjcHVfbWFwX2RpcnR5X3JpbmcodmNwdSk7XG4mIzQzO1x0dTMyIGlkeCA9ICpyaW5nX2lkeDtcbiYjNDM7XHR1MzIgcmluZ19zaXplID0gdmNwdS1cdTAwM2V2bS1cdTAwM2VkaXJ0eV9yaW5nX3NpemUgLyBzaXplb2Yoc3RydWN0IGt2bV9kaXJ0eV9nZm4pO1xuJiM0MztcdGludCBjbGVhcmVkLCBjb3VudDtcbiYjNDM7XG4mIzQzO1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNmNvbGxlY3QpO1xuJiM0MztcbiYjNDM7XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2c3RhcnQpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAodHJ1ZSkge1xuJiM0MztcdFx0c3RydWN0IGt2bV9kaXJ0eV9nZm4gKmN1cjtcbiYjNDM7XG4mIzQzO1x0XHRjdXIgPSBcdTAwMjZkaXJ0eV9nZm5zW2lkeCAlIHJpbmdfc2l6ZV07XG4mIzQzO1x0XHRpZiAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZjdXItXHUwMDNlZmxhZ3MpICE9IEtWTV9ESVJUWV9HRk5fRl9ESVJUWSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Y3VyLVx1MDAzZWZsYWdzLCBLVk1fRElSVFlfR0ZOX0ZfUkVTRVQpO1xuJiM0MztcdFx0aWR4JiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNvdW50ID0gaWR4IC0gKnJpbmdfaWR4O1xuJiM0MztcdCpyaW5nX2lkeCA9IGlkeDtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJlZCA9IGt2bV92bV9yZXNldF9kaXJ0eV9yaW5nKHZjcHUtXHUwMDNldm0pO1xuJiM0MztcbiYjNDM7XHQvKiBDbGVhcmVkIHBhZ2VzIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBjb2xsZWN0ZWQsIGFzIEtWTSBpcyBzdXBwb3NlZCB0b1xuJiM0MztcdCAqIGNsZWFyIG9ubHkgdGhlIGVudHJpZXMgdGhhdCBoYXZlIGJlZW4gaGFydmVzdGVkLCBhbmQgYSBzaW5nbGUgdmNwdSB3aWxsXG4mIzQzO1x0ICogaGFydmVzdCBhdCB0aW1lLlxuJiM0MztcdCAqL1xuJiM0MztcdFRFU1RfQVNTRVJUKGNsZWFyZWQgPT0gY291bnQsIFwmIzM0O1Jlc2V0IGRpcnR5IHBhZ2VzICgldSkgbWlzbWF0Y2ggXCYjMzQ7XG4mIzQzO1x0XHQgICAgXCYjMzQ7d2l0aCBjb2xsZWN0ZWQgKCV1KVwmIzM0OywgY2xlYXJlZCwgY291bnQpO1xuJiM0MztcbiYjNDM7XHQqdHMgPSB0aW1lc3BlY19hZGQoKnRzLCB0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KSk7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNmNvbGxlY3QpO1xuJiM0Mzt9XG4gXG4gc3RhdGljIHZvaWQgdmNwdV93b3JrZXIoc3RydWN0IG1lbXN0cmVzc192Y3B1X2FyZ3MgKnZjcHVfYXJncylcbiB7XG5AQCAtNDMsMjQgJiM0Mzs4OCw0NSBAQCBzdGF0aWMgdm9pZCB2Y3B1X3dvcmtlcihzdHJ1Y3QgbWVtc3RyZXNzX3ZjcHVfYXJncyAqdmNwdV9hcmdzKVxuIFx0c3RydWN0IHRpbWVzcGVjIHRzX2RpZmY7XG4gXHRzdHJ1Y3QgdGltZXNwZWMgdG90YWwgPSAoc3RydWN0IHRpbWVzcGVjKXswfTtcbiBcdHN0cnVjdCB0aW1lc3BlYyBhdmc7XG4mIzQzO1x0Ym9vbCB1c2VfZGlydHlfcmluZyA9ICEhdmNwdS1cdTAwM2V2bS1cdTAwM2VkaXJ0eV9yaW5nX3NpemU7XG4mIzQzO1x0dTMyIHJpbmdfaWR4ID0gMDtcbiBcdGludCByZXQ7XG4gXG4gXHRydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbiBcbiBcdHdoaWxlICghUkVBRF9PTkNFKGhvc3RfcXVpdCkpIHtcbiBcdFx0aW50IGN1cnJlbnRfaXRlcmF0aW9uID0gUkVBRF9PTkNFKGl0ZXJhdGlvbik7XG4mIzQzO1x0XHRzdHJ1Y3QgdGltZXNwZWMgY29sbGVjdCA9IChzdHJ1Y3QgdGltZXNwZWMpezB9O1xuIFxuIFx0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2c3RhcnQpO1xuLVx0XHRyZXQgPSBfdmNwdV9ydW4odmNwdSk7XG4mIzQzO1xuJiM0MztcdFx0ZG8ge1xuJiM0MztcdFx0XHRyZXQgPSBfdmNwdV9ydW4odmNwdSk7XG4mIzQzO1x0XHRcdGlmICghdXNlX2RpcnR5X3JpbmcpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0XHRkaXJ0eV9yaW5nX2NvbGxlY3QodmNwdSwgXHUwMDI2cmluZ19pZHgsIFx1MDAyNmNvbGxlY3QpO1xuJiM0MztcdFx0fSB3aGlsZSAoIXJldCBcdTAwMjZcdTAwMjYgcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX0RJUlRZX1JJTkdfRlVMTCk7XG4mIzQzO1xuIFx0XHR0c19kaWZmID0gdGltZXNwZWNfZWxhcHNlZChzdGFydCk7XG4gXG4mIzQzO1x0XHRpZiAodXNlX2RpcnR5X3JpbmcpIHtcbiYjNDM7XHRcdFx0dHNfZGlmZiA9IHRpbWVzcGVjX3N1Yih0c19kaWZmLCBjb2xsZWN0KTtcbiYjNDM7XHRcdFx0dmNwdV9kaXJ0eV9yaW5nX2NvbGxlY3RbdmNwdV9pZHhdID0gY29sbGVjdDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdFRFU1RfQVNTRVJUKHJldCA9PSAwLCBcJiMzNDt2Y3B1X3J1biBmYWlsZWQ6ICVkXCYjMzQ7LCByZXQpO1xuIFx0XHRURVNUX0FTU0VSVChnZXRfdWNhbGwodmNwdSwgTlVMTCkgPT0gVUNBTExfU1lOQyxcbiBcdFx0XHQgICAgXCYjMzQ7SW52YWxpZCBndWVzdCBzeW5jIHN0YXR1czogZXhpdF9yZWFzb249JXNcJiMzNDssXG4gXHRcdFx0ICAgIGV4aXRfcmVhc29uX3N0cihydW4tXHUwMDNlZXhpdF9yZWFzb24pKTtcbiBcbiBcdFx0cHJfZGVidWcoXCYjMzQ7R290IHN5bmMgZXZlbnQgZnJvbSB2Q1BVICVkXFxuXCYjMzQ7LCB2Y3B1X2lkeCk7XG4tXHRcdHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW3ZjcHVfaWR4XSA9IGN1cnJlbnRfaXRlcmF0aW9uO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE1ha2Ugc3VyZSB2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbiB3cml0ZSBoYXBwZW5zIGJlZm9yZVxuJiM0MztcdFx0ICogdXBkYXRpbmcgY3VycmVudCBpdGVyYXRpb24uICBQYWlycyB3aXRoIHJ1bl90ZXN0LCBhZnRlciBwb3B1bGF0aW5nLi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25bdmNwdV9pZHhdLFxuJiM0MztcdFx0XHRcdCAgY3VycmVudF9pdGVyYXRpb24pO1xuIFx0XHRwcl9kZWJ1ZyhcJiMzNDt2Q1BVICVkIHVwZGF0ZWQgbGFzdCBjb21wbGV0ZWQgaXRlcmF0aW9uIHRvICVkXFxuXCYjMzQ7LFxuIFx0XHRcdCB2Y3B1X2lkeCwgdmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25bdmNwdV9pZHhdKTtcbiBcbkBAIC0xMTksNyAmIzQzOzE4NSw4IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXG4gXHR2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSxcbiBcdFx0XHRcdCBwLVx1MDAzZXNsb3RzLCBwLVx1MDAzZWJhY2tpbmdfc3JjLFxuLVx0XHRcdFx0IHAtXHUwMDNlcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2Vzcyk7XG4mIzQzO1x0XHRcdFx0IHAtXHUwMDNlcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcyxcbiYjNDM7XHRcdFx0XHQgZGlydHlfcmluZ19zaXplKTtcbiBcbiBcdG1lbXN0cmVzc19zZXRfd3JpdGVfcGVyY2VudCh2bSwgcC1cdTAwM2V3cml0ZV9wZXJjZW50KTtcbiBcbkBAIC0xMjgsNyAmIzQzOzE5NSw4IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRob3N0X251bV9wYWdlcyA9IHZtX251bV9ob3N0X3BhZ2VzKG1vZGUsIGd1ZXN0X251bV9wYWdlcyk7XG4gXHRwYWdlc19wZXJfc2xvdCA9IGhvc3RfbnVtX3BhZ2VzIC8gcC1cdTAwM2VzbG90cztcbiBcbi1cdGJpdG1hcHMgPSBtZW1zdHJlc3NfYWxsb2NfYml0bWFwcyhwLVx1MDAzZXNsb3RzLCBwYWdlc19wZXJfc2xvdCk7XG4mIzQzO1x0aWYgKCFkaXJ0eV9yaW5nX3NpemUpXG4mIzQzO1x0XHRiaXRtYXBzID0gbWVtc3RyZXNzX2FsbG9jX2JpdG1hcHMocC1cdTAwM2VzbG90cywgcGFnZXNfcGVyX3Nsb3QpO1xuIFxuIFx0aWYgKGRpcnR5X2xvZ19tYW51YWxfY2FwcylcbiBcdFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9NQU5VQUxfRElSVFlfTE9HX1BST1RFQ1QyLFxuQEAgLTEzOSw4ICYjNDM7MjA3LDEwIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRob3N0X3F1aXQgPSBmYWxzZTtcbiBcbiBcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZzdGFydCk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW2ldID0gLTE7XG4mIzQzO1x0XHR2Y3B1X2RpcnR5X3JpbmdfY29sbGVjdFtpXSA9IChzdHJ1Y3QgdGltZXNwZWMpezB9O1xuJiM0MztcdH1cbiBcbiBcdC8qXG4gXHQgKiBVc2UgMTAwJSB3cml0ZXMgZHVyaW5nIHRoZSBwb3B1bGF0aW9uIHBoYXNlIHRvIGVuc3VyZSBhbGxcbkBAIC0xODUsNyAmIzQzOzI1NSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXG4gXHRcdHByX2RlYnVnKFwmIzM0O1N0YXJ0aW5nIGl0ZXJhdGlvbiAlZFxcblwmIzM0OywgaXRlcmF0aW9uKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0d2hpbGUgKFJFQURfT05DRSh2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbltpXSlcbiYjNDM7XHRcdFx0d2hpbGUgKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25baV0pXG4gXHRcdFx0ICAgICAgICE9IGl0ZXJhdGlvbilcbiBcdFx0XHRcdDtcbiBcdFx0fVxuQEAgLTE5NSw2ICYjNDM7MjY1LDIxIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRcdHByX2luZm8oXCYjMzQ7SXRlcmF0aW9uICVkIGRpcnR5IG1lbW9yeSB0aW1lOiAlbGQuJS45bGRzXFxuXCYjMzQ7LFxuIFx0XHRcdGl0ZXJhdGlvbiwgdHNfZGlmZi50dl9zZWMsIHRzX2RpZmYudHZfbnNlYyk7XG4gXG4mIzQzO1x0XHRpZiAoZGlydHlfcmluZ19zaXplKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB0aW1lc3BlYyBpdGVyYXRpb25fc3VtID0gKHN0cnVjdCB0aW1lc3BlYyl7MH07XG4mIzQzO1xuJiM0MztcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFx0aXRlcmF0aW9uX3N1bSA9IHRpbWVzcGVjX2FkZChpdGVyYXRpb25fc3VtLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgdmNwdV9kaXJ0eV9yaW5nX2NvbGxlY3RbaV0pO1xuJiM0MztcbiYjNDM7XHRcdFx0cHJfaW5mbyhcJiMzNDtJdGVyYXRpb24gJWQgY2xlYXIgZGlydHkgcmluZyB0aW1lOiAlbGQuJS45bGRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdGl0ZXJhdGlvbiwgaXRlcmF0aW9uX3N1bS50dl9zZWMsIGl0ZXJhdGlvbl9zdW0udHZfbnNlYyk7XG4mIzQzO1xuJiM0MztcdFx0XHRjbGVhcl9kaXJ0eV9sb2dfdG90YWwgPSB0aW1lc3BlY19hZGQoY2xlYXJfZGlydHlfbG9nX3RvdGFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgaXRlcmF0aW9uX3N1bSk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNnN0YXJ0KTtcbiBcdFx0bWVtc3RyZXNzX2dldF9kaXJ0eV9sb2codm0sIGJpdG1hcHMsIHAtXHUwMDNlc2xvdHMpO1xuIFx0XHR0c19kaWZmID0gdGltZXNwZWNfZWxhcHNlZChzdGFydCk7XG5AQCAtMjM4LDE5ICYjNDM7MzIzLDIyIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRob3N0X3F1aXQgPSB0cnVlO1xuIFx0bWVtc3RyZXNzX2pvaW5fdmNwdV90aHJlYWRzKG5yX3ZjcHVzKTtcbiBcbi1cdGF2ZyA9IHRpbWVzcGVjX2RpdihnZXRfZGlydHlfbG9nX3RvdGFsLCBwLVx1MDAzZWl0ZXJhdGlvbnMpO1xuLVx0cHJfaW5mbyhcJiMzNDtHZXQgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxcblwmIzM0Oyxcbi1cdFx0cC1cdTAwM2VpdGVyYXRpb25zLCBnZXRfZGlydHlfbG9nX3RvdGFsLnR2X3NlYyxcbi1cdFx0Z2V0X2RpcnR5X2xvZ190b3RhbC50dl9uc2VjLCBhdmcudHZfc2VjLCBhdmcudHZfbnNlYyk7XG4mIzQzO1x0aWYgKCFkaXJ0eV9yaW5nX3NpemUpIHtcbiYjNDM7XHRcdGF2ZyA9IHRpbWVzcGVjX2RpdihnZXRfZGlydHlfbG9nX3RvdGFsLCBwLVx1MDAzZWl0ZXJhdGlvbnMpO1xuJiM0MztcdFx0cHJfaW5mbyhcJiMzNDtHZXQgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cC1cdTAwM2VpdGVyYXRpb25zLCBnZXRfZGlydHlfbG9nX3RvdGFsLnR2X3NlYyxcbiYjNDM7XHRcdFx0Z2V0X2RpcnR5X2xvZ190b3RhbC50dl9uc2VjLCBhdmcudHZfc2VjLCBhdmcudHZfbnNlYyk7XG4mIzQzO1x0fVxuIFxuLVx0aWYgKGRpcnR5X2xvZ19tYW51YWxfY2Fwcykge1xuJiM0MztcdGlmIChkaXJ0eV9sb2dfbWFudWFsX2NhcHMgfHwgZGlydHlfcmluZ19zaXplKSB7XG4gXHRcdGF2ZyA9IHRpbWVzcGVjX2RpdihjbGVhcl9kaXJ0eV9sb2dfdG90YWwsIHAtXHUwMDNlaXRlcmF0aW9ucyk7XG4gXHRcdHByX2luZm8oXCYjMzQ7Q2xlYXIgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxcblwmIzM0OyxcbiBcdFx0XHRwLVx1MDAzZWl0ZXJhdGlvbnMsIGNsZWFyX2RpcnR5X2xvZ190b3RhbC50dl9zZWMsXG4gXHRcdFx0Y2xlYXJfZGlydHlfbG9nX3RvdGFsLnR2X25zZWMsIGF2Zy50dl9zZWMsIGF2Zy50dl9uc2VjKTtcbiBcdH1cbiBcbi1cdG1lbXN0cmVzc19mcmVlX2JpdG1hcHMoYml0bWFwcywgcC1cdTAwM2VzbG90cyk7XG4mIzQzO1x0aWYgKCFkaXJ0eV9yaW5nX3NpemUpXG4mIzQzO1x0XHRtZW1zdHJlc3NfZnJlZV9iaXRtYXBzKGJpdG1hcHMsIHAtXHUwMDNlc2xvdHMpO1xuIFx0bWVtc3RyZXNzX2Rlc3Ryb3lfdm0odm0pO1xuIH1cbiBcbkBAIC0yNTksMTEgJiM0MzszNDcsMTUgQEAgc3RhdGljIHZvaWQgaGVscChjaGFyICpuYW1lKVxuIFx0cHV0cyhcJiMzNDtcJiMzNDspO1xuIFx0cHJpbnRmKFwmIzM0O3VzYWdlOiAlcyBbLWhdIFstYV0gWy1pIGl0ZXJhdGlvbnNdIFstcCBvZmZzZXRdIFstZ10gXCYjMzQ7XG4gXHQgICAgICAgXCYjMzQ7Wy1tIG1vZGVdIFstbl0gWy1iIHZjcHUgYnl0ZXNdIFstdiB2Y3B1c10gWy1vXSBbLXIgcmFuZG9tIHNlZWQgXSBbLXMgbWVtIHR5cGVdXCYjMzQ7XG4tXHQgICAgICAgXCYjMzQ7Wy14IG1lbXNsb3RzXSBbLXcgcGVyY2VudGFnZV0gWy1jIHBoeXNpY2FsIGNwdXMgdG8gcnVuIHRlc3Qgb25dXFxuXCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHQgICAgICAgXCYjMzQ7Wy14IG1lbXNsb3RzXSBbLXcgcGVyY2VudGFnZV0gWy1jIHBoeXNpY2FsIGNwdXMgdG8gcnVuIHRlc3Qgb25dIFxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDtbLWQgZGlydHktcmluZyBlbnRyaWVzXVxcblwmIzM0OywgbmFtZSk7XG4gXHRwdXRzKFwmIzM0O1wmIzM0Oyk7XG4gXHRwcmludGYoXCYjMzQ7IC1hOiBhY2Nlc3MgbWVtb3J5IHJhbmRvbWx5IHJhdGhlciB0aGFuIGluIG9yZGVyLlxcblwmIzM0Oyk7XG4gXHRwcmludGYoXCYjMzQ7IC1pOiBzcGVjaWZ5IGl0ZXJhdGlvbiBjb3VudHMgKGRlZmF1bHQ6ICVcJiMzNDtQUkl1NjRcJiMzNDspXFxuXCYjMzQ7LFxuIFx0ICAgICAgIFRFU1RfSE9TVF9MT09QX04pO1xuJiM0MztcdHByaW50ZihcJiMzNDsgLWQ6IGVuYWJsZSBkaXJ0eS1yaW5nIGZvciB0cmFja2luZyBkaXJ0eSBwYWdlcywgd2l0aCBnaXZlbiBlbnRyaWVzIGNvdW50LlxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgIElmIG5vbi16ZXJvLCB3aWxsIGNhdXNlIGRpcnR5LXJpbmcgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mXFxuXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0OyAgICAgZGlydHktYml0bWFwLiBNdXN0IGJlIGEgcG93ZXIgb2YgdHdvLlxcblwmIzM0Oyk7XG4gXHRwcmludGYoXCYjMzQ7IC1nOiBEbyBub3QgZW5hYmxlIEtWTV9DQVBfTUFOVUFMX0RJUlRZX0xPR19QUk9URUNUMi4gVGhpc1xcblwmIzM0O1xuIFx0ICAgICAgIFwmIzM0OyAgICAgbWFrZXMgS1ZNX0dFVF9ESVJUWV9MT0cgY2xlYXIgdGhlIGRpcnR5IGxvZyAoaS5lLlxcblwmIzM0O1xuIFx0ICAgICAgIFwmIzM0OyAgICAgS1ZNX0RJUlRZX0xPR19NQU5VQUxfUFJPVEVDVF9FTkFCTEUgaXMgbm90IGVuYWJsZWQpXFxuXCYjMzQ7XG5AQCAtMzA5LDYgJiM0Mzs0MDEsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHQud3JpdGVfcGVyY2VudCA9IDEwMCxcbiBcdH07XG4gXHRpbnQgb3B0O1xuJiM0MztcdHU2NCB0bXA7XG4gXG4gXHQvKiBPdmVycmlkZSB0aGUgc2VlZCB0byBiZSBkZXRlcm1pbmlzdGljIGJ5IGRlZmF1bHQuICovXG4gXHRndWVzdF9yYW5kb21fc2VlZCA9IDE7XG5AQCAtMzIwLDcgJiM0Mzs0MTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0Z3Vlc3RfbW9kZXNfYXBwZW5kX2RlZmF1bHQoKTtcbiBcbi1cdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O2FiOmM6ZWdoaTptOm5vcDpyOnM6djp4Onc6XCYjMzQ7KSkgIT0gLTEpIHtcbiYjNDM7XHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDthYjpjOmQ6ZWdoaTptOm5vcDpyOnM6djp4Onc6XCYjMzQ7KSkgIT0gLTEpIHtcbiBcdFx0c3dpdGNoIChvcHQpIHtcbiBcdFx0Y2FzZSAmIzM5O2EmIzM5OzpcbiBcdFx0XHRwLnJhbmRvbV9hY2Nlc3MgPSB0cnVlO1xuQEAgLTMzMSw2ICYjNDM7NDI0LDEzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdGNhc2UgJiMzOTtjJiMzOTs6XG4gXHRcdFx0cGNwdV9saXN0ID0gb3B0YXJnO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O2QmIzM5OzpcbiYjNDM7XHRcdFx0dG1wID0gcGFyc2Vfc2l6ZShvcHRhcmcpO1xuJiM0MztcdFx0XHRURVNUX0FTU0VSVCh0bXAsIFwmIzM0O0RpcnR5LXJpbmcgc2l6ZSBzaG91bGQgYmUgXHUwMDNlIDBcJiMzNDspO1xuJiM0MztcdFx0XHRURVNUX0FTU0VSVCh0bXAgXHUwMDNjPSBVSU5UMzJfTUFYIC8gc2l6ZW9mKHN0cnVjdCBrdm1fZGlydHlfZ2ZuKSxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7RGlydHktcmluZyBzaXplICglbHUpIGlzIHRvbyBsYXJnZS5cJiMzNDssIHRtcCk7XG4mIzQzO1x0XHRcdGRpcnR5X3Jpbmdfc2l6ZSA9IHRtcCAqIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbik7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7ZSYjMzk7OlxuIFx0XHRcdC8qICYjMzk7ZSYjMzk7IGlzIGZvciBldmlsLiAqL1xuIFx0XHRcdHJ1bl92Y3B1c193aGlsZV9kaXNhYmxpbmdfZGlydHlfbG9nZ2luZyA9IHRydWU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbWVtc3RyZXNzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9tZW1zdHJlc3MuaFxuaW5kZXggMGQxZDYyMzBjYzA1MS4uZTE3ZjM0NDk3OGFmNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL21lbXN0cmVzcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9tZW1zdHJlc3MuaFxuQEAgLTU4LDcgJiM0Mzs1OCw4IEBAIGV4dGVybiBzdHJ1Y3QgbWVtc3RyZXNzX2FyZ3MgbWVtc3RyZXNzX2FyZ3M7XG4gc3RydWN0IGt2bV92bSAqbWVtc3RyZXNzX2NyZWF0ZV92bShlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgaW50IG5yX3ZjcHVzLFxuIFx0XHRcdFx0ICAgdTY0IHZjcHVfbWVtb3J5X2J5dGVzLCBpbnQgc2xvdHMsXG4gXHRcdFx0XHQgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIGJhY2tpbmdfc3JjLFxuLVx0XHRcdFx0ICAgYm9vbCBwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKTtcbiYjNDM7XHRcdFx0XHQgICBib29sIHBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsXG4mIzQzO1x0XHRcdFx0ICAgdTMyIGRpcnR5X3Jpbmdfc2l6ZSk7XG4gdm9pZCBtZW1zdHJlc3NfZGVzdHJveV92bShzdHJ1Y3Qga3ZtX3ZtICp2bSk7XG4gXG4gdm9pZCBtZW1zdHJlc3Nfc2V0X3dyaXRlX3BlcmNlbnQoc3RydWN0IGt2bV92bSAqdm0sIHUzMiB3cml0ZV9wZXJjZW50KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbmluZGV4IDE5NWYzZmRhZTFlMzkuLmYxZWJkNzEyMjc2M2EgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xuQEAgLTE2NywxMCAmIzQzOzE2NywyMyBAQCB1bnNpZ25lZCBpbnQga3ZtX2NoZWNrX2NhcChsb25nIGNhcClcbiBcbiB2b2lkIHZtX2VuYWJsZV9kaXJ0eV9yaW5nKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgcmluZ19zaXplKVxuIHtcbi1cdGlmICh2bV9jaGVja19jYXAodm0sIEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfQUNRX1JFTCkpXG4tXHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfQUNRX1JFTCwgcmluZ19zaXplKTtcbi1cdGVsc2Vcbi1cdFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9ESVJUWV9MT0dfUklORywgcmluZ19zaXplKTtcbiYjNDM7XHRsb25nIGNhcCA9IEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfQUNRX1JFTDtcbiYjNDM7XHRpbnQgbWF4X3NpemUgPSB2bV9jaGVja19jYXAodm0sIGNhcCk7XG4mIzQzO1xuJiM0MztcdGlmICghbWF4X3NpemUpIHtcbiYjNDM7XHRcdGNhcCA9IEtWTV9DQVBfRElSVFlfTE9HX1JJTkc7XG4mIzQzO1x0XHRtYXhfc2l6ZSA9IHZtX2NoZWNrX2NhcCh2bSwgY2FwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdFRFU1RfQVNTRVJUKG1heF9zaXplIFx1MDAzZSAwLCBcJiMzNDtEaXJ0eS1yaW5nIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBrZXJuZWxcXG5cJiMzNDspO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJpbmdfc2l6ZSBcdTAwM2M9IG1heF9zaXplIFx1MDAyNlx1MDAyNiBpc19wb3dlcl9vZl8yKHJpbmdfc2l6ZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcmluZ19zaXplIFx1MDAzZT0gZ2V0cGFnZXNpemUoKSxcbiYjNDM7XHRcdCAgICBcJiMzNDtJbnZhbGlkIGRpcnR5LXJpbmcgc2l6ZTogU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvIFwmIzM0O1xuJiM0MztcdFx0ICAgIFwmIzM0O2JldHdlZW4gJWx1IGFuZCAlbHUgZW50cmllc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgICBnZXRwYWdlc2l6ZSgpIC8gc2l6ZW9mKHN0cnVjdCBrdm1fZGlydHlfZ2ZuKSxcbiYjNDM7XHRcdCAgICBtYXhfc2l6ZSAvIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbikpO1xuJiM0MztcbiYjNDM7XHR2bV9lbmFibGVfY2FwKHZtLCBjYXAsIHJpbmdfc2l6ZSk7XG4gXHR2bS1cdTAwM2VkaXJ0eV9yaW5nX3NpemUgPSByaW5nX3NpemU7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXG5pbmRleCA2ZGNkMTU5MTBhMDYwLi5jOWY4NTUzM2ZmZmZkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuQEAgLTEyMSwxMCAmIzQzOzEyMSwzNSBAQCB2b2lkIG1lbXN0cmVzc19zZXR1cF92Y3B1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG5yX3ZjcHVzLFxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBrdm1fdm0gKm1lbXN0cmVzc192bV9jcmVhdGVfd2l0aF92Y3B1cyhzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgdTMyIG5yX3ZjcHVzLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIHU2NCBleHRyYV9tZW1fcGFnZXMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgdm9pZCAqZ3Vlc3RfY29kZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW10sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgdTMyIGRpcnR5X3Jpbmdfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVCghbnJfdmNwdXMgfHwgdmNwdXMsIFwmIzM0O011c3QgcHJvdmlkZSB2Q1BVIGFycmF5XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0dm0gPSBfX3ZtX2NyZWF0ZShzaGFwZSwgbnJfdmNwdXMsIGV4dHJhX21lbV9wYWdlcyk7XG4mIzQzO1xuJiM0MztcdGlmIChkaXJ0eV9yaW5nX3NpemUpXG4mIzQzO1x0XHR2bV9lbmFibGVfZGlydHlfcmluZyh2bSwgZGlydHlfcmluZ19zaXplKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7ICYjNDM7JiM0MztpKVxuJiM0MztcdFx0dmNwdXNbaV0gPSB2bV92Y3B1X2FkZCh2bSwgaSwgZ3Vlc3RfY29kZSk7XG4mIzQzO1xuJiM0MztcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcbiYjNDM7XHRyZXR1cm4gdm07XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGt2bV92bSAqbWVtc3RyZXNzX2NyZWF0ZV92bShlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgaW50IG5yX3ZjcHVzLFxuIFx0XHRcdFx0ICAgdTY0IHZjcHVfbWVtb3J5X2J5dGVzLCBpbnQgc2xvdHMsXG4gXHRcdFx0XHQgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIGJhY2tpbmdfc3JjLFxuLVx0XHRcdFx0ICAgYm9vbCBwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKVxuJiM0MztcdFx0XHRcdCAgIGJvb2wgcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcyxcbiYjNDM7XHRcdFx0XHQgICB1MzIgZGlydHlfcmluZ19zaXplKVxuIHtcbiBcdHN0cnVjdCBtZW1zdHJlc3NfYXJncyAqYXJncyA9IFx1MDAyNm1lbXN0cmVzc19hcmdzO1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG5AQCAtMTY3LDkgJiM0MzsxOTIsMTAgQEAgc3RydWN0IGt2bV92bSAqbWVtc3RyZXNzX2NyZWF0ZV92bShlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgaW50IG5yX3ZjcHVzLFxuIFx0ICogVGhlIG1lbW9yeSBpcyBhbHNvIGFkZGVkIHRvIG1lbXNsb3QgMCwgYnV0IHRoYXQmIzM5O3MgYSBiZW5pZ24gc2lkZVxuIFx0ICogZWZmZWN0IGFzIEtWTSBhbGxvd3MgYWxpYXNpbmcgSFZBcyBpbiBtZXNsb3RzLlxuIFx0ICovXG4tXHR2bSA9IF9fdm1fY3JlYXRlX3dpdGhfdmNwdXMoVk1fU0hBUEUobW9kZSksIG5yX3ZjcHVzLFxuLVx0XHRcdFx0ICAgIHNsb3QwX3BhZ2VzICYjNDM7IGd1ZXN0X251bV9wYWdlcyxcbi1cdFx0XHRcdCAgICBtZW1zdHJlc3NfZ3Vlc3RfY29kZSwgdmNwdXMpO1xuJiM0MztcdHZtID0gbWVtc3RyZXNzX3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKFZNX1NIQVBFKG1vZGUpLCBucl92Y3B1cyxcbiYjNDM7XHRcdFx0XHRcdCAgICBzbG90MF9wYWdlcyAmIzQzOyBndWVzdF9udW1fcGFnZXMsXG4mIzQzO1x0XHRcdFx0XHQgICAgbWVtc3RyZXNzX2d1ZXN0X2NvZGUsIHZjcHVzLFxuJiM0MztcdFx0XHRcdFx0ICAgIGRpcnR5X3Jpbmdfc2l6ZSk7XG4gXG4gXHRhcmdzLVx1MDAzZXZtID0gdm07XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfbW9kaWZpY2F0aW9uX3N0cmVzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9tb2RpZmljYXRpb25fc3RyZXNzX3Rlc3QuY1xuaW5kZXggOWM3NTc4YTA5OGMzZS4uM2ExYmU5Yjc1ZTAxZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9tb2RpZmljYXRpb25fc3RyZXNzX3Rlc3QuY1xuQEAgLTkwLDcgJiM0Mzs5MCw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXG4gXHR2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSwgMSxcbiBcdFx0XHRcdCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbi1cdFx0XHRcdCBwLVx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpO1xuJiM0MztcdFx0XHRcdCBwLVx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsIDApO1xuICNpZmRlZiBfX3g4Nl82NF9fXG4gXHRpZiAocC1cdTAwM2VkaXNhYmxlX3Nsb3RfemFwX3F1aXJrKVxuIFx0XHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0RJU0FCTEVfUVVJUktTMiwgS1ZNX1g4Nl9RVUlSS19TTE9UX1pBUF9BTEwpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZGlydHlfbG9nX3BhZ2Vfc3BsaXR0aW5nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZGlydHlfbG9nX3BhZ2Vfc3BsaXR0aW5nX3Rlc3QuY1xuaW5kZXggMzg4YmE0MTAxZjk3My4uNjYxZTlhYmZiNDM5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZGlydHlfbG9nX3BhZ2Vfc3BsaXR0aW5nX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9kaXJ0eV9sb2dfcGFnZV9zcGxpdHRpbmdfdGVzdC5jXG5AQCAtMTAxLDcgJiM0MzsxMDEsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqdW51c2VkKVxuIFx0c3RydWN0IGt2bV9wYWdlX3N0YXRzIHN0YXRzX3JlcG9wdWxhdGVkO1xuIFxuIFx0dm0gPSBtZW1zdHJlc3NfY3JlYXRlX3ZtKG1vZGUsIFZDUFVTLCBndWVzdF9wZXJjcHVfbWVtX3NpemUsXG4tXHRcdFx0XHQgU0xPVFMsIGJhY2tpbmdfc3JjLCBmYWxzZSk7XG4mIzQzO1x0XHRcdFx0IFNMT1RTLCBiYWNraW5nX3NyYywgZmFsc2UsIDApO1xuIFxuIFx0Z3Vlc3RfbnVtX3BhZ2VzID0gKFZDUFVTICogZ3Vlc3RfcGVyY3B1X21lbV9zaXplKSBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdDtcbiBcdGd1ZXN0X251bV9wYWdlcyA9IHZtX2FkanVzdF9udW1fZ3Vlc3RfcGFnZXMobW9kZSwgZ3Vlc3RfbnVtX3BhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gd2hpY2ggYXJlIHVzZXJzcGFjZSB0ZXN0IHByb2dyYW1zLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMTg0YTg2ZGE4MGQ1MWMzMjllMDgxN2VlMGFiMzdjYmZhMWJkMTI2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMDE6MDY6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FjY2Vzc190cmFja2luZ19wZXJmX3Rlc3QuYwppbmRleCA0NDE1Yzk0YjI4NjYwLi5mNzhkNTYyNjVkODkzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hY2Nlc3NfdHJhY2tpbmdfcGVyZl90ZXN0LmMKQEAgLTQwOSw3ICYjNDM7NDA5LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZykKIAlpbnQgbnJfdmNwdXMgPSBwYXJhbXMtJmd0O25yX3ZjcHVzOwogCiAJdm0gPSBtZW1zdHJlc3NfY3JlYXRlX3ZtKG1vZGUsIG5yX3ZjcHVzLCBwYXJhbXMtJmd0O3ZjcHVfbWVtb3J5X2J5dGVzLCAxLAotCQkJCSBwYXJhbXMtJmd0O2JhY2tpbmdfc3JjLCAhb3ZlcmxhcF9tZW1vcnlfYWNjZXNzKTsKJiM0MzsJCQkJIHBhcmFtcy0mZ3Q7YmFja2luZ19zcmMsICFvdmVybGFwX21lbW9yeV9hY2Nlc3MsIDApOwogCiAJLyoKIAkgKiBJZiBndWVzdF9wYWdlX3NpemUgaXMgbGFyZ2VyIHRoYW4gdGhlIGhvc3QmIzM5O3MgcGFnZSBzaXplLCB0aGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuYwppbmRleCAzMDJjNDkyM2QwOTMwLi45MjI0NmUyN2VmNzQ0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jCkBAIC0xNjIsNyAmIzQzOzE2Miw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpCiAJaW50IGksIG51bV91ZmZkcyA9IDA7CiAKIAl2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSwgMSwKLQkJCQkgcC0mZ3Q7c3JjX3R5cGUsIHAtJmd0O3BhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpOwomIzQzOwkJCQkgcC0mZ3Q7c3JjX3R5cGUsIHAtJmd0O3BhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsIDApOwogCiAJZGVtYW5kX3BhZ2luZ19zaXplID0gZ2V0X2JhY2tpbmdfc3JjX3BhZ2VzeihwLSZndDtzcmNfdHlwZSk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jCmluZGV4IGVmNzc5ZmE5MTgyN2MuLjZlODBkMzZjYzYxYTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuYwpAQCAtMTMsNiAmIzQzOzEzLDcgQEAKICNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG1hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vYmFycmllci5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CkBAIC0yOSw5ICYjNDM7MzAsNTMgQEAgc3RhdGljIGJvb2wgcnVuX3ZjcHVzX3doaWxlX2Rpc2FibGluZ19kaXJ0eV9sb2dnaW5nOwogCiAvKiBIb3N0IHZhcmlhYmxlcyAqLwogc3RhdGljIHU2NCBkaXJ0eV9sb2dfbWFudWFsX2NhcHM7CiYjNDM7c3RhdGljIHUzMiBkaXJ0eV9yaW5nX3NpemU7CiBzdGF0aWMgYm9vbCBob3N0X3F1aXQ7CiBzdGF0aWMgaW50IGl0ZXJhdGlvbjsKIHN0YXRpYyBpbnQgdmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25bS1ZNX01BWF9WQ1BVU107CiYjNDM7c3RhdGljIHN0cnVjdCB0aW1lc3BlYyB2Y3B1X2RpcnR5X3JpbmdfY29sbGVjdFtLVk1fTUFYX1ZDUFVTXTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkaXJ0eV9yaW5nX2NvbGxlY3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJpbmdfaWR4LAomIzQzOwkJCQlzdHJ1Y3QgdGltZXNwZWMgKnRzKQomIzQzO3sKJiM0MzsJc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBjb2xsZWN0ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKJiM0MzsJc3RydWN0IHRpbWVzcGVjIHN0YXJ0OwomIzQzOwlzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZGlydHlfZ2ZucyA9IHZjcHVfbWFwX2RpcnR5X3JpbmcodmNwdSk7CiYjNDM7CXUzMiBpZHggPSAqcmluZ19pZHg7CiYjNDM7CXUzMiByaW5nX3NpemUgPSB2Y3B1LSZndDt2bS0mZ3Q7ZGlydHlfcmluZ19zaXplIC8gc2l6ZW9mKHN0cnVjdCBrdm1fZGlydHlfZ2ZuKTsKJiM0MzsJaW50IGNsZWFyZWQsIGNvdW50OwomIzQzOwomIzQzOwlwdGhyZWFkX211dGV4X2xvY2soJmFtcDtjb2xsZWN0KTsKJiM0MzsKJiM0MzsJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7c3RhcnQpOwomIzQzOwomIzQzOwl3aGlsZSAodHJ1ZSkgewomIzQzOwkJc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmN1cjsKJiM0MzsKJiM0MzsJCWN1ciA9ICZhbXA7ZGlydHlfZ2Zuc1tpZHggJSByaW5nX3NpemVdOwomIzQzOwkJaWYgKHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtjdXItJmd0O2ZsYWdzKSAhPSBLVk1fRElSVFlfR0ZOX0ZfRElSVFkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2N1ci0mZ3Q7ZmxhZ3MsIEtWTV9ESVJUWV9HRk5fRl9SRVNFVCk7CiYjNDM7CQlpZHgmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CWNvdW50ID0gaWR4IC0gKnJpbmdfaWR4OwomIzQzOwkqcmluZ19pZHggPSBpZHg7CiYjNDM7CiYjNDM7CWNsZWFyZWQgPSBrdm1fdm1fcmVzZXRfZGlydHlfcmluZyh2Y3B1LSZndDt2bSk7CiYjNDM7CiYjNDM7CS8qIENsZWFyZWQgcGFnZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGNvbGxlY3RlZCwgYXMgS1ZNIGlzIHN1cHBvc2VkIHRvCiYjNDM7CSAqIGNsZWFyIG9ubHkgdGhlIGVudHJpZXMgdGhhdCBoYXZlIGJlZW4gaGFydmVzdGVkLCBhbmQgYSBzaW5nbGUgdmNwdSB3aWxsCiYjNDM7CSAqIGhhcnZlc3QgYXQgdGltZS4KJiM0MzsJICovCiYjNDM7CVRFU1RfQVNTRVJUKGNsZWFyZWQgPT0gY291bnQsICYjMzQ7UmVzZXQgZGlydHkgcGFnZXMgKCV1KSBtaXNtYXRjaCAmIzM0OwomIzQzOwkJICAgICYjMzQ7d2l0aCBjb2xsZWN0ZWQgKCV1KSYjMzQ7LCBjbGVhcmVkLCBjb3VudCk7CiYjNDM7CiYjNDM7CSp0cyA9IHRpbWVzcGVjX2FkZCgqdHMsIHRpbWVzcGVjX2VsYXBzZWQoc3RhcnQpKTsKJiM0MzsKJiM0MzsJcHRocmVhZF9tdXRleF91bmxvY2soJmFtcDtjb2xsZWN0KTsKJiM0Mzt9CiAKIHN0YXRpYyB2b2lkIHZjcHVfd29ya2VyKHN0cnVjdCBtZW1zdHJlc3NfdmNwdV9hcmdzICp2Y3B1X2FyZ3MpCiB7CkBAIC00MywyNCAmIzQzOzg4LDQ1IEBAIHN0YXRpYyB2b2lkIHZjcHVfd29ya2VyKHN0cnVjdCBtZW1zdHJlc3NfdmNwdV9hcmdzICp2Y3B1X2FyZ3MpCiAJc3RydWN0IHRpbWVzcGVjIHRzX2RpZmY7CiAJc3RydWN0IHRpbWVzcGVjIHRvdGFsID0gKHN0cnVjdCB0aW1lc3BlYyl7MH07CiAJc3RydWN0IHRpbWVzcGVjIGF2ZzsKJiM0MzsJYm9vbCB1c2VfZGlydHlfcmluZyA9ICEhdmNwdS0mZ3Q7dm0tJmd0O2RpcnR5X3Jpbmdfc2l6ZTsKJiM0MzsJdTMyIHJpbmdfaWR4ID0gMDsKIAlpbnQgcmV0OwogCiAJcnVuID0gdmNwdS0mZ3Q7cnVuOwogCiAJd2hpbGUgKCFSRUFEX09OQ0UoaG9zdF9xdWl0KSkgewogCQlpbnQgY3VycmVudF9pdGVyYXRpb24gPSBSRUFEX09OQ0UoaXRlcmF0aW9uKTsKJiM0MzsJCXN0cnVjdCB0aW1lc3BlYyBjb2xsZWN0ID0gKHN0cnVjdCB0aW1lc3BlYyl7MH07CiAKIAkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7c3RhcnQpOwotCQlyZXQgPSBfdmNwdV9ydW4odmNwdSk7CiYjNDM7CiYjNDM7CQlkbyB7CiYjNDM7CQkJcmV0ID0gX3ZjcHVfcnVuKHZjcHUpOwomIzQzOwkJCWlmICghdXNlX2RpcnR5X3JpbmcpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwomIzQzOwkJCWRpcnR5X3JpbmdfY29sbGVjdCh2Y3B1LCAmYW1wO3JpbmdfaWR4LCAmYW1wO2NvbGxlY3QpOwomIzQzOwkJfSB3aGlsZSAoIXJldCAmYW1wOyZhbXA7IHJ1bi0mZ3Q7ZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfRElSVFlfUklOR19GVUxMKTsKJiM0MzsKIAkJdHNfZGlmZiA9IHRpbWVzcGVjX2VsYXBzZWQoc3RhcnQpOwogCiYjNDM7CQlpZiAodXNlX2RpcnR5X3JpbmcpIHsKJiM0MzsJCQl0c19kaWZmID0gdGltZXNwZWNfc3ViKHRzX2RpZmYsIGNvbGxlY3QpOwomIzQzOwkJCXZjcHVfZGlydHlfcmluZ19jb2xsZWN0W3ZjcHVfaWR4XSA9IGNvbGxlY3Q7CiYjNDM7CQl9CiYjNDM7CiAJCVRFU1RfQVNTRVJUKHJldCA9PSAwLCAmIzM0O3ZjcHVfcnVuIGZhaWxlZDogJWQmIzM0OywgcmV0KTsKIAkJVEVTVF9BU1NFUlQoZ2V0X3VjYWxsKHZjcHUsIE5VTEwpID09IFVDQUxMX1NZTkMsCiAJCQkgICAgJiMzNDtJbnZhbGlkIGd1ZXN0IHN5bmMgc3RhdHVzOiBleGl0X3JlYXNvbj0lcyYjMzQ7LAogCQkJICAgIGV4aXRfcmVhc29uX3N0cihydW4tJmd0O2V4aXRfcmVhc29uKSk7CiAKIAkJcHJfZGVidWcoJiMzNDtHb3Qgc3luYyBldmVudCBmcm9tIHZDUFUgJWRcbiYjMzQ7LCB2Y3B1X2lkeCk7Ci0JCXZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW3ZjcHVfaWR4XSA9IGN1cnJlbnRfaXRlcmF0aW9uOwomIzQzOwkJLyoKJiM0MzsJCSAqIE1ha2Ugc3VyZSB2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbiB3cml0ZSBoYXBwZW5zIGJlZm9yZQomIzQzOwkJICogdXBkYXRpbmcgY3VycmVudCBpdGVyYXRpb24uICBQYWlycyB3aXRoIHJ1bl90ZXN0LCBhZnRlciBwb3B1bGF0aW5nLi4KJiM0MzsJCSAqLwomIzQzOwkJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvblt2Y3B1X2lkeF0sCiYjNDM7CQkJCSAgY3VycmVudF9pdGVyYXRpb24pOwogCQlwcl9kZWJ1ZygmIzM0O3ZDUFUgJWQgdXBkYXRlZCBsYXN0IGNvbXBsZXRlZCBpdGVyYXRpb24gdG8gJWRcbiYjMzQ7LAogCQkJIHZjcHVfaWR4LCB2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvblt2Y3B1X2lkeF0pOwogCkBAIC0xMTksNyAmIzQzOzE4NSw4IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpCiAKIAl2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSwKIAkJCQkgcC0mZ3Q7c2xvdHMsIHAtJmd0O2JhY2tpbmdfc3JjLAotCQkJCSBwLSZndDtwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKTsKJiM0MzsJCQkJIHAtJmd0O3BhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsCiYjNDM7CQkJCSBkaXJ0eV9yaW5nX3NpemUpOwogCiAJbWVtc3RyZXNzX3NldF93cml0ZV9wZXJjZW50KHZtLCBwLSZndDt3cml0ZV9wZXJjZW50KTsKIApAQCAtMTI4LDcgJiM0MzsxOTUsOCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKQogCWhvc3RfbnVtX3BhZ2VzID0gdm1fbnVtX2hvc3RfcGFnZXMobW9kZSwgZ3Vlc3RfbnVtX3BhZ2VzKTsKIAlwYWdlc19wZXJfc2xvdCA9IGhvc3RfbnVtX3BhZ2VzIC8gcC0mZ3Q7c2xvdHM7CiAKLQliaXRtYXBzID0gbWVtc3RyZXNzX2FsbG9jX2JpdG1hcHMocC0mZ3Q7c2xvdHMsIHBhZ2VzX3Blcl9zbG90KTsKJiM0MzsJaWYgKCFkaXJ0eV9yaW5nX3NpemUpCiYjNDM7CQliaXRtYXBzID0gbWVtc3RyZXNzX2FsbG9jX2JpdG1hcHMocC0mZ3Q7c2xvdHMsIHBhZ2VzX3Blcl9zbG90KTsKIAogCWlmIChkaXJ0eV9sb2dfbWFudWFsX2NhcHMpCiAJCXZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfTUFOVUFMX0RJUlRZX0xPR19QUk9URUNUMiwKQEAgLTEzOSw4ICYjNDM7MjA3LDEwIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpCiAJaG9zdF9xdWl0ID0gZmFsc2U7CiAKIAljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFtcDtzdGFydCk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IG5yX3ZjcHVzOyBpJiM0MzsmIzQzOykKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3ZjcHVzOyBpJiM0MzsmIzQzOykgewogCQl2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbltpXSA9IC0xOwomIzQzOwkJdmNwdV9kaXJ0eV9yaW5nX2NvbGxlY3RbaV0gPSAoc3RydWN0IHRpbWVzcGVjKXswfTsKJiM0MzsJfQogCiAJLyoKIAkgKiBVc2UgMTAwJSB3cml0ZXMgZHVyaW5nIHRoZSBwb3B1bGF0aW9uIHBoYXNlIHRvIGVuc3VyZSBhbGwKQEAgLTE4NSw3ICYjNDM7MjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZykKIAogCQlwcl9kZWJ1ZygmIzM0O1N0YXJ0aW5nIGl0ZXJhdGlvbiAlZFxuJiMzNDssIGl0ZXJhdGlvbik7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHsKLQkJCXdoaWxlIChSRUFEX09OQ0UodmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25baV0pCiYjNDM7CQkJd2hpbGUgKHNtcF9sb2FkX2FjcXVpcmUoJmFtcDt2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbltpXSkKIAkJCSAgICAgICAhPSBpdGVyYXRpb24pCiAJCQkJOwogCQl9CkBAIC0xOTUsNiAmIzQzOzI2NSwyMSBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKQogCQlwcl9pbmZvKCYjMzQ7SXRlcmF0aW9uICVkIGRpcnR5IG1lbW9yeSB0aW1lOiAlbGQuJS45bGRzXG4mIzM0OywKIAkJCWl0ZXJhdGlvbiwgdHNfZGlmZi50dl9zZWMsIHRzX2RpZmYudHZfbnNlYyk7CiAKJiM0MzsJCWlmIChkaXJ0eV9yaW5nX3NpemUpIHsKJiM0MzsJCQlzdHJ1Y3QgdGltZXNwZWMgaXRlcmF0aW9uX3N1bSA9IChzdHJ1Y3QgdGltZXNwZWMpezB9OwomIzQzOwomIzQzOwkJCWZvciAoaSA9IDA7IGkgJmx0OyBucl92Y3B1czsgaSYjNDM7JiM0MzspCiYjNDM7CQkJCWl0ZXJhdGlvbl9zdW0gPSB0aW1lc3BlY19hZGQoaXRlcmF0aW9uX3N1bSwKJiM0MzsJCQkJCQkJICAgICB2Y3B1X2RpcnR5X3JpbmdfY29sbGVjdFtpXSk7CiYjNDM7CiYjNDM7CQkJcHJfaW5mbygmIzM0O0l0ZXJhdGlvbiAlZCBjbGVhciBkaXJ0eSByaW5nIHRpbWU6ICVsZC4lLjlsZHNcbiYjMzQ7LAomIzQzOwkJCQlpdGVyYXRpb24sIGl0ZXJhdGlvbl9zdW0udHZfc2VjLCBpdGVyYXRpb25fc3VtLnR2X25zZWMpOwomIzQzOwomIzQzOwkJCWNsZWFyX2RpcnR5X2xvZ190b3RhbCA9IHRpbWVzcGVjX2FkZChjbGVhcl9kaXJ0eV9sb2dfdG90YWwsCiYjNDM7CQkJCQkJCSAgICAgaXRlcmF0aW9uX3N1bSk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmYW1wO3N0YXJ0KTsKIAkJbWVtc3RyZXNzX2dldF9kaXJ0eV9sb2codm0sIGJpdG1hcHMsIHAtJmd0O3Nsb3RzKTsKIAkJdHNfZGlmZiA9IHRpbWVzcGVjX2VsYXBzZWQoc3RhcnQpOwpAQCAtMjM4LDE5ICYjNDM7MzIzLDIyIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpCiAJaG9zdF9xdWl0ID0gdHJ1ZTsKIAltZW1zdHJlc3Nfam9pbl92Y3B1X3RocmVhZHMobnJfdmNwdXMpOwogCi0JYXZnID0gdGltZXNwZWNfZGl2KGdldF9kaXJ0eV9sb2dfdG90YWwsIHAtJmd0O2l0ZXJhdGlvbnMpOwotCXByX2luZm8oJiMzNDtHZXQgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxuJiMzNDssCi0JCXAtJmd0O2l0ZXJhdGlvbnMsIGdldF9kaXJ0eV9sb2dfdG90YWwudHZfc2VjLAotCQlnZXRfZGlydHlfbG9nX3RvdGFsLnR2X25zZWMsIGF2Zy50dl9zZWMsIGF2Zy50dl9uc2VjKTsKJiM0MzsJaWYgKCFkaXJ0eV9yaW5nX3NpemUpIHsKJiM0MzsJCWF2ZyA9IHRpbWVzcGVjX2RpdihnZXRfZGlydHlfbG9nX3RvdGFsLCBwLSZndDtpdGVyYXRpb25zKTsKJiM0MzsJCXByX2luZm8oJiMzNDtHZXQgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxuJiMzNDssCiYjNDM7CQkJcC0mZ3Q7aXRlcmF0aW9ucywgZ2V0X2RpcnR5X2xvZ190b3RhbC50dl9zZWMsCiYjNDM7CQkJZ2V0X2RpcnR5X2xvZ190b3RhbC50dl9uc2VjLCBhdmcudHZfc2VjLCBhdmcudHZfbnNlYyk7CiYjNDM7CX0KIAotCWlmIChkaXJ0eV9sb2dfbWFudWFsX2NhcHMpIHsKJiM0MzsJaWYgKGRpcnR5X2xvZ19tYW51YWxfY2FwcyB8fCBkaXJ0eV9yaW5nX3NpemUpIHsKIAkJYXZnID0gdGltZXNwZWNfZGl2KGNsZWFyX2RpcnR5X2xvZ190b3RhbCwgcC0mZ3Q7aXRlcmF0aW9ucyk7CiAJCXByX2luZm8oJiMzNDtDbGVhciBkaXJ0eSBsb2cgb3ZlciAlbHUgaXRlcmF0aW9ucyB0b29rICVsZC4lLjlsZHMuIChBdmcgJWxkLiUuOWxkcy9pdGVyYXRpb24pXG4mIzM0OywKIAkJCXAtJmd0O2l0ZXJhdGlvbnMsIGNsZWFyX2RpcnR5X2xvZ190b3RhbC50dl9zZWMsCiAJCQljbGVhcl9kaXJ0eV9sb2dfdG90YWwudHZfbnNlYywgYXZnLnR2X3NlYywgYXZnLnR2X25zZWMpOwogCX0KIAotCW1lbXN0cmVzc19mcmVlX2JpdG1hcHMoYml0bWFwcywgcC0mZ3Q7c2xvdHMpOwomIzQzOwlpZiAoIWRpcnR5X3Jpbmdfc2l6ZSkKJiM0MzsJCW1lbXN0cmVzc19mcmVlX2JpdG1hcHMoYml0bWFwcywgcC0mZ3Q7c2xvdHMpOwogCW1lbXN0cmVzc19kZXN0cm95X3ZtKHZtKTsKIH0KIApAQCAtMjU5LDExICYjNDM7MzQ3LDE1IEBAIHN0YXRpYyB2b2lkIGhlbHAoY2hhciAqbmFtZSkKIAlwdXRzKCYjMzQ7JiMzNDspOwogCXByaW50ZigmIzM0O3VzYWdlOiAlcyBbLWhdIFstYV0gWy1pIGl0ZXJhdGlvbnNdIFstcCBvZmZzZXRdIFstZ10gJiMzNDsKIAkgICAgICAgJiMzNDtbLW0gbW9kZV0gWy1uXSBbLWIgdmNwdSBieXRlc10gWy12IHZjcHVzXSBbLW9dIFstciByYW5kb20gc2VlZCBdIFstcyBtZW0gdHlwZV0mIzM0OwotCSAgICAgICAmIzM0O1steCBtZW1zbG90c10gWy13IHBlcmNlbnRhZ2VdIFstYyBwaHlzaWNhbCBjcHVzIHRvIHJ1biB0ZXN0IG9uXVxuJiMzNDssIG5hbWUpOwomIzQzOwkgICAgICAgJiMzNDtbLXggbWVtc2xvdHNdIFstdyBwZXJjZW50YWdlXSBbLWMgcGh5c2ljYWwgY3B1cyB0byBydW4gdGVzdCBvbl0gXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDtbLWQgZGlydHktcmluZyBlbnRyaWVzXVxuJiMzNDssIG5hbWUpOwogCXB1dHMoJiMzNDsmIzM0Oyk7CiAJcHJpbnRmKCYjMzQ7IC1hOiBhY2Nlc3MgbWVtb3J5IHJhbmRvbWx5IHJhdGhlciB0aGFuIGluIG9yZGVyLlxuJiMzNDspOwogCXByaW50ZigmIzM0OyAtaTogc3BlY2lmeSBpdGVyYXRpb24gY291bnRzIChkZWZhdWx0OiAlJiMzNDtQUkl1NjQmIzM0OylcbiYjMzQ7LAogCSAgICAgICBURVNUX0hPU1RfTE9PUF9OKTsKJiM0MzsJcHJpbnRmKCYjMzQ7IC1kOiBlbmFibGUgZGlydHktcmluZyBmb3IgdHJhY2tpbmcgZGlydHkgcGFnZXMsIHdpdGggZ2l2ZW4gZW50cmllcyBjb3VudC5cbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgSWYgbm9uLXplcm8sIHdpbGwgY2F1c2UgZGlydHktcmluZyB0byBiZSB1c2VkIGluc3RlYWQgb2ZcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgZGlydHktYml0bWFwLiBNdXN0IGJlIGEgcG93ZXIgb2YgdHdvLlxuJiMzNDspOwogCXByaW50ZigmIzM0OyAtZzogRG8gbm90IGVuYWJsZSBLVk1fQ0FQX01BTlVBTF9ESVJUWV9MT0dfUFJPVEVDVDIuIFRoaXNcbiYjMzQ7CiAJICAgICAgICYjMzQ7ICAgICBtYWtlcyBLVk1fR0VUX0RJUlRZX0xPRyBjbGVhciB0aGUgZGlydHkgbG9nIChpLmUuXG4mIzM0OwogCSAgICAgICAmIzM0OyAgICAgS1ZNX0RJUlRZX0xPR19NQU5VQUxfUFJPVEVDVF9FTkFCTEUgaXMgbm90IGVuYWJsZWQpXG4mIzM0OwpAQCAtMzA5LDYgJiM0Mzs0MDEsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkud3JpdGVfcGVyY2VudCA9IDEwMCwKIAl9OwogCWludCBvcHQ7CiYjNDM7CXU2NCB0bXA7CiAKIAkvKiBPdmVycmlkZSB0aGUgc2VlZCB0byBiZSBkZXRlcm1pbmlzdGljIGJ5IGRlZmF1bHQuICovCiAJZ3Vlc3RfcmFuZG9tX3NlZWQgPSAxOwpAQCAtMzIwLDcgJiM0Mzs0MTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJZ3Vlc3RfbW9kZXNfYXBwZW5kX2RlZmF1bHQoKTsKIAotCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICYjMzQ7YWI6YzplZ2hpOm06bm9wOnI6czp2Ong6dzomIzM0OykpICE9IC0xKSB7CiYjNDM7CXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICYjMzQ7YWI6YzpkOmVnaGk6bTpub3A6cjpzOnY6eDp3OiYjMzQ7KSkgIT0gLTEpIHsKIAkJc3dpdGNoIChvcHQpIHsKIAkJY2FzZSAmIzM5O2EmIzM5OzoKIAkJCXAucmFuZG9tX2FjY2VzcyA9IHRydWU7CkBAIC0zMzEsNiAmIzQzOzQyNCwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQljYXNlICYjMzk7YyYjMzk7OgogCQkJcGNwdV9saXN0ID0gb3B0YXJnOwogCQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7ZCYjMzk7OgomIzQzOwkJCXRtcCA9IHBhcnNlX3NpemUob3B0YXJnKTsKJiM0MzsJCQlURVNUX0FTU0VSVCh0bXAsICYjMzQ7RGlydHktcmluZyBzaXplIHNob3VsZCBiZSAmZ3Q7IDAmIzM0Oyk7CiYjNDM7CQkJVEVTVF9BU1NFUlQodG1wICZsdDs9IFVJTlQzMl9NQVggLyBzaXplb2Yoc3RydWN0IGt2bV9kaXJ0eV9nZm4pLAomIzQzOwkJCQkgICAgJiMzNDtEaXJ0eS1yaW5nIHNpemUgKCVsdSkgaXMgdG9vIGxhcmdlLiYjMzQ7LCB0bXApOwomIzQzOwkJCWRpcnR5X3Jpbmdfc2l6ZSA9IHRtcCAqIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbik7CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtlJiMzOTs6CiAJCQkvKiAmIzM5O2UmIzM5OyBpcyBmb3IgZXZpbC4gKi8KIAkJCXJ1bl92Y3B1c193aGlsZV9kaXNhYmxpbmdfZGlydHlfbG9nZ2luZyA9IHRydWU7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9tZW1zdHJlc3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL21lbXN0cmVzcy5oCmluZGV4IDBkMWQ2MjMwY2MwNTEuLmUxN2YzNDQ5NzhhZjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL21lbXN0cmVzcy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL21lbXN0cmVzcy5oCkBAIC01OCw3ICYjNDM7NTgsOCBAQCBleHRlcm4gc3RydWN0IG1lbXN0cmVzc19hcmdzIG1lbXN0cmVzc19hcmdzOwogc3RydWN0IGt2bV92bSAqbWVtc3RyZXNzX2NyZWF0ZV92bShlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgaW50IG5yX3ZjcHVzLAogCQkJCSAgIHU2NCB2Y3B1X21lbW9yeV9ieXRlcywgaW50IHNsb3RzLAogCQkJCSAgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgYmFja2luZ19zcmMsCi0JCQkJICAgYm9vbCBwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKTsKJiM0MzsJCQkJICAgYm9vbCBwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzLAomIzQzOwkJCQkgICB1MzIgZGlydHlfcmluZ19zaXplKTsKIHZvaWQgbWVtc3RyZXNzX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bV92bSAqdm0pOwogCiB2b2lkIG1lbXN0cmVzc19zZXRfd3JpdGVfcGVyY2VudChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHdyaXRlX3BlcmNlbnQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jCmluZGV4IDE5NWYzZmRhZTFlMzkuLmYxZWJkNzEyMjc2M2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMKQEAgLTE2NywxMCAmIzQzOzE2NywyMyBAQCB1bnNpZ25lZCBpbnQga3ZtX2NoZWNrX2NhcChsb25nIGNhcCkKIAogdm9pZCB2bV9lbmFibGVfZGlydHlfcmluZyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHJpbmdfc2l6ZSkKIHsKLQlpZiAodm1fY2hlY2tfY2FwKHZtLCBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HX0FDUV9SRUwpKQotCQl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HX0FDUV9SRUwsIHJpbmdfc2l6ZSk7Ci0JZWxzZQotCQl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HLCByaW5nX3NpemUpOwomIzQzOwlsb25nIGNhcCA9IEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfQUNRX1JFTDsKJiM0MzsJaW50IG1heF9zaXplID0gdm1fY2hlY2tfY2FwKHZtLCBjYXApOwomIzQzOwomIzQzOwlpZiAoIW1heF9zaXplKSB7CiYjNDM7CQljYXAgPSBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HOwomIzQzOwkJbWF4X3NpemUgPSB2bV9jaGVja19jYXAodm0sIGNhcCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQobWF4X3NpemUgJmd0OyAwLCAmIzM0O0RpcnR5LXJpbmcgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGtlcm5lbFxuJiMzNDspOwomIzQzOwlURVNUX0FTU0VSVChyaW5nX3NpemUgJmx0Oz0gbWF4X3NpemUgJmFtcDsmYW1wOyBpc19wb3dlcl9vZl8yKHJpbmdfc2l6ZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIHJpbmdfc2l6ZSAmZ3Q7PSBnZXRwYWdlc2l6ZSgpLAomIzQzOwkJICAgICYjMzQ7SW52YWxpZCBkaXJ0eS1yaW5nIHNpemU6IFNob3VsZCBiZSBhIHBvd2VyIG9mIHR3byAmIzM0OwomIzQzOwkJICAgICYjMzQ7YmV0d2VlbiAlbHUgYW5kICVsdSBlbnRyaWVzXG4mIzM0OywKJiM0MzsJCSAgICBnZXRwYWdlc2l6ZSgpIC8gc2l6ZW9mKHN0cnVjdCBrdm1fZGlydHlfZ2ZuKSwKJiM0MzsJCSAgICBtYXhfc2l6ZSAvIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbikpOwomIzQzOwomIzQzOwl2bV9lbmFibGVfY2FwKHZtLCBjYXAsIHJpbmdfc2l6ZSk7CiAJdm0tJmd0O2RpcnR5X3Jpbmdfc2l6ZSA9IHJpbmdfc2l6ZTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmMKaW5kZXggNmRjZDE1OTEwYTA2MC4uYzlmODU1MzNmZmZmZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jCkBAIC0xMjEsMTAgJiM0MzsxMjEsMzUgQEAgdm9pZCBtZW1zdHJlc3Nfc2V0dXBfdmNwdXMoc3RydWN0IGt2bV92bSAqdm0sIGludCBucl92Y3B1cywKIAl9CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGt2bV92bSAqbWVtc3RyZXNzX3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwKJiM0MzsJCQkJCQkgICAgIHUzMiBucl92Y3B1cywKJiM0MzsJCQkJCQkgICAgIHU2NCBleHRyYV9tZW1fcGFnZXMsCiYjNDM7CQkJCQkJICAgICB2b2lkICpndWVzdF9jb2RlLAomIzQzOwkJCQkJCSAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdLAomIzQzOwkJCQkJCSAgICAgdTMyIGRpcnR5X3Jpbmdfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQoIW5yX3ZjcHVzIHx8IHZjcHVzLCAmIzM0O011c3QgcHJvdmlkZSB2Q1BVIGFycmF5JiMzNDspOwomIzQzOwomIzQzOwl2bSA9IF9fdm1fY3JlYXRlKHNoYXBlLCBucl92Y3B1cywgZXh0cmFfbWVtX3BhZ2VzKTsKJiM0MzsKJiM0MzsJaWYgKGRpcnR5X3Jpbmdfc2l6ZSkKJiM0MzsJCXZtX2VuYWJsZV9kaXJ0eV9yaW5nKHZtLCBkaXJ0eV9yaW5nX3NpemUpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7ICYjNDM7JiM0MztpKQomIzQzOwkJdmNwdXNbaV0gPSB2bV92Y3B1X2FkZCh2bSwgaSwgZ3Vlc3RfY29kZSk7CiYjNDM7CiYjNDM7CWt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTsKJiM0MzsJcmV0dXJuIHZtOwomIzQzO30KJiM0MzsKIHN0cnVjdCBrdm1fdm0gKm1lbXN0cmVzc19jcmVhdGVfdm0oZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIGludCBucl92Y3B1cywKIAkJCQkgICB1NjQgdmNwdV9tZW1vcnlfYnl0ZXMsIGludCBzbG90cywKIAkJCQkgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIGJhY2tpbmdfc3JjLAotCQkJCSAgIGJvb2wgcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcykKJiM0MzsJCQkJICAgYm9vbCBwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzLAomIzQzOwkJCQkgICB1MzIgZGlydHlfcmluZ19zaXplKQogewogCXN0cnVjdCBtZW1zdHJlc3NfYXJncyAqYXJncyA9ICZhbXA7bWVtc3RyZXNzX2FyZ3M7CiAJc3RydWN0IGt2bV92bSAqdm07CkBAIC0xNjcsOSAmIzQzOzE5MiwxMCBAQCBzdHJ1Y3Qga3ZtX3ZtICptZW1zdHJlc3NfY3JlYXRlX3ZtKGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCBpbnQgbnJfdmNwdXMsCiAJICogVGhlIG1lbW9yeSBpcyBhbHNvIGFkZGVkIHRvIG1lbXNsb3QgMCwgYnV0IHRoYXQmIzM5O3MgYSBiZW5pZ24gc2lkZQogCSAqIGVmZmVjdCBhcyBLVk0gYWxsb3dzIGFsaWFzaW5nIEhWQXMgaW4gbWVzbG90cy4KIAkgKi8KLQl2bSA9IF9fdm1fY3JlYXRlX3dpdGhfdmNwdXMoVk1fU0hBUEUobW9kZSksIG5yX3ZjcHVzLAotCQkJCSAgICBzbG90MF9wYWdlcyAmIzQzOyBndWVzdF9udW1fcGFnZXMsCi0JCQkJICAgIG1lbXN0cmVzc19ndWVzdF9jb2RlLCB2Y3B1cyk7CiYjNDM7CXZtID0gbWVtc3RyZXNzX3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKFZNX1NIQVBFKG1vZGUpLCBucl92Y3B1cywKJiM0MzsJCQkJCSAgICBzbG90MF9wYWdlcyAmIzQzOyBndWVzdF9udW1fcGFnZXMsCiYjNDM7CQkJCQkgICAgbWVtc3RyZXNzX2d1ZXN0X2NvZGUsIHZjcHVzLAomIzQzOwkJCQkJICAgIGRpcnR5X3Jpbmdfc2l6ZSk7CiAKIAlhcmdzLSZndDt2bSA9IHZtOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9tb2RpZmljYXRpb25fc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jCmluZGV4IDljNzU3OGEwOThjM2UuLjNhMWJlOWI3NWUwMWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jCkBAIC05MCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKQogCiAJdm0gPSBtZW1zdHJlc3NfY3JlYXRlX3ZtKG1vZGUsIG5yX3ZjcHVzLCBndWVzdF9wZXJjcHVfbWVtX3NpemUsIDEsCiAJCQkJIFZNX01FTV9TUkNfQU5PTllNT1VTLAotCQkJCSBwLSZndDtwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKTsKJiM0MzsJCQkJIHAtJmd0O3BhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsIDApOwogI2lmZGVmIF9feDg2XzY0X18KIAlpZiAocC0mZ3Q7ZGlzYWJsZV9zbG90X3phcF9xdWlyaykKIAkJdm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9ESVNBQkxFX1FVSVJLUzIsIEtWTV9YODZfUVVJUktfU0xPVF9aQVBfQUxMKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZGlydHlfbG9nX3BhZ2Vfc3BsaXR0aW5nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZGlydHlfbG9nX3BhZ2Vfc3BsaXR0aW5nX3Rlc3QuYwppbmRleCAzODhiYTQxMDFmOTczLi42NjFlOWFiZmI0Mzk1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2RpcnR5X2xvZ19wYWdlX3NwbGl0dGluZ190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9kaXJ0eV9sb2dfcGFnZV9zcGxpdHRpbmdfdGVzdC5jCkBAIC0xMDEsNyAmIzQzOzEwMSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICp1bnVzZWQpCiAJc3RydWN0IGt2bV9wYWdlX3N0YXRzIHN0YXRzX3JlcG9wdWxhdGVkOwogCiAJdm0gPSBtZW1zdHJlc3NfY3JlYXRlX3ZtKG1vZGUsIFZDUFVTLCBndWVzdF9wZXJjcHVfbWVtX3NpemUsCi0JCQkJIFNMT1RTLCBiYWNraW5nX3NyYywgZmFsc2UpOwomIzQzOwkJCQkgU0xPVFMsIGJhY2tpbmdfc3JjLCBmYWxzZSwgMCk7CiAKIAlndWVzdF9udW1fcGFnZXMgPSAoVkNQVVMgKiBndWVzdF9wZXJjcHVfbWVtX3NpemUpICZndDsmZ3Q7IHZtLSZndDtwYWdlX3NoaWZ0OwogCWd1ZXN0X251bV9wYWdlcyA9IHZtX2FkanVzdF9udW1fZ3Vlc3RfcGFnZXMobW9kZSwgZ3Vlc3RfbnVtX3BhZ2VzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMzMwoJCQkJCQkJb3V0cHV0OiA3MgoJCQkJCQkJdGhvdWdodHM6IDc0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgS1ZNIHNlbGZ0ZXN0cywgc3BlY2lmaWNhbGx5IHRoZXNlIGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2A6IGBkaXJ0eV9sb2dfcGVyZl90ZXN0LmNgLCBgbWVtc3RyZXNzLmNgLCBga3ZtX3V0aWwuY2AsIGFuZCBhIGZldyBvdGhlcnMuIEl0JiMzOTtzIGFib3V0IGFkZGluZyBzdXBwb3J0IGZvciB0ZXN0aW5nIHRoZSBLVk0gZGlydHkgcmluZyBmZWF0dXJlIChgS1ZNX0NBUF9ESVJUWV9MT0dfUklOR2AgYW5kIGBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HX0FDUV9SRUxgKSB3aXRoaW4gYGRpcnR5X2xvZ19wZXJmX3Rlc3QuY2AuIFRoZSBjcml0aWNhbCB0aGluZyBpcyB0aGF0IGFsbCB0aGVzZSBtb2RpZmljYXRpb25zIGFyZSBjb250YWluZWQgZW50aXJlbHkgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5LiBObyBjaGFuZ2VzIGFyZSBiZWluZyBtYWRlIHRvIHRoZSBrZXJuZWwmIzM5O3MgY29yZSBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuCgpOb3csIHRoZSBwcm9tcHQgZ2l2ZXMgYSBsaXN0IG9mIGNvbmRpdGlvbnMgd2hlcmUgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQgZG9lc24mIzM5O3QgZXhwbGljaXRseSBtZW50aW9uIHNlbGZ0ZXN0cywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBIb3dldmVyLCBzZWxmdGVzdHMgYXJlICp1c2VyLXNwYWNlKiB0ZXN0aW5nIHRvb2xzLiBUaGUgcHJvbXB0IGRvZXMgc2F5ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBbLi4uXSBtb2RpZmljYXRpb25zIHRvIFsuLi5dIGRvY3VtZW50YXRpb24sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuIC0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuIC0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiAtIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKSB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuJiMzNDsKVGhlIHByb21wdCBhbHNvIHNheXMgJiMzNDtJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLiYjMzQ7CgpTaW5jZSB0aGlzICpvbmx5KiB0b3VjaGVzIHVzZXJzcGFjZSBzZWxmdGVzdHMsIG5vdCBhbnkgb2YgdGhvc2UgYXJlYXMsIGl0JiMzOTtzIGEgY2xlYXIgY2FzZS4gVGhlIHBhdGNoIGRvZXMgKm5vdCogbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlIGZpbGVzIGFyZSBkZWZpbml0ZWx5IGp1c3QgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCBkaXJlY3RvcnksIGFuZCBhcmUgYWxsIHNlbGZ0ZXN0cywgdXNlci1zcGFjZSB0b29scy4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgZmlsZSBsaXN0OiBgYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jYCwgYGRlbWFuZF9wYWdpbmdfdGVzdC5jYCwgYGRpcnR5X2xvZ19wZXJmX3Rlc3QuY2AsIGBpbmNsdWRlL21lbXN0cmVzcy5oYCwgYGxpYi9rdm1fdXRpbC5jYCwgYGxpYi9tZW1zdHJlc3MuY2AsIGBtZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jYCwgYW5kIGB4ODYvZGlydHlfbG9nX3BhZ2Vfc3BsaXR0aW5nX3Rlc3QuY2AuIFRoZXNlIGFyZSBhbGwgdXNlci1zcGFjZSB0ZXN0cywgc28gaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgZGV0ZXJtaW5hdGlvbi4KClRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByYXRpb25hbGUgaXMgdGhhdCB0aGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHVzZXIgc3BhY2UgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBjaGFuZ2VzIHRvIGtlcm5lbCBjb2RlLiBJdCBkb2VzbiYjMzk7dCBtb2RpZnkga2VybmVsIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gd2hpY2ggYXJlIHVzZXJzcGFjZSB0ZXN0IHByb2dyYW1zLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIHdoaWNoIGFyZSB1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MDY6NTkuOTQwNTc3NDIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNzMzMDczMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIHdoaWNoIGFyZSB1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMTowNjo1OS45NDA1ODI5MzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDMzNDk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIxODRhODZkYTgwZDUxYzMyOWUwODE3ZWUwYWIzN2NiZmExYmQxMjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDE6MDY6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FjY2Vzc190cmFja2luZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hY2Nlc3NfdHJhY2tpbmdfcGVyZl90ZXN0LmNcXG5pbmRleCA0NDE1Yzk0YjI4NjYwLi5mNzhkNTYyNjVkODkzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hY2Nlc3NfdHJhY2tpbmdfcGVyZl90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jXFxuQEAgLTQwOSw3ICs0MDksNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXHRpbnQgbnJfdmNwdXMgPSBwYXJhbXMtXFx1MDAzZW5yX3ZjcHVzO1xcbiBcXG4gXFx0dm0gPSBtZW1zdHJlc3NfY3JlYXRlX3ZtKG1vZGUsIG5yX3ZjcHVzLCBwYXJhbXMtXFx1MDAzZXZjcHVfbWVtb3J5X2J5dGVzLCAxLFxcbi1cXHRcXHRcXHRcXHQgcGFyYW1zLVxcdTAwM2ViYWNraW5nX3NyYywgIW92ZXJsYXBfbWVtb3J5X2FjY2Vzcyk7XFxuK1xcdFxcdFxcdFxcdCBwYXJhbXMtXFx1MDAzZWJhY2tpbmdfc3JjLCAhb3ZlcmxhcF9tZW1vcnlfYWNjZXNzLCAwKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIGd1ZXN0X3BhZ2Vfc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCdzIHBhZ2Ugc2l6ZSwgdGhlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuY1xcbmluZGV4IDMwMmM0OTIzZDA5MzAuLjkyMjQ2ZTI3ZWY3NDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jXFxuQEAgLTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXHRpbnQgaSwgbnVtX3VmZmRzID0gMDtcXG4gXFxuIFxcdHZtID0gbWVtc3RyZXNzX2NyZWF0ZV92bShtb2RlLCBucl92Y3B1cywgZ3Vlc3RfcGVyY3B1X21lbV9zaXplLCAxLFxcbi1cXHRcXHRcXHRcXHQgcC1cXHUwMDNlc3JjX3R5cGUsIHAtXFx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpO1xcbitcXHRcXHRcXHRcXHQgcC1cXHUwMDNlc3JjX3R5cGUsIHAtXFx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsIDApO1xcbiBcXG4gXFx0ZGVtYW5kX3BhZ2luZ19zaXplID0gZ2V0X2JhY2tpbmdfc3JjX3BhZ2VzeihwLVxcdTAwM2VzcmNfdHlwZSk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xcbmluZGV4IGVmNzc5ZmE5MTgyN2MuLjZlODBkMzZjYzYxYTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmNcXG5AQCAtMTMsNiArMTMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdGltZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0bWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vYmFycmllci5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImt2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZXN0X3V0aWwuaFxcXCJcXG5AQCAtMjksOSArMzAsNTMgQEAgc3RhdGljIGJvb2wgcnVuX3ZjcHVzX3doaWxlX2Rpc2FibGluZ19kaXJ0eV9sb2dnaW5nO1xcbiBcXG4gLyogSG9zdCB2YXJpYWJsZXMgKi9cXG4gc3RhdGljIHU2NCBkaXJ0eV9sb2dfbWFudWFsX2NhcHM7XFxuK3N0YXRpYyB1MzIgZGlydHlfcmluZ19zaXplO1xcbiBzdGF0aWMgYm9vbCBob3N0X3F1aXQ7XFxuIHN0YXRpYyBpbnQgaXRlcmF0aW9uO1xcbiBzdGF0aWMgaW50IHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW0tWTV9NQVhfVkNQVVNdO1xcbitzdGF0aWMgc3RydWN0IHRpbWVzcGVjIHZjcHVfZGlydHlfcmluZ19jb2xsZWN0W0tWTV9NQVhfVkNQVVNdO1xcbitcXG4rc3RhdGljIHZvaWQgZGlydHlfcmluZ19jb2xsZWN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyaW5nX2lkeCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHRpbWVzcGVjICp0cylcXG4re1xcbitcXHRzdGF0aWMgcHRocmVhZF9tdXRleF90IGNvbGxlY3QgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7XFxuK1xcdHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpkaXJ0eV9nZm5zID0gdmNwdV9tYXBfZGlydHlfcmluZyh2Y3B1KTtcXG4rXFx0dTMyIGlkeCA9ICpyaW5nX2lkeDtcXG4rXFx0dTMyIHJpbmdfc2l6ZSA9IHZjcHUtXFx1MDAzZXZtLVxcdTAwM2VkaXJ0eV9yaW5nX3NpemUgLyBzaXplb2Yoc3RydWN0IGt2bV9kaXJ0eV9nZm4pO1xcbitcXHRpbnQgY2xlYXJlZCwgY291bnQ7XFxuK1xcbitcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNmNvbGxlY3QpO1xcbitcXG4rXFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFxcdTAwMjZzdGFydCk7XFxuK1xcbitcXHR3aGlsZSAodHJ1ZSkge1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqY3VyO1xcbitcXG4rXFx0XFx0Y3VyID0gXFx1MDAyNmRpcnR5X2dmbnNbaWR4ICUgcmluZ19zaXplXTtcXG4rXFx0XFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmN1ci1cXHUwMDNlZmxhZ3MpICE9IEtWTV9ESVJUWV9HRk5fRl9ESVJUWSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2Y3VyLVxcdTAwM2VmbGFncywgS1ZNX0RJUlRZX0dGTl9GX1JFU0VUKTtcXG4rXFx0XFx0aWR4Kys7XFxuK1xcdH1cXG4rXFxuK1xcdGNvdW50ID0gaWR4IC0gKnJpbmdfaWR4O1xcbitcXHQqcmluZ19pZHggPSBpZHg7XFxuK1xcbitcXHRjbGVhcmVkID0ga3ZtX3ZtX3Jlc2V0X2RpcnR5X3JpbmcodmNwdS1cXHUwMDNldm0pO1xcbitcXG4rXFx0LyogQ2xlYXJlZCBwYWdlcyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgY29sbGVjdGVkLCBhcyBLVk0gaXMgc3VwcG9zZWQgdG9cXG4rXFx0ICogY2xlYXIgb25seSB0aGUgZW50cmllcyB0aGF0IGhhdmUgYmVlbiBoYXJ2ZXN0ZWQsIGFuZCBhIHNpbmdsZSB2Y3B1IHdpbGxcXG4rXFx0ICogaGFydmVzdCBhdCB0aW1lLlxcbitcXHQgKi9cXG4rXFx0VEVTVF9BU1NFUlQoY2xlYXJlZCA9PSBjb3VudCwgXFxcIlJlc2V0IGRpcnR5IHBhZ2VzICgldSkgbWlzbWF0Y2ggXFxcIlxcbitcXHRcXHQgICAgXFxcIndpdGggY29sbGVjdGVkICgldSlcXFwiLCBjbGVhcmVkLCBjb3VudCk7XFxuK1xcbitcXHQqdHMgPSB0aW1lc3BlY19hZGQoKnRzLCB0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KSk7XFxuK1xcbitcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2Y29sbGVjdCk7XFxuK31cXG4gXFxuIHN0YXRpYyB2b2lkIHZjcHVfd29ya2VyKHN0cnVjdCBtZW1zdHJlc3NfdmNwdV9hcmdzICp2Y3B1X2FyZ3MpXFxuIHtcXG5AQCAtNDMsMjQgKzg4LDQ1IEBAIHN0YXRpYyB2b2lkIHZjcHVfd29ya2VyKHN0cnVjdCBtZW1zdHJlc3NfdmNwdV9hcmdzICp2Y3B1X2FyZ3MpXFxuIFxcdHN0cnVjdCB0aW1lc3BlYyB0c19kaWZmO1xcbiBcXHRzdHJ1Y3QgdGltZXNwZWMgdG90YWwgPSAoc3RydWN0IHRpbWVzcGVjKXswfTtcXG4gXFx0c3RydWN0IHRpbWVzcGVjIGF2ZztcXG4rXFx0Ym9vbCB1c2VfZGlydHlfcmluZyA9ICEhdmNwdS1cXHUwMDNldm0tXFx1MDAzZWRpcnR5X3Jpbmdfc2l6ZTtcXG4rXFx0dTMyIHJpbmdfaWR4ID0gMDtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHJ1biA9IHZjcHUtXFx1MDAzZXJ1bjtcXG4gXFxuIFxcdHdoaWxlICghUkVBRF9PTkNFKGhvc3RfcXVpdCkpIHtcXG4gXFx0XFx0aW50IGN1cnJlbnRfaXRlcmF0aW9uID0gUkVBRF9PTkNFKGl0ZXJhdGlvbik7XFxuK1xcdFxcdHN0cnVjdCB0aW1lc3BlYyBjb2xsZWN0ID0gKHN0cnVjdCB0aW1lc3BlYyl7MH07XFxuIFxcbiBcXHRcXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXFx1MDAyNnN0YXJ0KTtcXG4tXFx0XFx0cmV0ID0gX3ZjcHVfcnVuKHZjcHUpO1xcbitcXG4rXFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRyZXQgPSBfdmNwdV9ydW4odmNwdSk7XFxuK1xcdFxcdFxcdGlmICghdXNlX2RpcnR5X3JpbmcpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0XFx0ZGlydHlfcmluZ19jb2xsZWN0KHZjcHUsIFxcdTAwMjZyaW5nX2lkeCwgXFx1MDAyNmNvbGxlY3QpO1xcbitcXHRcXHR9IHdoaWxlICghcmV0IFxcdTAwMjZcXHUwMDI2IHJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfRElSVFlfUklOR19GVUxMKTtcXG4rXFxuIFxcdFxcdHRzX2RpZmYgPSB0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KTtcXG4gXFxuK1xcdFxcdGlmICh1c2VfZGlydHlfcmluZykge1xcbitcXHRcXHRcXHR0c19kaWZmID0gdGltZXNwZWNfc3ViKHRzX2RpZmYsIGNvbGxlY3QpO1xcbitcXHRcXHRcXHR2Y3B1X2RpcnR5X3JpbmdfY29sbGVjdFt2Y3B1X2lkeF0gPSBjb2xsZWN0O1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRURVNUX0FTU0VSVChyZXQgPT0gMCwgXFxcInZjcHVfcnVuIGZhaWxlZDogJWRcXFwiLCByZXQpO1xcbiBcXHRcXHRURVNUX0FTU0VSVChnZXRfdWNhbGwodmNwdSwgTlVMTCkgPT0gVUNBTExfU1lOQyxcXG4gXFx0XFx0XFx0ICAgIFxcXCJJbnZhbGlkIGd1ZXN0IHN5bmMgc3RhdHVzOiBleGl0X3JlYXNvbj0lc1xcXCIsXFxuIFxcdFxcdFxcdCAgICBleGl0X3JlYXNvbl9zdHIocnVuLVxcdTAwM2VleGl0X3JlYXNvbikpO1xcbiBcXG4gXFx0XFx0cHJfZGVidWcoXFxcIkdvdCBzeW5jIGV2ZW50IGZyb20gdkNQVSAlZFxcXFxuXFxcIiwgdmNwdV9pZHgpO1xcbi1cXHRcXHR2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvblt2Y3B1X2lkeF0gPSBjdXJyZW50X2l0ZXJhdGlvbjtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTWFrZSBzdXJlIHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uIHdyaXRlIGhhcHBlbnMgYmVmb3JlXFxuK1xcdFxcdCAqIHVwZGF0aW5nIGN1cnJlbnQgaXRlcmF0aW9uLiAgUGFpcnMgd2l0aCBydW5fdGVzdCwgYWZ0ZXIgcG9wdWxhdGluZy4uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25bdmNwdV9pZHhdLFxcbitcXHRcXHRcXHRcXHQgIGN1cnJlbnRfaXRlcmF0aW9uKTtcXG4gXFx0XFx0cHJfZGVidWcoXFxcInZDUFUgJWQgdXBkYXRlZCBsYXN0IGNvbXBsZXRlZCBpdGVyYXRpb24gdG8gJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCB2Y3B1X2lkeCwgdmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25bdmNwdV9pZHhdKTtcXG4gXFxuQEAgLTExOSw3ICsxODUsOCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXG4gXFx0dm0gPSBtZW1zdHJlc3NfY3JlYXRlX3ZtKG1vZGUsIG5yX3ZjcHVzLCBndWVzdF9wZXJjcHVfbWVtX3NpemUsXFxuIFxcdFxcdFxcdFxcdCBwLVxcdTAwM2VzbG90cywgcC1cXHUwMDNlYmFja2luZ19zcmMsXFxuLVxcdFxcdFxcdFxcdCBwLVxcdTAwM2VwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKTtcXG4rXFx0XFx0XFx0XFx0IHAtXFx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsXFxuK1xcdFxcdFxcdFxcdCBkaXJ0eV9yaW5nX3NpemUpO1xcbiBcXG4gXFx0bWVtc3RyZXNzX3NldF93cml0ZV9wZXJjZW50KHZtLCBwLVxcdTAwM2V3cml0ZV9wZXJjZW50KTtcXG4gXFxuQEAgLTEyOCw3ICsxOTUsOCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXHRob3N0X251bV9wYWdlcyA9IHZtX251bV9ob3N0X3BhZ2VzKG1vZGUsIGd1ZXN0X251bV9wYWdlcyk7XFxuIFxcdHBhZ2VzX3Blcl9zbG90ID0gaG9zdF9udW1fcGFnZXMgLyBwLVxcdTAwM2VzbG90cztcXG4gXFxuLVxcdGJpdG1hcHMgPSBtZW1zdHJlc3NfYWxsb2NfYml0bWFwcyhwLVxcdTAwM2VzbG90cywgcGFnZXNfcGVyX3Nsb3QpO1xcbitcXHRpZiAoIWRpcnR5X3Jpbmdfc2l6ZSlcXG4rXFx0XFx0Yml0bWFwcyA9IG1lbXN0cmVzc19hbGxvY19iaXRtYXBzKHAtXFx1MDAzZXNsb3RzLCBwYWdlc19wZXJfc2xvdCk7XFxuIFxcbiBcXHRpZiAoZGlydHlfbG9nX21hbnVhbF9jYXBzKVxcbiBcXHRcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX01BTlVBTF9ESVJUWV9MT0dfUFJPVEVDVDIsXFxuQEAgLTEzOSw4ICsyMDcsMTAgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcXG4gXFx0aG9zdF9xdWl0ID0gZmFsc2U7XFxuIFxcbiBcXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXFx1MDAyNnN0YXJ0KTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl92Y3B1czsgaSsrKSB7XFxuIFxcdFxcdHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW2ldID0gLTE7XFxuK1xcdFxcdHZjcHVfZGlydHlfcmluZ19jb2xsZWN0W2ldID0gKHN0cnVjdCB0aW1lc3BlYyl7MH07XFxuK1xcdH1cXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFVzZSAxMDAlIHdyaXRlcyBkdXJpbmcgdGhlIHBvcHVsYXRpb24gcGhhc2UgdG8gZW5zdXJlIGFsbFxcbkBAIC0xODUsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcXG4gXFxuIFxcdFxcdHByX2RlYnVnKFxcXCJTdGFydGluZyBpdGVyYXRpb24gJWRcXFxcblxcXCIsIGl0ZXJhdGlvbik7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl92Y3B1czsgaSsrKSB7XFxuLVxcdFxcdFxcdHdoaWxlIChSRUFEX09OQ0UodmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb25baV0pXFxuK1xcdFxcdFxcdHdoaWxlIChzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZ2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbltpXSlcXG4gXFx0XFx0XFx0ICAgICAgICE9IGl0ZXJhdGlvbilcXG4gXFx0XFx0XFx0XFx0O1xcbiBcXHRcXHR9XFxuQEAgLTE5NSw2ICsyNjUsMjEgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcXG4gXFx0XFx0cHJfaW5mbyhcXFwiSXRlcmF0aW9uICVkIGRpcnR5IG1lbW9yeSB0aW1lOiAlbGQuJS45bGRzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRpdGVyYXRpb24sIHRzX2RpZmYudHZfc2VjLCB0c19kaWZmLnR2X25zZWMpO1xcbiBcXG4rXFx0XFx0aWYgKGRpcnR5X3Jpbmdfc2l6ZSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgdGltZXNwZWMgaXRlcmF0aW9uX3N1bSA9IChzdHJ1Y3QgdGltZXNwZWMpezB9O1xcbitcXG4rXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspXFxuK1xcdFxcdFxcdFxcdGl0ZXJhdGlvbl9zdW0gPSB0aW1lc3BlY19hZGQoaXRlcmF0aW9uX3N1bSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB2Y3B1X2RpcnR5X3JpbmdfY29sbGVjdFtpXSk7XFxuK1xcbitcXHRcXHRcXHRwcl9pbmZvKFxcXCJJdGVyYXRpb24gJWQgY2xlYXIgZGlydHkgcmluZyB0aW1lOiAlbGQuJS45bGRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRpdGVyYXRpb24sIGl0ZXJhdGlvbl9zdW0udHZfc2VjLCBpdGVyYXRpb25fc3VtLnR2X25zZWMpO1xcbitcXG4rXFx0XFx0XFx0Y2xlYXJfZGlydHlfbG9nX3RvdGFsID0gdGltZXNwZWNfYWRkKGNsZWFyX2RpcnR5X2xvZ190b3RhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBpdGVyYXRpb25fc3VtKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2c3RhcnQpO1xcbiBcXHRcXHRtZW1zdHJlc3NfZ2V0X2RpcnR5X2xvZyh2bSwgYml0bWFwcywgcC1cXHUwMDNlc2xvdHMpO1xcbiBcXHRcXHR0c19kaWZmID0gdGltZXNwZWNfZWxhcHNlZChzdGFydCk7XFxuQEAgLTIzOCwxOSArMzIzLDIyIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXFxuIFxcdGhvc3RfcXVpdCA9IHRydWU7XFxuIFxcdG1lbXN0cmVzc19qb2luX3ZjcHVfdGhyZWFkcyhucl92Y3B1cyk7XFxuIFxcbi1cXHRhdmcgPSB0aW1lc3BlY19kaXYoZ2V0X2RpcnR5X2xvZ190b3RhbCwgcC1cXHUwMDNlaXRlcmF0aW9ucyk7XFxuLVxcdHByX2luZm8oXFxcIkdldCBkaXJ0eSBsb2cgb3ZlciAlbHUgaXRlcmF0aW9ucyB0b29rICVsZC4lLjlsZHMuIChBdmcgJWxkLiUuOWxkcy9pdGVyYXRpb24pXFxcXG5cXFwiLFxcbi1cXHRcXHRwLVxcdTAwM2VpdGVyYXRpb25zLCBnZXRfZGlydHlfbG9nX3RvdGFsLnR2X3NlYyxcXG4tXFx0XFx0Z2V0X2RpcnR5X2xvZ190b3RhbC50dl9uc2VjLCBhdmcudHZfc2VjLCBhdmcudHZfbnNlYyk7XFxuK1xcdGlmICghZGlydHlfcmluZ19zaXplKSB7XFxuK1xcdFxcdGF2ZyA9IHRpbWVzcGVjX2RpdihnZXRfZGlydHlfbG9nX3RvdGFsLCBwLVxcdTAwM2VpdGVyYXRpb25zKTtcXG4rXFx0XFx0cHJfaW5mbyhcXFwiR2V0IGRpcnR5IGxvZyBvdmVyICVsdSBpdGVyYXRpb25zIHRvb2sgJWxkLiUuOWxkcy4gKEF2ZyAlbGQuJS45bGRzL2l0ZXJhdGlvbilcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHAtXFx1MDAzZWl0ZXJhdGlvbnMsIGdldF9kaXJ0eV9sb2dfdG90YWwudHZfc2VjLFxcbitcXHRcXHRcXHRnZXRfZGlydHlfbG9nX3RvdGFsLnR2X25zZWMsIGF2Zy50dl9zZWMsIGF2Zy50dl9uc2VjKTtcXG4rXFx0fVxcbiBcXG4tXFx0aWYgKGRpcnR5X2xvZ19tYW51YWxfY2Fwcykge1xcbitcXHRpZiAoZGlydHlfbG9nX21hbnVhbF9jYXBzIHx8IGRpcnR5X3Jpbmdfc2l6ZSkge1xcbiBcXHRcXHRhdmcgPSB0aW1lc3BlY19kaXYoY2xlYXJfZGlydHlfbG9nX3RvdGFsLCBwLVxcdTAwM2VpdGVyYXRpb25zKTtcXG4gXFx0XFx0cHJfaW5mbyhcXFwiQ2xlYXIgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0cC1cXHUwMDNlaXRlcmF0aW9ucywgY2xlYXJfZGlydHlfbG9nX3RvdGFsLnR2X3NlYyxcXG4gXFx0XFx0XFx0Y2xlYXJfZGlydHlfbG9nX3RvdGFsLnR2X25zZWMsIGF2Zy50dl9zZWMsIGF2Zy50dl9uc2VjKTtcXG4gXFx0fVxcbiBcXG4tXFx0bWVtc3RyZXNzX2ZyZWVfYml0bWFwcyhiaXRtYXBzLCBwLVxcdTAwM2VzbG90cyk7XFxuK1xcdGlmICghZGlydHlfcmluZ19zaXplKVxcbitcXHRcXHRtZW1zdHJlc3NfZnJlZV9iaXRtYXBzKGJpdG1hcHMsIHAtXFx1MDAzZXNsb3RzKTtcXG4gXFx0bWVtc3RyZXNzX2Rlc3Ryb3lfdm0odm0pO1xcbiB9XFxuIFxcbkBAIC0yNTksMTEgKzM0NywxNSBAQCBzdGF0aWMgdm9pZCBoZWxwKGNoYXIgKm5hbWUpXFxuIFxcdHB1dHMoXFxcIlxcXCIpO1xcbiBcXHRwcmludGYoXFxcInVzYWdlOiAlcyBbLWhdIFstYV0gWy1pIGl0ZXJhdGlvbnNdIFstcCBvZmZzZXRdIFstZ10gXFxcIlxcbiBcXHQgICAgICAgXFxcIlstbSBtb2RlXSBbLW5dIFstYiB2Y3B1IGJ5dGVzXSBbLXYgdmNwdXNdIFstb10gWy1yIHJhbmRvbSBzZWVkIF0gWy1zIG1lbSB0eXBlXVxcXCJcXG4tXFx0ICAgICAgIFxcXCJbLXggbWVtc2xvdHNdIFstdyBwZXJjZW50YWdlXSBbLWMgcGh5c2ljYWwgY3B1cyB0byBydW4gdGVzdCBvbl1cXFxcblxcXCIsIG5hbWUpO1xcbitcXHQgICAgICAgXFxcIlsteCBtZW1zbG90c10gWy13IHBlcmNlbnRhZ2VdIFstYyBwaHlzaWNhbCBjcHVzIHRvIHJ1biB0ZXN0IG9uXSBcXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCJbLWQgZGlydHktcmluZyBlbnRyaWVzXVxcXFxuXFxcIiwgbmFtZSk7XFxuIFxcdHB1dHMoXFxcIlxcXCIpO1xcbiBcXHRwcmludGYoXFxcIiAtYTogYWNjZXNzIG1lbW9yeSByYW5kb21seSByYXRoZXIgdGhhbiBpbiBvcmRlci5cXFxcblxcXCIpO1xcbiBcXHRwcmludGYoXFxcIiAtaTogc3BlY2lmeSBpdGVyYXRpb24gY291bnRzIChkZWZhdWx0OiAlXFxcIlBSSXU2NFxcXCIpXFxcXG5cXFwiLFxcbiBcXHQgICAgICAgVEVTVF9IT1NUX0xPT1BfTik7XFxuK1xcdHByaW50ZihcXFwiIC1kOiBlbmFibGUgZGlydHktcmluZyBmb3IgdHJhY2tpbmcgZGlydHkgcGFnZXMsIHdpdGggZ2l2ZW4gZW50cmllcyBjb3VudC5cXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgICAgIElmIG5vbi16ZXJvLCB3aWxsIGNhdXNlIGRpcnR5LXJpbmcgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mXFxcXG5cXFwiXFxuK1xcdCAgICAgICBcXFwiICAgICBkaXJ0eS1iaXRtYXAuIE11c3QgYmUgYSBwb3dlciBvZiB0d28uXFxcXG5cXFwiKTtcXG4gXFx0cHJpbnRmKFxcXCIgLWc6IERvIG5vdCBlbmFibGUgS1ZNX0NBUF9NQU5VQUxfRElSVFlfTE9HX1BST1RFQ1QyLiBUaGlzXFxcXG5cXFwiXFxuIFxcdCAgICAgICBcXFwiICAgICBtYWtlcyBLVk1fR0VUX0RJUlRZX0xPRyBjbGVhciB0aGUgZGlydHkgbG9nIChpLmUuXFxcXG5cXFwiXFxuIFxcdCAgICAgICBcXFwiICAgICBLVk1fRElSVFlfTE9HX01BTlVBTF9QUk9URUNUX0VOQUJMRSBpcyBub3QgZW5hYmxlZClcXFxcblxcXCJcXG5AQCAtMzA5LDYgKzQwMSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdFxcdC53cml0ZV9wZXJjZW50ID0gMTAwLFxcbiBcXHR9O1xcbiBcXHRpbnQgb3B0O1xcbitcXHR1NjQgdG1wO1xcbiBcXG4gXFx0LyogT3ZlcnJpZGUgdGhlIHNlZWQgdG8gYmUgZGV0ZXJtaW5pc3RpYyBieSBkZWZhdWx0LiAqL1xcbiBcXHRndWVzdF9yYW5kb21fc2VlZCA9IDE7XFxuQEAgLTMyMCw3ICs0MTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXG4gXFx0Z3Vlc3RfbW9kZXNfYXBwZW5kX2RlZmF1bHQoKTtcXG4gXFxuLVxcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFxcXCJhYjpjOmVnaGk6bTpub3A6cjpzOnY6eDp3OlxcXCIpKSAhPSAtMSkge1xcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwiYWI6YzpkOmVnaGk6bTpub3A6cjpzOnY6eDp3OlxcXCIpKSAhPSAtMSkge1xcbiBcXHRcXHRzd2l0Y2ggKG9wdCkge1xcbiBcXHRcXHRjYXNlICdhJzpcXG4gXFx0XFx0XFx0cC5yYW5kb21fYWNjZXNzID0gdHJ1ZTtcXG5AQCAtMzMxLDYgKzQyNCwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHRjYXNlICdjJzpcXG4gXFx0XFx0XFx0cGNwdV9saXN0ID0gb3B0YXJnO1xcbiBcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnZCc6XFxuK1xcdFxcdFxcdHRtcCA9IHBhcnNlX3NpemUob3B0YXJnKTtcXG4rXFx0XFx0XFx0VEVTVF9BU1NFUlQodG1wLCBcXFwiRGlydHktcmluZyBzaXplIHNob3VsZCBiZSBcXHUwMDNlIDBcXFwiKTtcXG4rXFx0XFx0XFx0VEVTVF9BU1NFUlQodG1wIFxcdTAwM2M9IFVJTlQzMl9NQVggLyBzaXplb2Yoc3RydWN0IGt2bV9kaXJ0eV9nZm4pLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIkRpcnR5LXJpbmcgc2l6ZSAoJWx1KSBpcyB0b28gbGFyZ2UuXFxcIiwgdG1wKTtcXG4rXFx0XFx0XFx0ZGlydHlfcmluZ19zaXplID0gdG1wICogc2l6ZW9mKHN0cnVjdCBrdm1fZGlydHlfZ2ZuKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ2UnOlxcbiBcXHRcXHRcXHQvKiAnZScgaXMgZm9yIGV2aWwuICovXFxuIFxcdFxcdFxcdHJ1bl92Y3B1c193aGlsZV9kaXNhYmxpbmdfZGlydHlfbG9nZ2luZyA9IHRydWU7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL21lbXN0cmVzcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbWVtc3RyZXNzLmhcXG5pbmRleCAwZDFkNjIzMGNjMDUxLi5lMTdmMzQ0OTc4YWY2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL21lbXN0cmVzcy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbWVtc3RyZXNzLmhcXG5AQCAtNTgsNyArNTgsOCBAQCBleHRlcm4gc3RydWN0IG1lbXN0cmVzc19hcmdzIG1lbXN0cmVzc19hcmdzO1xcbiBzdHJ1Y3Qga3ZtX3ZtICptZW1zdHJlc3NfY3JlYXRlX3ZtKGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCBpbnQgbnJfdmNwdXMsXFxuIFxcdFxcdFxcdFxcdCAgIHU2NCB2Y3B1X21lbW9yeV9ieXRlcywgaW50IHNsb3RzLFxcbiBcXHRcXHRcXHRcXHQgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIGJhY2tpbmdfc3JjLFxcbi1cXHRcXHRcXHRcXHQgICBib29sIHBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpO1xcbitcXHRcXHRcXHRcXHQgICBib29sIHBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsXFxuK1xcdFxcdFxcdFxcdCAgIHUzMiBkaXJ0eV9yaW5nX3NpemUpO1xcbiB2b2lkIG1lbXN0cmVzc19kZXN0cm95X3ZtKHN0cnVjdCBrdm1fdm0gKnZtKTtcXG4gXFxuIHZvaWQgbWVtc3RyZXNzX3NldF93cml0ZV9wZXJjZW50KHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgd3JpdGVfcGVyY2VudCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xcbmluZGV4IDE5NWYzZmRhZTFlMzkuLmYxZWJkNzEyMjc2M2EgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXFxuQEAgLTE2NywxMCArMTY3LDIzIEBAIHVuc2lnbmVkIGludCBrdm1fY2hlY2tfY2FwKGxvbmcgY2FwKVxcbiBcXG4gdm9pZCB2bV9lbmFibGVfZGlydHlfcmluZyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHJpbmdfc2l6ZSlcXG4ge1xcbi1cXHRpZiAodm1fY2hlY2tfY2FwKHZtLCBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HX0FDUV9SRUwpKVxcbi1cXHRcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HX0FDUV9SRUwsIHJpbmdfc2l6ZSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9ESVJUWV9MT0dfUklORywgcmluZ19zaXplKTtcXG4rXFx0bG9uZyBjYXAgPSBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HX0FDUV9SRUw7XFxuK1xcdGludCBtYXhfc2l6ZSA9IHZtX2NoZWNrX2NhcCh2bSwgY2FwKTtcXG4rXFxuK1xcdGlmICghbWF4X3NpemUpIHtcXG4rXFx0XFx0Y2FwID0gS1ZNX0NBUF9ESVJUWV9MT0dfUklORztcXG4rXFx0XFx0bWF4X3NpemUgPSB2bV9jaGVja19jYXAodm0sIGNhcCk7XFxuK1xcdH1cXG4rXFxuK1xcdFRFU1RfQVNTRVJUKG1heF9zaXplIFxcdTAwM2UgMCwgXFxcIkRpcnR5LXJpbmcgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGtlcm5lbFxcXFxuXFxcIik7XFxuK1xcdFRFU1RfQVNTRVJUKHJpbmdfc2l6ZSBcXHUwMDNjPSBtYXhfc2l6ZSBcXHUwMDI2XFx1MDAyNiBpc19wb3dlcl9vZl8yKHJpbmdfc2l6ZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHJpbmdfc2l6ZSBcXHUwMDNlPSBnZXRwYWdlc2l6ZSgpLFxcbitcXHRcXHQgICAgXFxcIkludmFsaWQgZGlydHktcmluZyBzaXplOiBTaG91bGQgYmUgYSBwb3dlciBvZiB0d28gXFxcIlxcbitcXHRcXHQgICAgXFxcImJldHdlZW4gJWx1IGFuZCAlbHUgZW50cmllc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgIGdldHBhZ2VzaXplKCkgLyBzaXplb2Yoc3RydWN0IGt2bV9kaXJ0eV9nZm4pLFxcbitcXHRcXHQgICAgbWF4X3NpemUgLyBzaXplb2Yoc3RydWN0IGt2bV9kaXJ0eV9nZm4pKTtcXG4rXFxuK1xcdHZtX2VuYWJsZV9jYXAodm0sIGNhcCwgcmluZ19zaXplKTtcXG4gXFx0dm0tXFx1MDAzZWRpcnR5X3Jpbmdfc2l6ZSA9IHJpbmdfc2l6ZTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcXG5pbmRleCA2ZGNkMTU5MTBhMDYwLi5jOWY4NTUzM2ZmZmZkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXFxuQEAgLTEyMSwxMCArMTIxLDM1IEBAIHZvaWQgbWVtc3RyZXNzX3NldHVwX3ZjcHVzKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgbnJfdmNwdXMsXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBrdm1fdm0gKm1lbXN0cmVzc192bV9jcmVhdGVfd2l0aF92Y3B1cyhzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgdTMyIG5yX3ZjcHVzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHU2NCBleHRyYV9tZW1fcGFnZXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgdm9pZCAqZ3Vlc3RfY29kZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW10sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgdTMyIGRpcnR5X3Jpbmdfc2l6ZSlcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRURVNUX0FTU0VSVCghbnJfdmNwdXMgfHwgdmNwdXMsIFxcXCJNdXN0IHByb3ZpZGUgdkNQVSBhcnJheVxcXCIpO1xcbitcXG4rXFx0dm0gPSBfX3ZtX2NyZWF0ZShzaGFwZSwgbnJfdmNwdXMsIGV4dHJhX21lbV9wYWdlcyk7XFxuK1xcbitcXHRpZiAoZGlydHlfcmluZ19zaXplKVxcbitcXHRcXHR2bV9lbmFibGVfZGlydHlfcmluZyh2bSwgZGlydHlfcmluZ19zaXplKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl92Y3B1czsgKytpKVxcbitcXHRcXHR2Y3B1c1tpXSA9IHZtX3ZjcHVfYWRkKHZtLCBpLCBndWVzdF9jb2RlKTtcXG4rXFxuK1xcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcXG4rXFx0cmV0dXJuIHZtO1xcbit9XFxuK1xcbiBzdHJ1Y3Qga3ZtX3ZtICptZW1zdHJlc3NfY3JlYXRlX3ZtKGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCBpbnQgbnJfdmNwdXMsXFxuIFxcdFxcdFxcdFxcdCAgIHU2NCB2Y3B1X21lbW9yeV9ieXRlcywgaW50IHNsb3RzLFxcbiBcXHRcXHRcXHRcXHQgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIGJhY2tpbmdfc3JjLFxcbi1cXHRcXHRcXHRcXHQgICBib29sIHBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpXFxuK1xcdFxcdFxcdFxcdCAgIGJvb2wgcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcyxcXG4rXFx0XFx0XFx0XFx0ICAgdTMyIGRpcnR5X3Jpbmdfc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtc3RyZXNzX2FyZ3MgKmFyZ3MgPSBcXHUwMDI2bWVtc3RyZXNzX2FyZ3M7XFxuIFxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbkBAIC0xNjcsOSArMTkyLDEwIEBAIHN0cnVjdCBrdm1fdm0gKm1lbXN0cmVzc19jcmVhdGVfdm0oZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIGludCBucl92Y3B1cyxcXG4gXFx0ICogVGhlIG1lbW9yeSBpcyBhbHNvIGFkZGVkIHRvIG1lbXNsb3QgMCwgYnV0IHRoYXQncyBhIGJlbmlnbiBzaWRlXFxuIFxcdCAqIGVmZmVjdCBhcyBLVk0gYWxsb3dzIGFsaWFzaW5nIEhWQXMgaW4gbWVzbG90cy5cXG4gXFx0ICovXFxuLVxcdHZtID0gX192bV9jcmVhdGVfd2l0aF92Y3B1cyhWTV9TSEFQRShtb2RlKSwgbnJfdmNwdXMsXFxuLVxcdFxcdFxcdFxcdCAgICBzbG90MF9wYWdlcyArIGd1ZXN0X251bV9wYWdlcyxcXG4tXFx0XFx0XFx0XFx0ICAgIG1lbXN0cmVzc19ndWVzdF9jb2RlLCB2Y3B1cyk7XFxuK1xcdHZtID0gbWVtc3RyZXNzX3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKFZNX1NIQVBFKG1vZGUpLCBucl92Y3B1cyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHNsb3QwX3BhZ2VzICsgZ3Vlc3RfbnVtX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgbWVtc3RyZXNzX2d1ZXN0X2NvZGUsIHZjcHVzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgZGlydHlfcmluZ19zaXplKTtcXG4gXFxuIFxcdGFyZ3MtXFx1MDAzZXZtID0gdm07XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9tb2RpZmljYXRpb25fc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jXFxuaW5kZXggOWM3NTc4YTA5OGMzZS4uM2ExYmU5Yjc1ZTAxZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9tb2RpZmljYXRpb25fc3RyZXNzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jXFxuQEAgLTkwLDcgKzkwLDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcXG4gXFxuIFxcdHZtID0gbWVtc3RyZXNzX2NyZWF0ZV92bShtb2RlLCBucl92Y3B1cywgZ3Vlc3RfcGVyY3B1X21lbV9zaXplLCAxLFxcbiBcXHRcXHRcXHRcXHQgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXFxuLVxcdFxcdFxcdFxcdCBwLVxcdTAwM2VwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKTtcXG4rXFx0XFx0XFx0XFx0IHAtXFx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsIDApO1xcbiAjaWZkZWYgX194ODZfNjRfX1xcbiBcXHRpZiAocC1cXHUwMDNlZGlzYWJsZV9zbG90X3phcF9xdWlyaylcXG4gXFx0XFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9ESVNBQkxFX1FVSVJLUzIsIEtWTV9YODZfUVVJUktfU0xPVF9aQVBfQUxMKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9kaXJ0eV9sb2dfcGFnZV9zcGxpdHRpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9kaXJ0eV9sb2dfcGFnZV9zcGxpdHRpbmdfdGVzdC5jXFxuaW5kZXggMzg4YmE0MTAxZjk3My4uNjYxZTlhYmZiNDM5NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2RpcnR5X2xvZ19wYWdlX3NwbGl0dGluZ190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2RpcnR5X2xvZ19wYWdlX3NwbGl0dGluZ190ZXN0LmNcXG5AQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICp1bnVzZWQpXFxuIFxcdHN0cnVjdCBrdm1fcGFnZV9zdGF0cyBzdGF0c19yZXBvcHVsYXRlZDtcXG4gXFxuIFxcdHZtID0gbWVtc3RyZXNzX2NyZWF0ZV92bShtb2RlLCBWQ1BVUywgZ3Vlc3RfcGVyY3B1X21lbV9zaXplLFxcbi1cXHRcXHRcXHRcXHQgU0xPVFMsIGJhY2tpbmdfc3JjLCBmYWxzZSk7XFxuK1xcdFxcdFxcdFxcdCBTTE9UUywgYmFja2luZ19zcmMsIGZhbHNlLCAwKTtcXG4gXFxuIFxcdGd1ZXN0X251bV9wYWdlcyA9IChWQ1BVUyAqIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSkgXFx1MDAzZVxcdTAwM2Ugdm0tXFx1MDAzZXBhZ2Vfc2hpZnQ7XFxuIFxcdGd1ZXN0X251bV9wYWdlcyA9IHZtX2FkanVzdF9udW1fZ3Vlc3RfcGFnZXMobW9kZSwgZ3Vlc3RfbnVtX3BhZ2VzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MDc6MDAuNTY4MzMwODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NzQ1NTQ0NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyB3aGljaCBhcmUgdXNlcnNwYWNlIHRlc3QgcHJvZ3JhbXMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjE4NGE4NmRhODBkNTFjMzI5ZTA4MTdlZTBhYjM3Y2JmYTFiZDEyNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDAxOjA2OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FjY2Vzc190cmFja2luZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hY2Nlc3NfdHJhY2tpbmdfcGVyZl90ZXN0LmNcbmluZGV4IDQ0MTVjOTRiMjg2NjAuLmY3OGQ1NjI2NWQ4OTMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jXG5AQCAtNDA5LDcgKzQwOSw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRpbnQgbnJfdmNwdXMgPSBwYXJhbXMtXHUwMDNlbnJfdmNwdXM7XG4gXG4gXHR2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIHBhcmFtcy1cdTAwM2V2Y3B1X21lbW9yeV9ieXRlcywgMSxcbi1cdFx0XHRcdCBwYXJhbXMtXHUwMDNlYmFja2luZ19zcmMsICFvdmVybGFwX21lbW9yeV9hY2Nlc3MpO1xuK1x0XHRcdFx0IHBhcmFtcy1cdTAwM2ViYWNraW5nX3NyYywgIW92ZXJsYXBfbWVtb3J5X2FjY2VzcywgMCk7XG4gXG4gXHQvKlxuIFx0ICogSWYgZ3Vlc3RfcGFnZV9zaXplIGlzIGxhcmdlciB0aGFuIHRoZSBob3N0J3MgcGFnZSBzaXplLCB0aGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmNcbmluZGV4IDMwMmM0OTIzZDA5MzAuLjkyMjQ2ZTI3ZWY3NDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuY1xuQEAgLTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxuIFx0aW50IGksIG51bV91ZmZkcyA9IDA7XG4gXG4gXHR2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSwgMSxcbi1cdFx0XHRcdCBwLVx1MDAzZXNyY190eXBlLCBwLVx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpO1xuK1x0XHRcdFx0IHAtXHUwMDNlc3JjX3R5cGUsIHAtXHUwMDNlcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcywgMCk7XG4gXG4gXHRkZW1hbmRfcGFnaW5nX3NpemUgPSBnZXRfYmFja2luZ19zcmNfcGFnZXN6KHAtXHUwMDNlc3JjX3R5cGUpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jXG5pbmRleCBlZjc3OWZhOTE4MjdjLi42ZTgwZDM2Y2M2MWEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xuQEAgLTEzLDYgKzEzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImt2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuQEAgLTI5LDkgKzMwLDUzIEBAIHN0YXRpYyBib29sIHJ1bl92Y3B1c193aGlsZV9kaXNhYmxpbmdfZGlydHlfbG9nZ2luZztcbiBcbiAvKiBIb3N0IHZhcmlhYmxlcyAqL1xuIHN0YXRpYyB1NjQgZGlydHlfbG9nX21hbnVhbF9jYXBzO1xuK3N0YXRpYyB1MzIgZGlydHlfcmluZ19zaXplO1xuIHN0YXRpYyBib29sIGhvc3RfcXVpdDtcbiBzdGF0aWMgaW50IGl0ZXJhdGlvbjtcbiBzdGF0aWMgaW50IHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW0tWTV9NQVhfVkNQVVNdO1xuK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgdmNwdV9kaXJ0eV9yaW5nX2NvbGxlY3RbS1ZNX01BWF9WQ1BVU107XG4rXG4rc3RhdGljIHZvaWQgZGlydHlfcmluZ19jb2xsZWN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyaW5nX2lkeCxcbitcdFx0XHRcdHN0cnVjdCB0aW1lc3BlYyAqdHMpXG4re1xuK1x0c3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBjb2xsZWN0ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjtcbitcdHN0cnVjdCB0aW1lc3BlYyBzdGFydDtcbitcdHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpkaXJ0eV9nZm5zID0gdmNwdV9tYXBfZGlydHlfcmluZyh2Y3B1KTtcbitcdHUzMiBpZHggPSAqcmluZ19pZHg7XG4rXHR1MzIgcmluZ19zaXplID0gdmNwdS1cdTAwM2V2bS1cdTAwM2VkaXJ0eV9yaW5nX3NpemUgLyBzaXplb2Yoc3RydWN0IGt2bV9kaXJ0eV9nZm4pO1xuK1x0aW50IGNsZWFyZWQsIGNvdW50O1xuK1xuK1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNmNvbGxlY3QpO1xuK1xuK1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNnN0YXJ0KTtcbitcbitcdHdoaWxlICh0cnVlKSB7XG4rXHRcdHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpjdXI7XG4rXG4rXHRcdGN1ciA9IFx1MDAyNmRpcnR5X2dmbnNbaWR4ICUgcmluZ19zaXplXTtcbitcdFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y3VyLVx1MDAzZWZsYWdzKSAhPSBLVk1fRElSVFlfR0ZOX0ZfRElSVFkpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmN1ci1cdTAwM2VmbGFncywgS1ZNX0RJUlRZX0dGTl9GX1JFU0VUKTtcbitcdFx0aWR4Kys7XG4rXHR9XG4rXG4rXHRjb3VudCA9IGlkeCAtICpyaW5nX2lkeDtcbitcdCpyaW5nX2lkeCA9IGlkeDtcbitcbitcdGNsZWFyZWQgPSBrdm1fdm1fcmVzZXRfZGlydHlfcmluZyh2Y3B1LVx1MDAzZXZtKTtcbitcbitcdC8qIENsZWFyZWQgcGFnZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGNvbGxlY3RlZCwgYXMgS1ZNIGlzIHN1cHBvc2VkIHRvXG4rXHQgKiBjbGVhciBvbmx5IHRoZSBlbnRyaWVzIHRoYXQgaGF2ZSBiZWVuIGhhcnZlc3RlZCwgYW5kIGEgc2luZ2xlIHZjcHUgd2lsbFxuK1x0ICogaGFydmVzdCBhdCB0aW1lLlxuK1x0ICovXG4rXHRURVNUX0FTU0VSVChjbGVhcmVkID09IGNvdW50LCBcIlJlc2V0IGRpcnR5IHBhZ2VzICgldSkgbWlzbWF0Y2ggXCJcbitcdFx0ICAgIFwid2l0aCBjb2xsZWN0ZWQgKCV1KVwiLCBjbGVhcmVkLCBjb3VudCk7XG4rXG4rXHQqdHMgPSB0aW1lc3BlY19hZGQoKnRzLCB0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KSk7XG4rXG4rXHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZjb2xsZWN0KTtcbit9XG4gXG4gc3RhdGljIHZvaWQgdmNwdV93b3JrZXIoc3RydWN0IG1lbXN0cmVzc192Y3B1X2FyZ3MgKnZjcHVfYXJncylcbiB7XG5AQCAtNDMsMjQgKzg4LDQ1IEBAIHN0YXRpYyB2b2lkIHZjcHVfd29ya2VyKHN0cnVjdCBtZW1zdHJlc3NfdmNwdV9hcmdzICp2Y3B1X2FyZ3MpXG4gXHRzdHJ1Y3QgdGltZXNwZWMgdHNfZGlmZjtcbiBcdHN0cnVjdCB0aW1lc3BlYyB0b3RhbCA9IChzdHJ1Y3QgdGltZXNwZWMpezB9O1xuIFx0c3RydWN0IHRpbWVzcGVjIGF2ZztcbitcdGJvb2wgdXNlX2RpcnR5X3JpbmcgPSAhIXZjcHUtXHUwMDNldm0tXHUwMDNlZGlydHlfcmluZ19zaXplO1xuK1x0dTMyIHJpbmdfaWR4ID0gMDtcbiBcdGludCByZXQ7XG4gXG4gXHRydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbiBcbiBcdHdoaWxlICghUkVBRF9PTkNFKGhvc3RfcXVpdCkpIHtcbiBcdFx0aW50IGN1cnJlbnRfaXRlcmF0aW9uID0gUkVBRF9PTkNFKGl0ZXJhdGlvbik7XG4rXHRcdHN0cnVjdCB0aW1lc3BlYyBjb2xsZWN0ID0gKHN0cnVjdCB0aW1lc3BlYyl7MH07XG4gXG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZzdGFydCk7XG4tXHRcdHJldCA9IF92Y3B1X3J1bih2Y3B1KTtcbitcbitcdFx0ZG8ge1xuK1x0XHRcdHJldCA9IF92Y3B1X3J1bih2Y3B1KTtcbitcdFx0XHRpZiAoIXVzZV9kaXJ0eV9yaW5nKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0ZGlydHlfcmluZ19jb2xsZWN0KHZjcHUsIFx1MDAyNnJpbmdfaWR4LCBcdTAwMjZjb2xsZWN0KTtcbitcdFx0fSB3aGlsZSAoIXJldCBcdTAwMjZcdTAwMjYgcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX0RJUlRZX1JJTkdfRlVMTCk7XG4rXG4gXHRcdHRzX2RpZmYgPSB0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KTtcbiBcbitcdFx0aWYgKHVzZV9kaXJ0eV9yaW5nKSB7XG4rXHRcdFx0dHNfZGlmZiA9IHRpbWVzcGVjX3N1Yih0c19kaWZmLCBjb2xsZWN0KTtcbitcdFx0XHR2Y3B1X2RpcnR5X3JpbmdfY29sbGVjdFt2Y3B1X2lkeF0gPSBjb2xsZWN0O1xuK1x0XHR9XG4rXG4gXHRcdFRFU1RfQVNTRVJUKHJldCA9PSAwLCBcInZjcHVfcnVuIGZhaWxlZDogJWRcIiwgcmV0KTtcbiBcdFx0VEVTVF9BU1NFUlQoZ2V0X3VjYWxsKHZjcHUsIE5VTEwpID09IFVDQUxMX1NZTkMsXG4gXHRcdFx0ICAgIFwiSW52YWxpZCBndWVzdCBzeW5jIHN0YXR1czogZXhpdF9yZWFzb249JXNcIixcbiBcdFx0XHQgICAgZXhpdF9yZWFzb25fc3RyKHJ1bi1cdTAwM2VleGl0X3JlYXNvbikpO1xuIFxuIFx0XHRwcl9kZWJ1ZyhcIkdvdCBzeW5jIGV2ZW50IGZyb20gdkNQVSAlZFxcblwiLCB2Y3B1X2lkeCk7XG4tXHRcdHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW3ZjcHVfaWR4XSA9IGN1cnJlbnRfaXRlcmF0aW9uO1xuK1x0XHQvKlxuK1x0XHQgKiBNYWtlIHN1cmUgdmNwdV9sYXN0X2NvbXBsZXRlZF9pdGVyYXRpb24gd3JpdGUgaGFwcGVucyBiZWZvcmVcbitcdFx0ICogdXBkYXRpbmcgY3VycmVudCBpdGVyYXRpb24uICBQYWlycyB3aXRoIHJ1bl90ZXN0LCBhZnRlciBwb3B1bGF0aW5nLi5cbitcdFx0ICovXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW3ZjcHVfaWR4XSxcbitcdFx0XHRcdCAgY3VycmVudF9pdGVyYXRpb24pO1xuIFx0XHRwcl9kZWJ1ZyhcInZDUFUgJWQgdXBkYXRlZCBsYXN0IGNvbXBsZXRlZCBpdGVyYXRpb24gdG8gJWRcXG5cIixcbiBcdFx0XHQgdmNwdV9pZHgsIHZjcHVfbGFzdF9jb21wbGV0ZWRfaXRlcmF0aW9uW3ZjcHVfaWR4XSk7XG4gXG5AQCAtMTE5LDcgKzE4NSw4IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXG4gXHR2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSxcbiBcdFx0XHRcdCBwLVx1MDAzZXNsb3RzLCBwLVx1MDAzZWJhY2tpbmdfc3JjLFxuLVx0XHRcdFx0IHAtXHUwMDNlcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2Vzcyk7XG4rXHRcdFx0XHQgcC1cdTAwM2VwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzLFxuK1x0XHRcdFx0IGRpcnR5X3Jpbmdfc2l6ZSk7XG4gXG4gXHRtZW1zdHJlc3Nfc2V0X3dyaXRlX3BlcmNlbnQodm0sIHAtXHUwMDNld3JpdGVfcGVyY2VudCk7XG4gXG5AQCAtMTI4LDcgKzE5NSw4IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRob3N0X251bV9wYWdlcyA9IHZtX251bV9ob3N0X3BhZ2VzKG1vZGUsIGd1ZXN0X251bV9wYWdlcyk7XG4gXHRwYWdlc19wZXJfc2xvdCA9IGhvc3RfbnVtX3BhZ2VzIC8gcC1cdTAwM2VzbG90cztcbiBcbi1cdGJpdG1hcHMgPSBtZW1zdHJlc3NfYWxsb2NfYml0bWFwcyhwLVx1MDAzZXNsb3RzLCBwYWdlc19wZXJfc2xvdCk7XG4rXHRpZiAoIWRpcnR5X3Jpbmdfc2l6ZSlcbitcdFx0Yml0bWFwcyA9IG1lbXN0cmVzc19hbGxvY19iaXRtYXBzKHAtXHUwMDNlc2xvdHMsIHBhZ2VzX3Blcl9zbG90KTtcbiBcbiBcdGlmIChkaXJ0eV9sb2dfbWFudWFsX2NhcHMpXG4gXHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfTUFOVUFMX0RJUlRZX0xPR19QUk9URUNUMixcbkBAIC0xMzksOCArMjA3LDEwIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRob3N0X3F1aXQgPSBmYWxzZTtcbiBcbiBcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZzdGFydCk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkrKykge1xuIFx0XHR2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbltpXSA9IC0xO1xuK1x0XHR2Y3B1X2RpcnR5X3JpbmdfY29sbGVjdFtpXSA9IChzdHJ1Y3QgdGltZXNwZWMpezB9O1xuK1x0fVxuIFxuIFx0LypcbiBcdCAqIFVzZSAxMDAlIHdyaXRlcyBkdXJpbmcgdGhlIHBvcHVsYXRpb24gcGhhc2UgdG8gZW5zdXJlIGFsbFxuQEAgLTE4NSw3ICsyNTUsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxuIFxuIFx0XHRwcl9kZWJ1ZyhcIlN0YXJ0aW5nIGl0ZXJhdGlvbiAlZFxcblwiLCBpdGVyYXRpb24pO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSsrKSB7XG4tXHRcdFx0d2hpbGUgKFJFQURfT05DRSh2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbltpXSlcbitcdFx0XHR3aGlsZSAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1X2xhc3RfY29tcGxldGVkX2l0ZXJhdGlvbltpXSlcbiBcdFx0XHQgICAgICAgIT0gaXRlcmF0aW9uKVxuIFx0XHRcdFx0O1xuIFx0XHR9XG5AQCAtMTk1LDYgKzI2NSwyMSBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxuIFx0XHRwcl9pbmZvKFwiSXRlcmF0aW9uICVkIGRpcnR5IG1lbW9yeSB0aW1lOiAlbGQuJS45bGRzXFxuXCIsXG4gXHRcdFx0aXRlcmF0aW9uLCB0c19kaWZmLnR2X3NlYywgdHNfZGlmZi50dl9uc2VjKTtcbiBcbitcdFx0aWYgKGRpcnR5X3Jpbmdfc2l6ZSkge1xuK1x0XHRcdHN0cnVjdCB0aW1lc3BlYyBpdGVyYXRpb25fc3VtID0gKHN0cnVjdCB0aW1lc3BlYyl7MH07XG4rXG4rXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkrKylcbitcdFx0XHRcdGl0ZXJhdGlvbl9zdW0gPSB0aW1lc3BlY19hZGQoaXRlcmF0aW9uX3N1bSxcbitcdFx0XHRcdFx0XHRcdCAgICAgdmNwdV9kaXJ0eV9yaW5nX2NvbGxlY3RbaV0pO1xuK1xuK1x0XHRcdHByX2luZm8oXCJJdGVyYXRpb24gJWQgY2xlYXIgZGlydHkgcmluZyB0aW1lOiAlbGQuJS45bGRzXFxuXCIsXG4rXHRcdFx0XHRpdGVyYXRpb24sIGl0ZXJhdGlvbl9zdW0udHZfc2VjLCBpdGVyYXRpb25fc3VtLnR2X25zZWMpO1xuK1xuK1x0XHRcdGNsZWFyX2RpcnR5X2xvZ190b3RhbCA9IHRpbWVzcGVjX2FkZChjbGVhcl9kaXJ0eV9sb2dfdG90YWwsXG4rXHRcdFx0XHRcdFx0XHQgICAgIGl0ZXJhdGlvbl9zdW0pO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZzdGFydCk7XG4gXHRcdG1lbXN0cmVzc19nZXRfZGlydHlfbG9nKHZtLCBiaXRtYXBzLCBwLVx1MDAzZXNsb3RzKTtcbiBcdFx0dHNfZGlmZiA9IHRpbWVzcGVjX2VsYXBzZWQoc3RhcnQpO1xuQEAgLTIzOCwxOSArMzIzLDIyIEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRob3N0X3F1aXQgPSB0cnVlO1xuIFx0bWVtc3RyZXNzX2pvaW5fdmNwdV90aHJlYWRzKG5yX3ZjcHVzKTtcbiBcbi1cdGF2ZyA9IHRpbWVzcGVjX2RpdihnZXRfZGlydHlfbG9nX3RvdGFsLCBwLVx1MDAzZWl0ZXJhdGlvbnMpO1xuLVx0cHJfaW5mbyhcIkdldCBkaXJ0eSBsb2cgb3ZlciAlbHUgaXRlcmF0aW9ucyB0b29rICVsZC4lLjlsZHMuIChBdmcgJWxkLiUuOWxkcy9pdGVyYXRpb24pXFxuXCIsXG4tXHRcdHAtXHUwMDNlaXRlcmF0aW9ucywgZ2V0X2RpcnR5X2xvZ190b3RhbC50dl9zZWMsXG4tXHRcdGdldF9kaXJ0eV9sb2dfdG90YWwudHZfbnNlYywgYXZnLnR2X3NlYywgYXZnLnR2X25zZWMpO1xuK1x0aWYgKCFkaXJ0eV9yaW5nX3NpemUpIHtcbitcdFx0YXZnID0gdGltZXNwZWNfZGl2KGdldF9kaXJ0eV9sb2dfdG90YWwsIHAtXHUwMDNlaXRlcmF0aW9ucyk7XG4rXHRcdHByX2luZm8oXCJHZXQgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxcblwiLFxuK1x0XHRcdHAtXHUwMDNlaXRlcmF0aW9ucywgZ2V0X2RpcnR5X2xvZ190b3RhbC50dl9zZWMsXG4rXHRcdFx0Z2V0X2RpcnR5X2xvZ190b3RhbC50dl9uc2VjLCBhdmcudHZfc2VjLCBhdmcudHZfbnNlYyk7XG4rXHR9XG4gXG4tXHRpZiAoZGlydHlfbG9nX21hbnVhbF9jYXBzKSB7XG4rXHRpZiAoZGlydHlfbG9nX21hbnVhbF9jYXBzIHx8IGRpcnR5X3Jpbmdfc2l6ZSkge1xuIFx0XHRhdmcgPSB0aW1lc3BlY19kaXYoY2xlYXJfZGlydHlfbG9nX3RvdGFsLCBwLVx1MDAzZWl0ZXJhdGlvbnMpO1xuIFx0XHRwcl9pbmZvKFwiQ2xlYXIgZGlydHkgbG9nIG92ZXIgJWx1IGl0ZXJhdGlvbnMgdG9vayAlbGQuJS45bGRzLiAoQXZnICVsZC4lLjlsZHMvaXRlcmF0aW9uKVxcblwiLFxuIFx0XHRcdHAtXHUwMDNlaXRlcmF0aW9ucywgY2xlYXJfZGlydHlfbG9nX3RvdGFsLnR2X3NlYyxcbiBcdFx0XHRjbGVhcl9kaXJ0eV9sb2dfdG90YWwudHZfbnNlYywgYXZnLnR2X3NlYywgYXZnLnR2X25zZWMpO1xuIFx0fVxuIFxuLVx0bWVtc3RyZXNzX2ZyZWVfYml0bWFwcyhiaXRtYXBzLCBwLVx1MDAzZXNsb3RzKTtcbitcdGlmICghZGlydHlfcmluZ19zaXplKVxuK1x0XHRtZW1zdHJlc3NfZnJlZV9iaXRtYXBzKGJpdG1hcHMsIHAtXHUwMDNlc2xvdHMpO1xuIFx0bWVtc3RyZXNzX2Rlc3Ryb3lfdm0odm0pO1xuIH1cbiBcbkBAIC0yNTksMTEgKzM0NywxNSBAQCBzdGF0aWMgdm9pZCBoZWxwKGNoYXIgKm5hbWUpXG4gXHRwdXRzKFwiXCIpO1xuIFx0cHJpbnRmKFwidXNhZ2U6ICVzIFstaF0gWy1hXSBbLWkgaXRlcmF0aW9uc10gWy1wIG9mZnNldF0gWy1nXSBcIlxuIFx0ICAgICAgIFwiWy1tIG1vZGVdIFstbl0gWy1iIHZjcHUgYnl0ZXNdIFstdiB2Y3B1c10gWy1vXSBbLXIgcmFuZG9tIHNlZWQgXSBbLXMgbWVtIHR5cGVdXCJcbi1cdCAgICAgICBcIlsteCBtZW1zbG90c10gWy13IHBlcmNlbnRhZ2VdIFstYyBwaHlzaWNhbCBjcHVzIHRvIHJ1biB0ZXN0IG9uXVxcblwiLCBuYW1lKTtcbitcdCAgICAgICBcIlsteCBtZW1zbG90c10gWy13IHBlcmNlbnRhZ2VdIFstYyBwaHlzaWNhbCBjcHVzIHRvIHJ1biB0ZXN0IG9uXSBcXG5cIlxuK1x0ICAgICAgIFwiWy1kIGRpcnR5LXJpbmcgZW50cmllc11cXG5cIiwgbmFtZSk7XG4gXHRwdXRzKFwiXCIpO1xuIFx0cHJpbnRmKFwiIC1hOiBhY2Nlc3MgbWVtb3J5IHJhbmRvbWx5IHJhdGhlciB0aGFuIGluIG9yZGVyLlxcblwiKTtcbiBcdHByaW50ZihcIiAtaTogc3BlY2lmeSBpdGVyYXRpb24gY291bnRzIChkZWZhdWx0OiAlXCJQUkl1NjRcIilcXG5cIixcbiBcdCAgICAgICBURVNUX0hPU1RfTE9PUF9OKTtcbitcdHByaW50ZihcIiAtZDogZW5hYmxlIGRpcnR5LXJpbmcgZm9yIHRyYWNraW5nIGRpcnR5IHBhZ2VzLCB3aXRoIGdpdmVuIGVudHJpZXMgY291bnQuXFxuXCJcbitcdCAgICAgICBcIiAgICAgSWYgbm9uLXplcm8sIHdpbGwgY2F1c2UgZGlydHktcmluZyB0byBiZSB1c2VkIGluc3RlYWQgb2ZcXG5cIlxuK1x0ICAgICAgIFwiICAgICBkaXJ0eS1iaXRtYXAuIE11c3QgYmUgYSBwb3dlciBvZiB0d28uXFxuXCIpO1xuIFx0cHJpbnRmKFwiIC1nOiBEbyBub3QgZW5hYmxlIEtWTV9DQVBfTUFOVUFMX0RJUlRZX0xPR19QUk9URUNUMi4gVGhpc1xcblwiXG4gXHQgICAgICAgXCIgICAgIG1ha2VzIEtWTV9HRVRfRElSVFlfTE9HIGNsZWFyIHRoZSBkaXJ0eSBsb2cgKGkuZS5cXG5cIlxuIFx0ICAgICAgIFwiICAgICBLVk1fRElSVFlfTE9HX01BTlVBTF9QUk9URUNUX0VOQUJMRSBpcyBub3QgZW5hYmxlZClcXG5cIlxuQEAgLTMwOSw2ICs0MDEsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHQud3JpdGVfcGVyY2VudCA9IDEwMCxcbiBcdH07XG4gXHRpbnQgb3B0O1xuK1x0dTY0IHRtcDtcbiBcbiBcdC8qIE92ZXJyaWRlIHRoZSBzZWVkIHRvIGJlIGRldGVybWluaXN0aWMgYnkgZGVmYXVsdC4gKi9cbiBcdGd1ZXN0X3JhbmRvbV9zZWVkID0gMTtcbkBAIC0zMjAsNyArNDEzLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcbiBcdGd1ZXN0X21vZGVzX2FwcGVuZF9kZWZhdWx0KCk7XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcImFiOmM6ZWdoaTptOm5vcDpyOnM6djp4Onc6XCIpKSAhPSAtMSkge1xuK1x0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCJhYjpjOmQ6ZWdoaTptOm5vcDpyOnM6djp4Onc6XCIpKSAhPSAtMSkge1xuIFx0XHRzd2l0Y2ggKG9wdCkge1xuIFx0XHRjYXNlICdhJzpcbiBcdFx0XHRwLnJhbmRvbV9hY2Nlc3MgPSB0cnVlO1xuQEAgLTMzMSw2ICs0MjQsMTMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0Y2FzZSAnYyc6XG4gXHRcdFx0cGNwdV9saXN0ID0gb3B0YXJnO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdkJzpcbitcdFx0XHR0bXAgPSBwYXJzZV9zaXplKG9wdGFyZyk7XG4rXHRcdFx0VEVTVF9BU1NFUlQodG1wLCBcIkRpcnR5LXJpbmcgc2l6ZSBzaG91bGQgYmUgXHUwMDNlIDBcIik7XG4rXHRcdFx0VEVTVF9BU1NFUlQodG1wIFx1MDAzYz0gVUlOVDMyX01BWCAvIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiksXG4rXHRcdFx0XHQgICAgXCJEaXJ0eS1yaW5nIHNpemUgKCVsdSkgaXMgdG9vIGxhcmdlLlwiLCB0bXApO1xuK1x0XHRcdGRpcnR5X3Jpbmdfc2l6ZSA9IHRtcCAqIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbik7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ2UnOlxuIFx0XHRcdC8qICdlJyBpcyBmb3IgZXZpbC4gKi9cbiBcdFx0XHRydW5fdmNwdXNfd2hpbGVfZGlzYWJsaW5nX2RpcnR5X2xvZ2dpbmcgPSB0cnVlO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL21lbXN0cmVzcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbWVtc3RyZXNzLmhcbmluZGV4IDBkMWQ2MjMwY2MwNTEuLmUxN2YzNDQ5NzhhZjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9tZW1zdHJlc3MuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbWVtc3RyZXNzLmhcbkBAIC01OCw3ICs1OCw4IEBAIGV4dGVybiBzdHJ1Y3QgbWVtc3RyZXNzX2FyZ3MgbWVtc3RyZXNzX2FyZ3M7XG4gc3RydWN0IGt2bV92bSAqbWVtc3RyZXNzX2NyZWF0ZV92bShlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgaW50IG5yX3ZjcHVzLFxuIFx0XHRcdFx0ICAgdTY0IHZjcHVfbWVtb3J5X2J5dGVzLCBpbnQgc2xvdHMsXG4gXHRcdFx0XHQgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIGJhY2tpbmdfc3JjLFxuLVx0XHRcdFx0ICAgYm9vbCBwYXJ0aXRpb25fdmNwdV9tZW1vcnlfYWNjZXNzKTtcbitcdFx0XHRcdCAgIGJvb2wgcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcyxcbitcdFx0XHRcdCAgIHUzMiBkaXJ0eV9yaW5nX3NpemUpO1xuIHZvaWQgbWVtc3RyZXNzX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bV92bSAqdm0pO1xuIFxuIHZvaWQgbWVtc3RyZXNzX3NldF93cml0ZV9wZXJjZW50KHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgd3JpdGVfcGVyY2VudCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG5pbmRleCAxOTVmM2ZkYWUxZTM5Li5mMWViZDcxMjI3NjNhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbkBAIC0xNjcsMTAgKzE2NywyMyBAQCB1bnNpZ25lZCBpbnQga3ZtX2NoZWNrX2NhcChsb25nIGNhcClcbiBcbiB2b2lkIHZtX2VuYWJsZV9kaXJ0eV9yaW5nKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgcmluZ19zaXplKVxuIHtcbi1cdGlmICh2bV9jaGVja19jYXAodm0sIEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfQUNRX1JFTCkpXG4tXHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfQUNRX1JFTCwgcmluZ19zaXplKTtcbi1cdGVsc2Vcbi1cdFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9ESVJUWV9MT0dfUklORywgcmluZ19zaXplKTtcbitcdGxvbmcgY2FwID0gS1ZNX0NBUF9ESVJUWV9MT0dfUklOR19BQ1FfUkVMO1xuK1x0aW50IG1heF9zaXplID0gdm1fY2hlY2tfY2FwKHZtLCBjYXApO1xuK1xuK1x0aWYgKCFtYXhfc2l6ZSkge1xuK1x0XHRjYXAgPSBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HO1xuK1x0XHRtYXhfc2l6ZSA9IHZtX2NoZWNrX2NhcCh2bSwgY2FwKTtcbitcdH1cbitcbitcdFRFU1RfQVNTRVJUKG1heF9zaXplIFx1MDAzZSAwLCBcIkRpcnR5LXJpbmcgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGtlcm5lbFxcblwiKTtcbitcdFRFU1RfQVNTRVJUKHJpbmdfc2l6ZSBcdTAwM2M9IG1heF9zaXplIFx1MDAyNlx1MDAyNiBpc19wb3dlcl9vZl8yKHJpbmdfc2l6ZSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICByaW5nX3NpemUgXHUwMDNlPSBnZXRwYWdlc2l6ZSgpLFxuK1x0XHQgICAgXCJJbnZhbGlkIGRpcnR5LXJpbmcgc2l6ZTogU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvIFwiXG4rXHRcdCAgICBcImJldHdlZW4gJWx1IGFuZCAlbHUgZW50cmllc1xcblwiLFxuK1x0XHQgICAgZ2V0cGFnZXNpemUoKSAvIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiksXG4rXHRcdCAgICBtYXhfc2l6ZSAvIHNpemVvZihzdHJ1Y3Qga3ZtX2RpcnR5X2dmbikpO1xuK1xuK1x0dm1fZW5hYmxlX2NhcCh2bSwgY2FwLCByaW5nX3NpemUpO1xuIFx0dm0tXHUwMDNlZGlydHlfcmluZ19zaXplID0gcmluZ19zaXplO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuaW5kZXggNmRjZDE1OTEwYTA2MC4uYzlmODU1MzNmZmZmZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcbkBAIC0xMjEsMTAgKzEyMSwzNSBAQCB2b2lkIG1lbXN0cmVzc19zZXR1cF92Y3B1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG5yX3ZjcHVzLFxuIFx0fVxuIH1cbiBcbitzdGF0aWMgc3RydWN0IGt2bV92bSAqbWVtc3RyZXNzX3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSxcbitcdFx0XHRcdFx0XHQgICAgIHUzMiBucl92Y3B1cyxcbitcdFx0XHRcdFx0XHQgICAgIHU2NCBleHRyYV9tZW1fcGFnZXMsXG4rXHRcdFx0XHRcdFx0ICAgICB2b2lkICpndWVzdF9jb2RlLFxuK1x0XHRcdFx0XHRcdCAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdLFxuK1x0XHRcdFx0XHRcdCAgICAgdTMyIGRpcnR5X3Jpbmdfc2l6ZSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBpO1xuK1xuK1x0VEVTVF9BU1NFUlQoIW5yX3ZjcHVzIHx8IHZjcHVzLCBcIk11c3QgcHJvdmlkZSB2Q1BVIGFycmF5XCIpO1xuK1xuK1x0dm0gPSBfX3ZtX2NyZWF0ZShzaGFwZSwgbnJfdmNwdXMsIGV4dHJhX21lbV9wYWdlcyk7XG4rXG4rXHRpZiAoZGlydHlfcmluZ19zaXplKVxuK1x0XHR2bV9lbmFibGVfZGlydHlfcmluZyh2bSwgZGlydHlfcmluZ19zaXplKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyArK2kpXG4rXHRcdHZjcHVzW2ldID0gdm1fdmNwdV9hZGQodm0sIGksIGd1ZXN0X2NvZGUpO1xuK1xuK1x0a3ZtX2FyY2hfdm1fZmluYWxpemVfdmNwdXModm0pO1xuK1x0cmV0dXJuIHZtO1xuK31cbitcbiBzdHJ1Y3Qga3ZtX3ZtICptZW1zdHJlc3NfY3JlYXRlX3ZtKGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCBpbnQgbnJfdmNwdXMsXG4gXHRcdFx0XHQgICB1NjQgdmNwdV9tZW1vcnlfYnl0ZXMsIGludCBzbG90cyxcbiBcdFx0XHRcdCAgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgYmFja2luZ19zcmMsXG4tXHRcdFx0XHQgICBib29sIHBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpXG4rXHRcdFx0XHQgICBib29sIHBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MsXG4rXHRcdFx0XHQgICB1MzIgZGlydHlfcmluZ19zaXplKVxuIHtcbiBcdHN0cnVjdCBtZW1zdHJlc3NfYXJncyAqYXJncyA9IFx1MDAyNm1lbXN0cmVzc19hcmdzO1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG5AQCAtMTY3LDkgKzE5MiwxMCBAQCBzdHJ1Y3Qga3ZtX3ZtICptZW1zdHJlc3NfY3JlYXRlX3ZtKGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCBpbnQgbnJfdmNwdXMsXG4gXHQgKiBUaGUgbWVtb3J5IGlzIGFsc28gYWRkZWQgdG8gbWVtc2xvdCAwLCBidXQgdGhhdCdzIGEgYmVuaWduIHNpZGVcbiBcdCAqIGVmZmVjdCBhcyBLVk0gYWxsb3dzIGFsaWFzaW5nIEhWQXMgaW4gbWVzbG90cy5cbiBcdCAqL1xuLVx0dm0gPSBfX3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKFZNX1NIQVBFKG1vZGUpLCBucl92Y3B1cyxcbi1cdFx0XHRcdCAgICBzbG90MF9wYWdlcyArIGd1ZXN0X251bV9wYWdlcyxcbi1cdFx0XHRcdCAgICBtZW1zdHJlc3NfZ3Vlc3RfY29kZSwgdmNwdXMpO1xuK1x0dm0gPSBtZW1zdHJlc3Nfdm1fY3JlYXRlX3dpdGhfdmNwdXMoVk1fU0hBUEUobW9kZSksIG5yX3ZjcHVzLFxuK1x0XHRcdFx0XHQgICAgc2xvdDBfcGFnZXMgKyBndWVzdF9udW1fcGFnZXMsXG4rXHRcdFx0XHRcdCAgICBtZW1zdHJlc3NfZ3Vlc3RfY29kZSwgdmNwdXMsXG4rXHRcdFx0XHRcdCAgICBkaXJ0eV9yaW5nX3NpemUpO1xuIFxuIFx0YXJncy1cdTAwM2V2bSA9IHZtO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfbW9kaWZpY2F0aW9uX3N0cmVzc190ZXN0LmNcbmluZGV4IDljNzU3OGEwOThjM2UuLjNhMWJlOWI3NWUwMWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9tb2RpZmljYXRpb25fc3RyZXNzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfbW9kaWZpY2F0aW9uX3N0cmVzc190ZXN0LmNcbkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXG4gXHR2bSA9IG1lbXN0cmVzc19jcmVhdGVfdm0obW9kZSwgbnJfdmNwdXMsIGd1ZXN0X3BlcmNwdV9tZW1fc2l6ZSwgMSxcbiBcdFx0XHRcdCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbi1cdFx0XHRcdCBwLVx1MDAzZXBhcnRpdGlvbl92Y3B1X21lbW9yeV9hY2Nlc3MpO1xuK1x0XHRcdFx0IHAtXHUwMDNlcGFydGl0aW9uX3ZjcHVfbWVtb3J5X2FjY2VzcywgMCk7XG4gI2lmZGVmIF9feDg2XzY0X19cbiBcdGlmIChwLVx1MDAzZWRpc2FibGVfc2xvdF96YXBfcXVpcmspXG4gXHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRElTQUJMRV9RVUlSS1MyLCBLVk1fWDg2X1FVSVJLX1NMT1RfWkFQX0FMTCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9kaXJ0eV9sb2dfcGFnZV9zcGxpdHRpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9kaXJ0eV9sb2dfcGFnZV9zcGxpdHRpbmdfdGVzdC5jXG5pbmRleCAzODhiYTQxMDFmOTczLi42NjFlOWFiZmI0Mzk1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9kaXJ0eV9sb2dfcGFnZV9zcGxpdHRpbmdfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2RpcnR5X2xvZ19wYWdlX3NwbGl0dGluZ190ZXN0LmNcbkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKnVudXNlZClcbiBcdHN0cnVjdCBrdm1fcGFnZV9zdGF0cyBzdGF0c19yZXBvcHVsYXRlZDtcbiBcbiBcdHZtID0gbWVtc3RyZXNzX2NyZWF0ZV92bShtb2RlLCBWQ1BVUywgZ3Vlc3RfcGVyY3B1X21lbV9zaXplLFxuLVx0XHRcdFx0IFNMT1RTLCBiYWNraW5nX3NyYywgZmFsc2UpO1xuK1x0XHRcdFx0IFNMT1RTLCBiYWNraW5nX3NyYywgZmFsc2UsIDApO1xuIFxuIFx0Z3Vlc3RfbnVtX3BhZ2VzID0gKFZDUFVTICogZ3Vlc3RfcGVyY3B1X21lbV9zaXplKSBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdDtcbiBcdGd1ZXN0X251bV9wYWdlcyA9IHZtX2FkanVzdF9udW1fZ3Vlc3RfcGFnZXMobW9kZSwgZ3Vlc3RfbnVtX3BhZ2VzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjA3OjAwLjU2ODM1MTAxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc0NTQ4NjM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIEtWTSBzZWxmdGVzdHMsIHNwZWNpZmljYWxseSB0aGVzZSBmaWxlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gOiBgZGlydHlfbG9nX3BlcmZfdGVzdC5jYCwgYG1lbXN0cmVzcy5jYCwgYGt2bV91dGlsLmNgLCBhbmQgYSBmZXcgb3RoZXJzLiBJdCdzIGFib3V0IGFkZGluZyBzdXBwb3J0IGZvciB0ZXN0aW5nIHRoZSBLVk0gZGlydHkgcmluZyBmZWF0dXJlIChgS1ZNX0NBUF9ESVJUWV9MT0dfUklOR2AgYW5kIGBLVk1fQ0FQX0RJUlRZX0xPR19SSU5HX0FDUV9SRUxgKSB3aXRoaW4gYGRpcnR5X2xvZ19wZXJmX3Rlc3QuY2AuIFRoZSBjcml0aWNhbCB0aGluZyBpcyB0aGF0IGFsbCB0aGVzZSBtb2RpZmljYXRpb25zIGFyZSBjb250YWluZWQgZW50aXJlbHkgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5LiBObyBjaGFuZ2VzIGFyZSBiZWluZyBtYWRlIHRvIHRoZSBrZXJuZWwncyBjb3JlIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS5cblxuTm93LCB0aGUgcHJvbXB0IGdpdmVzIGEgbGlzdCBvZiBjb25kaXRpb25zIHdoZXJlIHdlIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEl0IGRvZXNuJ3QgZXhwbGljaXRseSBtZW50aW9uIHNlbGZ0ZXN0cywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBIb3dldmVyLCBzZWxmdGVzdHMgYXJlICp1c2VyLXNwYWNlKiB0ZXN0aW5nIHRvb2xzLiBUaGUgcHJvbXB0IGRvZXMgc2F5IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBbLi4uXSBtb2RpZmljYXRpb25zIHRvIFsuLi5dIGRvY3VtZW50YXRpb24sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuIC0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuIC0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiAtIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKSB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXCJcblRoZSBwcm9tcHQgYWxzbyBzYXlzIFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIlxuXG5TaW5jZSB0aGlzICpvbmx5KiB0b3VjaGVzIHVzZXJzcGFjZSBzZWxmdGVzdHMsIG5vdCBhbnkgb2YgdGhvc2UgYXJlYXMsIGl0J3MgYSBjbGVhciBjYXNlLiBUaGUgcGF0Y2ggZG9lcyAqbm90KiBtb2RpZnkgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGUgZmlsZXMgYXJlIGRlZmluaXRlbHkganVzdCBpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeSwgYW5kIGFyZSBhbGwgc2VsZnRlc3RzLCB1c2VyLXNwYWNlIHRvb2xzLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGUgZmlsZSBsaXN0OiBgYWNjZXNzX3RyYWNraW5nX3BlcmZfdGVzdC5jYCwgYGRlbWFuZF9wYWdpbmdfdGVzdC5jYCwgYGRpcnR5X2xvZ19wZXJmX3Rlc3QuY2AsIGBpbmNsdWRlL21lbXN0cmVzcy5oYCwgYGxpYi9rdm1fdXRpbC5jYCwgYGxpYi9tZW1zdHJlc3MuY2AsIGBtZW1zbG90X21vZGlmaWNhdGlvbl9zdHJlc3NfdGVzdC5jYCwgYW5kIGB4ODYvZGlydHlfbG9nX3BhZ2Vfc3BsaXR0aW5nX3Rlc3QuY2AuIFRoZXNlIGFyZSBhbGwgdXNlci1zcGFjZSB0ZXN0cywgc28gaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXRlcm1pbmF0aW9uLlxuXG5UaGVyZWZvcmUsIEknbSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByYXRpb25hbGUgaXMgdGhhdCB0aGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHVzZXIgc3BhY2UgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGNoYW5nZXMgdG8ga2VybmVsIGNvZGUuIEl0IGRvZXNuJ3QgbW9kaWZ5IGtlcm5lbCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMzMywiT3V0cHV0VG9rZW5zIjo3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjA3OjEwLjMxMzgzOTkzNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gd2hpY2ggYXJlIHVzZXJzcGFjZSB0ZXN0IHByb2dyYW1zLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIHdoaWNoIGFyZSB1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowx4lzc[1] Phase: Running StartedAt: 2026-07-31 01:07:21 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4lzc[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-31 01:07:21 +0000 UTC FinishedAt: 2026-07-31 01:07:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}