Name: series-workflowxgm6g Phase: Failed StartedAt: 2026-07-06 08:31:40 +0000 UTC FinishedAt: 2026-07-06 08:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgm6g[0] Phase: Succeeded StartedAt: 2026-07-06 08:31:40 +0000 UTC FinishedAt: 2026-07-06 08:54:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgm6g[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 08:31:40 +0000 UTC FinishedAt: 2026-07-06 08:54:09 +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+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MzZjMTc0N2ZlZDY0ZGEyMDYzYjU5NDZiNjZiMWRiY2U1ZWY5YjU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgNiAwODo1MzowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oXG5pbmRleCAyYzM3N2Y0ZTlkZjFkMy4uNDZhOGExODc4ZGMxZmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhcbkBAIC02OCw3ICYjNDM7NjgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2lnc2FmZV9wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pXG4gI2RlZmluZSBkcHJpbnRmMyhhcmdzLi4uKSBkcHJpbnRmX2xldmVsKDMsIGFyZ3MpXG4gI2RlZmluZSBkcHJpbnRmNChhcmdzLi4uKSBkcHJpbnRmX2xldmVsKDQsIGFyZ3MpXG4gXG4tZXh0ZXJuIHZvaWQgYWJvcnRfaG9va3Modm9pZCk7XG4mIzQzO3ZvaWQgdHJhY2luZ19vbih2b2lkKTtcbiYjNDM7dm9pZCB0cmFjaW5nX29mZih2b2lkKTtcbiYjNDM7dm9pZCBhYm9ydF9ob29rcyh2b2lkKTtcbiAjZGVmaW5lIHBrZXlfYXNzZXJ0KGNvbmRpdGlvbikgZG8ge1x0XHRcXFxuIFx0aWYgKCEoY29uZGl0aW9uKSkge1x0XHRcdFxcXG4gXHRcdGRwcmludGYwKFwmIzM0OyMgYXNzZXJ0KCkgYXQgJXM6OiVkIHRlc3RfbnI6ICVkIGl0ZXJhdGlvbjogJWRcXG5cJiMzNDssIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaFxuaW5kZXggMTdiZjJkMWIwMTkyZTAuLjJjZTg1NTgwYjQwNDg3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oXG5AQCAtMTI2LDcgJiM0MzsxMjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKm1hbGxvY19wa2V5X3dpdGhfbXByb3RlY3Rfc3VicGFnZShsb25nIHNpemUsIGludCBwcm90LCB1MTYgcFxuIFx0XHRcdHNpemUsIHByb3QsIHBrZXkpO1xuIFx0cGtleV9hc3NlcnQocGtleSBcdTAwM2MgTlJfUEtFWVMpO1xuIFx0cHRyID0gbW1hcChOVUxMLCBzaXplLCBwcm90LCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7XG4tXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4mIzQzO1x0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xuIFxuIFx0cmV0ID0gc3lzY2FsbChfX05SX3N1YnBhZ2VfcHJvdCwgcHRyLCBzaXplLCBOVUxMKTtcbiBcdGlmIChyZXQpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jXG5pbmRleCAzMDJmZWY1NDA0OWM4Ny4uYzIxOGQwNTEwYTJhNDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmNcbkBAIC0xOSw3ICYjNDM7MTksNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2Nhc3NlcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG5AQCAtMjA3LDIyICYjNDM7MjA2LDI1IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfcGtleTBfZGlzYWJsZWQodm9pZClcbiBcdHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4gXHRwdGhyZWFkX2F0dHJfdCBhdHRyO1xuIFx0cHRocmVhZF90IHRocjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPO1xuIFxuIFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyO1xuIFx0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4tXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCYjMzQ7c2lnYWN0aW9uXCYjMzQ7KTtcbi1cdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuLVx0fVxuJiM0MztcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCk7XG4mIzQzO1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0bWVtc2V0KFx1MDAyNnNpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7XG4gXG4gXHRwdGhyZWFkX2F0dHJfaW5pdChcdTAwMjZhdHRyKTtcbiBcdHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZShcdTAwMjZhdHRyLCBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCk7XG4gXG4tXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHIsIFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3dpdGhfcGtleTBfZGlzYWJsZWQsIE5VTEwpO1xuJiM0MztcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3Zfd2l0aF9wa2V5MF9kaXNhYmxlZCwgTlVMTCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZXJybm8gPSByZXQ7XG4mIzQzO1x0XHRwa2V5X2Fzc2VydCgwKTtcbiYjNDM7XHR9XG4gXG4gXHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuIFx0d2hpbGUgKHNpZ2luZm8uc2lfc2lnbm8gPT0gMClcbkBAIC0yNDcsMjIgJiM0MzsyNDksMjUgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfY2Fubm90X2FjY2Vzc19zdGFjayh2b2lkKVxuIFx0c3RydWN0IHNpZ2FjdGlvbiBzYTtcbiBcdHB0aHJlYWRfYXR0cl90IGF0dHI7XG4gXHRwdGhyZWFkX3QgdGhyO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87XG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7XG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcJiMzNDtzaWdhY3Rpb25cJiMzNDspO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4mIzQzO1x0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdHB0aHJlYWRfYXR0cl9pbml0KFx1MDAyNmF0dHIpO1xuIFx0cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3ZfcGt1ZXJyX3N0YWNrLCBOVUxMKTtcbiYjNDM7XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHIsIFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZXJybm8gPSByZXQ7XG4mIzQzO1x0XHRwa2V5X2Fzc2VydCgwKTtcbiYjNDM7XHR9XG4gXG4gXHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuIFx0d2hpbGUgKHNpZ2luZm8uc2lfc2lnbm8gPT0gMClcbkBAIC0yODUsMjQgJiM0MzsyOTAsMjIgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZClcbiBcdHN0YXRpYyBzdGFja190IHNpZ3N0YWNrO1xuIFx0dm9pZCAqc3RhY2s7XG4gXHRpbnQgcGtleTtcbi1cdGludCBwYXJlbnRfcGlkID0gMDtcbiBcdGludCBjaGlsZF9waWQgPSAwO1xuIFx0dTY0IHBrZXlfcmVnO1xuJiM0MztcdGxvbmcgcmV0O1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfT05TVEFDSztcbiBcbiBcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3NlZ3ZfaGFuZGxlcjtcbiBcbiBcdHNpZ2VtcHR5c2V0KFx1MDAyNnNhLnNhX21hc2spO1xuLVx0aWYgKHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcbi1cdFx0cGVycm9yKFwmIzM0O3NpZ2FjdGlvblwmIzM0Oyk7XG4tXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbiYjNDM7XHRyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcbiBcbiBcdHN0YWNrID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHQgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuIFxuLVx0YXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xuIFxuIFx0LyogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBNUEsgMSAqL1xuIFx0cGtleV9yZWcgPSBwa2V5X3JlZ19yZXN0cmljdGl2ZV9kZWZhdWx0KCk7XG5AQCAtMzE3LDMzICYjNDM7MzIwLDQxIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpXG4gXHQvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqL1xuIFx0c2lnc3RhY2suc3Nfc3AgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdFx0ICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4mIzQzO1x0cGtleV9hc3NlcnQoc2lnc3RhY2suc3Nfc3AgIT0gTUFQX0ZBSUxFRCk7XG4gXHRzaWdzdGFjay5zc19mbGFncyA9IDA7XG4gXHRzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTtcbiBcbiBcdG1lbXNldChcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xuIFxuIFx0LyogVXNlIGNsb25lIHRvIGF2b2lkIG5ld2VyIGdsaWJjcyB1c2luZyByc2VxIG9uIG5ldyB0aHJlYWRzICovXG4tXHRsb25nIHJldCA9IGNsb25lX3JhdyhDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfFxuLVx0XHRcdCAgICAgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxuLVx0XHRcdCAgICAgQ0xPTkVfUEFSRU5UX1NFVFRJRCB8IENMT05FX0NISUxEX0NMRUFSVElEIHxcbi1cdFx0XHQgICAgIENMT05FX0RFVEFDSEVELFxuLVx0XHRcdCAgICAgc3RhY2sgJiM0MzsgU1RBQ0tfU0laRSxcbi1cdFx0XHQgICAgIFx1MDAyNnBhcmVudF9waWQsXG4tXHRcdFx0ICAgICBcdTAwMjZjaGlsZF9waWQpO1xuJiM0MztcdHJldCA9IGNsb25lX3JhdyhDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfFxuJiM0MztcdFx0XHRDTE9ORV9TSUdIQU5EIHwgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNFTSB8XG4mIzQzO1x0XHRcdENMT05FX0RFVEFDSEVELFxuJiM0MztcdFx0XHRzdGFjayAmIzQzOyBTVEFDS19TSVpFLFxuJiM0MztcdFx0XHROVUxMLFxuJiM0MztcdFx0XHROVUxMKTtcbiBcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0ZXJybm8gPSAtcmV0O1xuLVx0XHRwZXJyb3IoXCYjMzQ7Y2xvbmVcJiMzNDspO1xuJiM0MztcdFx0cGtleV9hc3NlcnQoMCk7XG4gXHR9IGVsc2UgaWYgKHJldCA9PSAwKSB7XG4gXHRcdHRocmVhZF9zZWd2X21hcGVycl9wdHIoXHUwMDI2c2lnc3RhY2spO1xuIFx0XHRzeXNjYWxsX3JhdyhTWVNfZXhpdCwgMCwgMCwgMCwgMCwgMCwgMCk7XG4gXHR9XG4gXG4mIzQzO1x0Y2hpbGRfcGlkID0gcmV0O1xuJiM0MztcbiBcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZtdXRleCk7XG4gXHR3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKVxuIFx0XHRwdGhyZWFkX2NvbmRfd2FpdChcdTAwMjZjb25kLCBcdTAwMjZtdXRleCk7XG4gXHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZtdXRleCk7XG4gXG4mIzQzO1x0LyogV2FpdCBmb3IgY2hpbGQgdG8gZXhpdCBiZWZvcmUgcmV0dXJuaW5nICovXG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0c2NoZWRfeWllbGQoKTtcbiYjNDM7XHRcdHJldCA9IHN5c2NhbGxfcmF3KFNZU190a2lsbCwgY2hpbGRfcGlkLCAwLCAwLCAwLCAwLCAwKTtcbiYjNDM7XHR9IHdoaWxlIChyZXQgIT0gLUVTUkNIIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlZBTCk7XG4mIzQzO1xuIFx0a3NmdF90ZXN0X3Jlc3VsdChzaWdpbmZvLnNpX3NpZ25vID09IFNJR1NFR1YgXHUwMDI2XHUwMDI2XG4gXHRcdFx0IHNpZ2luZm8uc2lfY29kZSA9PSBTRUdWX01BUEVSUiBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgc2lnaW5mby5zaV9hZGRyID09IE5VTEwsXG5AQCAtMzU4LDYgJiM0MzszNjksNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfcHJlc2VydmVkX2FmdGVyX3NpZ3VzcjEodm9pZClcbiB7XG4gXHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhO1xuIFx0dTY0IHBrZXlfcmVnO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHQvKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIGFuIGFyYml0cmFyeSBzZXQgb2Yga2V5cyAqL1xuIFx0cGtleV9yZWcgPSBwa2V5X3JlZ19yZXN0cmljdGl2ZV9kZWZhdWx0KCk7XG5AQCAtMzY5LDEwICYjNDM7MzgxLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpXG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX2hhbmRsZXI7XG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcJiMzNDtzaWdhY3Rpb25cJiMzNDspO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4mIzQzO1x0cmV0ID0gc2lnYWN0aW9uKFNJR1VTUjEsIFx1MDAyNnNhLCBOVUxMKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbkBAIC00NDEsOSAmIzQzOzQ1MSwxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXG4gXHRzdGF0aWMgc3RhY2tfdCBzaWdzdGFjaztcbiBcdHZvaWQgKnN0YWNrO1xuIFx0aW50IHBrZXk7XG4tXHRpbnQgcGFyZW50X3BpZCA9IDA7XG4gXHRpbnQgY2hpbGRfcGlkID0gMDtcbiBcdHU2NCBwa2V5X3JlZztcbiYjNDM7XHRsb25nIHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTSUdTRUdWIGhhbmRsZXIgaXMgcmVzZXQgdG8gU0lHX0RGTCBiZWxvdzsgdHVybiB0cmFjaW5nIG9mZiBmaXJzdFxuJiM0MztcdCAqIHNvIGEgY3Jhc2ggZG9lcyBub3QgbGVhdmUgZnRyYWNlIGVuYWJsZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0dHJhY2luZ19vZmYoKTtcbiBcbiBcdHNhLnNhX2hhbmRsZXIgPSBTSUdfREZMO1xuIFx0c2Euc2FfZmxhZ3MgPSAwO1xuQEAgLTQ1MywyNCAmIzQzOzQ2OSwyMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXG4gXHQgKiBGb3IgdGhpcyB0ZXN0Y2FzZSwgd2UgZG8gbm90IHdhbnQgdG8gaGFuZGxlIFNJR1NFR1YuIFJlc2V0IGhhbmRsZXJcbiBcdCAqIHRvIGRlZmF1bHQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gY2FuIGNyYXNoIGlmIGl0IHJlY2VpdmVzIFNJR1NFR1YuXG4gXHQgKi9cbi1cdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcJiMzNDtzaWdhY3Rpb25cJiMzNDspO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4mIzQzO1x0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk8gfCBTQV9PTlNUQUNLO1xuIFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lndXNyMl9oYW5kbGVyO1xuIFx0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4gXG4tXHRpZiAoc2lnYWN0aW9uKFNJR1VTUjIsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCYjMzQ7c2lnYWN0aW9uXCYjMzQ7KTtcbi1cdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuLVx0fVxuJiM0MztcdHJldCA9IHNpZ2FjdGlvbihTSUdVU1IyLCBcdTAwMjZzYSwgTlVMTCk7XG4mIzQzO1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0c3RhY2sgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdCAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4gXG4tXHRhc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XG4mIzQzO1x0cGtleV9hc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XG4gXG4gXHQvKlxuIFx0ICogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBNUEsgMi4gVGhlIGNoaWxkIHRocmVhZCAodG8gYmUgY3JlYXRlZFxuQEAgLTQ5MCwyMSAmIzQzOzUwMiwyMSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXG4gXHQvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqL1xuIFx0c2lnc3RhY2suc3Nfc3AgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdFx0ICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4mIzQzO1x0cGtleV9hc3NlcnQoc2lnc3RhY2suc3Nfc3AgIT0gTUFQX0ZBSUxFRCk7XG4gXHRzaWdzdGFjay5zc19mbGFncyA9IDA7XG4gXHRzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTtcbiBcbiBcdC8qIFVzZSBjbG9uZSB0byBhdm9pZCBuZXdlciBnbGliY3MgdXNpbmcgcnNlcSBvbiBuZXcgdGhyZWFkcyAqL1xuLVx0bG9uZyByZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbi1cdFx0XHQgICAgIENMT05FX1NJR0hBTkQgfCBDTE9ORV9USFJFQUQgfCBDTE9ORV9TWVNWU0VNIHxcbi1cdFx0XHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XG4tXHRcdFx0ICAgICBDTE9ORV9ERVRBQ0hFRCxcbi1cdFx0XHQgICAgIHN0YWNrICYjNDM7IFNUQUNLX1NJWkUsXG4tXHRcdFx0ICAgICBcdTAwMjZwYXJlbnRfcGlkLFxuLVx0XHRcdCAgICAgXHUwMDI2Y2hpbGRfcGlkKTtcbiYjNDM7XHRyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbiYjNDM7XHRcdFx0Q0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxuJiM0MztcdFx0XHRDTE9ORV9ERVRBQ0hFRCxcbiYjNDM7XHRcdFx0c3RhY2sgJiM0MzsgU1RBQ0tfU0laRSxcbiYjNDM7XHRcdFx0TlVMTCxcbiYjNDM7XHRcdFx0TlVMTCk7XG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGVycm5vID0gLXJldDtcbi1cdFx0cGVycm9yKFwmIzM0O2Nsb25lXCYjMzQ7KTtcbiYjNDM7XHRcdHBrZXlfYXNzZXJ0KDApO1xuIFx0fSAgZWxzZSBpZiAocmV0ID09IDApIHtcbiBcdFx0dGhyZWFkX3NpZ3VzcjJfc2VsZihcdTAwMjZzaWdzdGFjayk7XG4gXHRcdHN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTtcbkBAIC01MzAsMTYgJiM0Mzs1NDIsMTcgQEAgc3RhdGljIHZvaWQgKCpwa2V5X3Rlc3RzW10pKHZvaWQpID0ge1xuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuLVx0aW50IGk7XG4tXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFx0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHBrZXlfdGVzdHMpKTtcbiBcbiBcdGlmICghaXNfcGtleXNfc3VwcG9ydGVkKCkpXG4gXHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O3BrZXlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwa2V5X3Rlc3RzKTsgaSYjNDM7JiM0MzspXG4tXHRcdCgqcGtleV90ZXN0c1tpXSkoKTtcbiYjNDM7XHRmb3IgKHRlc3RfbnIgPSAwOyB0ZXN0X25yIFx1MDAzYyBBUlJBWV9TSVpFKHBrZXlfdGVzdHMpOyB0ZXN0X25yJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dHJhY2luZ19vbigpO1xuJiM0MztcdFx0KCpwa2V5X3Rlc3RzW3Rlc3RfbnJdKSgpO1xuJiM0MztcdFx0dHJhY2luZ19vZmYoKTtcbiYjNDM7XHR9XG4gXG4gXHRrc2Z0X2ZpbmlzaGVkKCk7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jXG5pbmRleCAyNTViMzMyZjdhMDhiMi4uZmJlZjNjZDQ1NDQ3YjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmNcbkBAIC0yLDkgJiM0MzsyLDk5IEBAXG4gI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX19cbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cGtleS1oZWxwZXJzLmhcJiMzNDtcbiBcbiYjNDM7aW50IGl0ZXJhdGlvbl9uciA9IDE7XG4mIzQzO2ludCB0ZXN0X25yO1xuJiM0MztpbnQgZHByaW50X2luX3NpZ25hbDtcbiYjNDM7XG4mIzQzOyNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbiYjNDM7c3RhdGljIHZvaWQgY2F0X2ludG9fZmlsZShjaGFyICpzdHIsIGNoYXIgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQgPSBvcGVuKGZpbGUsIE9fUkRXUik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZHByaW50ZjIoXCYjMzQ7JXMoKTogd3JpdGluZyAmIzM5OyVzJiMzOTsgdG8gJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBfX2Z1bmNfXywgc3RyLCBmaWxlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHRoZXNlIG5lZWQgdG8gYmUgcmF3IGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIHVuZGVyXG4mIzQzO1x0ICogcGtleV9hc3NlcnQoKVxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2Vycm9yIG9wZW5pbmcgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBmaWxlKTtcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDtlcnJvcjogXCYjMzQ7KTtcbiYjNDM7XHRcdGV4aXQoX19MSU5FX18pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpO1xuJiM0MztcdGlmIChyZXQgIT0gc3RybGVuKHN0cikpIHtcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDt3cml0ZSB0byBmaWxlIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmlsZW5hbWU6ICYjMzk7JXMmIzM5OyBzdHI6ICYjMzk7JXMmIzM5O1xcblwmIzM0OywgZmlsZSwgc3RyKTtcbiYjNDM7XHRcdGV4aXQoX19MSU5FX18pO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgd2FybmVkX3RyYWNpbmc7XG4mIzQzO3N0YXRpYyBpbnQgdHJhY2luZ19yb290X29rKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZ2V0ZXVpZCgpICE9IDApIHtcbiYjNDM7XHRcdGlmICghd2FybmVkX3RyYWNpbmcpXG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtXQVJOSU5HOiBub3QgcnVuIGFzIHJvb3QsIFwmIzM0O1xuJiM0MztcdFx0XHRcdFx0XCYjMzQ7Y2FuIG5vdCBkbyB0cmFjaW5nIGNvbnRyb2xcXG5cJiMzNDspO1xuJiM0MztcdFx0d2FybmVkX3RyYWNpbmcgPSAxO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7dm9pZCB0cmFjaW5nX29uKHZvaWQpXG4mIzQzO3tcbiYjNDM7I2lmIENPTlRST0xfVFJBQ0lORyBcdTAwM2UgMFxuJiM0MzsjZGVmaW5lIFRSQUNFRElSIFwmIzM0Oy9zeXMva2VybmVsL3RyYWNpbmdcJiMzNDtcbiYjNDM7XHRjaGFyIHBpZHN0clszMl07XG4mIzQzO1xuJiM0MztcdGlmICghdHJhY2luZ19yb290X29rKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNwcmludGYocGlkc3RyLCBcJiMzNDslZFwmIzM0OywgZ2V0cGlkKCkpO1xuJiM0MztcdGNhdF9pbnRvX2ZpbGUoXCYjMzQ7MFwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L3RyYWNpbmdfb25cJiMzNDspO1xuJiM0MztcdGNhdF9pbnRvX2ZpbGUoXCYjMzQ7XFxuXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvdHJhY2VcJiMzNDspO1xuJiM0MztcdGlmICgxKSB7XG4mIzQzO1x0XHRjYXRfaW50b19maWxlKFwmIzM0O2Z1bmN0aW9uX2dyYXBoXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvY3VycmVudF90cmFjZXJcJiMzNDspO1xuJiM0MztcdFx0Y2F0X2ludG9fZmlsZShcJiMzNDsxXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvb3B0aW9ucy9mdW5jZ3JhcGgtcHJvY1wmIzM0Oyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGNhdF9pbnRvX2ZpbGUoXCYjMzQ7bm9wXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvY3VycmVudF90cmFjZXJcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XHRjYXRfaW50b19maWxlKHBpZHN0ciwgVFJBQ0VESVIgXCYjMzQ7L3NldF9mdHJhY2VfcGlkXCYjMzQ7KTtcbiYjNDM7XHRjYXRfaW50b19maWxlKFwmIzM0OzFcJiMzNDssIFRSQUNFRElSIFwmIzM0Oy90cmFjaW5nX29uXCYjMzQ7KTtcbiYjNDM7XHRkcHJpbnRmMShcJiMzNDtlbmFibGVkIHRyYWNpbmdcXG5cJiMzNDspO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0cmFjaW5nX29mZih2b2lkKVxuJiM0Mzt7XG4mIzQzOyNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbiYjNDM7XHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGNhdF9pbnRvX2ZpbGUoXCYjMzQ7MFwmIzM0OywgXCYjMzQ7L3N5cy9rZXJuZWwvdHJhY2luZy90cmFjaW5nX29uXCYjMzQ7KTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgYWJvcnRfaG9va3Modm9pZClcbiYjNDM7e1xuJiM0MztcdGZmbHVzaChzdGRvdXQpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtydW5uaW5nICVzKCkuLi5cXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHR0cmFjaW5nX29mZigpO1xuJiM0MzsjaWZkZWYgU0xFRVBfT05fQUJPUlRcbiYjNDM7XHRzbGVlcChTTEVFUF9PTl9BQk9SVCk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIGludCBzeXNfcGtleV9hbGxvYyh1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGluaXRfdmFsKVxuIHtcbiBcdGludCByZXQgPSBzeXNjYWxsKFNZU19wa2V5X2FsbG9jLCBmbGFncywgaW5pdF92YWwpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbmluZGV4IDlhNmQ5NTRlZTM3MTI2Li5hZTZlMTUzMGIzNTQ4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuQEAgLTQ5LDExICYjNDM7NDksNyBAQFxuICNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtwa2V5LWhlbHBlcnMuaFwmIzM0O1xuIFxuLWludCBpdGVyYXRpb25fbnIgPSAxO1xuLWludCB0ZXN0X25yO1xuLVxuIHU2NCBzaGFkb3dfcGtleV9yZWc7XG4taW50IGRwcmludF9pbl9zaWduYWw7XG4gXG4gbm9pbmxpbmUgaW50IHJlYWRfcHRyKGludCAqcHRyKVxuIHtcbkBAIC02Miw4OSAmIzQzOzU4LDYgQEAgbm9pbmxpbmUgaW50IHJlYWRfcHRyKGludCAqcHRyKVxuIFx0cmV0dXJuICpwdHI7XG4gfVxuIFxuLSNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbi1zdGF0aWMgdm9pZCBjYXRfaW50b19maWxlKGNoYXIgKnN0ciwgY2hhciAqZmlsZSlcbi17XG4tXHRpbnQgZmQgPSBvcGVuKGZpbGUsIE9fUkRXUik7XG4tXHRpbnQgcmV0O1xuLVxuLVx0ZHByaW50ZjIoXCYjMzQ7JXMoKTogd3JpdGluZyAmIzM5OyVzJiMzOTsgdG8gJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBfX2Z1bmNfXywgc3RyLCBmaWxlKTtcbi1cdC8qXG4tXHQgKiB0aGVzZSBuZWVkIHRvIGJlIHJhdyBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCB1bmRlclxuLVx0ICogcGtleV9hc3NlcnQoKVxuLVx0ICovXG4tXHRpZiAoZmQgXHUwMDNjIDApIHtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2Vycm9yIG9wZW5pbmcgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBzdHIpO1xuLVx0XHRwZXJyb3IoXCYjMzQ7ZXJyb3I6IFwmIzM0Oyk7XG4tXHRcdGV4aXQoX19MSU5FX18pO1xuLVx0fVxuLVxuLVx0cmV0ID0gd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpO1xuLVx0aWYgKHJldCAhPSBzdHJsZW4oc3RyKSkge1xuLVx0XHRwZXJyb3IoXCYjMzQ7d3JpdGUgdG8gZmlsZSBmYWlsZWRcJiMzNDspO1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmlsZW5hbWU6ICYjMzk7JXMmIzM5OyBzdHI6ICYjMzk7JXMmIzM5O1xcblwmIzM0OywgZmlsZSwgc3RyKTtcbi1cdFx0ZXhpdChfX0xJTkVfXyk7XG4tXHR9XG4tXHRjbG9zZShmZCk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgd2FybmVkX3RyYWNpbmc7XG4tc3RhdGljIGludCB0cmFjaW5nX3Jvb3Rfb2sodm9pZClcbi17XG4tXHRpZiAoZ2V0ZXVpZCgpICE9IDApIHtcbi1cdFx0aWYgKCF3YXJuZWRfdHJhY2luZylcbi1cdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7V0FSTklORzogbm90IHJ1biBhcyByb290LCBcJiMzNDtcbi1cdFx0XHRcdFx0XCYjMzQ7Y2FuIG5vdCBkbyB0cmFjaW5nIGNvbnRyb2xcXG5cJiMzNDspO1xuLVx0XHR3YXJuZWRfdHJhY2luZyA9IDE7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVx0cmV0dXJuIDE7XG4tfVxuLSNlbmRpZlxuLVxuLXN0YXRpYyB2b2lkIHRyYWNpbmdfb24odm9pZClcbi17XG4tI2lmIENPTlRST0xfVFJBQ0lORyBcdTAwM2UgMFxuLSNkZWZpbmUgVFJBQ0VESVIgXCYjMzQ7L3N5cy9rZXJuZWwvdHJhY2luZ1wmIzM0O1xuLVx0Y2hhciBwaWRzdHJbMzJdO1xuLVxuLVx0aWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c3ByaW50ZihwaWRzdHIsIFwmIzM0OyVkXCYjMzQ7LCBnZXRwaWQoKSk7XG4tXHRjYXRfaW50b19maWxlKFwmIzM0OzBcJiMzNDssIFRSQUNFRElSIFwmIzM0Oy90cmFjaW5nX29uXCYjMzQ7KTtcbi1cdGNhdF9pbnRvX2ZpbGUoXCYjMzQ7XFxuXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvdHJhY2VcJiMzNDspO1xuLVx0aWYgKDEpIHtcbi1cdFx0Y2F0X2ludG9fZmlsZShcJiMzNDtmdW5jdGlvbl9ncmFwaFwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L2N1cnJlbnRfdHJhY2VyXCYjMzQ7KTtcbi1cdFx0Y2F0X2ludG9fZmlsZShcJiMzNDsxXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvb3B0aW9ucy9mdW5jZ3JhcGgtcHJvY1wmIzM0Oyk7XG4tXHR9IGVsc2Uge1xuLVx0XHRjYXRfaW50b19maWxlKFwmIzM0O25vcFwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L2N1cnJlbnRfdHJhY2VyXCYjMzQ7KTtcbi1cdH1cbi1cdGNhdF9pbnRvX2ZpbGUocGlkc3RyLCBUUkFDRURJUiBcJiMzNDsvc2V0X2Z0cmFjZV9waWRcJiMzNDspO1xuLVx0Y2F0X2ludG9fZmlsZShcJiMzNDsxXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvdHJhY2luZ19vblwmIzM0Oyk7XG4tXHRkcHJpbnRmMShcJiMzNDtlbmFibGVkIHRyYWNpbmdcXG5cJiMzNDspO1xuLSNlbmRpZlxuLX1cbi1cbi1zdGF0aWMgdm9pZCB0cmFjaW5nX29mZih2b2lkKVxuLXtcbi0jaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4tXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxuLVx0XHRyZXR1cm47XG4tXHRjYXRfaW50b19maWxlKFwmIzM0OzBcJiMzNDssIFwmIzM0Oy9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2luZ19vblwmIzM0Oyk7XG4tI2VuZGlmXG4tfVxuLVxuLXZvaWQgYWJvcnRfaG9va3Modm9pZClcbi17XG4tXHRmZmx1c2goc3Rkb3V0KTtcbi1cdGZwcmludGYoc3RkZXJyLCBcJiMzNDtydW5uaW5nICVzKCkuLi5cXG5cJiMzNDssIF9fZnVuY19fKTtcbi1cdHRyYWNpbmdfb2ZmKCk7XG4tI2lmZGVmIFNMRUVQX09OX0FCT1JUXG4tXHRzbGVlcChTTEVFUF9PTl9BQk9SVCk7XG4tI2VuZGlmXG4tfVxuLVxuIC8qXG4gICogVGhpcyBhdHRlbXB0cyB0byBoYXZlIHJvdWdobHkgYSBwYWdlIG9mIGluc3RydWN0aW9ucyBmb2xsb3dlZCBieSBhIGZld1xuICAqIGluc3RydWN0aW9ucyB0aGF0IGRvIGEgd3JpdGUsIGFuZCBhbm90aGVyIHBhZ2Ugb2YgaW5zdHJ1Y3Rpb25zLiAgVGhhdFxuQEAgLTY2OSw3ICYjNDM7NTgyLDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X3dpdGhfbXByb3RlY3QobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHRcdFx0c2l6ZSwgcHJvdCwgcGtleSk7XG4gXHRwa2V5X2Fzc2VydChwa2V5IFx1MDAzYyBOUl9QS0VZUyk7XG4gXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIHByb3QsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcbi1cdHBrZXlfYXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XG4gXHRyZXQgPSBtcHJvdGVjdF9wa2V5KCh2b2lkICopcHRyLCBQQUdFX1NJWkUsIHByb3QsIHBrZXkpO1xuIFx0cGtleV9hc3NlcnQoIXJldCk7XG4gXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcbkBAIC02OTIsNyAmIzQzOzYwNSw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV9hbm9uX2h1Z2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHQgKi9cbiBcdHNpemUgPSBBTElHTl9VUChzaXplLCBIUEFHRV9TSVpFICogMik7XG4gXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTtcbiBcdHJlY29yZF9wa2V5X21hbGxvYyhwdHIsIHNpemUsIHByb3QpO1xuIFx0bXByb3RlY3RfcGtleShwdHIsIHNpemUsIHByb3QsIHBrZXkpO1xuIFxuQEAgLTc1MCw3ICYjNDM7NjYzLDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X2h1Z2V0bGIobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHRzaXplID0gQUxJR05fVVAoc2l6ZSwgSFBBR0VfU0laRSAqIDIpO1xuIFx0cGtleV9hc3NlcnQocGtleSBcdTAwM2MgTlJfUEtFWVMpO1xuIFx0cHRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX05PTkUsIGZsYWdzLCAtMSwgMCk7XG4tXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4mIzQzO1x0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xuIFx0bXByb3RlY3RfcGtleShwdHIsIHNpemUsIHByb3QsIHBrZXkpO1xuIFxuIFx0cmVjb3JkX3BrZXlfbWFsbG9jKHB0ciwgc2l6ZSwgcHJvdCk7XG5AQCAtNzc5LDcgJiM0Mzs2OTIsNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXkobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHRcdHBrZXlfYXNzZXJ0KG1hbGxvY190eXBlIFx1MDAzYyBucl9tYWxsb2NfdHlwZXMpO1xuIFxuIFx0XHRyZXQgPSBwa2V5X21hbGxvY1ttYWxsb2NfdHlwZV0oc2l6ZSwgcHJvdCwgcGtleSk7XG4tXHRcdHBrZXlfYXNzZXJ0KHJldCAhPSAodm9pZCAqKS0xKTtcbiYjNDM7XHRcdHBrZXlfYXNzZXJ0KHJldCAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdFx0bWFsbG9jX3R5cGUmIzQzOyYjNDM7O1xuIFx0XHRpZiAobWFsbG9jX3R5cGUgXHUwMDNlPSBucl9tYWxsb2NfdHlwZXMpXG5AQCAtMTE5Nyw2ICYjNDM7MTExMCw3IEBAIHN0YXRpYyB2b2lkIGFyY2hfZm9yY2VfcGtleV9yZWdfaW5pdCh2b2lkKVxuIFx0ICogZG9pbmcgdGhlIFhTQVZFIHNpemUgZW51bWVyYXRpb24gZGFuY2UuXG4gXHQgKi9cbiBcdGJ1ZiA9IG1tYXAoTlVMTCwgMSpNQiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChidWYgIT0gTUFQX0ZBSUxFRCk7XG4gXG4gXHQvKiBUaGVzZSBfX2J1aWx0aW5zIHJlcXVpcmUgY29tcGlsaW5nIHdpdGggLW14c2F2ZSAqL1xuIFxuQEAgLTE3NjMsNyAmIzQzOzE2NzcsOCBAQCBpbnQgbWFpbih2b2lkKVxuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtydW5uaW5nIFBLRVkgdGVzdHMgZm9yIHVuc3VwcG9ydGVkIENQVS9PU1xcblwmIzM0Oyk7XG4gXG4gXHRcdHB0ciAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0XHRhc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuJiM0MztcdFx0aWYgKHB0ciA9PSBNQVBfRkFJTEVEKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7bW1hcFwmIzM0Oyk7XG4gXHRcdHRlc3RfbXByb3RlY3RfcGtleV9vbl91bnN1cHBvcnRlZF9jcHUocHRyLCAxKTtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFwmIzM0O3BrZXkgb24gdW5zdXBwb3J0ZWQgQ1BVL09TXFxuXCYjMzQ7KTtcbiBcdFx0a3NmdF9maW5pc2hlZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQzNmMxNzQ3ZmVkNjRkYTIwNjNiNTk0NmI2NmIxZGJjZTVlZjliNTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCA2IDA4OjUzOjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaAppbmRleCAyYzM3N2Y0ZTlkZjFkMy4uNDZhOGExODc4ZGMxZmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oCkBAIC02OCw3ICYjNDM7NjgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2lnc2FmZV9wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAjZGVmaW5lIGRwcmludGYzKGFyZ3MuLi4pIGRwcmludGZfbGV2ZWwoMywgYXJncykKICNkZWZpbmUgZHByaW50ZjQoYXJncy4uLikgZHByaW50Zl9sZXZlbCg0LCBhcmdzKQogCi1leHRlcm4gdm9pZCBhYm9ydF9ob29rcyh2b2lkKTsKJiM0Mzt2b2lkIHRyYWNpbmdfb24odm9pZCk7CiYjNDM7dm9pZCB0cmFjaW5nX29mZih2b2lkKTsKJiM0Mzt2b2lkIGFib3J0X2hvb2tzKHZvaWQpOwogI2RlZmluZSBwa2V5X2Fzc2VydChjb25kaXRpb24pIGRvIHsJCVwKIAlpZiAoIShjb25kaXRpb24pKSB7CQkJXAogCQlkcHJpbnRmMCgmIzM0OyMgYXNzZXJ0KCkgYXQgJXM6OiVkIHRlc3RfbnI6ICVkIGl0ZXJhdGlvbjogJWRcbiYjMzQ7LCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oCmluZGV4IDE3YmYyZDFiMDE5MmUwLi4yY2U4NTU4MGI0MDQ4NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmgKQEAgLTEyNiw3ICYjNDM7MTI2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICptYWxsb2NfcGtleV93aXRoX21wcm90ZWN0X3N1YnBhZ2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHAKIAkJCXNpemUsIHByb3QsIHBrZXkpOwogCXBrZXlfYXNzZXJ0KHBrZXkgJmx0OyBOUl9QS0VZUyk7CiAJcHRyID0gbW1hcChOVUxMLCBzaXplLCBwcm90LCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7Ci0JcGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpOwomIzQzOwlwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7CiAKIAlyZXQgPSBzeXNjYWxsKF9fTlJfc3VicGFnZV9wcm90LCBwdHIsIHNpemUsIE5VTEwpOwogCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmMKaW5kZXggMzAyZmVmNTQwNDljODcuLmMyMThkMDUxMGEyYTQyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuYwpAQCAtMTksNyAmIzQzOzE5LDYgQEAKICNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKICNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7YXNzZXJ0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKQEAgLTIwNywyMiAmIzQzOzIwNiwyNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX3BrZXkwX2Rpc2FibGVkKHZvaWQpCiAJc3RydWN0IHNpZ2FjdGlvbiBzYTsKIAlwdGhyZWFkX2F0dHJfdCBhdHRyOwogCXB0aHJlYWRfdCB0aHI7CiYjNDM7CWludCByZXQ7CiAKIAlzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87CiAKIAlzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7CiAJc2lnZW1wdHlzZXQoJmFtcDtzYS5zYV9tYXNrKTsKLQlpZiAoc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpID09IC0xKSB7Ci0JCXBlcnJvcigmIzM0O3NpZ2FjdGlvbiYjMzQ7KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KJiM0MzsJcmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpOwomIzQzOwlwa2V5X2Fzc2VydChyZXQgPT0gMCk7CiAKIAltZW1zZXQoJmFtcDtzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpOwogCiAJcHRocmVhZF9hdHRyX2luaXQoJmFtcDthdHRyKTsKIAlwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoJmFtcDthdHRyLCBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCk7CiAKLQlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RociwgJmFtcDthdHRyLCB0aHJlYWRfc2Vndl93aXRoX3BrZXkwX2Rpc2FibGVkLCBOVUxMKTsKJiM0MzsJcmV0ID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aHIsICZhbXA7YXR0ciwgdGhyZWFkX3NlZ3Zfd2l0aF9wa2V5MF9kaXNhYmxlZCwgTlVMTCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWVycm5vID0gcmV0OwomIzQzOwkJcGtleV9hc3NlcnQoMCk7CiYjNDM7CX0KIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO211dGV4KTsKIAl3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKQpAQCAtMjQ3LDIyICYjNDM7MjQ5LDI1IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX2Nhbm5vdF9hY2Nlc3Nfc3RhY2sodm9pZCkKIAlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwogCXB0aHJlYWRfYXR0cl90IGF0dHI7CiAJcHRocmVhZF90IHRocjsKJiM0MzsJaW50IHJldDsKIAogCXNhLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKIAogCXNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3NlZ3ZfaGFuZGxlcjsKIAlzaWdlbXB0eXNldCgmYW1wO3NhLnNhX21hc2spOwotCWlmIChzaWdhY3Rpb24oU0lHU0VHViwgJmFtcDtzYSwgTlVMTCkgPT0gLTEpIHsKLQkJcGVycm9yKCYjMzQ7c2lnYWN0aW9uJiMzNDspOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQomIzQzOwlyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgJmFtcDtzYSwgTlVMTCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHJldCA9PSAwKTsKIAogCW1lbXNldCgmYW1wO3NpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7CiAKIAlwdGhyZWFkX2F0dHJfaW5pdCgmYW1wO2F0dHIpOwogCXB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSgmYW1wO2F0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTsKIAotCXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyLCAmYW1wO2F0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7CiYjNDM7CXJldCA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyLCAmYW1wO2F0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWVycm5vID0gcmV0OwomIzQzOwkJcGtleV9hc3NlcnQoMCk7CiYjNDM7CX0KIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO211dGV4KTsKIAl3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKQpAQCAtMjg1LDI0ICYjNDM7MjkwLDIyIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpCiAJc3RhdGljIHN0YWNrX3Qgc2lnc3RhY2s7CiAJdm9pZCAqc3RhY2s7CiAJaW50IHBrZXk7Ci0JaW50IHBhcmVudF9waWQgPSAwOwogCWludCBjaGlsZF9waWQgPSAwOwogCXU2NCBwa2V5X3JlZzsKJiM0MzsJbG9uZyByZXQ7CiAKIAlzYS5zYV9mbGFncyA9IFNBX1NJR0lORk8gfCBTQV9PTlNUQUNLOwogCiAJc2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyOwogCiAJc2lnZW1wdHlzZXQoJmFtcDtzYS5zYV9tYXNrKTsKLQlpZiAoc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpID09IC0xKSB7Ci0JCXBlcnJvcigmIzM0O3NpZ2FjdGlvbiYjMzQ7KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KJiM0MzsJcmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpOwomIzQzOwlwa2V5X2Fzc2VydChyZXQgPT0gMCk7CiAKIAlzdGFjayA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKIAkJICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKIAotCWFzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTsKJiM0MzsJcGtleV9hc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7CiAKIAkvKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIE1QSyAxICovCiAJcGtleV9yZWcgPSBwa2V5X3JlZ19yZXN0cmljdGl2ZV9kZWZhdWx0KCk7CkBAIC0zMTcsMzMgJiM0MzszMjAsNDEgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZCkKIAkvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqLwogCXNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkJICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpOwogCXNpZ3N0YWNrLnNzX2ZsYWdzID0gMDsKIAlzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTsKIAogCW1lbXNldCgmYW1wO3NpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7CiAKIAkvKiBVc2UgY2xvbmUgdG8gYXZvaWQgbmV3ZXIgZ2xpYmNzIHVzaW5nIHJzZXEgb24gbmV3IHRocmVhZHMgKi8KLQlsb25nIHJldCA9IGNsb25lX3JhdyhDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfAotCQkJICAgICBDTE9ORV9TSUdIQU5EIHwgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNFTSB8Ci0JCQkgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8Ci0JCQkgICAgIENMT05FX0RFVEFDSEVELAotCQkJICAgICBzdGFjayAmIzQzOyBTVEFDS19TSVpFLAotCQkJICAgICAmYW1wO3BhcmVudF9waWQsCi0JCQkgICAgICZhbXA7Y2hpbGRfcGlkKTsKJiM0MzsJcmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8CiYjNDM7CQkJQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfAomIzQzOwkJCUNMT05FX0RFVEFDSEVELAomIzQzOwkJCXN0YWNrICYjNDM7IFNUQUNLX1NJWkUsCiYjNDM7CQkJTlVMTCwKJiM0MzsJCQlOVUxMKTsKIAogCWlmIChyZXQgJmx0OyAwKSB7CiAJCWVycm5vID0gLXJldDsKLQkJcGVycm9yKCYjMzQ7Y2xvbmUmIzM0Oyk7CiYjNDM7CQlwa2V5X2Fzc2VydCgwKTsKIAl9IGVsc2UgaWYgKHJldCA9PSAwKSB7CiAJCXRocmVhZF9zZWd2X21hcGVycl9wdHIoJmFtcDtzaWdzdGFjayk7CiAJCXN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTsKIAl9CiAKJiM0MzsJY2hpbGRfcGlkID0gcmV0OwomIzQzOwogCXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO211dGV4KTsKIAl3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKQogCQlwdGhyZWFkX2NvbmRfd2FpdCgmYW1wO2NvbmQsICZhbXA7bXV0ZXgpOwogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhbXA7bXV0ZXgpOwogCiYjNDM7CS8qIFdhaXQgZm9yIGNoaWxkIHRvIGV4aXQgYmVmb3JlIHJldHVybmluZyAqLwomIzQzOwlkbyB7CiYjNDM7CQlzY2hlZF95aWVsZCgpOwomIzQzOwkJcmV0ID0gc3lzY2FsbF9yYXcoU1lTX3RraWxsLCBjaGlsZF9waWQsIDAsIDAsIDAsIDAsIDApOwomIzQzOwl9IHdoaWxlIChyZXQgIT0gLUVTUkNIICZhbXA7JmFtcDsgcmV0ICE9IC1FSU5WQUwpOwomIzQzOwogCWtzZnRfdGVzdF9yZXN1bHQoc2lnaW5mby5zaV9zaWdubyA9PSBTSUdTRUdWICZhbXA7JmFtcDsKIAkJCSBzaWdpbmZvLnNpX2NvZGUgPT0gU0VHVl9NQVBFUlIgJmFtcDsmYW1wOwogCQkJIHNpZ2luZm8uc2lfYWRkciA9PSBOVUxMLApAQCAtMzU4LDYgJiM0MzszNjksNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfcHJlc2VydmVkX2FmdGVyX3NpZ3VzcjEodm9pZCkKIHsKIAlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwogCXU2NCBwa2V5X3JlZzsKJiM0MzsJaW50IHJldDsKIAogCS8qIEFsbG93IGFjY2VzcyB0byBNUEsgMCBhbmQgYW4gYXJiaXRyYXJ5IHNldCBvZiBrZXlzICovCiAJcGtleV9yZWcgPSBwa2V5X3JlZ19yZXN0cmljdGl2ZV9kZWZhdWx0KCk7CkBAIC0zNjksMTAgJiM0MzszODEsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfcHJlc2VydmVkX2FmdGVyX3NpZ3VzcjEodm9pZCkKIAogCXNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3VzcjFfaGFuZGxlcjsKIAlzaWdlbXB0eXNldCgmYW1wO3NhLnNhX21hc2spOwotCWlmIChzaWdhY3Rpb24oU0lHVVNSMSwgJmFtcDtzYSwgTlVMTCkgPT0gLTEpIHsKLQkJcGVycm9yKCYjMzQ7c2lnYWN0aW9uJiMzNDspOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQomIzQzOwlyZXQgPSBzaWdhY3Rpb24oU0lHVVNSMSwgJmFtcDtzYSwgTlVMTCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHJldCA9PSAwKTsKIAogCW1lbXNldCgmYW1wO3NpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7CiAKQEAgLTQ0MSw5ICYjNDM7NDUxLDE1IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9zaWdyZXR1cm4odm9pZCkKIAlzdGF0aWMgc3RhY2tfdCBzaWdzdGFjazsKIAl2b2lkICpzdGFjazsKIAlpbnQgcGtleTsKLQlpbnQgcGFyZW50X3BpZCA9IDA7CiAJaW50IGNoaWxkX3BpZCA9IDA7CiAJdTY0IHBrZXlfcmVnOwomIzQzOwlsb25nIHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU0lHU0VHViBoYW5kbGVyIGlzIHJlc2V0IHRvIFNJR19ERkwgYmVsb3c7IHR1cm4gdHJhY2luZyBvZmYgZmlyc3QKJiM0MzsJICogc28gYSBjcmFzaCBkb2VzIG5vdCBsZWF2ZSBmdHJhY2UgZW5hYmxlZC4KJiM0MzsJICovCiYjNDM7CXRyYWNpbmdfb2ZmKCk7CiAKIAlzYS5zYV9oYW5kbGVyID0gU0lHX0RGTDsKIAlzYS5zYV9mbGFncyA9IDA7CkBAIC00NTMsMjQgJiM0Mzs0NjksMjAgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKQogCSAqIEZvciB0aGlzIHRlc3RjYXNlLCB3ZSBkbyBub3Qgd2FudCB0byBoYW5kbGUgU0lHU0VHVi4gUmVzZXQgaGFuZGxlcgogCSAqIHRvIGRlZmF1bHQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gY2FuIGNyYXNoIGlmIGl0IHJlY2VpdmVzIFNJR1NFR1YuCiAJICovCi0JaWYgKHNpZ2FjdGlvbihTSUdTRUdWLCAmYW1wO3NhLCBOVUxMKSA9PSAtMSkgewotCQlwZXJyb3IoJiMzNDtzaWdhY3Rpb24mIzM0Oyk7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9CiYjNDM7CXJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCAmYW1wO3NhLCBOVUxMKTsKJiM0MzsJcGtleV9hc3NlcnQocmV0ID09IDApOwogCiAJc2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfT05TVEFDSzsKIAlzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IyX2hhbmRsZXI7CiAJc2lnZW1wdHlzZXQoJmFtcDtzYS5zYV9tYXNrKTsKIAotCWlmIChzaWdhY3Rpb24oU0lHVVNSMiwgJmFtcDtzYSwgTlVMTCkgPT0gLTEpIHsKLQkJcGVycm9yKCYjMzQ7c2lnYWN0aW9uJiMzNDspOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQomIzQzOwlyZXQgPSBzaWdhY3Rpb24oU0lHVVNSMiwgJmFtcDtzYSwgTlVMTCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHJldCA9PSAwKTsKIAogCXN0YWNrID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOwogCi0JYXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpOwomIzQzOwlwa2V5X2Fzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTsKIAogCS8qCiAJICogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBNUEsgMi4gVGhlIGNoaWxkIHRocmVhZCAodG8gYmUgY3JlYXRlZApAQCAtNDkwLDIxICYjNDM7NTAyLDIxIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9zaWdyZXR1cm4odm9pZCkKIAkvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqLwogCXNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkJICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpOwogCXNpZ3N0YWNrLnNzX2ZsYWdzID0gMDsKIAlzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTsKIAogCS8qIFVzZSBjbG9uZSB0byBhdm9pZCBuZXdlciBnbGliY3MgdXNpbmcgcnNlcSBvbiBuZXcgdGhyZWFkcyAqLwotCWxvbmcgcmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8Ci0JCQkgICAgIENMT05FX1NJR0hBTkQgfCBDTE9ORV9USFJFQUQgfCBDTE9ORV9TWVNWU0VNIHwKLQkJCSAgICAgQ0xPTkVfUEFSRU5UX1NFVFRJRCB8IENMT05FX0NISUxEX0NMRUFSVElEIHwKLQkJCSAgICAgQ0xPTkVfREVUQUNIRUQsCi0JCQkgICAgIHN0YWNrICYjNDM7IFNUQUNLX1NJWkUsCi0JCQkgICAgICZhbXA7cGFyZW50X3BpZCwKLQkJCSAgICAgJmFtcDtjaGlsZF9waWQpOwomIzQzOwlyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwKJiM0MzsJCQlDTE9ORV9TSUdIQU5EIHwgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNFTSB8CiYjNDM7CQkJQ0xPTkVfREVUQUNIRUQsCiYjNDM7CQkJc3RhY2sgJiM0MzsgU1RBQ0tfU0laRSwKJiM0MzsJCQlOVUxMLAomIzQzOwkJCU5VTEwpOwogCiAJaWYgKHJldCAmbHQ7IDApIHsKIAkJZXJybm8gPSAtcmV0OwotCQlwZXJyb3IoJiMzNDtjbG9uZSYjMzQ7KTsKJiM0MzsJCXBrZXlfYXNzZXJ0KDApOwogCX0gIGVsc2UgaWYgKHJldCA9PSAwKSB7CiAJCXRocmVhZF9zaWd1c3IyX3NlbGYoJmFtcDtzaWdzdGFjayk7CiAJCXN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTsKQEAgLTUzMCwxNiAmIzQzOzU0MiwxNyBAQCBzdGF0aWMgdm9pZCAoKnBrZXlfdGVzdHNbXSkodm9pZCkgPSB7CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JaW50IGk7Ci0KIAlrc2Z0X3ByaW50X2hlYWRlcigpOwogCWtzZnRfc2V0X3BsYW4oQVJSQVlfU0laRShwa2V5X3Rlc3RzKSk7CiAKIAlpZiAoIWlzX3BrZXlzX3N1cHBvcnRlZCgpKQogCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O3BrZXlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHBrZXlfdGVzdHMpOyBpJiM0MzsmIzQzOykKLQkJKCpwa2V5X3Rlc3RzW2ldKSgpOwomIzQzOwlmb3IgKHRlc3RfbnIgPSAwOyB0ZXN0X25yICZsdDsgQVJSQVlfU0laRShwa2V5X3Rlc3RzKTsgdGVzdF9uciYjNDM7JiM0MzspIHsKJiM0MzsJCXRyYWNpbmdfb24oKTsKJiM0MzsJCSgqcGtleV90ZXN0c1t0ZXN0X25yXSkoKTsKJiM0MzsJCXRyYWNpbmdfb2ZmKCk7CiYjNDM7CX0KIAogCWtzZnRfZmluaXNoZWQoKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmMKaW5kZXggMjU1YjMzMmY3YTA4YjIuLmZiZWYzY2Q0NTQ0N2IxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYwpAQCAtMiw5ICYjNDM7Miw5OSBAQAogI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18KICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtwa2V5LWhlbHBlcnMuaCYjMzQ7CiAKJiM0MztpbnQgaXRlcmF0aW9uX25yID0gMTsKJiM0MztpbnQgdGVzdF9ucjsKJiM0MztpbnQgZHByaW50X2luX3NpZ25hbDsKJiM0MzsKJiM0MzsjaWYgQ09OVFJPTF9UUkFDSU5HICZndDsgMAomIzQzO3N0YXRpYyB2b2lkIGNhdF9pbnRvX2ZpbGUoY2hhciAqc3RyLCBjaGFyICpmaWxlKQomIzQzO3sKJiM0MzsJaW50IGZkID0gb3BlbihmaWxlLCBPX1JEV1IpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkcHJpbnRmMigmIzM0OyVzKCk6IHdyaXRpbmcgJiMzOTslcyYjMzk7IHRvICYjMzk7JXMmIzM5O1xuJiMzNDssIF9fZnVuY19fLCBzdHIsIGZpbGUpOwomIzQzOwkvKgomIzQzOwkgKiB0aGVzZSBuZWVkIHRvIGJlIHJhdyBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCB1bmRlcgomIzQzOwkgKiBwa2V5X2Fzc2VydCgpCiYjNDM7CSAqLwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtlcnJvciBvcGVuaW5nICYjMzk7JXMmIzM5O1xuJiMzNDssIGZpbGUpOwomIzQzOwkJcGVycm9yKCYjMzQ7ZXJyb3I6ICYjMzQ7KTsKJiM0MzsJCWV4aXQoX19MSU5FX18pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKTsKJiM0MzsJaWYgKHJldCAhPSBzdHJsZW4oc3RyKSkgewomIzQzOwkJcGVycm9yKCYjMzQ7d3JpdGUgdG8gZmlsZSBmYWlsZWQmIzM0Oyk7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtmaWxlbmFtZTogJiMzOTslcyYjMzk7IHN0cjogJiMzOTslcyYjMzk7XG4mIzM0OywgZmlsZSwgc3RyKTsKJiM0MzsJCWV4aXQoX19MSU5FX18pOwomIzQzOwl9CiYjNDM7CWNsb3NlKGZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3YXJuZWRfdHJhY2luZzsKJiM0MztzdGF0aWMgaW50IHRyYWNpbmdfcm9vdF9vayh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKGdldGV1aWQoKSAhPSAwKSB7CiYjNDM7CQlpZiAoIXdhcm5lZF90cmFjaW5nKQomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1dBUk5JTkc6IG5vdCBydW4gYXMgcm9vdCwgJiMzNDsKJiM0MzsJCQkJCSYjMzQ7Y2FuIG5vdCBkbyB0cmFjaW5nIGNvbnRyb2xcbiYjMzQ7KTsKJiM0MzsJCXdhcm5lZF90cmFjaW5nID0gMTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKJiM0Mzt2b2lkIHRyYWNpbmdfb24odm9pZCkKJiM0Mzt7CiYjNDM7I2lmIENPTlRST0xfVFJBQ0lORyAmZ3Q7IDAKJiM0MzsjZGVmaW5lIFRSQUNFRElSICYjMzQ7L3N5cy9rZXJuZWwvdHJhY2luZyYjMzQ7CiYjNDM7CWNoYXIgcGlkc3RyWzMyXTsKJiM0MzsKJiM0MzsJaWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3ByaW50ZihwaWRzdHIsICYjMzQ7JWQmIzM0OywgZ2V0cGlkKCkpOwomIzQzOwljYXRfaW50b19maWxlKCYjMzQ7MCYjMzQ7LCBUUkFDRURJUiAmIzM0Oy90cmFjaW5nX29uJiMzNDspOwomIzQzOwljYXRfaW50b19maWxlKCYjMzQ7XG4mIzM0OywgVFJBQ0VESVIgJiMzNDsvdHJhY2UmIzM0Oyk7CiYjNDM7CWlmICgxKSB7CiYjNDM7CQljYXRfaW50b19maWxlKCYjMzQ7ZnVuY3Rpb25fZ3JhcGgmIzM0OywgVFJBQ0VESVIgJiMzNDsvY3VycmVudF90cmFjZXImIzM0Oyk7CiYjNDM7CQljYXRfaW50b19maWxlKCYjMzQ7MSYjMzQ7LCBUUkFDRURJUiAmIzM0Oy9vcHRpb25zL2Z1bmNncmFwaC1wcm9jJiMzNDspOwomIzQzOwl9IGVsc2UgewomIzQzOwkJY2F0X2ludG9fZmlsZSgmIzM0O25vcCYjMzQ7LCBUUkFDRURJUiAmIzM0Oy9jdXJyZW50X3RyYWNlciYjMzQ7KTsKJiM0MzsJfQomIzQzOwljYXRfaW50b19maWxlKHBpZHN0ciwgVFJBQ0VESVIgJiMzNDsvc2V0X2Z0cmFjZV9waWQmIzM0Oyk7CiYjNDM7CWNhdF9pbnRvX2ZpbGUoJiMzNDsxJiMzNDssIFRSQUNFRElSICYjMzQ7L3RyYWNpbmdfb24mIzM0Oyk7CiYjNDM7CWRwcmludGYxKCYjMzQ7ZW5hYmxlZCB0cmFjaW5nXG4mIzM0Oyk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdHJhY2luZ19vZmYodm9pZCkKJiM0Mzt7CiYjNDM7I2lmIENPTlRST0xfVFJBQ0lORyAmZ3Q7IDAKJiM0MzsJaWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJY2F0X2ludG9fZmlsZSgmIzM0OzAmIzM0OywgJiMzNDsvc3lzL2tlcm5lbC90cmFjaW5nL3RyYWNpbmdfb24mIzM0Oyk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgYWJvcnRfaG9va3Modm9pZCkKJiM0Mzt7CiYjNDM7CWZmbHVzaChzdGRvdXQpOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDtydW5uaW5nICVzKCkuLi5cbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CXRyYWNpbmdfb2ZmKCk7CiYjNDM7I2lmZGVmIFNMRUVQX09OX0FCT1JUCiYjNDM7CXNsZWVwKFNMRUVQX09OX0FCT1JUKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBpbnQgc3lzX3BrZXlfYWxsb2ModW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBpbml0X3ZhbCkKIHsKIAlpbnQgcmV0ID0gc3lzY2FsbChTWVNfcGtleV9hbGxvYywgZmxhZ3MsIGluaXRfdmFsKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMKaW5kZXggOWE2ZDk1NGVlMzcxMjYuLmFlNmUxNTMwYjM1NDg0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwpAQCAtNDksMTEgJiM0Mzs0OSw3IEBACiAjaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwa2V5LWhlbHBlcnMuaCYjMzQ7CiAKLWludCBpdGVyYXRpb25fbnIgPSAxOwotaW50IHRlc3RfbnI7Ci0KIHU2NCBzaGFkb3dfcGtleV9yZWc7Ci1pbnQgZHByaW50X2luX3NpZ25hbDsKIAogbm9pbmxpbmUgaW50IHJlYWRfcHRyKGludCAqcHRyKQogewpAQCAtNjIsODkgJiM0Mzs1OCw2IEBAIG5vaW5saW5lIGludCByZWFkX3B0cihpbnQgKnB0cikKIAlyZXR1cm4gKnB0cjsKIH0KIAotI2lmIENPTlRST0xfVFJBQ0lORyAmZ3Q7IDAKLXN0YXRpYyB2b2lkIGNhdF9pbnRvX2ZpbGUoY2hhciAqc3RyLCBjaGFyICpmaWxlKQotewotCWludCBmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTsKLQlpbnQgcmV0OwotCi0JZHByaW50ZjIoJiMzNDslcygpOiB3cml0aW5nICYjMzk7JXMmIzM5OyB0byAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBfX2Z1bmNfXywgc3RyLCBmaWxlKTsKLQkvKgotCSAqIHRoZXNlIG5lZWQgdG8gYmUgcmF3IGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIHVuZGVyCi0JICogcGtleV9hc3NlcnQoKQotCSAqLwotCWlmIChmZCAmbHQ7IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZXJyb3Igb3BlbmluZyAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBzdHIpOwotCQlwZXJyb3IoJiMzNDtlcnJvcjogJiMzNDspOwotCQlleGl0KF9fTElORV9fKTsKLQl9Ci0KLQlyZXQgPSB3cml0ZShmZCwgc3RyLCBzdHJsZW4oc3RyKSk7Ci0JaWYgKHJldCAhPSBzdHJsZW4oc3RyKSkgewotCQlwZXJyb3IoJiMzNDt3cml0ZSB0byBmaWxlIGZhaWxlZCYjMzQ7KTsKLQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmlsZW5hbWU6ICYjMzk7JXMmIzM5OyBzdHI6ICYjMzk7JXMmIzM5O1xuJiMzNDssIGZpbGUsIHN0cik7Ci0JCWV4aXQoX19MSU5FX18pOwotCX0KLQljbG9zZShmZCk7Ci19Ci0KLXN0YXRpYyBpbnQgd2FybmVkX3RyYWNpbmc7Ci1zdGF0aWMgaW50IHRyYWNpbmdfcm9vdF9vayh2b2lkKQotewotCWlmIChnZXRldWlkKCkgIT0gMCkgewotCQlpZiAoIXdhcm5lZF90cmFjaW5nKQotCQkJZnByaW50ZihzdGRlcnIsICYjMzQ7V0FSTklORzogbm90IHJ1biBhcyByb290LCAmIzM0OwotCQkJCQkmIzM0O2NhbiBub3QgZG8gdHJhY2luZyBjb250cm9sXG4mIzM0Oyk7Ci0JCXdhcm5lZF90cmFjaW5nID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHRyYWNpbmdfb24odm9pZCkKLXsKLSNpZiBDT05UUk9MX1RSQUNJTkcgJmd0OyAwCi0jZGVmaW5lIFRSQUNFRElSICYjMzQ7L3N5cy9rZXJuZWwvdHJhY2luZyYjMzQ7Ci0JY2hhciBwaWRzdHJbMzJdOwotCi0JaWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSkKLQkJcmV0dXJuOwotCi0Jc3ByaW50ZihwaWRzdHIsICYjMzQ7JWQmIzM0OywgZ2V0cGlkKCkpOwotCWNhdF9pbnRvX2ZpbGUoJiMzNDswJiMzNDssIFRSQUNFRElSICYjMzQ7L3RyYWNpbmdfb24mIzM0Oyk7Ci0JY2F0X2ludG9fZmlsZSgmIzM0O1xuJiMzNDssIFRSQUNFRElSICYjMzQ7L3RyYWNlJiMzNDspOwotCWlmICgxKSB7Ci0JCWNhdF9pbnRvX2ZpbGUoJiMzNDtmdW5jdGlvbl9ncmFwaCYjMzQ7LCBUUkFDRURJUiAmIzM0Oy9jdXJyZW50X3RyYWNlciYjMzQ7KTsKLQkJY2F0X2ludG9fZmlsZSgmIzM0OzEmIzM0OywgVFJBQ0VESVIgJiMzNDsvb3B0aW9ucy9mdW5jZ3JhcGgtcHJvYyYjMzQ7KTsKLQl9IGVsc2UgewotCQljYXRfaW50b19maWxlKCYjMzQ7bm9wJiMzNDssIFRSQUNFRElSICYjMzQ7L2N1cnJlbnRfdHJhY2VyJiMzNDspOwotCX0KLQljYXRfaW50b19maWxlKHBpZHN0ciwgVFJBQ0VESVIgJiMzNDsvc2V0X2Z0cmFjZV9waWQmIzM0Oyk7Ci0JY2F0X2ludG9fZmlsZSgmIzM0OzEmIzM0OywgVFJBQ0VESVIgJiMzNDsvdHJhY2luZ19vbiYjMzQ7KTsKLQlkcHJpbnRmMSgmIzM0O2VuYWJsZWQgdHJhY2luZ1xuJiMzNDspOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHRyYWNpbmdfb2ZmKHZvaWQpCi17Ci0jaWYgQ09OVFJPTF9UUkFDSU5HICZndDsgMAotCWlmICghdHJhY2luZ19yb290X29rKCkpCi0JCXJldHVybjsKLQljYXRfaW50b19maWxlKCYjMzQ7MCYjMzQ7LCAmIzM0Oy9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2luZ19vbiYjMzQ7KTsKLSNlbmRpZgotfQotCi12b2lkIGFib3J0X2hvb2tzKHZvaWQpCi17Ci0JZmZsdXNoKHN0ZG91dCk7Ci0JZnByaW50ZihzdGRlcnIsICYjMzQ7cnVubmluZyAlcygpLi4uXG4mIzM0OywgX19mdW5jX18pOwotCXRyYWNpbmdfb2ZmKCk7Ci0jaWZkZWYgU0xFRVBfT05fQUJPUlQKLQlzbGVlcChTTEVFUF9PTl9BQk9SVCk7Ci0jZW5kaWYKLX0KLQogLyoKICAqIFRoaXMgYXR0ZW1wdHMgdG8gaGF2ZSByb3VnaGx5IGEgcGFnZSBvZiBpbnN0cnVjdGlvbnMgZm9sbG93ZWQgYnkgYSBmZXcKICAqIGluc3RydWN0aW9ucyB0aGF0IGRvIGEgd3JpdGUsIGFuZCBhbm90aGVyIHBhZ2Ugb2YgaW5zdHJ1Y3Rpb25zLiAgVGhhdApAQCAtNjY5LDcgJiM0Mzs1ODIsNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXlfd2l0aF9tcHJvdGVjdChsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSkKIAkJCXNpemUsIHByb3QsIHBrZXkpOwogCXBrZXlfYXNzZXJ0KHBrZXkgJmx0OyBOUl9QS0VZUyk7CiAJcHRyID0gbW1hcChOVUxMLCBzaXplLCBwcm90LCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7Ci0JcGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpOwomIzQzOwlwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7CiAJcmV0ID0gbXByb3RlY3RfcGtleSgodm9pZCAqKXB0ciwgUEFHRV9TSVpFLCBwcm90LCBwa2V5KTsKIAlwa2V5X2Fzc2VydCghcmV0KTsKIAlyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTsKQEAgLTY5Miw3ICYjNDM7NjA1LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X2Fub25faHVnZShsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSkKIAkgKi8KIAlzaXplID0gQUxJR05fVVAoc2l6ZSwgSFBBR0VfU0laRSAqIDIpOwogCXB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9OT05FLCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7Ci0JcGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpOwomIzQzOwlwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7CiAJcmVjb3JkX3BrZXlfbWFsbG9jKHB0ciwgc2l6ZSwgcHJvdCk7CiAJbXByb3RlY3RfcGtleShwdHIsIHNpemUsIHByb3QsIHBrZXkpOwogCkBAIC03NTAsNyAmIzQzOzY2Myw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV9odWdldGxiKGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KQogCXNpemUgPSBBTElHTl9VUChzaXplLCBIUEFHRV9TSVpFICogMik7CiAJcGtleV9hc3NlcnQocGtleSAmbHQ7IE5SX1BLRVlTKTsKIAlwdHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgZmxhZ3MsIC0xLCAwKTsKLQlwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7CiYjNDM7CXBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTsKIAltcHJvdGVjdF9wa2V5KHB0ciwgc2l6ZSwgcHJvdCwgcGtleSk7CiAKIAlyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTsKQEAgLTc3OSw3ICYjNDM7NjkyLDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5KGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KQogCQlwa2V5X2Fzc2VydChtYWxsb2NfdHlwZSAmbHQ7IG5yX21hbGxvY190eXBlcyk7CiAKIAkJcmV0ID0gcGtleV9tYWxsb2NbbWFsbG9jX3R5cGVdKHNpemUsIHByb3QsIHBrZXkpOwotCQlwa2V5X2Fzc2VydChyZXQgIT0gKHZvaWQgKiktMSk7CiYjNDM7CQlwa2V5X2Fzc2VydChyZXQgIT0gTUFQX0ZBSUxFRCk7CiAKIAkJbWFsbG9jX3R5cGUmIzQzOyYjNDM7OwogCQlpZiAobWFsbG9jX3R5cGUgJmd0Oz0gbnJfbWFsbG9jX3R5cGVzKQpAQCAtMTE5Nyw2ICYjNDM7MTExMCw3IEBAIHN0YXRpYyB2b2lkIGFyY2hfZm9yY2VfcGtleV9yZWdfaW5pdCh2b2lkKQogCSAqIGRvaW5nIHRoZSBYU0FWRSBzaXplIGVudW1lcmF0aW9uIGRhbmNlLgogCSAqLwogCWJ1ZiA9IG1tYXAoTlVMTCwgMSpNQiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTsKJiM0MzsJcGtleV9hc3NlcnQoYnVmICE9IE1BUF9GQUlMRUQpOwogCiAJLyogVGhlc2UgX19idWlsdGlucyByZXF1aXJlIGNvbXBpbGluZyB3aXRoIC1teHNhdmUgKi8KIApAQCAtMTc2Myw3ICYjNDM7MTY3Nyw4IEBAIGludCBtYWluKHZvaWQpCiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7cnVubmluZyBQS0VZIHRlc3RzIGZvciB1bnN1cHBvcnRlZCBDUFUvT1NcbiYjMzQ7KTsKIAogCQlwdHIgID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX05PTkUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTsKLQkJYXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTsKJiM0MzsJCWlmIChwdHIgPT0gTUFQX0ZBSUxFRCkKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDttbWFwJiMzNDspOwogCQl0ZXN0X21wcm90ZWN0X3BrZXlfb25fdW5zdXBwb3J0ZWRfY3B1KHB0ciwgMSk7CiAJCWtzZnRfdGVzdF9yZXN1bHRfcGFzcygmIzM0O3BrZXkgb24gdW5zdXBwb3J0ZWQgQ1BVL09TXG4mIzM0Oyk7CiAJCWtzZnRfZmluaXNoZWQoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ4NwoJCQkJCQkJb3V0cHV0OiA2NQoJCQkJCQkJdGhvdWdodHM6IDQwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBTZWxmdGVzdHMgYW5kIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGZpbGVzIHNwZWNpZmljYWxseSB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byB0aGUgc2VsZnRlc3RzLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0cy4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGlzIGRvZXNuJiMzOTt0IHdhcnJhbnQgZnV6emluZywgYnV0IGxldCYjMzk7cyBiZSB0aG9yb3VnaC4KCkdpdmVuIHRoYXQgdGhlc2UgYXJlIHNlbGZ0ZXN0cywgYW5kIHRoZXkgbGl2ZSBvdXRzaWRlIG9mIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gcGF0aCwgdGhlIGNoYW5nZXMgaGVyZSBzaG91bGRuJiMzOTt0IGltcGFjdCBydW50aW1lIGJlaGF2aW9yIHVubGVzcyB3ZSAqY2hvb3NlKiB0byBydW4gdGhlbS4gVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHN0YXRlIHdlIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGludm9sdmVzIERvY3VtZW50YXRpb24sIEtjb25maWcgZmlsZXMsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGNoYW5nZXMgbGlrZSBsb2dnaW5nLCBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24sIG9yIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAKCldhaXQgYSBtaW51dGUuLi4gdGhlc2UgYXJlICpzZWxmdGVzdHMqLiBUaGV5IGFyZSB1c2VyLXNwYWNlIHByb2dyYW1zIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGVzdGluZy4gVGhleSBhcmVuJiMzOTt0IGtlcm5lbCBjb2RlLiBTbywgbW9kaWZ5aW5nIHRoZW0gKnNob3VsZG4mIzM5O3QqIGltcGFjdCBhbnl0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGZ1enplZC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O20gY2hlY2tpbmcgdGhlIGRpZmYgYWdhaW4g4oCTIHllcCwgaXQmIzM5O3Mgc3RyaWN0bHkgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCBkaXJlY3RvcnkuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgY2xlYXI6IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbDsgaXQmIzM5O3MganVzdCBhYm91dCByZWZpbmluZyB0aGUgdGVzdGluZyBtZXRob2RvbG9neS4gVGhpcyBnb2VzIGludG8gdGhlICYjMzk7bm8mIzM5OyBwaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjUzOjAyLjI0MTIyMTg3NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTM1NzY0OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjUzOjAyLjI0MTIyNzgzNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2MDc4MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDM2YzE3NDdmZWQ2NGRhMjA2M2I1OTQ2YjY2YjFkYmNlNWVmOWI1N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDA4OjUzOjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhcXG5pbmRleCAyYzM3N2Y0ZTlkZjFkMy4uNDZhOGExODc4ZGMxZmQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaFxcbkBAIC02OCw3ICs2OCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzaWdzYWZlX3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLilcXG4gI2RlZmluZSBkcHJpbnRmMyhhcmdzLi4uKSBkcHJpbnRmX2xldmVsKDMsIGFyZ3MpXFxuICNkZWZpbmUgZHByaW50ZjQoYXJncy4uLikgZHByaW50Zl9sZXZlbCg0LCBhcmdzKVxcbiBcXG4tZXh0ZXJuIHZvaWQgYWJvcnRfaG9va3Modm9pZCk7XFxuK3ZvaWQgdHJhY2luZ19vbih2b2lkKTtcXG4rdm9pZCB0cmFjaW5nX29mZih2b2lkKTtcXG4rdm9pZCBhYm9ydF9ob29rcyh2b2lkKTtcXG4gI2RlZmluZSBwa2V5X2Fzc2VydChjb25kaXRpb24pIGRvIHtcXHRcXHRcXFxcXFxuIFxcdGlmICghKGNvbmRpdGlvbikpIHtcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdGRwcmludGYwKFxcXCIjIGFzc2VydCgpIGF0ICVzOjolZCB0ZXN0X25yOiAlZCBpdGVyYXRpb246ICVkXFxcXG5cXFwiLCBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhcXG5pbmRleCAxN2JmMmQxYjAxOTJlMC4uMmNlODU1ODBiNDA0ODcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaFxcbkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICptYWxsb2NfcGtleV93aXRoX21wcm90ZWN0X3N1YnBhZ2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBcXG4gXFx0XFx0XFx0c2l6ZSwgcHJvdCwgcGtleSk7XFxuIFxcdHBrZXlfYXNzZXJ0KHBrZXkgXFx1MDAzYyBOUl9QS0VZUyk7XFxuIFxcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgcHJvdCwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xcbi1cXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XFxuK1xcdHBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTtcXG4gXFxuIFxcdHJldCA9IHN5c2NhbGwoX19OUl9zdWJwYWdlX3Byb3QsIHB0ciwgc2l6ZSwgTlVMTCk7XFxuIFxcdGlmIChyZXQpIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY1xcbmluZGV4IDMwMmZlZjU0MDQ5Yzg3Li5jMjE4ZDA1MTBhMmE0MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jXFxuQEAgLTE5LDcgKzE5LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2Nhc3NlcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy90eXBlcy5oXFx1MDAzZVxcbkBAIC0yMDcsMjIgKzIwNiwyNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX3BrZXkwX2Rpc2FibGVkKHZvaWQpXFxuIFxcdHN0cnVjdCBzaWdhY3Rpb24gc2E7XFxuIFxcdHB0aHJlYWRfYXR0cl90IGF0dHI7XFxuIFxcdHB0aHJlYWRfdCB0aHI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87XFxuIFxcbiBcXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7XFxuIFxcdHNpZ2VtcHR5c2V0KFxcdTAwMjZzYS5zYV9tYXNrKTtcXG4tXFx0aWYgKHNpZ2FjdGlvbihTSUdTRUdWLCBcXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XFxuLVxcdFxcdHBlcnJvcihcXFwic2lnYWN0aW9uXFxcIik7XFxuLVxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4tXFx0fVxcbitcXHRyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rXFx0cGtleV9hc3NlcnQocmV0ID09IDApO1xcbiBcXG4gXFx0bWVtc2V0KFxcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xcbiBcXG4gXFx0cHRocmVhZF9hdHRyX2luaXQoXFx1MDAyNmF0dHIpO1xcbiBcXHRwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoXFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcXG4gXFxuLVxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHIsIFxcdTAwMjZhdHRyLCB0aHJlYWRfc2Vndl93aXRoX3BrZXkwX2Rpc2FibGVkLCBOVUxMKTtcXG4rXFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRociwgXFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3dpdGhfcGtleTBfZGlzYWJsZWQsIE5VTEwpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGVycm5vID0gcmV0O1xcbitcXHRcXHRwa2V5X2Fzc2VydCgwKTtcXG4rXFx0fVxcbiBcXG4gXFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZtdXRleCk7XFxuIFxcdHdoaWxlIChzaWdpbmZvLnNpX3NpZ25vID09IDApXFxuQEAgLTI0NywyMiArMjQ5LDI1IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX2Nhbm5vdF9hY2Nlc3Nfc3RhY2sodm9pZClcXG4gXFx0c3RydWN0IHNpZ2FjdGlvbiBzYTtcXG4gXFx0cHRocmVhZF9hdHRyX3QgYXR0cjtcXG4gXFx0cHRocmVhZF90IHRocjtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdHNhLnNhX2ZsYWdzID0gU0FfU0lHSU5GTztcXG4gXFxuIFxcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3NlZ3ZfaGFuZGxlcjtcXG4gXFx0c2lnZW1wdHlzZXQoXFx1MDAyNnNhLnNhX21hc2spO1xcbi1cXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFxcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcXG4tXFx0XFx0cGVycm9yKFxcXCJzaWdhY3Rpb25cXFwiKTtcXG4tXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbi1cXHR9XFxuK1xcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcXHUwMDI2c2EsIE5VTEwpO1xcbitcXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XFxuIFxcbiBcXHRtZW1zZXQoXFx1MDAyNnNpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7XFxuIFxcbiBcXHRwdGhyZWFkX2F0dHJfaW5pdChcXHUwMDI2YXR0cik7XFxuIFxcdHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZShcXHUwMDI2YXR0ciwgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQpO1xcbiBcXG4tXFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNnRociwgXFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7XFxuK1xcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHIsIFxcdTAwMjZhdHRyLCB0aHJlYWRfc2Vndl9wa3VlcnJfc3RhY2ssIE5VTEwpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGVycm5vID0gcmV0O1xcbitcXHRcXHRwa2V5X2Fzc2VydCgwKTtcXG4rXFx0fVxcbiBcXG4gXFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZtdXRleCk7XFxuIFxcdHdoaWxlIChzaWdpbmZvLnNpX3NpZ25vID09IDApXFxuQEAgLTI4NSwyNCArMjkwLDIyIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpXFxuIFxcdHN0YXRpYyBzdGFja190IHNpZ3N0YWNrO1xcbiBcXHR2b2lkICpzdGFjaztcXG4gXFx0aW50IHBrZXk7XFxuLVxcdGludCBwYXJlbnRfcGlkID0gMDtcXG4gXFx0aW50IGNoaWxkX3BpZCA9IDA7XFxuIFxcdHU2NCBwa2V5X3JlZztcXG4rXFx0bG9uZyByZXQ7XFxuIFxcbiBcXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk8gfCBTQV9PTlNUQUNLO1xcbiBcXG4gXFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyO1xcbiBcXG4gXFx0c2lnZW1wdHlzZXQoXFx1MDAyNnNhLnNhX21hc2spO1xcbi1cXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFxcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcXG4tXFx0XFx0cGVycm9yKFxcXCJzaWdhY3Rpb25cXFwiKTtcXG4tXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbi1cXHR9XFxuK1xcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcXHUwMDI2c2EsIE5VTEwpO1xcbitcXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XFxuIFxcbiBcXHRzdGFjayA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4gXFx0XFx0ICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcXG4gXFxuLVxcdGFzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcXG4rXFx0cGtleV9hc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XFxuIFxcbiBcXHQvKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIE1QSyAxICovXFxuIFxcdHBrZXlfcmVnID0gcGtleV9yZWdfcmVzdHJpY3RpdmVfZGVmYXVsdCgpO1xcbkBAIC0zMTcsMzMgKzMyMCw0MSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX2RpZmZlcmVudF9wa2V5X2Zvcl9zdGFjayh2b2lkKVxcbiBcXHQvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqL1xcbiBcXHRzaWdzdGFjay5zc19zcCA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4gXFx0XFx0XFx0ICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpO1xcbiBcXHRzaWdzdGFjay5zc19mbGFncyA9IDA7XFxuIFxcdHNpZ3N0YWNrLnNzX3NpemUgPSBTVEFDS19TSVpFO1xcbiBcXG4gXFx0bWVtc2V0KFxcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xcbiBcXG4gXFx0LyogVXNlIGNsb25lIHRvIGF2b2lkIG5ld2VyIGdsaWJjcyB1c2luZyByc2VxIG9uIG5ldyB0aHJlYWRzICovXFxuLVxcdGxvbmcgcmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XFxuLVxcdFxcdFxcdCAgICAgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxcbi1cXHRcXHRcXHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XFxuLVxcdFxcdFxcdCAgICAgQ0xPTkVfREVUQUNIRUQsXFxuLVxcdFxcdFxcdCAgICAgc3RhY2sgKyBTVEFDS19TSVpFLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZwYXJlbnRfcGlkLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZjaGlsZF9waWQpO1xcbitcXHRyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcXG4rXFx0XFx0XFx0Q0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxcbitcXHRcXHRcXHRDTE9ORV9ERVRBQ0hFRCxcXG4rXFx0XFx0XFx0c3RhY2sgKyBTVEFDS19TSVpFLFxcbitcXHRcXHRcXHROVUxMLFxcbitcXHRcXHRcXHROVUxMKTtcXG4gXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGVycm5vID0gLXJldDtcXG4tXFx0XFx0cGVycm9yKFxcXCJjbG9uZVxcXCIpO1xcbitcXHRcXHRwa2V5X2Fzc2VydCgwKTtcXG4gXFx0fSBlbHNlIGlmIChyZXQgPT0gMCkge1xcbiBcXHRcXHR0aHJlYWRfc2Vndl9tYXBlcnJfcHRyKFxcdTAwMjZzaWdzdGFjayk7XFxuIFxcdFxcdHN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTtcXG4gXFx0fVxcbiBcXG4rXFx0Y2hpbGRfcGlkID0gcmV0O1xcbitcXG4gXFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZtdXRleCk7XFxuIFxcdHdoaWxlIChzaWdpbmZvLnNpX3NpZ25vID09IDApXFxuIFxcdFxcdHB0aHJlYWRfY29uZF93YWl0KFxcdTAwMjZjb25kLCBcXHUwMDI2bXV0ZXgpO1xcbiBcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2bXV0ZXgpO1xcbiBcXG4rXFx0LyogV2FpdCBmb3IgY2hpbGQgdG8gZXhpdCBiZWZvcmUgcmV0dXJuaW5nICovXFxuK1xcdGRvIHtcXG4rXFx0XFx0c2NoZWRfeWllbGQoKTtcXG4rXFx0XFx0cmV0ID0gc3lzY2FsbF9yYXcoU1lTX3RraWxsLCBjaGlsZF9waWQsIDAsIDAsIDAsIDAsIDApO1xcbitcXHR9IHdoaWxlIChyZXQgIT0gLUVTUkNIIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUlOVkFMKTtcXG4rXFxuIFxcdGtzZnRfdGVzdF9yZXN1bHQoc2lnaW5mby5zaV9zaWdubyA9PSBTSUdTRUdWIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCBzaWdpbmZvLnNpX2NvZGUgPT0gU0VHVl9NQVBFUlIgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0IHNpZ2luZm8uc2lfYWRkciA9PSBOVUxMLFxcbkBAIC0zNTgsNiArMzY5LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHNpZ2FjdGlvbiBzYTtcXG4gXFx0dTY0IHBrZXlfcmVnO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0LyogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBhbiBhcmJpdHJhcnkgc2V0IG9mIGtleXMgKi9cXG4gXFx0cGtleV9yZWcgPSBwa2V5X3JlZ19yZXN0cmljdGl2ZV9kZWZhdWx0KCk7XFxuQEAgLTM2OSwxMCArMzgxLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpXFxuIFxcbiBcXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX2hhbmRsZXI7XFxuIFxcdHNpZ2VtcHR5c2V0KFxcdTAwMjZzYS5zYV9tYXNrKTtcXG4tXFx0aWYgKHNpZ2FjdGlvbihTSUdVU1IxLCBcXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XFxuLVxcdFxcdHBlcnJvcihcXFwic2lnYWN0aW9uXFxcIik7XFxuLVxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4tXFx0fVxcbitcXHRyZXQgPSBzaWdhY3Rpb24oU0lHVVNSMSwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rXFx0cGtleV9hc3NlcnQocmV0ID09IDApO1xcbiBcXG4gXFx0bWVtc2V0KFxcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xcbiBcXG5AQCAtNDQxLDkgKzQ1MSwxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXFxuIFxcdHN0YXRpYyBzdGFja190IHNpZ3N0YWNrO1xcbiBcXHR2b2lkICpzdGFjaztcXG4gXFx0aW50IHBrZXk7XFxuLVxcdGludCBwYXJlbnRfcGlkID0gMDtcXG4gXFx0aW50IGNoaWxkX3BpZCA9IDA7XFxuIFxcdHU2NCBwa2V5X3JlZztcXG4rXFx0bG9uZyByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTSUdTRUdWIGhhbmRsZXIgaXMgcmVzZXQgdG8gU0lHX0RGTCBiZWxvdzsgdHVybiB0cmFjaW5nIG9mZiBmaXJzdFxcbitcXHQgKiBzbyBhIGNyYXNoIGRvZXMgbm90IGxlYXZlIGZ0cmFjZSBlbmFibGVkLlxcbitcXHQgKi9cXG4rXFx0dHJhY2luZ19vZmYoKTtcXG4gXFxuIFxcdHNhLnNhX2hhbmRsZXIgPSBTSUdfREZMO1xcbiBcXHRzYS5zYV9mbGFncyA9IDA7XFxuQEAgLTQ1MywyNCArNDY5LDIwIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9zaWdyZXR1cm4odm9pZClcXG4gXFx0ICogRm9yIHRoaXMgdGVzdGNhc2UsIHdlIGRvIG5vdCB3YW50IHRvIGhhbmRsZSBTSUdTRUdWLiBSZXNldCBoYW5kbGVyXFxuIFxcdCAqIHRvIGRlZmF1bHQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gY2FuIGNyYXNoIGlmIGl0IHJlY2VpdmVzIFNJR1NFR1YuXFxuIFxcdCAqL1xcbi1cXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFxcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcXG4tXFx0XFx0cGVycm9yKFxcXCJzaWdhY3Rpb25cXFwiKTtcXG4tXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbi1cXHR9XFxuK1xcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcXHUwMDI2c2EsIE5VTEwpO1xcbitcXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XFxuIFxcbiBcXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk8gfCBTQV9PTlNUQUNLO1xcbiBcXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IyX2hhbmRsZXI7XFxuIFxcdHNpZ2VtcHR5c2V0KFxcdTAwMjZzYS5zYV9tYXNrKTtcXG4gXFxuLVxcdGlmIChzaWdhY3Rpb24oU0lHVVNSMiwgXFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xcbi1cXHRcXHRwZXJyb3IoXFxcInNpZ2FjdGlvblxcXCIpO1xcbi1cXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuLVxcdH1cXG4rXFx0cmV0ID0gc2lnYWN0aW9uKFNJR1VTUjIsIFxcdTAwMjZzYSwgTlVMTCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcXG4gXFxuIFxcdHN0YWNrID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbiBcXHRcXHQgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xcbiBcXG4tXFx0YXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xcbitcXHRwa2V5X2Fzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEFsbG93IGFjY2VzcyB0byBNUEsgMCBhbmQgTVBLIDIuIFRoZSBjaGlsZCB0aHJlYWQgKHRvIGJlIGNyZWF0ZWRcXG5AQCAtNDkwLDIxICs1MDIsMjEgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxcbiBcXHQvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqL1xcbiBcXHRzaWdzdGFjay5zc19zcCA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4gXFx0XFx0XFx0ICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpO1xcbiBcXHRzaWdzdGFjay5zc19mbGFncyA9IDA7XFxuIFxcdHNpZ3N0YWNrLnNzX3NpemUgPSBTVEFDS19TSVpFO1xcbiBcXG4gXFx0LyogVXNlIGNsb25lIHRvIGF2b2lkIG5ld2VyIGdsaWJjcyB1c2luZyByc2VxIG9uIG5ldyB0aHJlYWRzICovXFxuLVxcdGxvbmcgcmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XFxuLVxcdFxcdFxcdCAgICAgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxcbi1cXHRcXHRcXHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XFxuLVxcdFxcdFxcdCAgICAgQ0xPTkVfREVUQUNIRUQsXFxuLVxcdFxcdFxcdCAgICAgc3RhY2sgKyBTVEFDS19TSVpFLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZwYXJlbnRfcGlkLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZjaGlsZF9waWQpO1xcbitcXHRyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcXG4rXFx0XFx0XFx0Q0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxcbitcXHRcXHRcXHRDTE9ORV9ERVRBQ0hFRCxcXG4rXFx0XFx0XFx0c3RhY2sgKyBTVEFDS19TSVpFLFxcbitcXHRcXHRcXHROVUxMLFxcbitcXHRcXHRcXHROVUxMKTtcXG4gXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGVycm5vID0gLXJldDtcXG4tXFx0XFx0cGVycm9yKFxcXCJjbG9uZVxcXCIpO1xcbitcXHRcXHRwa2V5X2Fzc2VydCgwKTtcXG4gXFx0fSAgZWxzZSBpZiAocmV0ID09IDApIHtcXG4gXFx0XFx0dGhyZWFkX3NpZ3VzcjJfc2VsZihcXHUwMDI2c2lnc3RhY2spO1xcbiBcXHRcXHRzeXNjYWxsX3JhdyhTWVNfZXhpdCwgMCwgMCwgMCwgMCwgMCwgMCk7XFxuQEAgLTUzMCwxNiArNTQyLDE3IEBAIHN0YXRpYyB2b2lkICgqcGtleV90ZXN0c1tdKSh2b2lkKSA9IHtcXG4gXFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIHtcXG4tXFx0aW50IGk7XFxuLVxcbiBcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbiBcXHRrc2Z0X3NldF9wbGFuKEFSUkFZX1NJWkUocGtleV90ZXN0cykpO1xcbiBcXG4gXFx0aWYgKCFpc19wa2V5c19zdXBwb3J0ZWQoKSlcXG4gXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcInBrZXlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocGtleV90ZXN0cyk7IGkrKylcXG4tXFx0XFx0KCpwa2V5X3Rlc3RzW2ldKSgpO1xcbitcXHRmb3IgKHRlc3RfbnIgPSAwOyB0ZXN0X25yIFxcdTAwM2MgQVJSQVlfU0laRShwa2V5X3Rlc3RzKTsgdGVzdF9ucisrKSB7XFxuK1xcdFxcdHRyYWNpbmdfb24oKTtcXG4rXFx0XFx0KCpwa2V5X3Rlc3RzW3Rlc3RfbnJdKSgpO1xcbitcXHRcXHR0cmFjaW5nX29mZigpO1xcbitcXHR9XFxuIFxcbiBcXHRrc2Z0X2ZpbmlzaGVkKCk7XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jXFxuaW5kZXggMjU1YjMzMmY3YTA4YjIuLmZiZWYzY2Q0NTQ0N2IxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmNcXG5AQCAtMiw5ICsyLDk5IEBAXFxuICNkZWZpbmUgX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3lzY2FsbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInBrZXktaGVscGVycy5oXFxcIlxcbiBcXG4raW50IGl0ZXJhdGlvbl9uciA9IDE7XFxuK2ludCB0ZXN0X25yO1xcbitpbnQgZHByaW50X2luX3NpZ25hbDtcXG4rXFxuKyNpZiBDT05UUk9MX1RSQUNJTkcgXFx1MDAzZSAwXFxuK3N0YXRpYyB2b2lkIGNhdF9pbnRvX2ZpbGUoY2hhciAqc3RyLCBjaGFyICpmaWxlKVxcbit7XFxuK1xcdGludCBmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRwcmludGYyKFxcXCIlcygpOiB3cml0aW5nICclcycgdG8gJyVzJ1xcXFxuXFxcIiwgX19mdW5jX18sIHN0ciwgZmlsZSk7XFxuK1xcdC8qXFxuK1xcdCAqIHRoZXNlIG5lZWQgdG8gYmUgcmF3IGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIHVuZGVyXFxuK1xcdCAqIHBrZXlfYXNzZXJ0KClcXG4rXFx0ICovXFxuK1xcdGlmIChmZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJlcnJvciBvcGVuaW5nICclcydcXFxcblxcXCIsIGZpbGUpO1xcbitcXHRcXHRwZXJyb3IoXFxcImVycm9yOiBcXFwiKTtcXG4rXFx0XFx0ZXhpdChfX0xJTkVfXyk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKTtcXG4rXFx0aWYgKHJldCAhPSBzdHJsZW4oc3RyKSkge1xcbitcXHRcXHRwZXJyb3IoXFxcIndyaXRlIHRvIGZpbGUgZmFpbGVkXFxcIik7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmlsZW5hbWU6ICclcycgc3RyOiAnJXMnXFxcXG5cXFwiLCBmaWxlLCBzdHIpO1xcbitcXHRcXHRleGl0KF9fTElORV9fKTtcXG4rXFx0fVxcbitcXHRjbG9zZShmZCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd2FybmVkX3RyYWNpbmc7XFxuK3N0YXRpYyBpbnQgdHJhY2luZ19yb290X29rKHZvaWQpXFxuK3tcXG4rXFx0aWYgKGdldGV1aWQoKSAhPSAwKSB7XFxuK1xcdFxcdGlmICghd2FybmVkX3RyYWNpbmcpXFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV0FSTklORzogbm90IHJ1biBhcyByb290LCBcXFwiXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJjYW4gbm90IGRvIHRyYWNpbmcgY29udHJvbFxcXFxuXFxcIik7XFxuK1xcdFxcdHdhcm5lZF90cmFjaW5nID0gMTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDE7XFxuK31cXG4rI2VuZGlmXFxuK1xcbit2b2lkIHRyYWNpbmdfb24odm9pZClcXG4re1xcbisjaWYgQ09OVFJPTF9UUkFDSU5HIFxcdTAwM2UgMFxcbisjZGVmaW5lIFRSQUNFRElSIFxcXCIvc3lzL2tlcm5lbC90cmFjaW5nXFxcIlxcbitcXHRjaGFyIHBpZHN0clszMl07XFxuK1xcbitcXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcHJpbnRmKHBpZHN0ciwgXFxcIiVkXFxcIiwgZ2V0cGlkKCkpO1xcbitcXHRjYXRfaW50b19maWxlKFxcXCIwXFxcIiwgVFJBQ0VESVIgXFxcIi90cmFjaW5nX29uXFxcIik7XFxuK1xcdGNhdF9pbnRvX2ZpbGUoXFxcIlxcXFxuXFxcIiwgVFJBQ0VESVIgXFxcIi90cmFjZVxcXCIpO1xcbitcXHRpZiAoMSkge1xcbitcXHRcXHRjYXRfaW50b19maWxlKFxcXCJmdW5jdGlvbl9ncmFwaFxcXCIsIFRSQUNFRElSIFxcXCIvY3VycmVudF90cmFjZXJcXFwiKTtcXG4rXFx0XFx0Y2F0X2ludG9fZmlsZShcXFwiMVxcXCIsIFRSQUNFRElSIFxcXCIvb3B0aW9ucy9mdW5jZ3JhcGgtcHJvY1xcXCIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRjYXRfaW50b19maWxlKFxcXCJub3BcXFwiLCBUUkFDRURJUiBcXFwiL2N1cnJlbnRfdHJhY2VyXFxcIik7XFxuK1xcdH1cXG4rXFx0Y2F0X2ludG9fZmlsZShwaWRzdHIsIFRSQUNFRElSIFxcXCIvc2V0X2Z0cmFjZV9waWRcXFwiKTtcXG4rXFx0Y2F0X2ludG9fZmlsZShcXFwiMVxcXCIsIFRSQUNFRElSIFxcXCIvdHJhY2luZ19vblxcXCIpO1xcbitcXHRkcHJpbnRmMShcXFwiZW5hYmxlZCB0cmFjaW5nXFxcXG5cXFwiKTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuK3ZvaWQgdHJhY2luZ19vZmYodm9pZClcXG4re1xcbisjaWYgQ09OVFJPTF9UUkFDSU5HIFxcdTAwM2UgMFxcbitcXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGNhdF9pbnRvX2ZpbGUoXFxcIjBcXFwiLCBcXFwiL3N5cy9rZXJuZWwvdHJhY2luZy90cmFjaW5nX29uXFxcIik7XFxuKyNlbmRpZlxcbit9XFxuK1xcbit2b2lkIGFib3J0X2hvb2tzKHZvaWQpXFxuK3tcXG4rXFx0ZmZsdXNoKHN0ZG91dCk7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwicnVubmluZyAlcygpLi4uXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdHRyYWNpbmdfb2ZmKCk7XFxuKyNpZmRlZiBTTEVFUF9PTl9BQk9SVFxcbitcXHRzbGVlcChTTEVFUF9PTl9BQk9SVCk7XFxuKyNlbmRpZlxcbit9XFxuK1xcbiBpbnQgc3lzX3BrZXlfYWxsb2ModW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBpbml0X3ZhbClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gc3lzY2FsbChTWVNfcGtleV9hbGxvYywgZmxhZ3MsIGluaXRfdmFsKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xcbmluZGV4IDlhNmQ5NTRlZTM3MTI2Li5hZTZlMTUzMGIzNTQ4NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXFxuQEAgLTQ5LDExICs0OSw3IEBAXFxuICNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicGtleS1oZWxwZXJzLmhcXFwiXFxuIFxcbi1pbnQgaXRlcmF0aW9uX25yID0gMTtcXG4taW50IHRlc3RfbnI7XFxuLVxcbiB1NjQgc2hhZG93X3BrZXlfcmVnO1xcbi1pbnQgZHByaW50X2luX3NpZ25hbDtcXG4gXFxuIG5vaW5saW5lIGludCByZWFkX3B0cihpbnQgKnB0cilcXG4ge1xcbkBAIC02Miw4OSArNTgsNiBAQCBub2lubGluZSBpbnQgcmVhZF9wdHIoaW50ICpwdHIpXFxuIFxcdHJldHVybiAqcHRyO1xcbiB9XFxuIFxcbi0jaWYgQ09OVFJPTF9UUkFDSU5HIFxcdTAwM2UgMFxcbi1zdGF0aWMgdm9pZCBjYXRfaW50b19maWxlKGNoYXIgKnN0ciwgY2hhciAqZmlsZSlcXG4te1xcbi1cXHRpbnQgZmQgPSBvcGVuKGZpbGUsIE9fUkRXUik7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRkcHJpbnRmMihcXFwiJXMoKTogd3JpdGluZyAnJXMnIHRvICclcydcXFxcblxcXCIsIF9fZnVuY19fLCBzdHIsIGZpbGUpO1xcbi1cXHQvKlxcbi1cXHQgKiB0aGVzZSBuZWVkIHRvIGJlIHJhdyBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCB1bmRlclxcbi1cXHQgKiBwa2V5X2Fzc2VydCgpXFxuLVxcdCAqL1xcbi1cXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZXJyb3Igb3BlbmluZyAnJXMnXFxcXG5cXFwiLCBzdHIpO1xcbi1cXHRcXHRwZXJyb3IoXFxcImVycm9yOiBcXFwiKTtcXG4tXFx0XFx0ZXhpdChfX0xJTkVfXyk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldCA9IHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKTtcXG4tXFx0aWYgKHJldCAhPSBzdHJsZW4oc3RyKSkge1xcbi1cXHRcXHRwZXJyb3IoXFxcIndyaXRlIHRvIGZpbGUgZmFpbGVkXFxcIik7XFxuLVxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmlsZW5hbWU6ICclcycgc3RyOiAnJXMnXFxcXG5cXFwiLCBmaWxlLCBzdHIpO1xcbi1cXHRcXHRleGl0KF9fTElORV9fKTtcXG4tXFx0fVxcbi1cXHRjbG9zZShmZCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgd2FybmVkX3RyYWNpbmc7XFxuLXN0YXRpYyBpbnQgdHJhY2luZ19yb290X29rKHZvaWQpXFxuLXtcXG4tXFx0aWYgKGdldGV1aWQoKSAhPSAwKSB7XFxuLVxcdFxcdGlmICghd2FybmVkX3RyYWNpbmcpXFxuLVxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV0FSTklORzogbm90IHJ1biBhcyByb290LCBcXFwiXFxuLVxcdFxcdFxcdFxcdFxcdFxcXCJjYW4gbm90IGRvIHRyYWNpbmcgY29udHJvbFxcXFxuXFxcIik7XFxuLVxcdFxcdHdhcm5lZF90cmFjaW5nID0gMTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIDE7XFxuLX1cXG4tI2VuZGlmXFxuLVxcbi1zdGF0aWMgdm9pZCB0cmFjaW5nX29uKHZvaWQpXFxuLXtcXG4tI2lmIENPTlRST0xfVFJBQ0lORyBcXHUwMDNlIDBcXG4tI2RlZmluZSBUUkFDRURJUiBcXFwiL3N5cy9rZXJuZWwvdHJhY2luZ1xcXCJcXG4tXFx0Y2hhciBwaWRzdHJbMzJdO1xcbi1cXG4tXFx0aWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0c3ByaW50ZihwaWRzdHIsIFxcXCIlZFxcXCIsIGdldHBpZCgpKTtcXG4tXFx0Y2F0X2ludG9fZmlsZShcXFwiMFxcXCIsIFRSQUNFRElSIFxcXCIvdHJhY2luZ19vblxcXCIpO1xcbi1cXHRjYXRfaW50b19maWxlKFxcXCJcXFxcblxcXCIsIFRSQUNFRElSIFxcXCIvdHJhY2VcXFwiKTtcXG4tXFx0aWYgKDEpIHtcXG4tXFx0XFx0Y2F0X2ludG9fZmlsZShcXFwiZnVuY3Rpb25fZ3JhcGhcXFwiLCBUUkFDRURJUiBcXFwiL2N1cnJlbnRfdHJhY2VyXFxcIik7XFxuLVxcdFxcdGNhdF9pbnRvX2ZpbGUoXFxcIjFcXFwiLCBUUkFDRURJUiBcXFwiL29wdGlvbnMvZnVuY2dyYXBoLXByb2NcXFwiKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0Y2F0X2ludG9fZmlsZShcXFwibm9wXFxcIiwgVFJBQ0VESVIgXFxcIi9jdXJyZW50X3RyYWNlclxcXCIpO1xcbi1cXHR9XFxuLVxcdGNhdF9pbnRvX2ZpbGUocGlkc3RyLCBUUkFDRURJUiBcXFwiL3NldF9mdHJhY2VfcGlkXFxcIik7XFxuLVxcdGNhdF9pbnRvX2ZpbGUoXFxcIjFcXFwiLCBUUkFDRURJUiBcXFwiL3RyYWNpbmdfb25cXFwiKTtcXG4tXFx0ZHByaW50ZjEoXFxcImVuYWJsZWQgdHJhY2luZ1xcXFxuXFxcIik7XFxuLSNlbmRpZlxcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCB0cmFjaW5nX29mZih2b2lkKVxcbi17XFxuLSNpZiBDT05UUk9MX1RSQUNJTkcgXFx1MDAzZSAwXFxuLVxcdGlmICghdHJhY2luZ19yb290X29rKCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFx0Y2F0X2ludG9fZmlsZShcXFwiMFxcXCIsIFxcXCIvc3lzL2tlcm5lbC90cmFjaW5nL3RyYWNpbmdfb25cXFwiKTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuLXZvaWQgYWJvcnRfaG9va3Modm9pZClcXG4te1xcbi1cXHRmZmx1c2goc3Rkb3V0KTtcXG4tXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJydW5uaW5nICVzKCkuLi5cXFxcblxcXCIsIF9fZnVuY19fKTtcXG4tXFx0dHJhY2luZ19vZmYoKTtcXG4tI2lmZGVmIFNMRUVQX09OX0FCT1JUXFxuLVxcdHNsZWVwKFNMRUVQX09OX0FCT1JUKTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuIC8qXFxuICAqIFRoaXMgYXR0ZW1wdHMgdG8gaGF2ZSByb3VnaGx5IGEgcGFnZSBvZiBpbnN0cnVjdGlvbnMgZm9sbG93ZWQgYnkgYSBmZXdcXG4gICogaW5zdHJ1Y3Rpb25zIHRoYXQgZG8gYSB3cml0ZSwgYW5kIGFub3RoZXIgcGFnZSBvZiBpbnN0cnVjdGlvbnMuICBUaGF0XFxuQEAgLTY2OSw3ICs1ODIsNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXlfd2l0aF9tcHJvdGVjdChsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSlcXG4gXFx0XFx0XFx0c2l6ZSwgcHJvdCwgcGtleSk7XFxuIFxcdHBrZXlfYXNzZXJ0KHBrZXkgXFx1MDAzYyBOUl9QS0VZUyk7XFxuIFxcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgcHJvdCwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xcbi1cXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XFxuK1xcdHBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTtcXG4gXFx0cmV0ID0gbXByb3RlY3RfcGtleSgodm9pZCAqKXB0ciwgUEFHRV9TSVpFLCBwcm90LCBwa2V5KTtcXG4gXFx0cGtleV9hc3NlcnQoIXJldCk7XFxuIFxcdHJlY29yZF9wa2V5X21hbGxvYyhwdHIsIHNpemUsIHByb3QpO1xcbkBAIC02OTIsNyArNjA1LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X2Fub25faHVnZShsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSlcXG4gXFx0ICovXFxuIFxcdHNpemUgPSBBTElHTl9VUChzaXplLCBIUEFHRV9TSVpFICogMik7XFxuIFxcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9OT05FLCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7XFxuLVxcdHBrZXlfYXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTtcXG4rXFx0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xcbiBcXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcXG4gXFx0bXByb3RlY3RfcGtleShwdHIsIHNpemUsIHByb3QsIHBrZXkpO1xcbiBcXG5AQCAtNzUwLDcgKzY2Myw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV9odWdldGxiKGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KVxcbiBcXHRzaXplID0gQUxJR05fVVAoc2l6ZSwgSFBBR0VfU0laRSAqIDIpO1xcbiBcXHRwa2V5X2Fzc2VydChwa2V5IFxcdTAwM2MgTlJfUEtFWVMpO1xcbiBcXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgZmxhZ3MsIC0xLCAwKTtcXG4tXFx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xcbitcXHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XFxuIFxcdG1wcm90ZWN0X3BrZXkocHRyLCBzaXplLCBwcm90LCBwa2V5KTtcXG4gXFxuIFxcdHJlY29yZF9wa2V5X21hbGxvYyhwdHIsIHNpemUsIHByb3QpO1xcbkBAIC03NzksNyArNjkyLDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5KGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KVxcbiBcXHRcXHRwa2V5X2Fzc2VydChtYWxsb2NfdHlwZSBcXHUwMDNjIG5yX21hbGxvY190eXBlcyk7XFxuIFxcbiBcXHRcXHRyZXQgPSBwa2V5X21hbGxvY1ttYWxsb2NfdHlwZV0oc2l6ZSwgcHJvdCwgcGtleSk7XFxuLVxcdFxcdHBrZXlfYXNzZXJ0KHJldCAhPSAodm9pZCAqKS0xKTtcXG4rXFx0XFx0cGtleV9hc3NlcnQocmV0ICE9IE1BUF9GQUlMRUQpO1xcbiBcXG4gXFx0XFx0bWFsbG9jX3R5cGUrKztcXG4gXFx0XFx0aWYgKG1hbGxvY190eXBlIFxcdTAwM2U9IG5yX21hbGxvY190eXBlcylcXG5AQCAtMTE5Nyw2ICsxMTEwLDcgQEAgc3RhdGljIHZvaWQgYXJjaF9mb3JjZV9wa2V5X3JlZ19pbml0KHZvaWQpXFxuIFxcdCAqIGRvaW5nIHRoZSBYU0FWRSBzaXplIGVudW1lcmF0aW9uIGRhbmNlLlxcbiBcXHQgKi9cXG4gXFx0YnVmID0gbW1hcChOVUxMLCAxKk1CLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xcbitcXHRwa2V5X2Fzc2VydChidWYgIT0gTUFQX0ZBSUxFRCk7XFxuIFxcbiBcXHQvKiBUaGVzZSBfX2J1aWx0aW5zIHJlcXVpcmUgY29tcGlsaW5nIHdpdGggLW14c2F2ZSAqL1xcbiBcXG5AQCAtMTc2Myw3ICsxNjc3LDggQEAgaW50IG1haW4odm9pZClcXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcInJ1bm5pbmcgUEtFWSB0ZXN0cyBmb3IgdW5zdXBwb3J0ZWQgQ1BVL09TXFxcXG5cXFwiKTtcXG4gXFxuIFxcdFxcdHB0ciAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xcbi1cXHRcXHRhc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xcbitcXHRcXHRpZiAocHRyID09IE1BUF9GQUlMRUQpXFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibW1hcFxcXCIpO1xcbiBcXHRcXHR0ZXN0X21wcm90ZWN0X3BrZXlfb25fdW5zdXBwb3J0ZWRfY3B1KHB0ciwgMSk7XFxuIFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcXFwicGtleSBvbiB1bnN1cHBvcnRlZCBDUFUvT1NcXFxcblxcXCIpO1xcbiBcXHRcXHRrc2Z0X2ZpbmlzaGVkKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjUzOjAyLjg2ODE3NzY1M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA2NjYxMTY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MzZjMTc0N2ZlZDY0ZGEyMDYzYjU5NDZiNjZiMWRiY2U1ZWY5YjU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgNiAwODo1MzowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhcbmluZGV4IDJjMzc3ZjRlOWRmMWQzLi40NmE4YTE4NzhkYzFmZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaFxuQEAgLTY4LDcgKzY4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHNpZ3NhZmVfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKVxuICNkZWZpbmUgZHByaW50ZjMoYXJncy4uLikgZHByaW50Zl9sZXZlbCgzLCBhcmdzKVxuICNkZWZpbmUgZHByaW50ZjQoYXJncy4uLikgZHByaW50Zl9sZXZlbCg0LCBhcmdzKVxuIFxuLWV4dGVybiB2b2lkIGFib3J0X2hvb2tzKHZvaWQpO1xuK3ZvaWQgdHJhY2luZ19vbih2b2lkKTtcbit2b2lkIHRyYWNpbmdfb2ZmKHZvaWQpO1xuK3ZvaWQgYWJvcnRfaG9va3Modm9pZCk7XG4gI2RlZmluZSBwa2V5X2Fzc2VydChjb25kaXRpb24pIGRvIHtcdFx0XFxcbiBcdGlmICghKGNvbmRpdGlvbikpIHtcdFx0XHRcXFxuIFx0XHRkcHJpbnRmMChcIiMgYXNzZXJ0KCkgYXQgJXM6OiVkIHRlc3RfbnI6ICVkIGl0ZXJhdGlvbjogJWRcXG5cIiwgXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oXG5pbmRleCAxN2JmMmQxYjAxOTJlMC4uMmNlODU1ODBiNDA0ODcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhcbkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICptYWxsb2NfcGtleV93aXRoX21wcm90ZWN0X3N1YnBhZ2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBcbiBcdFx0XHRzaXplLCBwcm90LCBwa2V5KTtcbiBcdHBrZXlfYXNzZXJ0KHBrZXkgXHUwMDNjIE5SX1BLRVlTKTtcbiBcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgcHJvdCwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuK1x0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xuIFxuIFx0cmV0ID0gc3lzY2FsbChfX05SX3N1YnBhZ2VfcHJvdCwgcHRyLCBzaXplLCBOVUxMKTtcbiBcdGlmIChyZXQpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jXG5pbmRleCAzMDJmZWY1NDA0OWM4Ny4uYzIxOGQwNTEwYTJhNDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmNcbkBAIC0xOSw3ICsxOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbkBAIC0yMDcsMjIgKzIwNiwyNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX3BrZXkwX2Rpc2FibGVkKHZvaWQpXG4gXHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhO1xuIFx0cHRocmVhZF9hdHRyX3QgYXR0cjtcbiBcdHB0aHJlYWRfdCB0aHI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPO1xuIFxuIFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyO1xuIFx0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4tXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCJzaWdhY3Rpb25cIik7XG4tXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbitcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCk7XG4rXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdHB0aHJlYWRfYXR0cl9pbml0KFx1MDAyNmF0dHIpO1xuIFx0cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3Zfd2l0aF9wa2V5MF9kaXNhYmxlZCwgTlVMTCk7XG4rXHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHIsIFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3dpdGhfcGtleTBfZGlzYWJsZWQsIE5VTEwpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRlcnJubyA9IHJldDtcbitcdFx0cGtleV9hc3NlcnQoMCk7XG4rXHR9XG4gXG4gXHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuIFx0d2hpbGUgKHNpZ2luZm8uc2lfc2lnbm8gPT0gMClcbkBAIC0yNDcsMjIgKzI0OSwyNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl9jYW5ub3RfYWNjZXNzX3N0YWNrKHZvaWQpXG4gXHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhO1xuIFx0cHRocmVhZF9hdHRyX3QgYXR0cjtcbiBcdHB0aHJlYWRfdCB0aHI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPO1xuIFxuIFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyO1xuIFx0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4tXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCJzaWdhY3Rpb25cIik7XG4tXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbitcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCk7XG4rXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdHB0aHJlYWRfYXR0cl9pbml0KFx1MDAyNmF0dHIpO1xuIFx0cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3ZfcGt1ZXJyX3N0YWNrLCBOVUxMKTtcbitcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3ZfcGt1ZXJyX3N0YWNrLCBOVUxMKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZXJybm8gPSByZXQ7XG4rXHRcdHBrZXlfYXNzZXJ0KDApO1xuK1x0fVxuIFxuIFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNm11dGV4KTtcbiBcdHdoaWxlIChzaWdpbmZvLnNpX3NpZ25vID09IDApXG5AQCAtMjg1LDI0ICsyOTAsMjIgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZClcbiBcdHN0YXRpYyBzdGFja190IHNpZ3N0YWNrO1xuIFx0dm9pZCAqc3RhY2s7XG4gXHRpbnQgcGtleTtcbi1cdGludCBwYXJlbnRfcGlkID0gMDtcbiBcdGludCBjaGlsZF9waWQgPSAwO1xuIFx0dTY0IHBrZXlfcmVnO1xuK1x0bG9uZyByZXQ7XG4gXG4gXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk8gfCBTQV9PTlNUQUNLO1xuIFxuIFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyO1xuIFxuIFx0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4tXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCJzaWdhY3Rpb25cIik7XG4tXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbitcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCk7XG4rXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRzdGFjayA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiBcdFx0ICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcbiBcbi1cdGFzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcbitcdHBrZXlfYXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xuIFxuIFx0LyogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBNUEsgMSAqL1xuIFx0cGtleV9yZWcgPSBwa2V5X3JlZ19yZXN0cmljdGl2ZV9kZWZhdWx0KCk7XG5AQCAtMzE3LDMzICszMjAsNDEgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZClcbiBcdC8qIFNldCB1cCBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrIHRoYXQgd2lsbCB1c2UgdGhlIGRlZmF1bHQgTVBLICovXG4gXHRzaWdzdGFjay5zc19zcCA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiBcdFx0XHQgICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcbitcdHBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpO1xuIFx0c2lnc3RhY2suc3NfZmxhZ3MgPSAwO1xuIFx0c2lnc3RhY2suc3Nfc2l6ZSA9IFNUQUNLX1NJWkU7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdC8qIFVzZSBjbG9uZSB0byBhdm9pZCBuZXdlciBnbGliY3MgdXNpbmcgcnNlcSBvbiBuZXcgdGhyZWFkcyAqL1xuLVx0bG9uZyByZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbi1cdFx0XHQgICAgIENMT05FX1NJR0hBTkQgfCBDTE9ORV9USFJFQUQgfCBDTE9ORV9TWVNWU0VNIHxcbi1cdFx0XHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XG4tXHRcdFx0ICAgICBDTE9ORV9ERVRBQ0hFRCxcbi1cdFx0XHQgICAgIHN0YWNrICsgU1RBQ0tfU0laRSxcbi1cdFx0XHQgICAgIFx1MDAyNnBhcmVudF9waWQsXG4tXHRcdFx0ICAgICBcdTAwMjZjaGlsZF9waWQpO1xuK1x0cmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XG4rXHRcdFx0Q0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxuK1x0XHRcdENMT05FX0RFVEFDSEVELFxuK1x0XHRcdHN0YWNrICsgU1RBQ0tfU0laRSxcbitcdFx0XHROVUxMLFxuK1x0XHRcdE5VTEwpO1xuIFxuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRlcnJubyA9IC1yZXQ7XG4tXHRcdHBlcnJvcihcImNsb25lXCIpO1xuK1x0XHRwa2V5X2Fzc2VydCgwKTtcbiBcdH0gZWxzZSBpZiAocmV0ID09IDApIHtcbiBcdFx0dGhyZWFkX3NlZ3ZfbWFwZXJyX3B0cihcdTAwMjZzaWdzdGFjayk7XG4gXHRcdHN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTtcbiBcdH1cbiBcbitcdGNoaWxkX3BpZCA9IHJldDtcbitcbiBcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZtdXRleCk7XG4gXHR3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKVxuIFx0XHRwdGhyZWFkX2NvbmRfd2FpdChcdTAwMjZjb25kLCBcdTAwMjZtdXRleCk7XG4gXHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZtdXRleCk7XG4gXG4rXHQvKiBXYWl0IGZvciBjaGlsZCB0byBleGl0IGJlZm9yZSByZXR1cm5pbmcgKi9cbitcdGRvIHtcbitcdFx0c2NoZWRfeWllbGQoKTtcbitcdFx0cmV0ID0gc3lzY2FsbF9yYXcoU1lTX3RraWxsLCBjaGlsZF9waWQsIDAsIDAsIDAsIDAsIDApO1xuK1x0fSB3aGlsZSAocmV0ICE9IC1FU1JDSCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FSU5WQUwpO1xuK1xuIFx0a3NmdF90ZXN0X3Jlc3VsdChzaWdpbmZvLnNpX3NpZ25vID09IFNJR1NFR1YgXHUwMDI2XHUwMDI2XG4gXHRcdFx0IHNpZ2luZm8uc2lfY29kZSA9PSBTRUdWX01BUEVSUiBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgc2lnaW5mby5zaV9hZGRyID09IE5VTEwsXG5AQCAtMzU4LDYgKzM2OSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9wcmVzZXJ2ZWRfYWZ0ZXJfc2lndXNyMSh2b2lkKVxuIHtcbiBcdHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4gXHR1NjQgcGtleV9yZWc7XG4rXHRpbnQgcmV0O1xuIFxuIFx0LyogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBhbiBhcmJpdHJhcnkgc2V0IG9mIGtleXMgKi9cbiBcdHBrZXlfcmVnID0gcGtleV9yZWdfcmVzdHJpY3RpdmVfZGVmYXVsdCgpO1xuQEAgLTM2OSwxMCArMzgxLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpXG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX2hhbmRsZXI7XG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcInNpZ2FjdGlvblwiKTtcbi1cdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuLVx0fVxuK1x0cmV0ID0gc2lnYWN0aW9uKFNJR1VTUjEsIFx1MDAyNnNhLCBOVUxMKTtcbitcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcbiBcbiBcdG1lbXNldChcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xuIFxuQEAgLTQ0MSw5ICs0NTEsMTUgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxuIFx0c3RhdGljIHN0YWNrX3Qgc2lnc3RhY2s7XG4gXHR2b2lkICpzdGFjaztcbiBcdGludCBwa2V5O1xuLVx0aW50IHBhcmVudF9waWQgPSAwO1xuIFx0aW50IGNoaWxkX3BpZCA9IDA7XG4gXHR1NjQgcGtleV9yZWc7XG4rXHRsb25nIHJldDtcbitcbitcdC8qXG4rXHQgKiBTSUdTRUdWIGhhbmRsZXIgaXMgcmVzZXQgdG8gU0lHX0RGTCBiZWxvdzsgdHVybiB0cmFjaW5nIG9mZiBmaXJzdFxuK1x0ICogc28gYSBjcmFzaCBkb2VzIG5vdCBsZWF2ZSBmdHJhY2UgZW5hYmxlZC5cbitcdCAqL1xuK1x0dHJhY2luZ19vZmYoKTtcbiBcbiBcdHNhLnNhX2hhbmRsZXIgPSBTSUdfREZMO1xuIFx0c2Euc2FfZmxhZ3MgPSAwO1xuQEAgLTQ1MywyNCArNDY5LDIwIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9zaWdyZXR1cm4odm9pZClcbiBcdCAqIEZvciB0aGlzIHRlc3RjYXNlLCB3ZSBkbyBub3Qgd2FudCB0byBoYW5kbGUgU0lHU0VHVi4gUmVzZXQgaGFuZGxlclxuIFx0ICogdG8gZGVmYXVsdCBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjYW4gY3Jhc2ggaWYgaXQgcmVjZWl2ZXMgU0lHU0VHVi5cbiBcdCAqL1xuLVx0aWYgKHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcbi1cdFx0cGVycm9yKFwic2lnYWN0aW9uXCIpO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4rXHRyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpO1xuK1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfT05TVEFDSztcbiBcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3VzcjJfaGFuZGxlcjtcbiBcdHNpZ2VtcHR5c2V0KFx1MDAyNnNhLnNhX21hc2spO1xuIFxuLVx0aWYgKHNpZ2FjdGlvbihTSUdVU1IyLCBcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcbi1cdFx0cGVycm9yKFwic2lnYWN0aW9uXCIpO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4rXHRyZXQgPSBzaWdhY3Rpb24oU0lHVVNSMiwgXHUwMDI2c2EsIE5VTEwpO1xuK1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0c3RhY2sgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdCAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4gXG4tXHRhc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XG4rXHRwa2V5X2Fzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdC8qXG4gXHQgKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIE1QSyAyLiBUaGUgY2hpbGQgdGhyZWFkICh0byBiZSBjcmVhdGVkXG5AQCAtNDkwLDIxICs1MDIsMjEgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxuIFx0LyogU2V0IHVwIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgdGhhdCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBNUEsgKi9cbiBcdHNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHRcdCAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuK1x0cGtleV9hc3NlcnQoc2lnc3RhY2suc3Nfc3AgIT0gTUFQX0ZBSUxFRCk7XG4gXHRzaWdzdGFjay5zc19mbGFncyA9IDA7XG4gXHRzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTtcbiBcbiBcdC8qIFVzZSBjbG9uZSB0byBhdm9pZCBuZXdlciBnbGliY3MgdXNpbmcgcnNlcSBvbiBuZXcgdGhyZWFkcyAqL1xuLVx0bG9uZyByZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbi1cdFx0XHQgICAgIENMT05FX1NJR0hBTkQgfCBDTE9ORV9USFJFQUQgfCBDTE9ORV9TWVNWU0VNIHxcbi1cdFx0XHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XG4tXHRcdFx0ICAgICBDTE9ORV9ERVRBQ0hFRCxcbi1cdFx0XHQgICAgIHN0YWNrICsgU1RBQ0tfU0laRSxcbi1cdFx0XHQgICAgIFx1MDAyNnBhcmVudF9waWQsXG4tXHRcdFx0ICAgICBcdTAwMjZjaGlsZF9waWQpO1xuK1x0cmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XG4rXHRcdFx0Q0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxuK1x0XHRcdENMT05FX0RFVEFDSEVELFxuK1x0XHRcdHN0YWNrICsgU1RBQ0tfU0laRSxcbitcdFx0XHROVUxMLFxuK1x0XHRcdE5VTEwpO1xuIFxuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRlcnJubyA9IC1yZXQ7XG4tXHRcdHBlcnJvcihcImNsb25lXCIpO1xuK1x0XHRwa2V5X2Fzc2VydCgwKTtcbiBcdH0gIGVsc2UgaWYgKHJldCA9PSAwKSB7XG4gXHRcdHRocmVhZF9zaWd1c3IyX3NlbGYoXHUwMDI2c2lnc3RhY2spO1xuIFx0XHRzeXNjYWxsX3JhdyhTWVNfZXhpdCwgMCwgMCwgMCwgMCwgMCwgMCk7XG5AQCAtNTMwLDE2ICs1NDIsMTcgQEAgc3RhdGljIHZvaWQgKCpwa2V5X3Rlc3RzW10pKHZvaWQpID0ge1xuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuLVx0aW50IGk7XG4tXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFx0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHBrZXlfdGVzdHMpKTtcbiBcbiBcdGlmICghaXNfcGtleXNfc3VwcG9ydGVkKCkpXG4gXHRcdGtzZnRfZXhpdF9za2lwKFwicGtleXMgbm90IHN1cHBvcnRlZFxcblwiKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocGtleV90ZXN0cyk7IGkrKylcbi1cdFx0KCpwa2V5X3Rlc3RzW2ldKSgpO1xuK1x0Zm9yICh0ZXN0X25yID0gMDsgdGVzdF9uciBcdTAwM2MgQVJSQVlfU0laRShwa2V5X3Rlc3RzKTsgdGVzdF9ucisrKSB7XG4rXHRcdHRyYWNpbmdfb24oKTtcbitcdFx0KCpwa2V5X3Rlc3RzW3Rlc3RfbnJdKSgpO1xuK1x0XHR0cmFjaW5nX29mZigpO1xuK1x0fVxuIFxuIFx0a3NmdF9maW5pc2hlZCgpO1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuY1xuaW5kZXggMjU1YjMzMmY3YTA4YjIuLmZiZWYzY2Q0NTQ0N2IxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jXG5AQCAtMiw5ICsyLDk5IEBAXG4gI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX19cbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJwa2V5LWhlbHBlcnMuaFwiXG4gXG4raW50IGl0ZXJhdGlvbl9uciA9IDE7XG4raW50IHRlc3RfbnI7XG4raW50IGRwcmludF9pbl9zaWduYWw7XG4rXG4rI2lmIENPTlRST0xfVFJBQ0lORyBcdTAwM2UgMFxuK3N0YXRpYyB2b2lkIGNhdF9pbnRvX2ZpbGUoY2hhciAqc3RyLCBjaGFyICpmaWxlKVxuK3tcbitcdGludCBmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcbitcdGludCByZXQ7XG4rXG4rXHRkcHJpbnRmMihcIiVzKCk6IHdyaXRpbmcgJyVzJyB0byAnJXMnXFxuXCIsIF9fZnVuY19fLCBzdHIsIGZpbGUpO1xuK1x0LypcbitcdCAqIHRoZXNlIG5lZWQgdG8gYmUgcmF3IGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIHVuZGVyXG4rXHQgKiBwa2V5X2Fzc2VydCgpXG4rXHQgKi9cbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJlcnJvciBvcGVuaW5nICclcydcXG5cIiwgZmlsZSk7XG4rXHRcdHBlcnJvcihcImVycm9yOiBcIik7XG4rXHRcdGV4aXQoX19MSU5FX18pO1xuK1x0fVxuK1xuK1x0cmV0ID0gd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpO1xuK1x0aWYgKHJldCAhPSBzdHJsZW4oc3RyKSkge1xuK1x0XHRwZXJyb3IoXCJ3cml0ZSB0byBmaWxlIGZhaWxlZFwiKTtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmlsZW5hbWU6ICclcycgc3RyOiAnJXMnXFxuXCIsIGZpbGUsIHN0cik7XG4rXHRcdGV4aXQoX19MSU5FX18pO1xuK1x0fVxuK1x0Y2xvc2UoZmQpO1xuK31cbitcbitzdGF0aWMgaW50IHdhcm5lZF90cmFjaW5nO1xuK3N0YXRpYyBpbnQgdHJhY2luZ19yb290X29rKHZvaWQpXG4re1xuK1x0aWYgKGdldGV1aWQoKSAhPSAwKSB7XG4rXHRcdGlmICghd2FybmVkX3RyYWNpbmcpXG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiV0FSTklORzogbm90IHJ1biBhcyByb290LCBcIlxuK1x0XHRcdFx0XHRcImNhbiBub3QgZG8gdHJhY2luZyBjb250cm9sXFxuXCIpO1xuK1x0XHR3YXJuZWRfdHJhY2luZyA9IDE7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0cmV0dXJuIDE7XG4rfVxuKyNlbmRpZlxuK1xuK3ZvaWQgdHJhY2luZ19vbih2b2lkKVxuK3tcbisjaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4rI2RlZmluZSBUUkFDRURJUiBcIi9zeXMva2VybmVsL3RyYWNpbmdcIlxuK1x0Y2hhciBwaWRzdHJbMzJdO1xuK1xuK1x0aWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3ByaW50ZihwaWRzdHIsIFwiJWRcIiwgZ2V0cGlkKCkpO1xuK1x0Y2F0X2ludG9fZmlsZShcIjBcIiwgVFJBQ0VESVIgXCIvdHJhY2luZ19vblwiKTtcbitcdGNhdF9pbnRvX2ZpbGUoXCJcXG5cIiwgVFJBQ0VESVIgXCIvdHJhY2VcIik7XG4rXHRpZiAoMSkge1xuK1x0XHRjYXRfaW50b19maWxlKFwiZnVuY3Rpb25fZ3JhcGhcIiwgVFJBQ0VESVIgXCIvY3VycmVudF90cmFjZXJcIik7XG4rXHRcdGNhdF9pbnRvX2ZpbGUoXCIxXCIsIFRSQUNFRElSIFwiL29wdGlvbnMvZnVuY2dyYXBoLXByb2NcIik7XG4rXHR9IGVsc2Uge1xuK1x0XHRjYXRfaW50b19maWxlKFwibm9wXCIsIFRSQUNFRElSIFwiL2N1cnJlbnRfdHJhY2VyXCIpO1xuK1x0fVxuK1x0Y2F0X2ludG9fZmlsZShwaWRzdHIsIFRSQUNFRElSIFwiL3NldF9mdHJhY2VfcGlkXCIpO1xuK1x0Y2F0X2ludG9fZmlsZShcIjFcIiwgVFJBQ0VESVIgXCIvdHJhY2luZ19vblwiKTtcbitcdGRwcmludGYxKFwiZW5hYmxlZCB0cmFjaW5nXFxuXCIpO1xuKyNlbmRpZlxuK31cbitcbit2b2lkIHRyYWNpbmdfb2ZmKHZvaWQpXG4re1xuKyNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbitcdGlmICghdHJhY2luZ19yb290X29rKCkpXG4rXHRcdHJldHVybjtcbitcdGNhdF9pbnRvX2ZpbGUoXCIwXCIsIFwiL3N5cy9rZXJuZWwvdHJhY2luZy90cmFjaW5nX29uXCIpO1xuKyNlbmRpZlxuK31cbitcbit2b2lkIGFib3J0X2hvb2tzKHZvaWQpXG4re1xuK1x0ZmZsdXNoKHN0ZG91dCk7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCJydW5uaW5nICVzKCkuLi5cXG5cIiwgX19mdW5jX18pO1xuK1x0dHJhY2luZ19vZmYoKTtcbisjaWZkZWYgU0xFRVBfT05fQUJPUlRcbitcdHNsZWVwKFNMRUVQX09OX0FCT1JUKTtcbisjZW5kaWZcbit9XG4rXG4gaW50IHN5c19wa2V5X2FsbG9jKHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgaW5pdF92YWwpXG4ge1xuIFx0aW50IHJldCA9IHN5c2NhbGwoU1lTX3BrZXlfYWxsb2MsIGZsYWdzLCBpbml0X3ZhbCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuaW5kZXggOWE2ZDk1NGVlMzcxMjYuLmFlNmUxNTMwYjM1NDg0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5AQCAtNDksMTEgKzQ5LDcgQEBcbiAjaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuICNpbmNsdWRlIFwicGtleS1oZWxwZXJzLmhcIlxuIFxuLWludCBpdGVyYXRpb25fbnIgPSAxO1xuLWludCB0ZXN0X25yO1xuLVxuIHU2NCBzaGFkb3dfcGtleV9yZWc7XG4taW50IGRwcmludF9pbl9zaWduYWw7XG4gXG4gbm9pbmxpbmUgaW50IHJlYWRfcHRyKGludCAqcHRyKVxuIHtcbkBAIC02Miw4OSArNTgsNiBAQCBub2lubGluZSBpbnQgcmVhZF9wdHIoaW50ICpwdHIpXG4gXHRyZXR1cm4gKnB0cjtcbiB9XG4gXG4tI2lmIENPTlRST0xfVFJBQ0lORyBcdTAwM2UgMFxuLXN0YXRpYyB2b2lkIGNhdF9pbnRvX2ZpbGUoY2hhciAqc3RyLCBjaGFyICpmaWxlKVxuLXtcbi1cdGludCBmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcbi1cdGludCByZXQ7XG4tXG4tXHRkcHJpbnRmMihcIiVzKCk6IHdyaXRpbmcgJyVzJyB0byAnJXMnXFxuXCIsIF9fZnVuY19fLCBzdHIsIGZpbGUpO1xuLVx0Lypcbi1cdCAqIHRoZXNlIG5lZWQgdG8gYmUgcmF3IGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIHVuZGVyXG4tXHQgKiBwa2V5X2Fzc2VydCgpXG4tXHQgKi9cbi1cdGlmIChmZCBcdTAwM2MgMCkge1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCJlcnJvciBvcGVuaW5nICclcydcXG5cIiwgc3RyKTtcbi1cdFx0cGVycm9yKFwiZXJyb3I6IFwiKTtcbi1cdFx0ZXhpdChfX0xJTkVfXyk7XG4tXHR9XG4tXG4tXHRyZXQgPSB3cml0ZShmZCwgc3RyLCBzdHJsZW4oc3RyKSk7XG4tXHRpZiAocmV0ICE9IHN0cmxlbihzdHIpKSB7XG4tXHRcdHBlcnJvcihcIndyaXRlIHRvIGZpbGUgZmFpbGVkXCIpO1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCJmaWxlbmFtZTogJyVzJyBzdHI6ICclcydcXG5cIiwgZmlsZSwgc3RyKTtcbi1cdFx0ZXhpdChfX0xJTkVfXyk7XG4tXHR9XG4tXHRjbG9zZShmZCk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgd2FybmVkX3RyYWNpbmc7XG4tc3RhdGljIGludCB0cmFjaW5nX3Jvb3Rfb2sodm9pZClcbi17XG4tXHRpZiAoZ2V0ZXVpZCgpICE9IDApIHtcbi1cdFx0aWYgKCF3YXJuZWRfdHJhY2luZylcbi1cdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJXQVJOSU5HOiBub3QgcnVuIGFzIHJvb3QsIFwiXG4tXHRcdFx0XHRcdFwiY2FuIG5vdCBkbyB0cmFjaW5nIGNvbnRyb2xcXG5cIik7XG4tXHRcdHdhcm5lZF90cmFjaW5nID0gMTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXHRyZXR1cm4gMTtcbi19XG4tI2VuZGlmXG4tXG4tc3RhdGljIHZvaWQgdHJhY2luZ19vbih2b2lkKVxuLXtcbi0jaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4tI2RlZmluZSBUUkFDRURJUiBcIi9zeXMva2VybmVsL3RyYWNpbmdcIlxuLVx0Y2hhciBwaWRzdHJbMzJdO1xuLVxuLVx0aWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c3ByaW50ZihwaWRzdHIsIFwiJWRcIiwgZ2V0cGlkKCkpO1xuLVx0Y2F0X2ludG9fZmlsZShcIjBcIiwgVFJBQ0VESVIgXCIvdHJhY2luZ19vblwiKTtcbi1cdGNhdF9pbnRvX2ZpbGUoXCJcXG5cIiwgVFJBQ0VESVIgXCIvdHJhY2VcIik7XG4tXHRpZiAoMSkge1xuLVx0XHRjYXRfaW50b19maWxlKFwiZnVuY3Rpb25fZ3JhcGhcIiwgVFJBQ0VESVIgXCIvY3VycmVudF90cmFjZXJcIik7XG4tXHRcdGNhdF9pbnRvX2ZpbGUoXCIxXCIsIFRSQUNFRElSIFwiL29wdGlvbnMvZnVuY2dyYXBoLXByb2NcIik7XG4tXHR9IGVsc2Uge1xuLVx0XHRjYXRfaW50b19maWxlKFwibm9wXCIsIFRSQUNFRElSIFwiL2N1cnJlbnRfdHJhY2VyXCIpO1xuLVx0fVxuLVx0Y2F0X2ludG9fZmlsZShwaWRzdHIsIFRSQUNFRElSIFwiL3NldF9mdHJhY2VfcGlkXCIpO1xuLVx0Y2F0X2ludG9fZmlsZShcIjFcIiwgVFJBQ0VESVIgXCIvdHJhY2luZ19vblwiKTtcbi1cdGRwcmludGYxKFwiZW5hYmxlZCB0cmFjaW5nXFxuXCIpO1xuLSNlbmRpZlxuLX1cbi1cbi1zdGF0aWMgdm9pZCB0cmFjaW5nX29mZih2b2lkKVxuLXtcbi0jaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4tXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxuLVx0XHRyZXR1cm47XG4tXHRjYXRfaW50b19maWxlKFwiMFwiLCBcIi9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2luZ19vblwiKTtcbi0jZW5kaWZcbi19XG4tXG4tdm9pZCBhYm9ydF9ob29rcyh2b2lkKVxuLXtcbi1cdGZmbHVzaChzdGRvdXQpO1xuLVx0ZnByaW50ZihzdGRlcnIsIFwicnVubmluZyAlcygpLi4uXFxuXCIsIF9fZnVuY19fKTtcbi1cdHRyYWNpbmdfb2ZmKCk7XG4tI2lmZGVmIFNMRUVQX09OX0FCT1JUXG4tXHRzbGVlcChTTEVFUF9PTl9BQk9SVCk7XG4tI2VuZGlmXG4tfVxuLVxuIC8qXG4gICogVGhpcyBhdHRlbXB0cyB0byBoYXZlIHJvdWdobHkgYSBwYWdlIG9mIGluc3RydWN0aW9ucyBmb2xsb3dlZCBieSBhIGZld1xuICAqIGluc3RydWN0aW9ucyB0aGF0IGRvIGEgd3JpdGUsIGFuZCBhbm90aGVyIHBhZ2Ugb2YgaW5zdHJ1Y3Rpb25zLiAgVGhhdFxuQEAgLTY2OSw3ICs1ODIsNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXlfd2l0aF9tcHJvdGVjdChsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSlcbiBcdFx0XHRzaXplLCBwcm90LCBwa2V5KTtcbiBcdHBrZXlfYXNzZXJ0KHBrZXkgXHUwMDNjIE5SX1BLRVlTKTtcbiBcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgcHJvdCwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuK1x0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xuIFx0cmV0ID0gbXByb3RlY3RfcGtleSgodm9pZCAqKXB0ciwgUEFHRV9TSVpFLCBwcm90LCBwa2V5KTtcbiBcdHBrZXlfYXNzZXJ0KCFyZXQpO1xuIFx0cmVjb3JkX3BrZXlfbWFsbG9jKHB0ciwgc2l6ZSwgcHJvdCk7XG5AQCAtNjkyLDcgKzYwNSw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV9hbm9uX2h1Z2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHQgKi9cbiBcdHNpemUgPSBBTElHTl9VUChzaXplLCBIUEFHRV9TSVpFICogMik7XG4gXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuK1x0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xuIFx0cmVjb3JkX3BrZXlfbWFsbG9jKHB0ciwgc2l6ZSwgcHJvdCk7XG4gXHRtcHJvdGVjdF9wa2V5KHB0ciwgc2l6ZSwgcHJvdCwgcGtleSk7XG4gXG5AQCAtNzUwLDcgKzY2Myw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV9odWdldGxiKGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KVxuIFx0c2l6ZSA9IEFMSUdOX1VQKHNpemUsIEhQQUdFX1NJWkUgKiAyKTtcbiBcdHBrZXlfYXNzZXJ0KHBrZXkgXHUwMDNjIE5SX1BLRVlTKTtcbiBcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9OT05FLCBmbGFncywgLTEsIDApO1xuLVx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuK1x0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xuIFx0bXByb3RlY3RfcGtleShwdHIsIHNpemUsIHByb3QsIHBrZXkpO1xuIFxuIFx0cmVjb3JkX3BrZXlfbWFsbG9jKHB0ciwgc2l6ZSwgcHJvdCk7XG5AQCAtNzc5LDcgKzY5Miw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleShsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSlcbiBcdFx0cGtleV9hc3NlcnQobWFsbG9jX3R5cGUgXHUwMDNjIG5yX21hbGxvY190eXBlcyk7XG4gXG4gXHRcdHJldCA9IHBrZXlfbWFsbG9jW21hbGxvY190eXBlXShzaXplLCBwcm90LCBwa2V5KTtcbi1cdFx0cGtleV9hc3NlcnQocmV0ICE9ICh2b2lkICopLTEpO1xuK1x0XHRwa2V5X2Fzc2VydChyZXQgIT0gTUFQX0ZBSUxFRCk7XG4gXG4gXHRcdG1hbGxvY190eXBlKys7XG4gXHRcdGlmIChtYWxsb2NfdHlwZSBcdTAwM2U9IG5yX21hbGxvY190eXBlcylcbkBAIC0xMTk3LDYgKzExMTAsNyBAQCBzdGF0aWMgdm9pZCBhcmNoX2ZvcmNlX3BrZXlfcmVnX2luaXQodm9pZClcbiBcdCAqIGRvaW5nIHRoZSBYU0FWRSBzaXplIGVudW1lcmF0aW9uIGRhbmNlLlxuIFx0ICovXG4gXHRidWYgPSBtbWFwKE5VTEwsIDEqTUIsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7XG4rXHRwa2V5X2Fzc2VydChidWYgIT0gTUFQX0ZBSUxFRCk7XG4gXG4gXHQvKiBUaGVzZSBfX2J1aWx0aW5zIHJlcXVpcmUgY29tcGlsaW5nIHdpdGggLW14c2F2ZSAqL1xuIFxuQEAgLTE3NjMsNyArMTY3Nyw4IEBAIGludCBtYWluKHZvaWQpXG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwicnVubmluZyBQS0VZIHRlc3RzIGZvciB1bnN1cHBvcnRlZCBDUFUvT1NcXG5cIik7XG4gXG4gXHRcdHB0ciAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0XHRhc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuK1x0XHRpZiAocHRyID09IE1BUF9GQUlMRUQpXG4rXHRcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwibW1hcFwiKTtcbiBcdFx0dGVzdF9tcHJvdGVjdF9wa2V5X29uX3Vuc3VwcG9ydGVkX2NwdShwdHIsIDEpO1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCJwa2V5IG9uIHVuc3VwcG9ydGVkIENQVS9PU1xcblwiKTtcbiBcdFx0a3NmdF9maW5pc2hlZCgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6NTM6MDIuODY4MTc5MjkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA2NjU3NTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBTZWxmdGVzdHMgYW5kIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBmaWxlcyBzcGVjaWZpY2FsbHkgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byB0aGUgc2VsZnRlc3RzLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0cy4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGlzIGRvZXNuJ3Qgd2FycmFudCBmdXp6aW5nLCBidXQgbGV0J3MgYmUgdGhvcm91Z2guXG5cbkdpdmVuIHRoYXQgdGhlc2UgYXJlIHNlbGZ0ZXN0cywgYW5kIHRoZXkgbGl2ZSBvdXRzaWRlIG9mIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gcGF0aCwgdGhlIGNoYW5nZXMgaGVyZSBzaG91bGRuJ3QgaW1wYWN0IHJ1bnRpbWUgYmVoYXZpb3IgdW5sZXNzIHdlICpjaG9vc2UqIHRvIHJ1biB0aGVtLiBUaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc3RhdGUgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaW52b2x2ZXMgRG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIGNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG9uJ3QgYWx0ZXIgZXhlY3V0aW9uLCBvciBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gXG5cbldhaXQgYSBtaW51dGUuLi4gdGhlc2UgYXJlICpzZWxmdGVzdHMqLiBUaGV5IGFyZSB1c2VyLXNwYWNlIHByb2dyYW1zIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGVzdGluZy4gVGhleSBhcmVuJ3Qga2VybmVsIGNvZGUuIFNvLCBtb2RpZnlpbmcgdGhlbSAqc2hvdWxkbid0KiBpbXBhY3QgYW55dGhpbmcgdGhhdCBuZWVkcyB0byBiZSBmdXp6ZWQuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ20gY2hlY2tpbmcgdGhlIGRpZmYgYWdhaW4g4oCTIHllcCwgaXQncyBzdHJpY3RseSB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gIGRpcmVjdG9yeS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbDsgaXQncyBqdXN0IGFib3V0IHJlZmluaW5nIHRoZSB0ZXN0aW5nIG1ldGhvZG9sb2d5LiBUaGlzIGdvZXMgaW50byB0aGUgJ25vJyBwaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDg3LCJPdXRwdXRUb2tlbnMiOjY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6NTM6MDkuOTM0NzU3NTA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowxgm6g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 08:31:40 +0000 UTC FinishedAt: 2026-07-06 08:53:12 +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+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MzZjMTc0N2ZlZDY0ZGEyMDYzYjU5NDZiNjZiMWRiY2U1ZWY5YjU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgNiAwODo1MzowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oXG5pbmRleCAyYzM3N2Y0ZTlkZjFkMy4uNDZhOGExODc4ZGMxZmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhcbkBAIC02OCw3ICYjNDM7NjgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2lnc2FmZV9wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pXG4gI2RlZmluZSBkcHJpbnRmMyhhcmdzLi4uKSBkcHJpbnRmX2xldmVsKDMsIGFyZ3MpXG4gI2RlZmluZSBkcHJpbnRmNChhcmdzLi4uKSBkcHJpbnRmX2xldmVsKDQsIGFyZ3MpXG4gXG4tZXh0ZXJuIHZvaWQgYWJvcnRfaG9va3Modm9pZCk7XG4mIzQzO3ZvaWQgdHJhY2luZ19vbih2b2lkKTtcbiYjNDM7dm9pZCB0cmFjaW5nX29mZih2b2lkKTtcbiYjNDM7dm9pZCBhYm9ydF9ob29rcyh2b2lkKTtcbiAjZGVmaW5lIHBrZXlfYXNzZXJ0KGNvbmRpdGlvbikgZG8ge1x0XHRcXFxuIFx0aWYgKCEoY29uZGl0aW9uKSkge1x0XHRcdFxcXG4gXHRcdGRwcmludGYwKFwmIzM0OyMgYXNzZXJ0KCkgYXQgJXM6OiVkIHRlc3RfbnI6ICVkIGl0ZXJhdGlvbjogJWRcXG5cJiMzNDssIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaFxuaW5kZXggMTdiZjJkMWIwMTkyZTAuLjJjZTg1NTgwYjQwNDg3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oXG5AQCAtMTI2LDcgJiM0MzsxMjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKm1hbGxvY19wa2V5X3dpdGhfbXByb3RlY3Rfc3VicGFnZShsb25nIHNpemUsIGludCBwcm90LCB1MTYgcFxuIFx0XHRcdHNpemUsIHByb3QsIHBrZXkpO1xuIFx0cGtleV9hc3NlcnQocGtleSBcdTAwM2MgTlJfUEtFWVMpO1xuIFx0cHRyID0gbW1hcChOVUxMLCBzaXplLCBwcm90LCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7XG4tXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4mIzQzO1x0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xuIFxuIFx0cmV0ID0gc3lzY2FsbChfX05SX3N1YnBhZ2VfcHJvdCwgcHRyLCBzaXplLCBOVUxMKTtcbiBcdGlmIChyZXQpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jXG5pbmRleCAzMDJmZWY1NDA0OWM4Ny4uYzIxOGQwNTEwYTJhNDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmNcbkBAIC0xOSw3ICYjNDM7MTksNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2Nhc3NlcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG5AQCAtMjA3LDIyICYjNDM7MjA2LDI1IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfcGtleTBfZGlzYWJsZWQodm9pZClcbiBcdHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4gXHRwdGhyZWFkX2F0dHJfdCBhdHRyO1xuIFx0cHRocmVhZF90IHRocjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPO1xuIFxuIFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyO1xuIFx0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4tXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCYjMzQ7c2lnYWN0aW9uXCYjMzQ7KTtcbi1cdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuLVx0fVxuJiM0MztcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCk7XG4mIzQzO1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0bWVtc2V0KFx1MDAyNnNpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7XG4gXG4gXHRwdGhyZWFkX2F0dHJfaW5pdChcdTAwMjZhdHRyKTtcbiBcdHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZShcdTAwMjZhdHRyLCBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCk7XG4gXG4tXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHIsIFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3dpdGhfcGtleTBfZGlzYWJsZWQsIE5VTEwpO1xuJiM0MztcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3Zfd2l0aF9wa2V5MF9kaXNhYmxlZCwgTlVMTCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZXJybm8gPSByZXQ7XG4mIzQzO1x0XHRwa2V5X2Fzc2VydCgwKTtcbiYjNDM7XHR9XG4gXG4gXHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuIFx0d2hpbGUgKHNpZ2luZm8uc2lfc2lnbm8gPT0gMClcbkBAIC0yNDcsMjIgJiM0MzsyNDksMjUgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfY2Fubm90X2FjY2Vzc19zdGFjayh2b2lkKVxuIFx0c3RydWN0IHNpZ2FjdGlvbiBzYTtcbiBcdHB0aHJlYWRfYXR0cl90IGF0dHI7XG4gXHRwdGhyZWFkX3QgdGhyO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87XG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7XG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcJiMzNDtzaWdhY3Rpb25cJiMzNDspO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4mIzQzO1x0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdHB0aHJlYWRfYXR0cl9pbml0KFx1MDAyNmF0dHIpO1xuIFx0cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3ZfcGt1ZXJyX3N0YWNrLCBOVUxMKTtcbiYjNDM7XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHIsIFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZXJybm8gPSByZXQ7XG4mIzQzO1x0XHRwa2V5X2Fzc2VydCgwKTtcbiYjNDM7XHR9XG4gXG4gXHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuIFx0d2hpbGUgKHNpZ2luZm8uc2lfc2lnbm8gPT0gMClcbkBAIC0yODUsMjQgJiM0MzsyOTAsMjIgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZClcbiBcdHN0YXRpYyBzdGFja190IHNpZ3N0YWNrO1xuIFx0dm9pZCAqc3RhY2s7XG4gXHRpbnQgcGtleTtcbi1cdGludCBwYXJlbnRfcGlkID0gMDtcbiBcdGludCBjaGlsZF9waWQgPSAwO1xuIFx0dTY0IHBrZXlfcmVnO1xuJiM0MztcdGxvbmcgcmV0O1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfT05TVEFDSztcbiBcbiBcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3NlZ3ZfaGFuZGxlcjtcbiBcbiBcdHNpZ2VtcHR5c2V0KFx1MDAyNnNhLnNhX21hc2spO1xuLVx0aWYgKHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcbi1cdFx0cGVycm9yKFwmIzM0O3NpZ2FjdGlvblwmIzM0Oyk7XG4tXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbiYjNDM7XHRyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcbiBcbiBcdHN0YWNrID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHQgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuIFxuLVx0YXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xuIFxuIFx0LyogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBNUEsgMSAqL1xuIFx0cGtleV9yZWcgPSBwa2V5X3JlZ19yZXN0cmljdGl2ZV9kZWZhdWx0KCk7XG5AQCAtMzE3LDMzICYjNDM7MzIwLDQxIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpXG4gXHQvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqL1xuIFx0c2lnc3RhY2suc3Nfc3AgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdFx0ICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4mIzQzO1x0cGtleV9hc3NlcnQoc2lnc3RhY2suc3Nfc3AgIT0gTUFQX0ZBSUxFRCk7XG4gXHRzaWdzdGFjay5zc19mbGFncyA9IDA7XG4gXHRzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTtcbiBcbiBcdG1lbXNldChcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xuIFxuIFx0LyogVXNlIGNsb25lIHRvIGF2b2lkIG5ld2VyIGdsaWJjcyB1c2luZyByc2VxIG9uIG5ldyB0aHJlYWRzICovXG4tXHRsb25nIHJldCA9IGNsb25lX3JhdyhDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfFxuLVx0XHRcdCAgICAgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxuLVx0XHRcdCAgICAgQ0xPTkVfUEFSRU5UX1NFVFRJRCB8IENMT05FX0NISUxEX0NMRUFSVElEIHxcbi1cdFx0XHQgICAgIENMT05FX0RFVEFDSEVELFxuLVx0XHRcdCAgICAgc3RhY2sgJiM0MzsgU1RBQ0tfU0laRSxcbi1cdFx0XHQgICAgIFx1MDAyNnBhcmVudF9waWQsXG4tXHRcdFx0ICAgICBcdTAwMjZjaGlsZF9waWQpO1xuJiM0MztcdHJldCA9IGNsb25lX3JhdyhDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfFxuJiM0MztcdFx0XHRDTE9ORV9TSUdIQU5EIHwgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNFTSB8XG4mIzQzO1x0XHRcdENMT05FX0RFVEFDSEVELFxuJiM0MztcdFx0XHRzdGFjayAmIzQzOyBTVEFDS19TSVpFLFxuJiM0MztcdFx0XHROVUxMLFxuJiM0MztcdFx0XHROVUxMKTtcbiBcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0ZXJybm8gPSAtcmV0O1xuLVx0XHRwZXJyb3IoXCYjMzQ7Y2xvbmVcJiMzNDspO1xuJiM0MztcdFx0cGtleV9hc3NlcnQoMCk7XG4gXHR9IGVsc2UgaWYgKHJldCA9PSAwKSB7XG4gXHRcdHRocmVhZF9zZWd2X21hcGVycl9wdHIoXHUwMDI2c2lnc3RhY2spO1xuIFx0XHRzeXNjYWxsX3JhdyhTWVNfZXhpdCwgMCwgMCwgMCwgMCwgMCwgMCk7XG4gXHR9XG4gXG4mIzQzO1x0Y2hpbGRfcGlkID0gcmV0O1xuJiM0MztcbiBcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZtdXRleCk7XG4gXHR3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKVxuIFx0XHRwdGhyZWFkX2NvbmRfd2FpdChcdTAwMjZjb25kLCBcdTAwMjZtdXRleCk7XG4gXHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZtdXRleCk7XG4gXG4mIzQzO1x0LyogV2FpdCBmb3IgY2hpbGQgdG8gZXhpdCBiZWZvcmUgcmV0dXJuaW5nICovXG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0c2NoZWRfeWllbGQoKTtcbiYjNDM7XHRcdHJldCA9IHN5c2NhbGxfcmF3KFNZU190a2lsbCwgY2hpbGRfcGlkLCAwLCAwLCAwLCAwLCAwKTtcbiYjNDM7XHR9IHdoaWxlIChyZXQgIT0gLUVTUkNIIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlZBTCk7XG4mIzQzO1xuIFx0a3NmdF90ZXN0X3Jlc3VsdChzaWdpbmZvLnNpX3NpZ25vID09IFNJR1NFR1YgXHUwMDI2XHUwMDI2XG4gXHRcdFx0IHNpZ2luZm8uc2lfY29kZSA9PSBTRUdWX01BUEVSUiBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgc2lnaW5mby5zaV9hZGRyID09IE5VTEwsXG5AQCAtMzU4LDYgJiM0MzszNjksNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfcHJlc2VydmVkX2FmdGVyX3NpZ3VzcjEodm9pZClcbiB7XG4gXHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhO1xuIFx0dTY0IHBrZXlfcmVnO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHQvKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIGFuIGFyYml0cmFyeSBzZXQgb2Yga2V5cyAqL1xuIFx0cGtleV9yZWcgPSBwa2V5X3JlZ19yZXN0cmljdGl2ZV9kZWZhdWx0KCk7XG5AQCAtMzY5LDEwICYjNDM7MzgxLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpXG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX2hhbmRsZXI7XG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcJiMzNDtzaWdhY3Rpb25cJiMzNDspO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4mIzQzO1x0cmV0ID0gc2lnYWN0aW9uKFNJR1VTUjEsIFx1MDAyNnNhLCBOVUxMKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbkBAIC00NDEsOSAmIzQzOzQ1MSwxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXG4gXHRzdGF0aWMgc3RhY2tfdCBzaWdzdGFjaztcbiBcdHZvaWQgKnN0YWNrO1xuIFx0aW50IHBrZXk7XG4tXHRpbnQgcGFyZW50X3BpZCA9IDA7XG4gXHRpbnQgY2hpbGRfcGlkID0gMDtcbiBcdHU2NCBwa2V5X3JlZztcbiYjNDM7XHRsb25nIHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTSUdTRUdWIGhhbmRsZXIgaXMgcmVzZXQgdG8gU0lHX0RGTCBiZWxvdzsgdHVybiB0cmFjaW5nIG9mZiBmaXJzdFxuJiM0MztcdCAqIHNvIGEgY3Jhc2ggZG9lcyBub3QgbGVhdmUgZnRyYWNlIGVuYWJsZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0dHJhY2luZ19vZmYoKTtcbiBcbiBcdHNhLnNhX2hhbmRsZXIgPSBTSUdfREZMO1xuIFx0c2Euc2FfZmxhZ3MgPSAwO1xuQEAgLTQ1MywyNCAmIzQzOzQ2OSwyMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXG4gXHQgKiBGb3IgdGhpcyB0ZXN0Y2FzZSwgd2UgZG8gbm90IHdhbnQgdG8gaGFuZGxlIFNJR1NFR1YuIFJlc2V0IGhhbmRsZXJcbiBcdCAqIHRvIGRlZmF1bHQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gY2FuIGNyYXNoIGlmIGl0IHJlY2VpdmVzIFNJR1NFR1YuXG4gXHQgKi9cbi1cdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcJiMzNDtzaWdhY3Rpb25cJiMzNDspO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4mIzQzO1x0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk8gfCBTQV9PTlNUQUNLO1xuIFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lndXNyMl9oYW5kbGVyO1xuIFx0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4gXG4tXHRpZiAoc2lnYWN0aW9uKFNJR1VTUjIsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCYjMzQ7c2lnYWN0aW9uXCYjMzQ7KTtcbi1cdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuLVx0fVxuJiM0MztcdHJldCA9IHNpZ2FjdGlvbihTSUdVU1IyLCBcdTAwMjZzYSwgTlVMTCk7XG4mIzQzO1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0c3RhY2sgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdCAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4gXG4tXHRhc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XG4mIzQzO1x0cGtleV9hc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XG4gXG4gXHQvKlxuIFx0ICogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBNUEsgMi4gVGhlIGNoaWxkIHRocmVhZCAodG8gYmUgY3JlYXRlZFxuQEAgLTQ5MCwyMSAmIzQzOzUwMiwyMSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXG4gXHQvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqL1xuIFx0c2lnc3RhY2suc3Nfc3AgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdFx0ICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4mIzQzO1x0cGtleV9hc3NlcnQoc2lnc3RhY2suc3Nfc3AgIT0gTUFQX0ZBSUxFRCk7XG4gXHRzaWdzdGFjay5zc19mbGFncyA9IDA7XG4gXHRzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTtcbiBcbiBcdC8qIFVzZSBjbG9uZSB0byBhdm9pZCBuZXdlciBnbGliY3MgdXNpbmcgcnNlcSBvbiBuZXcgdGhyZWFkcyAqL1xuLVx0bG9uZyByZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbi1cdFx0XHQgICAgIENMT05FX1NJR0hBTkQgfCBDTE9ORV9USFJFQUQgfCBDTE9ORV9TWVNWU0VNIHxcbi1cdFx0XHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XG4tXHRcdFx0ICAgICBDTE9ORV9ERVRBQ0hFRCxcbi1cdFx0XHQgICAgIHN0YWNrICYjNDM7IFNUQUNLX1NJWkUsXG4tXHRcdFx0ICAgICBcdTAwMjZwYXJlbnRfcGlkLFxuLVx0XHRcdCAgICAgXHUwMDI2Y2hpbGRfcGlkKTtcbiYjNDM7XHRyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbiYjNDM7XHRcdFx0Q0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxuJiM0MztcdFx0XHRDTE9ORV9ERVRBQ0hFRCxcbiYjNDM7XHRcdFx0c3RhY2sgJiM0MzsgU1RBQ0tfU0laRSxcbiYjNDM7XHRcdFx0TlVMTCxcbiYjNDM7XHRcdFx0TlVMTCk7XG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGVycm5vID0gLXJldDtcbi1cdFx0cGVycm9yKFwmIzM0O2Nsb25lXCYjMzQ7KTtcbiYjNDM7XHRcdHBrZXlfYXNzZXJ0KDApO1xuIFx0fSAgZWxzZSBpZiAocmV0ID09IDApIHtcbiBcdFx0dGhyZWFkX3NpZ3VzcjJfc2VsZihcdTAwMjZzaWdzdGFjayk7XG4gXHRcdHN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTtcbkBAIC01MzAsMTYgJiM0Mzs1NDIsMTcgQEAgc3RhdGljIHZvaWQgKCpwa2V5X3Rlc3RzW10pKHZvaWQpID0ge1xuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuLVx0aW50IGk7XG4tXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFx0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHBrZXlfdGVzdHMpKTtcbiBcbiBcdGlmICghaXNfcGtleXNfc3VwcG9ydGVkKCkpXG4gXHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O3BrZXlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwa2V5X3Rlc3RzKTsgaSYjNDM7JiM0MzspXG4tXHRcdCgqcGtleV90ZXN0c1tpXSkoKTtcbiYjNDM7XHRmb3IgKHRlc3RfbnIgPSAwOyB0ZXN0X25yIFx1MDAzYyBBUlJBWV9TSVpFKHBrZXlfdGVzdHMpOyB0ZXN0X25yJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dHJhY2luZ19vbigpO1xuJiM0MztcdFx0KCpwa2V5X3Rlc3RzW3Rlc3RfbnJdKSgpO1xuJiM0MztcdFx0dHJhY2luZ19vZmYoKTtcbiYjNDM7XHR9XG4gXG4gXHRrc2Z0X2ZpbmlzaGVkKCk7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jXG5pbmRleCAyNTViMzMyZjdhMDhiMi4uZmJlZjNjZDQ1NDQ3YjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmNcbkBAIC0yLDkgJiM0MzsyLDk5IEBAXG4gI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX19cbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cGtleS1oZWxwZXJzLmhcJiMzNDtcbiBcbiYjNDM7aW50IGl0ZXJhdGlvbl9uciA9IDE7XG4mIzQzO2ludCB0ZXN0X25yO1xuJiM0MztpbnQgZHByaW50X2luX3NpZ25hbDtcbiYjNDM7XG4mIzQzOyNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbiYjNDM7c3RhdGljIHZvaWQgY2F0X2ludG9fZmlsZShjaGFyICpzdHIsIGNoYXIgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQgPSBvcGVuKGZpbGUsIE9fUkRXUik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZHByaW50ZjIoXCYjMzQ7JXMoKTogd3JpdGluZyAmIzM5OyVzJiMzOTsgdG8gJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBfX2Z1bmNfXywgc3RyLCBmaWxlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHRoZXNlIG5lZWQgdG8gYmUgcmF3IGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIHVuZGVyXG4mIzQzO1x0ICogcGtleV9hc3NlcnQoKVxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2Vycm9yIG9wZW5pbmcgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBmaWxlKTtcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDtlcnJvcjogXCYjMzQ7KTtcbiYjNDM7XHRcdGV4aXQoX19MSU5FX18pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpO1xuJiM0MztcdGlmIChyZXQgIT0gc3RybGVuKHN0cikpIHtcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDt3cml0ZSB0byBmaWxlIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmlsZW5hbWU6ICYjMzk7JXMmIzM5OyBzdHI6ICYjMzk7JXMmIzM5O1xcblwmIzM0OywgZmlsZSwgc3RyKTtcbiYjNDM7XHRcdGV4aXQoX19MSU5FX18pO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgd2FybmVkX3RyYWNpbmc7XG4mIzQzO3N0YXRpYyBpbnQgdHJhY2luZ19yb290X29rKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZ2V0ZXVpZCgpICE9IDApIHtcbiYjNDM7XHRcdGlmICghd2FybmVkX3RyYWNpbmcpXG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtXQVJOSU5HOiBub3QgcnVuIGFzIHJvb3QsIFwmIzM0O1xuJiM0MztcdFx0XHRcdFx0XCYjMzQ7Y2FuIG5vdCBkbyB0cmFjaW5nIGNvbnRyb2xcXG5cJiMzNDspO1xuJiM0MztcdFx0d2FybmVkX3RyYWNpbmcgPSAxO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7dm9pZCB0cmFjaW5nX29uKHZvaWQpXG4mIzQzO3tcbiYjNDM7I2lmIENPTlRST0xfVFJBQ0lORyBcdTAwM2UgMFxuJiM0MzsjZGVmaW5lIFRSQUNFRElSIFwmIzM0Oy9zeXMva2VybmVsL3RyYWNpbmdcJiMzNDtcbiYjNDM7XHRjaGFyIHBpZHN0clszMl07XG4mIzQzO1xuJiM0MztcdGlmICghdHJhY2luZ19yb290X29rKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNwcmludGYocGlkc3RyLCBcJiMzNDslZFwmIzM0OywgZ2V0cGlkKCkpO1xuJiM0MztcdGNhdF9pbnRvX2ZpbGUoXCYjMzQ7MFwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L3RyYWNpbmdfb25cJiMzNDspO1xuJiM0MztcdGNhdF9pbnRvX2ZpbGUoXCYjMzQ7XFxuXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvdHJhY2VcJiMzNDspO1xuJiM0MztcdGlmICgxKSB7XG4mIzQzO1x0XHRjYXRfaW50b19maWxlKFwmIzM0O2Z1bmN0aW9uX2dyYXBoXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvY3VycmVudF90cmFjZXJcJiMzNDspO1xuJiM0MztcdFx0Y2F0X2ludG9fZmlsZShcJiMzNDsxXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvb3B0aW9ucy9mdW5jZ3JhcGgtcHJvY1wmIzM0Oyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGNhdF9pbnRvX2ZpbGUoXCYjMzQ7bm9wXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvY3VycmVudF90cmFjZXJcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XHRjYXRfaW50b19maWxlKHBpZHN0ciwgVFJBQ0VESVIgXCYjMzQ7L3NldF9mdHJhY2VfcGlkXCYjMzQ7KTtcbiYjNDM7XHRjYXRfaW50b19maWxlKFwmIzM0OzFcJiMzNDssIFRSQUNFRElSIFwmIzM0Oy90cmFjaW5nX29uXCYjMzQ7KTtcbiYjNDM7XHRkcHJpbnRmMShcJiMzNDtlbmFibGVkIHRyYWNpbmdcXG5cJiMzNDspO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0cmFjaW5nX29mZih2b2lkKVxuJiM0Mzt7XG4mIzQzOyNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbiYjNDM7XHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGNhdF9pbnRvX2ZpbGUoXCYjMzQ7MFwmIzM0OywgXCYjMzQ7L3N5cy9rZXJuZWwvdHJhY2luZy90cmFjaW5nX29uXCYjMzQ7KTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgYWJvcnRfaG9va3Modm9pZClcbiYjNDM7e1xuJiM0MztcdGZmbHVzaChzdGRvdXQpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtydW5uaW5nICVzKCkuLi5cXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHR0cmFjaW5nX29mZigpO1xuJiM0MzsjaWZkZWYgU0xFRVBfT05fQUJPUlRcbiYjNDM7XHRzbGVlcChTTEVFUF9PTl9BQk9SVCk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIGludCBzeXNfcGtleV9hbGxvYyh1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGluaXRfdmFsKVxuIHtcbiBcdGludCByZXQgPSBzeXNjYWxsKFNZU19wa2V5X2FsbG9jLCBmbGFncywgaW5pdF92YWwpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbmluZGV4IDlhNmQ5NTRlZTM3MTI2Li5hZTZlMTUzMGIzNTQ4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuQEAgLTQ5LDExICYjNDM7NDksNyBAQFxuICNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtwa2V5LWhlbHBlcnMuaFwmIzM0O1xuIFxuLWludCBpdGVyYXRpb25fbnIgPSAxO1xuLWludCB0ZXN0X25yO1xuLVxuIHU2NCBzaGFkb3dfcGtleV9yZWc7XG4taW50IGRwcmludF9pbl9zaWduYWw7XG4gXG4gbm9pbmxpbmUgaW50IHJlYWRfcHRyKGludCAqcHRyKVxuIHtcbkBAIC02Miw4OSAmIzQzOzU4LDYgQEAgbm9pbmxpbmUgaW50IHJlYWRfcHRyKGludCAqcHRyKVxuIFx0cmV0dXJuICpwdHI7XG4gfVxuIFxuLSNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbi1zdGF0aWMgdm9pZCBjYXRfaW50b19maWxlKGNoYXIgKnN0ciwgY2hhciAqZmlsZSlcbi17XG4tXHRpbnQgZmQgPSBvcGVuKGZpbGUsIE9fUkRXUik7XG4tXHRpbnQgcmV0O1xuLVxuLVx0ZHByaW50ZjIoXCYjMzQ7JXMoKTogd3JpdGluZyAmIzM5OyVzJiMzOTsgdG8gJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBfX2Z1bmNfXywgc3RyLCBmaWxlKTtcbi1cdC8qXG4tXHQgKiB0aGVzZSBuZWVkIHRvIGJlIHJhdyBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCB1bmRlclxuLVx0ICogcGtleV9hc3NlcnQoKVxuLVx0ICovXG4tXHRpZiAoZmQgXHUwMDNjIDApIHtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2Vycm9yIG9wZW5pbmcgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBzdHIpO1xuLVx0XHRwZXJyb3IoXCYjMzQ7ZXJyb3I6IFwmIzM0Oyk7XG4tXHRcdGV4aXQoX19MSU5FX18pO1xuLVx0fVxuLVxuLVx0cmV0ID0gd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpO1xuLVx0aWYgKHJldCAhPSBzdHJsZW4oc3RyKSkge1xuLVx0XHRwZXJyb3IoXCYjMzQ7d3JpdGUgdG8gZmlsZSBmYWlsZWRcJiMzNDspO1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmlsZW5hbWU6ICYjMzk7JXMmIzM5OyBzdHI6ICYjMzk7JXMmIzM5O1xcblwmIzM0OywgZmlsZSwgc3RyKTtcbi1cdFx0ZXhpdChfX0xJTkVfXyk7XG4tXHR9XG4tXHRjbG9zZShmZCk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgd2FybmVkX3RyYWNpbmc7XG4tc3RhdGljIGludCB0cmFjaW5nX3Jvb3Rfb2sodm9pZClcbi17XG4tXHRpZiAoZ2V0ZXVpZCgpICE9IDApIHtcbi1cdFx0aWYgKCF3YXJuZWRfdHJhY2luZylcbi1cdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7V0FSTklORzogbm90IHJ1biBhcyByb290LCBcJiMzNDtcbi1cdFx0XHRcdFx0XCYjMzQ7Y2FuIG5vdCBkbyB0cmFjaW5nIGNvbnRyb2xcXG5cJiMzNDspO1xuLVx0XHR3YXJuZWRfdHJhY2luZyA9IDE7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVx0cmV0dXJuIDE7XG4tfVxuLSNlbmRpZlxuLVxuLXN0YXRpYyB2b2lkIHRyYWNpbmdfb24odm9pZClcbi17XG4tI2lmIENPTlRST0xfVFJBQ0lORyBcdTAwM2UgMFxuLSNkZWZpbmUgVFJBQ0VESVIgXCYjMzQ7L3N5cy9rZXJuZWwvdHJhY2luZ1wmIzM0O1xuLVx0Y2hhciBwaWRzdHJbMzJdO1xuLVxuLVx0aWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c3ByaW50ZihwaWRzdHIsIFwmIzM0OyVkXCYjMzQ7LCBnZXRwaWQoKSk7XG4tXHRjYXRfaW50b19maWxlKFwmIzM0OzBcJiMzNDssIFRSQUNFRElSIFwmIzM0Oy90cmFjaW5nX29uXCYjMzQ7KTtcbi1cdGNhdF9pbnRvX2ZpbGUoXCYjMzQ7XFxuXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvdHJhY2VcJiMzNDspO1xuLVx0aWYgKDEpIHtcbi1cdFx0Y2F0X2ludG9fZmlsZShcJiMzNDtmdW5jdGlvbl9ncmFwaFwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L2N1cnJlbnRfdHJhY2VyXCYjMzQ7KTtcbi1cdFx0Y2F0X2ludG9fZmlsZShcJiMzNDsxXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvb3B0aW9ucy9mdW5jZ3JhcGgtcHJvY1wmIzM0Oyk7XG4tXHR9IGVsc2Uge1xuLVx0XHRjYXRfaW50b19maWxlKFwmIzM0O25vcFwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L2N1cnJlbnRfdHJhY2VyXCYjMzQ7KTtcbi1cdH1cbi1cdGNhdF9pbnRvX2ZpbGUocGlkc3RyLCBUUkFDRURJUiBcJiMzNDsvc2V0X2Z0cmFjZV9waWRcJiMzNDspO1xuLVx0Y2F0X2ludG9fZmlsZShcJiMzNDsxXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvdHJhY2luZ19vblwmIzM0Oyk7XG4tXHRkcHJpbnRmMShcJiMzNDtlbmFibGVkIHRyYWNpbmdcXG5cJiMzNDspO1xuLSNlbmRpZlxuLX1cbi1cbi1zdGF0aWMgdm9pZCB0cmFjaW5nX29mZih2b2lkKVxuLXtcbi0jaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4tXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxuLVx0XHRyZXR1cm47XG4tXHRjYXRfaW50b19maWxlKFwmIzM0OzBcJiMzNDssIFwmIzM0Oy9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2luZ19vblwmIzM0Oyk7XG4tI2VuZGlmXG4tfVxuLVxuLXZvaWQgYWJvcnRfaG9va3Modm9pZClcbi17XG4tXHRmZmx1c2goc3Rkb3V0KTtcbi1cdGZwcmludGYoc3RkZXJyLCBcJiMzNDtydW5uaW5nICVzKCkuLi5cXG5cJiMzNDssIF9fZnVuY19fKTtcbi1cdHRyYWNpbmdfb2ZmKCk7XG4tI2lmZGVmIFNMRUVQX09OX0FCT1JUXG4tXHRzbGVlcChTTEVFUF9PTl9BQk9SVCk7XG4tI2VuZGlmXG4tfVxuLVxuIC8qXG4gICogVGhpcyBhdHRlbXB0cyB0byBoYXZlIHJvdWdobHkgYSBwYWdlIG9mIGluc3RydWN0aW9ucyBmb2xsb3dlZCBieSBhIGZld1xuICAqIGluc3RydWN0aW9ucyB0aGF0IGRvIGEgd3JpdGUsIGFuZCBhbm90aGVyIHBhZ2Ugb2YgaW5zdHJ1Y3Rpb25zLiAgVGhhdFxuQEAgLTY2OSw3ICYjNDM7NTgyLDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X3dpdGhfbXByb3RlY3QobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHRcdFx0c2l6ZSwgcHJvdCwgcGtleSk7XG4gXHRwa2V5X2Fzc2VydChwa2V5IFx1MDAzYyBOUl9QS0VZUyk7XG4gXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIHByb3QsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcbi1cdHBrZXlfYXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XG4gXHRyZXQgPSBtcHJvdGVjdF9wa2V5KCh2b2lkICopcHRyLCBQQUdFX1NJWkUsIHByb3QsIHBrZXkpO1xuIFx0cGtleV9hc3NlcnQoIXJldCk7XG4gXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcbkBAIC02OTIsNyAmIzQzOzYwNSw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV9hbm9uX2h1Z2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHQgKi9cbiBcdHNpemUgPSBBTElHTl9VUChzaXplLCBIUEFHRV9TSVpFICogMik7XG4gXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTtcbiBcdHJlY29yZF9wa2V5X21hbGxvYyhwdHIsIHNpemUsIHByb3QpO1xuIFx0bXByb3RlY3RfcGtleShwdHIsIHNpemUsIHByb3QsIHBrZXkpO1xuIFxuQEAgLTc1MCw3ICYjNDM7NjYzLDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X2h1Z2V0bGIobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHRzaXplID0gQUxJR05fVVAoc2l6ZSwgSFBBR0VfU0laRSAqIDIpO1xuIFx0cGtleV9hc3NlcnQocGtleSBcdTAwM2MgTlJfUEtFWVMpO1xuIFx0cHRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX05PTkUsIGZsYWdzLCAtMSwgMCk7XG4tXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4mIzQzO1x0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xuIFx0bXByb3RlY3RfcGtleShwdHIsIHNpemUsIHByb3QsIHBrZXkpO1xuIFxuIFx0cmVjb3JkX3BrZXlfbWFsbG9jKHB0ciwgc2l6ZSwgcHJvdCk7XG5AQCAtNzc5LDcgJiM0Mzs2OTIsNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXkobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHRcdHBrZXlfYXNzZXJ0KG1hbGxvY190eXBlIFx1MDAzYyBucl9tYWxsb2NfdHlwZXMpO1xuIFxuIFx0XHRyZXQgPSBwa2V5X21hbGxvY1ttYWxsb2NfdHlwZV0oc2l6ZSwgcHJvdCwgcGtleSk7XG4tXHRcdHBrZXlfYXNzZXJ0KHJldCAhPSAodm9pZCAqKS0xKTtcbiYjNDM7XHRcdHBrZXlfYXNzZXJ0KHJldCAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdFx0bWFsbG9jX3R5cGUmIzQzOyYjNDM7O1xuIFx0XHRpZiAobWFsbG9jX3R5cGUgXHUwMDNlPSBucl9tYWxsb2NfdHlwZXMpXG5AQCAtMTE5Nyw2ICYjNDM7MTExMCw3IEBAIHN0YXRpYyB2b2lkIGFyY2hfZm9yY2VfcGtleV9yZWdfaW5pdCh2b2lkKVxuIFx0ICogZG9pbmcgdGhlIFhTQVZFIHNpemUgZW51bWVyYXRpb24gZGFuY2UuXG4gXHQgKi9cbiBcdGJ1ZiA9IG1tYXAoTlVMTCwgMSpNQiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChidWYgIT0gTUFQX0ZBSUxFRCk7XG4gXG4gXHQvKiBUaGVzZSBfX2J1aWx0aW5zIHJlcXVpcmUgY29tcGlsaW5nIHdpdGggLW14c2F2ZSAqL1xuIFxuQEAgLTE3NjMsNyAmIzQzOzE2NzcsOCBAQCBpbnQgbWFpbih2b2lkKVxuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtydW5uaW5nIFBLRVkgdGVzdHMgZm9yIHVuc3VwcG9ydGVkIENQVS9PU1xcblwmIzM0Oyk7XG4gXG4gXHRcdHB0ciAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0XHRhc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuJiM0MztcdFx0aWYgKHB0ciA9PSBNQVBfRkFJTEVEKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7bW1hcFwmIzM0Oyk7XG4gXHRcdHRlc3RfbXByb3RlY3RfcGtleV9vbl91bnN1cHBvcnRlZF9jcHUocHRyLCAxKTtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFwmIzM0O3BrZXkgb24gdW5zdXBwb3J0ZWQgQ1BVL09TXFxuXCYjMzQ7KTtcbiBcdFx0a3NmdF9maW5pc2hlZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQzNmMxNzQ3ZmVkNjRkYTIwNjNiNTk0NmI2NmIxZGJjZTVlZjliNTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCA2IDA4OjUzOjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaAppbmRleCAyYzM3N2Y0ZTlkZjFkMy4uNDZhOGExODc4ZGMxZmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oCkBAIC02OCw3ICYjNDM7NjgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2lnc2FmZV9wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAjZGVmaW5lIGRwcmludGYzKGFyZ3MuLi4pIGRwcmludGZfbGV2ZWwoMywgYXJncykKICNkZWZpbmUgZHByaW50ZjQoYXJncy4uLikgZHByaW50Zl9sZXZlbCg0LCBhcmdzKQogCi1leHRlcm4gdm9pZCBhYm9ydF9ob29rcyh2b2lkKTsKJiM0Mzt2b2lkIHRyYWNpbmdfb24odm9pZCk7CiYjNDM7dm9pZCB0cmFjaW5nX29mZih2b2lkKTsKJiM0Mzt2b2lkIGFib3J0X2hvb2tzKHZvaWQpOwogI2RlZmluZSBwa2V5X2Fzc2VydChjb25kaXRpb24pIGRvIHsJCVwKIAlpZiAoIShjb25kaXRpb24pKSB7CQkJXAogCQlkcHJpbnRmMCgmIzM0OyMgYXNzZXJ0KCkgYXQgJXM6OiVkIHRlc3RfbnI6ICVkIGl0ZXJhdGlvbjogJWRcbiYjMzQ7LCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oCmluZGV4IDE3YmYyZDFiMDE5MmUwLi4yY2U4NTU4MGI0MDQ4NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmgKQEAgLTEyNiw3ICYjNDM7MTI2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICptYWxsb2NfcGtleV93aXRoX21wcm90ZWN0X3N1YnBhZ2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHAKIAkJCXNpemUsIHByb3QsIHBrZXkpOwogCXBrZXlfYXNzZXJ0KHBrZXkgJmx0OyBOUl9QS0VZUyk7CiAJcHRyID0gbW1hcChOVUxMLCBzaXplLCBwcm90LCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7Ci0JcGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpOwomIzQzOwlwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7CiAKIAlyZXQgPSBzeXNjYWxsKF9fTlJfc3VicGFnZV9wcm90LCBwdHIsIHNpemUsIE5VTEwpOwogCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmMKaW5kZXggMzAyZmVmNTQwNDljODcuLmMyMThkMDUxMGEyYTQyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuYwpAQCAtMTksNyAmIzQzOzE5LDYgQEAKICNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKICNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7YXNzZXJ0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKQEAgLTIwNywyMiAmIzQzOzIwNiwyNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX3BrZXkwX2Rpc2FibGVkKHZvaWQpCiAJc3RydWN0IHNpZ2FjdGlvbiBzYTsKIAlwdGhyZWFkX2F0dHJfdCBhdHRyOwogCXB0aHJlYWRfdCB0aHI7CiYjNDM7CWludCByZXQ7CiAKIAlzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87CiAKIAlzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7CiAJc2lnZW1wdHlzZXQoJmFtcDtzYS5zYV9tYXNrKTsKLQlpZiAoc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpID09IC0xKSB7Ci0JCXBlcnJvcigmIzM0O3NpZ2FjdGlvbiYjMzQ7KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KJiM0MzsJcmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpOwomIzQzOwlwa2V5X2Fzc2VydChyZXQgPT0gMCk7CiAKIAltZW1zZXQoJmFtcDtzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpOwogCiAJcHRocmVhZF9hdHRyX2luaXQoJmFtcDthdHRyKTsKIAlwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoJmFtcDthdHRyLCBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCk7CiAKLQlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RociwgJmFtcDthdHRyLCB0aHJlYWRfc2Vndl93aXRoX3BrZXkwX2Rpc2FibGVkLCBOVUxMKTsKJiM0MzsJcmV0ID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aHIsICZhbXA7YXR0ciwgdGhyZWFkX3NlZ3Zfd2l0aF9wa2V5MF9kaXNhYmxlZCwgTlVMTCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWVycm5vID0gcmV0OwomIzQzOwkJcGtleV9hc3NlcnQoMCk7CiYjNDM7CX0KIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO211dGV4KTsKIAl3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKQpAQCAtMjQ3LDIyICYjNDM7MjQ5LDI1IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX2Nhbm5vdF9hY2Nlc3Nfc3RhY2sodm9pZCkKIAlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwogCXB0aHJlYWRfYXR0cl90IGF0dHI7CiAJcHRocmVhZF90IHRocjsKJiM0MzsJaW50IHJldDsKIAogCXNhLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKIAogCXNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3NlZ3ZfaGFuZGxlcjsKIAlzaWdlbXB0eXNldCgmYW1wO3NhLnNhX21hc2spOwotCWlmIChzaWdhY3Rpb24oU0lHU0VHViwgJmFtcDtzYSwgTlVMTCkgPT0gLTEpIHsKLQkJcGVycm9yKCYjMzQ7c2lnYWN0aW9uJiMzNDspOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQomIzQzOwlyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgJmFtcDtzYSwgTlVMTCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHJldCA9PSAwKTsKIAogCW1lbXNldCgmYW1wO3NpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7CiAKIAlwdGhyZWFkX2F0dHJfaW5pdCgmYW1wO2F0dHIpOwogCXB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSgmYW1wO2F0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTsKIAotCXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyLCAmYW1wO2F0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7CiYjNDM7CXJldCA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyLCAmYW1wO2F0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWVycm5vID0gcmV0OwomIzQzOwkJcGtleV9hc3NlcnQoMCk7CiYjNDM7CX0KIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO211dGV4KTsKIAl3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKQpAQCAtMjg1LDI0ICYjNDM7MjkwLDIyIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpCiAJc3RhdGljIHN0YWNrX3Qgc2lnc3RhY2s7CiAJdm9pZCAqc3RhY2s7CiAJaW50IHBrZXk7Ci0JaW50IHBhcmVudF9waWQgPSAwOwogCWludCBjaGlsZF9waWQgPSAwOwogCXU2NCBwa2V5X3JlZzsKJiM0MzsJbG9uZyByZXQ7CiAKIAlzYS5zYV9mbGFncyA9IFNBX1NJR0lORk8gfCBTQV9PTlNUQUNLOwogCiAJc2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyOwogCiAJc2lnZW1wdHlzZXQoJmFtcDtzYS5zYV9tYXNrKTsKLQlpZiAoc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpID09IC0xKSB7Ci0JCXBlcnJvcigmIzM0O3NpZ2FjdGlvbiYjMzQ7KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KJiM0MzsJcmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpOwomIzQzOwlwa2V5X2Fzc2VydChyZXQgPT0gMCk7CiAKIAlzdGFjayA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKIAkJICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKIAotCWFzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTsKJiM0MzsJcGtleV9hc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7CiAKIAkvKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIE1QSyAxICovCiAJcGtleV9yZWcgPSBwa2V5X3JlZ19yZXN0cmljdGl2ZV9kZWZhdWx0KCk7CkBAIC0zMTcsMzMgJiM0MzszMjAsNDEgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZCkKIAkvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqLwogCXNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkJICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpOwogCXNpZ3N0YWNrLnNzX2ZsYWdzID0gMDsKIAlzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTsKIAogCW1lbXNldCgmYW1wO3NpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7CiAKIAkvKiBVc2UgY2xvbmUgdG8gYXZvaWQgbmV3ZXIgZ2xpYmNzIHVzaW5nIHJzZXEgb24gbmV3IHRocmVhZHMgKi8KLQlsb25nIHJldCA9IGNsb25lX3JhdyhDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfAotCQkJICAgICBDTE9ORV9TSUdIQU5EIHwgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNFTSB8Ci0JCQkgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8Ci0JCQkgICAgIENMT05FX0RFVEFDSEVELAotCQkJICAgICBzdGFjayAmIzQzOyBTVEFDS19TSVpFLAotCQkJICAgICAmYW1wO3BhcmVudF9waWQsCi0JCQkgICAgICZhbXA7Y2hpbGRfcGlkKTsKJiM0MzsJcmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8CiYjNDM7CQkJQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfAomIzQzOwkJCUNMT05FX0RFVEFDSEVELAomIzQzOwkJCXN0YWNrICYjNDM7IFNUQUNLX1NJWkUsCiYjNDM7CQkJTlVMTCwKJiM0MzsJCQlOVUxMKTsKIAogCWlmIChyZXQgJmx0OyAwKSB7CiAJCWVycm5vID0gLXJldDsKLQkJcGVycm9yKCYjMzQ7Y2xvbmUmIzM0Oyk7CiYjNDM7CQlwa2V5X2Fzc2VydCgwKTsKIAl9IGVsc2UgaWYgKHJldCA9PSAwKSB7CiAJCXRocmVhZF9zZWd2X21hcGVycl9wdHIoJmFtcDtzaWdzdGFjayk7CiAJCXN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTsKIAl9CiAKJiM0MzsJY2hpbGRfcGlkID0gcmV0OwomIzQzOwogCXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO211dGV4KTsKIAl3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKQogCQlwdGhyZWFkX2NvbmRfd2FpdCgmYW1wO2NvbmQsICZhbXA7bXV0ZXgpOwogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhbXA7bXV0ZXgpOwogCiYjNDM7CS8qIFdhaXQgZm9yIGNoaWxkIHRvIGV4aXQgYmVmb3JlIHJldHVybmluZyAqLwomIzQzOwlkbyB7CiYjNDM7CQlzY2hlZF95aWVsZCgpOwomIzQzOwkJcmV0ID0gc3lzY2FsbF9yYXcoU1lTX3RraWxsLCBjaGlsZF9waWQsIDAsIDAsIDAsIDAsIDApOwomIzQzOwl9IHdoaWxlIChyZXQgIT0gLUVTUkNIICZhbXA7JmFtcDsgcmV0ICE9IC1FSU5WQUwpOwomIzQzOwogCWtzZnRfdGVzdF9yZXN1bHQoc2lnaW5mby5zaV9zaWdubyA9PSBTSUdTRUdWICZhbXA7JmFtcDsKIAkJCSBzaWdpbmZvLnNpX2NvZGUgPT0gU0VHVl9NQVBFUlIgJmFtcDsmYW1wOwogCQkJIHNpZ2luZm8uc2lfYWRkciA9PSBOVUxMLApAQCAtMzU4LDYgJiM0MzszNjksNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfcHJlc2VydmVkX2FmdGVyX3NpZ3VzcjEodm9pZCkKIHsKIAlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwogCXU2NCBwa2V5X3JlZzsKJiM0MzsJaW50IHJldDsKIAogCS8qIEFsbG93IGFjY2VzcyB0byBNUEsgMCBhbmQgYW4gYXJiaXRyYXJ5IHNldCBvZiBrZXlzICovCiAJcGtleV9yZWcgPSBwa2V5X3JlZ19yZXN0cmljdGl2ZV9kZWZhdWx0KCk7CkBAIC0zNjksMTAgJiM0MzszODEsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfcHJlc2VydmVkX2FmdGVyX3NpZ3VzcjEodm9pZCkKIAogCXNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3VzcjFfaGFuZGxlcjsKIAlzaWdlbXB0eXNldCgmYW1wO3NhLnNhX21hc2spOwotCWlmIChzaWdhY3Rpb24oU0lHVVNSMSwgJmFtcDtzYSwgTlVMTCkgPT0gLTEpIHsKLQkJcGVycm9yKCYjMzQ7c2lnYWN0aW9uJiMzNDspOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQomIzQzOwlyZXQgPSBzaWdhY3Rpb24oU0lHVVNSMSwgJmFtcDtzYSwgTlVMTCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHJldCA9PSAwKTsKIAogCW1lbXNldCgmYW1wO3NpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7CiAKQEAgLTQ0MSw5ICYjNDM7NDUxLDE1IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9zaWdyZXR1cm4odm9pZCkKIAlzdGF0aWMgc3RhY2tfdCBzaWdzdGFjazsKIAl2b2lkICpzdGFjazsKIAlpbnQgcGtleTsKLQlpbnQgcGFyZW50X3BpZCA9IDA7CiAJaW50IGNoaWxkX3BpZCA9IDA7CiAJdTY0IHBrZXlfcmVnOwomIzQzOwlsb25nIHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU0lHU0VHViBoYW5kbGVyIGlzIHJlc2V0IHRvIFNJR19ERkwgYmVsb3c7IHR1cm4gdHJhY2luZyBvZmYgZmlyc3QKJiM0MzsJICogc28gYSBjcmFzaCBkb2VzIG5vdCBsZWF2ZSBmdHJhY2UgZW5hYmxlZC4KJiM0MzsJICovCiYjNDM7CXRyYWNpbmdfb2ZmKCk7CiAKIAlzYS5zYV9oYW5kbGVyID0gU0lHX0RGTDsKIAlzYS5zYV9mbGFncyA9IDA7CkBAIC00NTMsMjQgJiM0Mzs0NjksMjAgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKQogCSAqIEZvciB0aGlzIHRlc3RjYXNlLCB3ZSBkbyBub3Qgd2FudCB0byBoYW5kbGUgU0lHU0VHVi4gUmVzZXQgaGFuZGxlcgogCSAqIHRvIGRlZmF1bHQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gY2FuIGNyYXNoIGlmIGl0IHJlY2VpdmVzIFNJR1NFR1YuCiAJICovCi0JaWYgKHNpZ2FjdGlvbihTSUdTRUdWLCAmYW1wO3NhLCBOVUxMKSA9PSAtMSkgewotCQlwZXJyb3IoJiMzNDtzaWdhY3Rpb24mIzM0Oyk7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9CiYjNDM7CXJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCAmYW1wO3NhLCBOVUxMKTsKJiM0MzsJcGtleV9hc3NlcnQocmV0ID09IDApOwogCiAJc2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfT05TVEFDSzsKIAlzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IyX2hhbmRsZXI7CiAJc2lnZW1wdHlzZXQoJmFtcDtzYS5zYV9tYXNrKTsKIAotCWlmIChzaWdhY3Rpb24oU0lHVVNSMiwgJmFtcDtzYSwgTlVMTCkgPT0gLTEpIHsKLQkJcGVycm9yKCYjMzQ7c2lnYWN0aW9uJiMzNDspOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQomIzQzOwlyZXQgPSBzaWdhY3Rpb24oU0lHVVNSMiwgJmFtcDtzYSwgTlVMTCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHJldCA9PSAwKTsKIAogCXN0YWNrID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOwogCi0JYXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpOwomIzQzOwlwa2V5X2Fzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTsKIAogCS8qCiAJICogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBNUEsgMi4gVGhlIGNoaWxkIHRocmVhZCAodG8gYmUgY3JlYXRlZApAQCAtNDkwLDIxICYjNDM7NTAyLDIxIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9zaWdyZXR1cm4odm9pZCkKIAkvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqLwogCXNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkJICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpOwogCXNpZ3N0YWNrLnNzX2ZsYWdzID0gMDsKIAlzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTsKIAogCS8qIFVzZSBjbG9uZSB0byBhdm9pZCBuZXdlciBnbGliY3MgdXNpbmcgcnNlcSBvbiBuZXcgdGhyZWFkcyAqLwotCWxvbmcgcmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8Ci0JCQkgICAgIENMT05FX1NJR0hBTkQgfCBDTE9ORV9USFJFQUQgfCBDTE9ORV9TWVNWU0VNIHwKLQkJCSAgICAgQ0xPTkVfUEFSRU5UX1NFVFRJRCB8IENMT05FX0NISUxEX0NMRUFSVElEIHwKLQkJCSAgICAgQ0xPTkVfREVUQUNIRUQsCi0JCQkgICAgIHN0YWNrICYjNDM7IFNUQUNLX1NJWkUsCi0JCQkgICAgICZhbXA7cGFyZW50X3BpZCwKLQkJCSAgICAgJmFtcDtjaGlsZF9waWQpOwomIzQzOwlyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwKJiM0MzsJCQlDTE9ORV9TSUdIQU5EIHwgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNFTSB8CiYjNDM7CQkJQ0xPTkVfREVUQUNIRUQsCiYjNDM7CQkJc3RhY2sgJiM0MzsgU1RBQ0tfU0laRSwKJiM0MzsJCQlOVUxMLAomIzQzOwkJCU5VTEwpOwogCiAJaWYgKHJldCAmbHQ7IDApIHsKIAkJZXJybm8gPSAtcmV0OwotCQlwZXJyb3IoJiMzNDtjbG9uZSYjMzQ7KTsKJiM0MzsJCXBrZXlfYXNzZXJ0KDApOwogCX0gIGVsc2UgaWYgKHJldCA9PSAwKSB7CiAJCXRocmVhZF9zaWd1c3IyX3NlbGYoJmFtcDtzaWdzdGFjayk7CiAJCXN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTsKQEAgLTUzMCwxNiAmIzQzOzU0MiwxNyBAQCBzdGF0aWMgdm9pZCAoKnBrZXlfdGVzdHNbXSkodm9pZCkgPSB7CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JaW50IGk7Ci0KIAlrc2Z0X3ByaW50X2hlYWRlcigpOwogCWtzZnRfc2V0X3BsYW4oQVJSQVlfU0laRShwa2V5X3Rlc3RzKSk7CiAKIAlpZiAoIWlzX3BrZXlzX3N1cHBvcnRlZCgpKQogCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O3BrZXlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHBrZXlfdGVzdHMpOyBpJiM0MzsmIzQzOykKLQkJKCpwa2V5X3Rlc3RzW2ldKSgpOwomIzQzOwlmb3IgKHRlc3RfbnIgPSAwOyB0ZXN0X25yICZsdDsgQVJSQVlfU0laRShwa2V5X3Rlc3RzKTsgdGVzdF9uciYjNDM7JiM0MzspIHsKJiM0MzsJCXRyYWNpbmdfb24oKTsKJiM0MzsJCSgqcGtleV90ZXN0c1t0ZXN0X25yXSkoKTsKJiM0MzsJCXRyYWNpbmdfb2ZmKCk7CiYjNDM7CX0KIAogCWtzZnRfZmluaXNoZWQoKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmMKaW5kZXggMjU1YjMzMmY3YTA4YjIuLmZiZWYzY2Q0NTQ0N2IxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYwpAQCAtMiw5ICYjNDM7Miw5OSBAQAogI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18KICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtwa2V5LWhlbHBlcnMuaCYjMzQ7CiAKJiM0MztpbnQgaXRlcmF0aW9uX25yID0gMTsKJiM0MztpbnQgdGVzdF9ucjsKJiM0MztpbnQgZHByaW50X2luX3NpZ25hbDsKJiM0MzsKJiM0MzsjaWYgQ09OVFJPTF9UUkFDSU5HICZndDsgMAomIzQzO3N0YXRpYyB2b2lkIGNhdF9pbnRvX2ZpbGUoY2hhciAqc3RyLCBjaGFyICpmaWxlKQomIzQzO3sKJiM0MzsJaW50IGZkID0gb3BlbihmaWxlLCBPX1JEV1IpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkcHJpbnRmMigmIzM0OyVzKCk6IHdyaXRpbmcgJiMzOTslcyYjMzk7IHRvICYjMzk7JXMmIzM5O1xuJiMzNDssIF9fZnVuY19fLCBzdHIsIGZpbGUpOwomIzQzOwkvKgomIzQzOwkgKiB0aGVzZSBuZWVkIHRvIGJlIHJhdyBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCB1bmRlcgomIzQzOwkgKiBwa2V5X2Fzc2VydCgpCiYjNDM7CSAqLwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtlcnJvciBvcGVuaW5nICYjMzk7JXMmIzM5O1xuJiMzNDssIGZpbGUpOwomIzQzOwkJcGVycm9yKCYjMzQ7ZXJyb3I6ICYjMzQ7KTsKJiM0MzsJCWV4aXQoX19MSU5FX18pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKTsKJiM0MzsJaWYgKHJldCAhPSBzdHJsZW4oc3RyKSkgewomIzQzOwkJcGVycm9yKCYjMzQ7d3JpdGUgdG8gZmlsZSBmYWlsZWQmIzM0Oyk7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtmaWxlbmFtZTogJiMzOTslcyYjMzk7IHN0cjogJiMzOTslcyYjMzk7XG4mIzM0OywgZmlsZSwgc3RyKTsKJiM0MzsJCWV4aXQoX19MSU5FX18pOwomIzQzOwl9CiYjNDM7CWNsb3NlKGZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3YXJuZWRfdHJhY2luZzsKJiM0MztzdGF0aWMgaW50IHRyYWNpbmdfcm9vdF9vayh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKGdldGV1aWQoKSAhPSAwKSB7CiYjNDM7CQlpZiAoIXdhcm5lZF90cmFjaW5nKQomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1dBUk5JTkc6IG5vdCBydW4gYXMgcm9vdCwgJiMzNDsKJiM0MzsJCQkJCSYjMzQ7Y2FuIG5vdCBkbyB0cmFjaW5nIGNvbnRyb2xcbiYjMzQ7KTsKJiM0MzsJCXdhcm5lZF90cmFjaW5nID0gMTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKJiM0Mzt2b2lkIHRyYWNpbmdfb24odm9pZCkKJiM0Mzt7CiYjNDM7I2lmIENPTlRST0xfVFJBQ0lORyAmZ3Q7IDAKJiM0MzsjZGVmaW5lIFRSQUNFRElSICYjMzQ7L3N5cy9rZXJuZWwvdHJhY2luZyYjMzQ7CiYjNDM7CWNoYXIgcGlkc3RyWzMyXTsKJiM0MzsKJiM0MzsJaWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3ByaW50ZihwaWRzdHIsICYjMzQ7JWQmIzM0OywgZ2V0cGlkKCkpOwomIzQzOwljYXRfaW50b19maWxlKCYjMzQ7MCYjMzQ7LCBUUkFDRURJUiAmIzM0Oy90cmFjaW5nX29uJiMzNDspOwomIzQzOwljYXRfaW50b19maWxlKCYjMzQ7XG4mIzM0OywgVFJBQ0VESVIgJiMzNDsvdHJhY2UmIzM0Oyk7CiYjNDM7CWlmICgxKSB7CiYjNDM7CQljYXRfaW50b19maWxlKCYjMzQ7ZnVuY3Rpb25fZ3JhcGgmIzM0OywgVFJBQ0VESVIgJiMzNDsvY3VycmVudF90cmFjZXImIzM0Oyk7CiYjNDM7CQljYXRfaW50b19maWxlKCYjMzQ7MSYjMzQ7LCBUUkFDRURJUiAmIzM0Oy9vcHRpb25zL2Z1bmNncmFwaC1wcm9jJiMzNDspOwomIzQzOwl9IGVsc2UgewomIzQzOwkJY2F0X2ludG9fZmlsZSgmIzM0O25vcCYjMzQ7LCBUUkFDRURJUiAmIzM0Oy9jdXJyZW50X3RyYWNlciYjMzQ7KTsKJiM0MzsJfQomIzQzOwljYXRfaW50b19maWxlKHBpZHN0ciwgVFJBQ0VESVIgJiMzNDsvc2V0X2Z0cmFjZV9waWQmIzM0Oyk7CiYjNDM7CWNhdF9pbnRvX2ZpbGUoJiMzNDsxJiMzNDssIFRSQUNFRElSICYjMzQ7L3RyYWNpbmdfb24mIzM0Oyk7CiYjNDM7CWRwcmludGYxKCYjMzQ7ZW5hYmxlZCB0cmFjaW5nXG4mIzM0Oyk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdHJhY2luZ19vZmYodm9pZCkKJiM0Mzt7CiYjNDM7I2lmIENPTlRST0xfVFJBQ0lORyAmZ3Q7IDAKJiM0MzsJaWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJY2F0X2ludG9fZmlsZSgmIzM0OzAmIzM0OywgJiMzNDsvc3lzL2tlcm5lbC90cmFjaW5nL3RyYWNpbmdfb24mIzM0Oyk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgYWJvcnRfaG9va3Modm9pZCkKJiM0Mzt7CiYjNDM7CWZmbHVzaChzdGRvdXQpOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDtydW5uaW5nICVzKCkuLi5cbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CXRyYWNpbmdfb2ZmKCk7CiYjNDM7I2lmZGVmIFNMRUVQX09OX0FCT1JUCiYjNDM7CXNsZWVwKFNMRUVQX09OX0FCT1JUKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBpbnQgc3lzX3BrZXlfYWxsb2ModW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBpbml0X3ZhbCkKIHsKIAlpbnQgcmV0ID0gc3lzY2FsbChTWVNfcGtleV9hbGxvYywgZmxhZ3MsIGluaXRfdmFsKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMKaW5kZXggOWE2ZDk1NGVlMzcxMjYuLmFlNmUxNTMwYjM1NDg0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwpAQCAtNDksMTEgJiM0Mzs0OSw3IEBACiAjaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwa2V5LWhlbHBlcnMuaCYjMzQ7CiAKLWludCBpdGVyYXRpb25fbnIgPSAxOwotaW50IHRlc3RfbnI7Ci0KIHU2NCBzaGFkb3dfcGtleV9yZWc7Ci1pbnQgZHByaW50X2luX3NpZ25hbDsKIAogbm9pbmxpbmUgaW50IHJlYWRfcHRyKGludCAqcHRyKQogewpAQCAtNjIsODkgJiM0Mzs1OCw2IEBAIG5vaW5saW5lIGludCByZWFkX3B0cihpbnQgKnB0cikKIAlyZXR1cm4gKnB0cjsKIH0KIAotI2lmIENPTlRST0xfVFJBQ0lORyAmZ3Q7IDAKLXN0YXRpYyB2b2lkIGNhdF9pbnRvX2ZpbGUoY2hhciAqc3RyLCBjaGFyICpmaWxlKQotewotCWludCBmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTsKLQlpbnQgcmV0OwotCi0JZHByaW50ZjIoJiMzNDslcygpOiB3cml0aW5nICYjMzk7JXMmIzM5OyB0byAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBfX2Z1bmNfXywgc3RyLCBmaWxlKTsKLQkvKgotCSAqIHRoZXNlIG5lZWQgdG8gYmUgcmF3IGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIHVuZGVyCi0JICogcGtleV9hc3NlcnQoKQotCSAqLwotCWlmIChmZCAmbHQ7IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZXJyb3Igb3BlbmluZyAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBzdHIpOwotCQlwZXJyb3IoJiMzNDtlcnJvcjogJiMzNDspOwotCQlleGl0KF9fTElORV9fKTsKLQl9Ci0KLQlyZXQgPSB3cml0ZShmZCwgc3RyLCBzdHJsZW4oc3RyKSk7Ci0JaWYgKHJldCAhPSBzdHJsZW4oc3RyKSkgewotCQlwZXJyb3IoJiMzNDt3cml0ZSB0byBmaWxlIGZhaWxlZCYjMzQ7KTsKLQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmlsZW5hbWU6ICYjMzk7JXMmIzM5OyBzdHI6ICYjMzk7JXMmIzM5O1xuJiMzNDssIGZpbGUsIHN0cik7Ci0JCWV4aXQoX19MSU5FX18pOwotCX0KLQljbG9zZShmZCk7Ci19Ci0KLXN0YXRpYyBpbnQgd2FybmVkX3RyYWNpbmc7Ci1zdGF0aWMgaW50IHRyYWNpbmdfcm9vdF9vayh2b2lkKQotewotCWlmIChnZXRldWlkKCkgIT0gMCkgewotCQlpZiAoIXdhcm5lZF90cmFjaW5nKQotCQkJZnByaW50ZihzdGRlcnIsICYjMzQ7V0FSTklORzogbm90IHJ1biBhcyByb290LCAmIzM0OwotCQkJCQkmIzM0O2NhbiBub3QgZG8gdHJhY2luZyBjb250cm9sXG4mIzM0Oyk7Ci0JCXdhcm5lZF90cmFjaW5nID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHRyYWNpbmdfb24odm9pZCkKLXsKLSNpZiBDT05UUk9MX1RSQUNJTkcgJmd0OyAwCi0jZGVmaW5lIFRSQUNFRElSICYjMzQ7L3N5cy9rZXJuZWwvdHJhY2luZyYjMzQ7Ci0JY2hhciBwaWRzdHJbMzJdOwotCi0JaWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSkKLQkJcmV0dXJuOwotCi0Jc3ByaW50ZihwaWRzdHIsICYjMzQ7JWQmIzM0OywgZ2V0cGlkKCkpOwotCWNhdF9pbnRvX2ZpbGUoJiMzNDswJiMzNDssIFRSQUNFRElSICYjMzQ7L3RyYWNpbmdfb24mIzM0Oyk7Ci0JY2F0X2ludG9fZmlsZSgmIzM0O1xuJiMzNDssIFRSQUNFRElSICYjMzQ7L3RyYWNlJiMzNDspOwotCWlmICgxKSB7Ci0JCWNhdF9pbnRvX2ZpbGUoJiMzNDtmdW5jdGlvbl9ncmFwaCYjMzQ7LCBUUkFDRURJUiAmIzM0Oy9jdXJyZW50X3RyYWNlciYjMzQ7KTsKLQkJY2F0X2ludG9fZmlsZSgmIzM0OzEmIzM0OywgVFJBQ0VESVIgJiMzNDsvb3B0aW9ucy9mdW5jZ3JhcGgtcHJvYyYjMzQ7KTsKLQl9IGVsc2UgewotCQljYXRfaW50b19maWxlKCYjMzQ7bm9wJiMzNDssIFRSQUNFRElSICYjMzQ7L2N1cnJlbnRfdHJhY2VyJiMzNDspOwotCX0KLQljYXRfaW50b19maWxlKHBpZHN0ciwgVFJBQ0VESVIgJiMzNDsvc2V0X2Z0cmFjZV9waWQmIzM0Oyk7Ci0JY2F0X2ludG9fZmlsZSgmIzM0OzEmIzM0OywgVFJBQ0VESVIgJiMzNDsvdHJhY2luZ19vbiYjMzQ7KTsKLQlkcHJpbnRmMSgmIzM0O2VuYWJsZWQgdHJhY2luZ1xuJiMzNDspOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHRyYWNpbmdfb2ZmKHZvaWQpCi17Ci0jaWYgQ09OVFJPTF9UUkFDSU5HICZndDsgMAotCWlmICghdHJhY2luZ19yb290X29rKCkpCi0JCXJldHVybjsKLQljYXRfaW50b19maWxlKCYjMzQ7MCYjMzQ7LCAmIzM0Oy9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2luZ19vbiYjMzQ7KTsKLSNlbmRpZgotfQotCi12b2lkIGFib3J0X2hvb2tzKHZvaWQpCi17Ci0JZmZsdXNoKHN0ZG91dCk7Ci0JZnByaW50ZihzdGRlcnIsICYjMzQ7cnVubmluZyAlcygpLi4uXG4mIzM0OywgX19mdW5jX18pOwotCXRyYWNpbmdfb2ZmKCk7Ci0jaWZkZWYgU0xFRVBfT05fQUJPUlQKLQlzbGVlcChTTEVFUF9PTl9BQk9SVCk7Ci0jZW5kaWYKLX0KLQogLyoKICAqIFRoaXMgYXR0ZW1wdHMgdG8gaGF2ZSByb3VnaGx5IGEgcGFnZSBvZiBpbnN0cnVjdGlvbnMgZm9sbG93ZWQgYnkgYSBmZXcKICAqIGluc3RydWN0aW9ucyB0aGF0IGRvIGEgd3JpdGUsIGFuZCBhbm90aGVyIHBhZ2Ugb2YgaW5zdHJ1Y3Rpb25zLiAgVGhhdApAQCAtNjY5LDcgJiM0Mzs1ODIsNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXlfd2l0aF9tcHJvdGVjdChsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSkKIAkJCXNpemUsIHByb3QsIHBrZXkpOwogCXBrZXlfYXNzZXJ0KHBrZXkgJmx0OyBOUl9QS0VZUyk7CiAJcHRyID0gbW1hcChOVUxMLCBzaXplLCBwcm90LCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7Ci0JcGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpOwomIzQzOwlwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7CiAJcmV0ID0gbXByb3RlY3RfcGtleSgodm9pZCAqKXB0ciwgUEFHRV9TSVpFLCBwcm90LCBwa2V5KTsKIAlwa2V5X2Fzc2VydCghcmV0KTsKIAlyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTsKQEAgLTY5Miw3ICYjNDM7NjA1LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X2Fub25faHVnZShsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSkKIAkgKi8KIAlzaXplID0gQUxJR05fVVAoc2l6ZSwgSFBBR0VfU0laRSAqIDIpOwogCXB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9OT05FLCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7Ci0JcGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpOwomIzQzOwlwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7CiAJcmVjb3JkX3BrZXlfbWFsbG9jKHB0ciwgc2l6ZSwgcHJvdCk7CiAJbXByb3RlY3RfcGtleShwdHIsIHNpemUsIHByb3QsIHBrZXkpOwogCkBAIC03NTAsNyAmIzQzOzY2Myw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV9odWdldGxiKGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KQogCXNpemUgPSBBTElHTl9VUChzaXplLCBIUEFHRV9TSVpFICogMik7CiAJcGtleV9hc3NlcnQocGtleSAmbHQ7IE5SX1BLRVlTKTsKIAlwdHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgZmxhZ3MsIC0xLCAwKTsKLQlwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7CiYjNDM7CXBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTsKIAltcHJvdGVjdF9wa2V5KHB0ciwgc2l6ZSwgcHJvdCwgcGtleSk7CiAKIAlyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTsKQEAgLTc3OSw3ICYjNDM7NjkyLDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5KGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KQogCQlwa2V5X2Fzc2VydChtYWxsb2NfdHlwZSAmbHQ7IG5yX21hbGxvY190eXBlcyk7CiAKIAkJcmV0ID0gcGtleV9tYWxsb2NbbWFsbG9jX3R5cGVdKHNpemUsIHByb3QsIHBrZXkpOwotCQlwa2V5X2Fzc2VydChyZXQgIT0gKHZvaWQgKiktMSk7CiYjNDM7CQlwa2V5X2Fzc2VydChyZXQgIT0gTUFQX0ZBSUxFRCk7CiAKIAkJbWFsbG9jX3R5cGUmIzQzOyYjNDM7OwogCQlpZiAobWFsbG9jX3R5cGUgJmd0Oz0gbnJfbWFsbG9jX3R5cGVzKQpAQCAtMTE5Nyw2ICYjNDM7MTExMCw3IEBAIHN0YXRpYyB2b2lkIGFyY2hfZm9yY2VfcGtleV9yZWdfaW5pdCh2b2lkKQogCSAqIGRvaW5nIHRoZSBYU0FWRSBzaXplIGVudW1lcmF0aW9uIGRhbmNlLgogCSAqLwogCWJ1ZiA9IG1tYXAoTlVMTCwgMSpNQiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTsKJiM0MzsJcGtleV9hc3NlcnQoYnVmICE9IE1BUF9GQUlMRUQpOwogCiAJLyogVGhlc2UgX19idWlsdGlucyByZXF1aXJlIGNvbXBpbGluZyB3aXRoIC1teHNhdmUgKi8KIApAQCAtMTc2Myw3ICYjNDM7MTY3Nyw4IEBAIGludCBtYWluKHZvaWQpCiAJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7cnVubmluZyBQS0VZIHRlc3RzIGZvciB1bnN1cHBvcnRlZCBDUFUvT1NcbiYjMzQ7KTsKIAogCQlwdHIgID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX05PTkUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTsKLQkJYXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTsKJiM0MzsJCWlmIChwdHIgPT0gTUFQX0ZBSUxFRCkKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDttbWFwJiMzNDspOwogCQl0ZXN0X21wcm90ZWN0X3BrZXlfb25fdW5zdXBwb3J0ZWRfY3B1KHB0ciwgMSk7CiAJCWtzZnRfdGVzdF9yZXN1bHRfcGFzcygmIzM0O3BrZXkgb24gdW5zdXBwb3J0ZWQgQ1BVL09TXG4mIzM0Oyk7CiAJCWtzZnRfZmluaXNoZWQoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ4NwoJCQkJCQkJb3V0cHV0OiA2NQoJCQkJCQkJdGhvdWdodHM6IDQwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBTZWxmdGVzdHMgYW5kIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGZpbGVzIHNwZWNpZmljYWxseSB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byB0aGUgc2VsZnRlc3RzLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0cy4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGlzIGRvZXNuJiMzOTt0IHdhcnJhbnQgZnV6emluZywgYnV0IGxldCYjMzk7cyBiZSB0aG9yb3VnaC4KCkdpdmVuIHRoYXQgdGhlc2UgYXJlIHNlbGZ0ZXN0cywgYW5kIHRoZXkgbGl2ZSBvdXRzaWRlIG9mIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gcGF0aCwgdGhlIGNoYW5nZXMgaGVyZSBzaG91bGRuJiMzOTt0IGltcGFjdCBydW50aW1lIGJlaGF2aW9yIHVubGVzcyB3ZSAqY2hvb3NlKiB0byBydW4gdGhlbS4gVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHN0YXRlIHdlIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGludm9sdmVzIERvY3VtZW50YXRpb24sIEtjb25maWcgZmlsZXMsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGNoYW5nZXMgbGlrZSBsb2dnaW5nLCBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24sIG9yIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAKCldhaXQgYSBtaW51dGUuLi4gdGhlc2UgYXJlICpzZWxmdGVzdHMqLiBUaGV5IGFyZSB1c2VyLXNwYWNlIHByb2dyYW1zIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGVzdGluZy4gVGhleSBhcmVuJiMzOTt0IGtlcm5lbCBjb2RlLiBTbywgbW9kaWZ5aW5nIHRoZW0gKnNob3VsZG4mIzM5O3QqIGltcGFjdCBhbnl0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGZ1enplZC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O20gY2hlY2tpbmcgdGhlIGRpZmYgYWdhaW4g4oCTIHllcCwgaXQmIzM5O3Mgc3RyaWN0bHkgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCBkaXJlY3RvcnkuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgY2xlYXI6IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbDsgaXQmIzM5O3MganVzdCBhYm91dCByZWZpbmluZyB0aGUgdGVzdGluZyBtZXRob2RvbG9neS4gVGhpcyBnb2VzIGludG8gdGhlICYjMzk7bm8mIzM5OyBwaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDA4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjUzOjAyLjI0MTIyMTg3NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTM1NzY0OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjUzOjAyLjI0MTIyNzgzNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2MDc4MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDM2YzE3NDdmZWQ2NGRhMjA2M2I1OTQ2YjY2YjFkYmNlNWVmOWI1N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDA4OjUzOjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhcXG5pbmRleCAyYzM3N2Y0ZTlkZjFkMy4uNDZhOGExODc4ZGMxZmQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaFxcbkBAIC02OCw3ICs2OCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzaWdzYWZlX3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLilcXG4gI2RlZmluZSBkcHJpbnRmMyhhcmdzLi4uKSBkcHJpbnRmX2xldmVsKDMsIGFyZ3MpXFxuICNkZWZpbmUgZHByaW50ZjQoYXJncy4uLikgZHByaW50Zl9sZXZlbCg0LCBhcmdzKVxcbiBcXG4tZXh0ZXJuIHZvaWQgYWJvcnRfaG9va3Modm9pZCk7XFxuK3ZvaWQgdHJhY2luZ19vbih2b2lkKTtcXG4rdm9pZCB0cmFjaW5nX29mZih2b2lkKTtcXG4rdm9pZCBhYm9ydF9ob29rcyh2b2lkKTtcXG4gI2RlZmluZSBwa2V5X2Fzc2VydChjb25kaXRpb24pIGRvIHtcXHRcXHRcXFxcXFxuIFxcdGlmICghKGNvbmRpdGlvbikpIHtcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdGRwcmludGYwKFxcXCIjIGFzc2VydCgpIGF0ICVzOjolZCB0ZXN0X25yOiAlZCBpdGVyYXRpb246ICVkXFxcXG5cXFwiLCBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhcXG5pbmRleCAxN2JmMmQxYjAxOTJlMC4uMmNlODU1ODBiNDA0ODcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaFxcbkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICptYWxsb2NfcGtleV93aXRoX21wcm90ZWN0X3N1YnBhZ2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBcXG4gXFx0XFx0XFx0c2l6ZSwgcHJvdCwgcGtleSk7XFxuIFxcdHBrZXlfYXNzZXJ0KHBrZXkgXFx1MDAzYyBOUl9QS0VZUyk7XFxuIFxcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgcHJvdCwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xcbi1cXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XFxuK1xcdHBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTtcXG4gXFxuIFxcdHJldCA9IHN5c2NhbGwoX19OUl9zdWJwYWdlX3Byb3QsIHB0ciwgc2l6ZSwgTlVMTCk7XFxuIFxcdGlmIChyZXQpIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY1xcbmluZGV4IDMwMmZlZjU0MDQ5Yzg3Li5jMjE4ZDA1MTBhMmE0MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jXFxuQEAgLTE5LDcgKzE5LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2Nhc3NlcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy90eXBlcy5oXFx1MDAzZVxcbkBAIC0yMDcsMjIgKzIwNiwyNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX3BrZXkwX2Rpc2FibGVkKHZvaWQpXFxuIFxcdHN0cnVjdCBzaWdhY3Rpb24gc2E7XFxuIFxcdHB0aHJlYWRfYXR0cl90IGF0dHI7XFxuIFxcdHB0aHJlYWRfdCB0aHI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87XFxuIFxcbiBcXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7XFxuIFxcdHNpZ2VtcHR5c2V0KFxcdTAwMjZzYS5zYV9tYXNrKTtcXG4tXFx0aWYgKHNpZ2FjdGlvbihTSUdTRUdWLCBcXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XFxuLVxcdFxcdHBlcnJvcihcXFwic2lnYWN0aW9uXFxcIik7XFxuLVxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4tXFx0fVxcbitcXHRyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rXFx0cGtleV9hc3NlcnQocmV0ID09IDApO1xcbiBcXG4gXFx0bWVtc2V0KFxcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xcbiBcXG4gXFx0cHRocmVhZF9hdHRyX2luaXQoXFx1MDAyNmF0dHIpO1xcbiBcXHRwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoXFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcXG4gXFxuLVxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHIsIFxcdTAwMjZhdHRyLCB0aHJlYWRfc2Vndl93aXRoX3BrZXkwX2Rpc2FibGVkLCBOVUxMKTtcXG4rXFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRociwgXFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3dpdGhfcGtleTBfZGlzYWJsZWQsIE5VTEwpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGVycm5vID0gcmV0O1xcbitcXHRcXHRwa2V5X2Fzc2VydCgwKTtcXG4rXFx0fVxcbiBcXG4gXFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZtdXRleCk7XFxuIFxcdHdoaWxlIChzaWdpbmZvLnNpX3NpZ25vID09IDApXFxuQEAgLTI0NywyMiArMjQ5LDI1IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX2Nhbm5vdF9hY2Nlc3Nfc3RhY2sodm9pZClcXG4gXFx0c3RydWN0IHNpZ2FjdGlvbiBzYTtcXG4gXFx0cHRocmVhZF9hdHRyX3QgYXR0cjtcXG4gXFx0cHRocmVhZF90IHRocjtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdHNhLnNhX2ZsYWdzID0gU0FfU0lHSU5GTztcXG4gXFxuIFxcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3NlZ3ZfaGFuZGxlcjtcXG4gXFx0c2lnZW1wdHlzZXQoXFx1MDAyNnNhLnNhX21hc2spO1xcbi1cXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFxcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcXG4tXFx0XFx0cGVycm9yKFxcXCJzaWdhY3Rpb25cXFwiKTtcXG4tXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbi1cXHR9XFxuK1xcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcXHUwMDI2c2EsIE5VTEwpO1xcbitcXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XFxuIFxcbiBcXHRtZW1zZXQoXFx1MDAyNnNpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7XFxuIFxcbiBcXHRwdGhyZWFkX2F0dHJfaW5pdChcXHUwMDI2YXR0cik7XFxuIFxcdHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZShcXHUwMDI2YXR0ciwgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQpO1xcbiBcXG4tXFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNnRociwgXFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7XFxuK1xcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHIsIFxcdTAwMjZhdHRyLCB0aHJlYWRfc2Vndl9wa3VlcnJfc3RhY2ssIE5VTEwpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGVycm5vID0gcmV0O1xcbitcXHRcXHRwa2V5X2Fzc2VydCgwKTtcXG4rXFx0fVxcbiBcXG4gXFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZtdXRleCk7XFxuIFxcdHdoaWxlIChzaWdpbmZvLnNpX3NpZ25vID09IDApXFxuQEAgLTI4NSwyNCArMjkwLDIyIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpXFxuIFxcdHN0YXRpYyBzdGFja190IHNpZ3N0YWNrO1xcbiBcXHR2b2lkICpzdGFjaztcXG4gXFx0aW50IHBrZXk7XFxuLVxcdGludCBwYXJlbnRfcGlkID0gMDtcXG4gXFx0aW50IGNoaWxkX3BpZCA9IDA7XFxuIFxcdHU2NCBwa2V5X3JlZztcXG4rXFx0bG9uZyByZXQ7XFxuIFxcbiBcXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk8gfCBTQV9PTlNUQUNLO1xcbiBcXG4gXFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyO1xcbiBcXG4gXFx0c2lnZW1wdHlzZXQoXFx1MDAyNnNhLnNhX21hc2spO1xcbi1cXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFxcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcXG4tXFx0XFx0cGVycm9yKFxcXCJzaWdhY3Rpb25cXFwiKTtcXG4tXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbi1cXHR9XFxuK1xcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcXHUwMDI2c2EsIE5VTEwpO1xcbitcXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XFxuIFxcbiBcXHRzdGFjayA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4gXFx0XFx0ICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcXG4gXFxuLVxcdGFzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcXG4rXFx0cGtleV9hc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XFxuIFxcbiBcXHQvKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIE1QSyAxICovXFxuIFxcdHBrZXlfcmVnID0gcGtleV9yZWdfcmVzdHJpY3RpdmVfZGVmYXVsdCgpO1xcbkBAIC0zMTcsMzMgKzMyMCw0MSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX2RpZmZlcmVudF9wa2V5X2Zvcl9zdGFjayh2b2lkKVxcbiBcXHQvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqL1xcbiBcXHRzaWdzdGFjay5zc19zcCA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4gXFx0XFx0XFx0ICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpO1xcbiBcXHRzaWdzdGFjay5zc19mbGFncyA9IDA7XFxuIFxcdHNpZ3N0YWNrLnNzX3NpemUgPSBTVEFDS19TSVpFO1xcbiBcXG4gXFx0bWVtc2V0KFxcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xcbiBcXG4gXFx0LyogVXNlIGNsb25lIHRvIGF2b2lkIG5ld2VyIGdsaWJjcyB1c2luZyByc2VxIG9uIG5ldyB0aHJlYWRzICovXFxuLVxcdGxvbmcgcmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XFxuLVxcdFxcdFxcdCAgICAgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxcbi1cXHRcXHRcXHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XFxuLVxcdFxcdFxcdCAgICAgQ0xPTkVfREVUQUNIRUQsXFxuLVxcdFxcdFxcdCAgICAgc3RhY2sgKyBTVEFDS19TSVpFLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZwYXJlbnRfcGlkLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZjaGlsZF9waWQpO1xcbitcXHRyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcXG4rXFx0XFx0XFx0Q0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxcbitcXHRcXHRcXHRDTE9ORV9ERVRBQ0hFRCxcXG4rXFx0XFx0XFx0c3RhY2sgKyBTVEFDS19TSVpFLFxcbitcXHRcXHRcXHROVUxMLFxcbitcXHRcXHRcXHROVUxMKTtcXG4gXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGVycm5vID0gLXJldDtcXG4tXFx0XFx0cGVycm9yKFxcXCJjbG9uZVxcXCIpO1xcbitcXHRcXHRwa2V5X2Fzc2VydCgwKTtcXG4gXFx0fSBlbHNlIGlmIChyZXQgPT0gMCkge1xcbiBcXHRcXHR0aHJlYWRfc2Vndl9tYXBlcnJfcHRyKFxcdTAwMjZzaWdzdGFjayk7XFxuIFxcdFxcdHN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTtcXG4gXFx0fVxcbiBcXG4rXFx0Y2hpbGRfcGlkID0gcmV0O1xcbitcXG4gXFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZtdXRleCk7XFxuIFxcdHdoaWxlIChzaWdpbmZvLnNpX3NpZ25vID09IDApXFxuIFxcdFxcdHB0aHJlYWRfY29uZF93YWl0KFxcdTAwMjZjb25kLCBcXHUwMDI2bXV0ZXgpO1xcbiBcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2bXV0ZXgpO1xcbiBcXG4rXFx0LyogV2FpdCBmb3IgY2hpbGQgdG8gZXhpdCBiZWZvcmUgcmV0dXJuaW5nICovXFxuK1xcdGRvIHtcXG4rXFx0XFx0c2NoZWRfeWllbGQoKTtcXG4rXFx0XFx0cmV0ID0gc3lzY2FsbF9yYXcoU1lTX3RraWxsLCBjaGlsZF9waWQsIDAsIDAsIDAsIDAsIDApO1xcbitcXHR9IHdoaWxlIChyZXQgIT0gLUVTUkNIIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUlOVkFMKTtcXG4rXFxuIFxcdGtzZnRfdGVzdF9yZXN1bHQoc2lnaW5mby5zaV9zaWdubyA9PSBTSUdTRUdWIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCBzaWdpbmZvLnNpX2NvZGUgPT0gU0VHVl9NQVBFUlIgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0IHNpZ2luZm8uc2lfYWRkciA9PSBOVUxMLFxcbkBAIC0zNTgsNiArMzY5LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHNpZ2FjdGlvbiBzYTtcXG4gXFx0dTY0IHBrZXlfcmVnO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0LyogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBhbiBhcmJpdHJhcnkgc2V0IG9mIGtleXMgKi9cXG4gXFx0cGtleV9yZWcgPSBwa2V5X3JlZ19yZXN0cmljdGl2ZV9kZWZhdWx0KCk7XFxuQEAgLTM2OSwxMCArMzgxLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpXFxuIFxcbiBcXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX2hhbmRsZXI7XFxuIFxcdHNpZ2VtcHR5c2V0KFxcdTAwMjZzYS5zYV9tYXNrKTtcXG4tXFx0aWYgKHNpZ2FjdGlvbihTSUdVU1IxLCBcXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XFxuLVxcdFxcdHBlcnJvcihcXFwic2lnYWN0aW9uXFxcIik7XFxuLVxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4tXFx0fVxcbitcXHRyZXQgPSBzaWdhY3Rpb24oU0lHVVNSMSwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rXFx0cGtleV9hc3NlcnQocmV0ID09IDApO1xcbiBcXG4gXFx0bWVtc2V0KFxcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xcbiBcXG5AQCAtNDQxLDkgKzQ1MSwxNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXFxuIFxcdHN0YXRpYyBzdGFja190IHNpZ3N0YWNrO1xcbiBcXHR2b2lkICpzdGFjaztcXG4gXFx0aW50IHBrZXk7XFxuLVxcdGludCBwYXJlbnRfcGlkID0gMDtcXG4gXFx0aW50IGNoaWxkX3BpZCA9IDA7XFxuIFxcdHU2NCBwa2V5X3JlZztcXG4rXFx0bG9uZyByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTSUdTRUdWIGhhbmRsZXIgaXMgcmVzZXQgdG8gU0lHX0RGTCBiZWxvdzsgdHVybiB0cmFjaW5nIG9mZiBmaXJzdFxcbitcXHQgKiBzbyBhIGNyYXNoIGRvZXMgbm90IGxlYXZlIGZ0cmFjZSBlbmFibGVkLlxcbitcXHQgKi9cXG4rXFx0dHJhY2luZ19vZmYoKTtcXG4gXFxuIFxcdHNhLnNhX2hhbmRsZXIgPSBTSUdfREZMO1xcbiBcXHRzYS5zYV9mbGFncyA9IDA7XFxuQEAgLTQ1MywyNCArNDY5LDIwIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9zaWdyZXR1cm4odm9pZClcXG4gXFx0ICogRm9yIHRoaXMgdGVzdGNhc2UsIHdlIGRvIG5vdCB3YW50IHRvIGhhbmRsZSBTSUdTRUdWLiBSZXNldCBoYW5kbGVyXFxuIFxcdCAqIHRvIGRlZmF1bHQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gY2FuIGNyYXNoIGlmIGl0IHJlY2VpdmVzIFNJR1NFR1YuXFxuIFxcdCAqL1xcbi1cXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFxcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcXG4tXFx0XFx0cGVycm9yKFxcXCJzaWdhY3Rpb25cXFwiKTtcXG4tXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbi1cXHR9XFxuK1xcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcXHUwMDI2c2EsIE5VTEwpO1xcbitcXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XFxuIFxcbiBcXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk8gfCBTQV9PTlNUQUNLO1xcbiBcXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IyX2hhbmRsZXI7XFxuIFxcdHNpZ2VtcHR5c2V0KFxcdTAwMjZzYS5zYV9tYXNrKTtcXG4gXFxuLVxcdGlmIChzaWdhY3Rpb24oU0lHVVNSMiwgXFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xcbi1cXHRcXHRwZXJyb3IoXFxcInNpZ2FjdGlvblxcXCIpO1xcbi1cXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuLVxcdH1cXG4rXFx0cmV0ID0gc2lnYWN0aW9uKFNJR1VTUjIsIFxcdTAwMjZzYSwgTlVMTCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcXG4gXFxuIFxcdHN0YWNrID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbiBcXHRcXHQgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xcbiBcXG4tXFx0YXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xcbitcXHRwa2V5X2Fzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEFsbG93IGFjY2VzcyB0byBNUEsgMCBhbmQgTVBLIDIuIFRoZSBjaGlsZCB0aHJlYWQgKHRvIGJlIGNyZWF0ZWRcXG5AQCAtNDkwLDIxICs1MDIsMjEgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxcbiBcXHQvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqL1xcbiBcXHRzaWdzdGFjay5zc19zcCA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4gXFx0XFx0XFx0ICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpO1xcbiBcXHRzaWdzdGFjay5zc19mbGFncyA9IDA7XFxuIFxcdHNpZ3N0YWNrLnNzX3NpemUgPSBTVEFDS19TSVpFO1xcbiBcXG4gXFx0LyogVXNlIGNsb25lIHRvIGF2b2lkIG5ld2VyIGdsaWJjcyB1c2luZyByc2VxIG9uIG5ldyB0aHJlYWRzICovXFxuLVxcdGxvbmcgcmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XFxuLVxcdFxcdFxcdCAgICAgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxcbi1cXHRcXHRcXHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XFxuLVxcdFxcdFxcdCAgICAgQ0xPTkVfREVUQUNIRUQsXFxuLVxcdFxcdFxcdCAgICAgc3RhY2sgKyBTVEFDS19TSVpFLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZwYXJlbnRfcGlkLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZjaGlsZF9waWQpO1xcbitcXHRyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcXG4rXFx0XFx0XFx0Q0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxcbitcXHRcXHRcXHRDTE9ORV9ERVRBQ0hFRCxcXG4rXFx0XFx0XFx0c3RhY2sgKyBTVEFDS19TSVpFLFxcbitcXHRcXHRcXHROVUxMLFxcbitcXHRcXHRcXHROVUxMKTtcXG4gXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGVycm5vID0gLXJldDtcXG4tXFx0XFx0cGVycm9yKFxcXCJjbG9uZVxcXCIpO1xcbitcXHRcXHRwa2V5X2Fzc2VydCgwKTtcXG4gXFx0fSAgZWxzZSBpZiAocmV0ID09IDApIHtcXG4gXFx0XFx0dGhyZWFkX3NpZ3VzcjJfc2VsZihcXHUwMDI2c2lnc3RhY2spO1xcbiBcXHRcXHRzeXNjYWxsX3JhdyhTWVNfZXhpdCwgMCwgMCwgMCwgMCwgMCwgMCk7XFxuQEAgLTUzMCwxNiArNTQyLDE3IEBAIHN0YXRpYyB2b2lkICgqcGtleV90ZXN0c1tdKSh2b2lkKSA9IHtcXG4gXFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIHtcXG4tXFx0aW50IGk7XFxuLVxcbiBcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbiBcXHRrc2Z0X3NldF9wbGFuKEFSUkFZX1NJWkUocGtleV90ZXN0cykpO1xcbiBcXG4gXFx0aWYgKCFpc19wa2V5c19zdXBwb3J0ZWQoKSlcXG4gXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcInBrZXlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocGtleV90ZXN0cyk7IGkrKylcXG4tXFx0XFx0KCpwa2V5X3Rlc3RzW2ldKSgpO1xcbitcXHRmb3IgKHRlc3RfbnIgPSAwOyB0ZXN0X25yIFxcdTAwM2MgQVJSQVlfU0laRShwa2V5X3Rlc3RzKTsgdGVzdF9ucisrKSB7XFxuK1xcdFxcdHRyYWNpbmdfb24oKTtcXG4rXFx0XFx0KCpwa2V5X3Rlc3RzW3Rlc3RfbnJdKSgpO1xcbitcXHRcXHR0cmFjaW5nX29mZigpO1xcbitcXHR9XFxuIFxcbiBcXHRrc2Z0X2ZpbmlzaGVkKCk7XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jXFxuaW5kZXggMjU1YjMzMmY3YTA4YjIuLmZiZWYzY2Q0NTQ0N2IxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmNcXG5AQCAtMiw5ICsyLDk5IEBAXFxuICNkZWZpbmUgX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3lzY2FsbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInBrZXktaGVscGVycy5oXFxcIlxcbiBcXG4raW50IGl0ZXJhdGlvbl9uciA9IDE7XFxuK2ludCB0ZXN0X25yO1xcbitpbnQgZHByaW50X2luX3NpZ25hbDtcXG4rXFxuKyNpZiBDT05UUk9MX1RSQUNJTkcgXFx1MDAzZSAwXFxuK3N0YXRpYyB2b2lkIGNhdF9pbnRvX2ZpbGUoY2hhciAqc3RyLCBjaGFyICpmaWxlKVxcbit7XFxuK1xcdGludCBmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRwcmludGYyKFxcXCIlcygpOiB3cml0aW5nICclcycgdG8gJyVzJ1xcXFxuXFxcIiwgX19mdW5jX18sIHN0ciwgZmlsZSk7XFxuK1xcdC8qXFxuK1xcdCAqIHRoZXNlIG5lZWQgdG8gYmUgcmF3IGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIHVuZGVyXFxuK1xcdCAqIHBrZXlfYXNzZXJ0KClcXG4rXFx0ICovXFxuK1xcdGlmIChmZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJlcnJvciBvcGVuaW5nICclcydcXFxcblxcXCIsIGZpbGUpO1xcbitcXHRcXHRwZXJyb3IoXFxcImVycm9yOiBcXFwiKTtcXG4rXFx0XFx0ZXhpdChfX0xJTkVfXyk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKTtcXG4rXFx0aWYgKHJldCAhPSBzdHJsZW4oc3RyKSkge1xcbitcXHRcXHRwZXJyb3IoXFxcIndyaXRlIHRvIGZpbGUgZmFpbGVkXFxcIik7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmlsZW5hbWU6ICclcycgc3RyOiAnJXMnXFxcXG5cXFwiLCBmaWxlLCBzdHIpO1xcbitcXHRcXHRleGl0KF9fTElORV9fKTtcXG4rXFx0fVxcbitcXHRjbG9zZShmZCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd2FybmVkX3RyYWNpbmc7XFxuK3N0YXRpYyBpbnQgdHJhY2luZ19yb290X29rKHZvaWQpXFxuK3tcXG4rXFx0aWYgKGdldGV1aWQoKSAhPSAwKSB7XFxuK1xcdFxcdGlmICghd2FybmVkX3RyYWNpbmcpXFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV0FSTklORzogbm90IHJ1biBhcyByb290LCBcXFwiXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJjYW4gbm90IGRvIHRyYWNpbmcgY29udHJvbFxcXFxuXFxcIik7XFxuK1xcdFxcdHdhcm5lZF90cmFjaW5nID0gMTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDE7XFxuK31cXG4rI2VuZGlmXFxuK1xcbit2b2lkIHRyYWNpbmdfb24odm9pZClcXG4re1xcbisjaWYgQ09OVFJPTF9UUkFDSU5HIFxcdTAwM2UgMFxcbisjZGVmaW5lIFRSQUNFRElSIFxcXCIvc3lzL2tlcm5lbC90cmFjaW5nXFxcIlxcbitcXHRjaGFyIHBpZHN0clszMl07XFxuK1xcbitcXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcHJpbnRmKHBpZHN0ciwgXFxcIiVkXFxcIiwgZ2V0cGlkKCkpO1xcbitcXHRjYXRfaW50b19maWxlKFxcXCIwXFxcIiwgVFJBQ0VESVIgXFxcIi90cmFjaW5nX29uXFxcIik7XFxuK1xcdGNhdF9pbnRvX2ZpbGUoXFxcIlxcXFxuXFxcIiwgVFJBQ0VESVIgXFxcIi90cmFjZVxcXCIpO1xcbitcXHRpZiAoMSkge1xcbitcXHRcXHRjYXRfaW50b19maWxlKFxcXCJmdW5jdGlvbl9ncmFwaFxcXCIsIFRSQUNFRElSIFxcXCIvY3VycmVudF90cmFjZXJcXFwiKTtcXG4rXFx0XFx0Y2F0X2ludG9fZmlsZShcXFwiMVxcXCIsIFRSQUNFRElSIFxcXCIvb3B0aW9ucy9mdW5jZ3JhcGgtcHJvY1xcXCIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRjYXRfaW50b19maWxlKFxcXCJub3BcXFwiLCBUUkFDRURJUiBcXFwiL2N1cnJlbnRfdHJhY2VyXFxcIik7XFxuK1xcdH1cXG4rXFx0Y2F0X2ludG9fZmlsZShwaWRzdHIsIFRSQUNFRElSIFxcXCIvc2V0X2Z0cmFjZV9waWRcXFwiKTtcXG4rXFx0Y2F0X2ludG9fZmlsZShcXFwiMVxcXCIsIFRSQUNFRElSIFxcXCIvdHJhY2luZ19vblxcXCIpO1xcbitcXHRkcHJpbnRmMShcXFwiZW5hYmxlZCB0cmFjaW5nXFxcXG5cXFwiKTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuK3ZvaWQgdHJhY2luZ19vZmYodm9pZClcXG4re1xcbisjaWYgQ09OVFJPTF9UUkFDSU5HIFxcdTAwM2UgMFxcbitcXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGNhdF9pbnRvX2ZpbGUoXFxcIjBcXFwiLCBcXFwiL3N5cy9rZXJuZWwvdHJhY2luZy90cmFjaW5nX29uXFxcIik7XFxuKyNlbmRpZlxcbit9XFxuK1xcbit2b2lkIGFib3J0X2hvb2tzKHZvaWQpXFxuK3tcXG4rXFx0ZmZsdXNoKHN0ZG91dCk7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwicnVubmluZyAlcygpLi4uXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdHRyYWNpbmdfb2ZmKCk7XFxuKyNpZmRlZiBTTEVFUF9PTl9BQk9SVFxcbitcXHRzbGVlcChTTEVFUF9PTl9BQk9SVCk7XFxuKyNlbmRpZlxcbit9XFxuK1xcbiBpbnQgc3lzX3BrZXlfYWxsb2ModW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBpbml0X3ZhbClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gc3lzY2FsbChTWVNfcGtleV9hbGxvYywgZmxhZ3MsIGluaXRfdmFsKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xcbmluZGV4IDlhNmQ5NTRlZTM3MTI2Li5hZTZlMTUzMGIzNTQ4NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXFxuQEAgLTQ5LDExICs0OSw3IEBAXFxuICNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicGtleS1oZWxwZXJzLmhcXFwiXFxuIFxcbi1pbnQgaXRlcmF0aW9uX25yID0gMTtcXG4taW50IHRlc3RfbnI7XFxuLVxcbiB1NjQgc2hhZG93X3BrZXlfcmVnO1xcbi1pbnQgZHByaW50X2luX3NpZ25hbDtcXG4gXFxuIG5vaW5saW5lIGludCByZWFkX3B0cihpbnQgKnB0cilcXG4ge1xcbkBAIC02Miw4OSArNTgsNiBAQCBub2lubGluZSBpbnQgcmVhZF9wdHIoaW50ICpwdHIpXFxuIFxcdHJldHVybiAqcHRyO1xcbiB9XFxuIFxcbi0jaWYgQ09OVFJPTF9UUkFDSU5HIFxcdTAwM2UgMFxcbi1zdGF0aWMgdm9pZCBjYXRfaW50b19maWxlKGNoYXIgKnN0ciwgY2hhciAqZmlsZSlcXG4te1xcbi1cXHRpbnQgZmQgPSBvcGVuKGZpbGUsIE9fUkRXUik7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRkcHJpbnRmMihcXFwiJXMoKTogd3JpdGluZyAnJXMnIHRvICclcydcXFxcblxcXCIsIF9fZnVuY19fLCBzdHIsIGZpbGUpO1xcbi1cXHQvKlxcbi1cXHQgKiB0aGVzZSBuZWVkIHRvIGJlIHJhdyBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCB1bmRlclxcbi1cXHQgKiBwa2V5X2Fzc2VydCgpXFxuLVxcdCAqL1xcbi1cXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZXJyb3Igb3BlbmluZyAnJXMnXFxcXG5cXFwiLCBzdHIpO1xcbi1cXHRcXHRwZXJyb3IoXFxcImVycm9yOiBcXFwiKTtcXG4tXFx0XFx0ZXhpdChfX0xJTkVfXyk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldCA9IHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKTtcXG4tXFx0aWYgKHJldCAhPSBzdHJsZW4oc3RyKSkge1xcbi1cXHRcXHRwZXJyb3IoXFxcIndyaXRlIHRvIGZpbGUgZmFpbGVkXFxcIik7XFxuLVxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmlsZW5hbWU6ICclcycgc3RyOiAnJXMnXFxcXG5cXFwiLCBmaWxlLCBzdHIpO1xcbi1cXHRcXHRleGl0KF9fTElORV9fKTtcXG4tXFx0fVxcbi1cXHRjbG9zZShmZCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgd2FybmVkX3RyYWNpbmc7XFxuLXN0YXRpYyBpbnQgdHJhY2luZ19yb290X29rKHZvaWQpXFxuLXtcXG4tXFx0aWYgKGdldGV1aWQoKSAhPSAwKSB7XFxuLVxcdFxcdGlmICghd2FybmVkX3RyYWNpbmcpXFxuLVxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV0FSTklORzogbm90IHJ1biBhcyByb290LCBcXFwiXFxuLVxcdFxcdFxcdFxcdFxcdFxcXCJjYW4gbm90IGRvIHRyYWNpbmcgY29udHJvbFxcXFxuXFxcIik7XFxuLVxcdFxcdHdhcm5lZF90cmFjaW5nID0gMTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIDE7XFxuLX1cXG4tI2VuZGlmXFxuLVxcbi1zdGF0aWMgdm9pZCB0cmFjaW5nX29uKHZvaWQpXFxuLXtcXG4tI2lmIENPTlRST0xfVFJBQ0lORyBcXHUwMDNlIDBcXG4tI2RlZmluZSBUUkFDRURJUiBcXFwiL3N5cy9rZXJuZWwvdHJhY2luZ1xcXCJcXG4tXFx0Y2hhciBwaWRzdHJbMzJdO1xcbi1cXG4tXFx0aWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0c3ByaW50ZihwaWRzdHIsIFxcXCIlZFxcXCIsIGdldHBpZCgpKTtcXG4tXFx0Y2F0X2ludG9fZmlsZShcXFwiMFxcXCIsIFRSQUNFRElSIFxcXCIvdHJhY2luZ19vblxcXCIpO1xcbi1cXHRjYXRfaW50b19maWxlKFxcXCJcXFxcblxcXCIsIFRSQUNFRElSIFxcXCIvdHJhY2VcXFwiKTtcXG4tXFx0aWYgKDEpIHtcXG4tXFx0XFx0Y2F0X2ludG9fZmlsZShcXFwiZnVuY3Rpb25fZ3JhcGhcXFwiLCBUUkFDRURJUiBcXFwiL2N1cnJlbnRfdHJhY2VyXFxcIik7XFxuLVxcdFxcdGNhdF9pbnRvX2ZpbGUoXFxcIjFcXFwiLCBUUkFDRURJUiBcXFwiL29wdGlvbnMvZnVuY2dyYXBoLXByb2NcXFwiKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0Y2F0X2ludG9fZmlsZShcXFwibm9wXFxcIiwgVFJBQ0VESVIgXFxcIi9jdXJyZW50X3RyYWNlclxcXCIpO1xcbi1cXHR9XFxuLVxcdGNhdF9pbnRvX2ZpbGUocGlkc3RyLCBUUkFDRURJUiBcXFwiL3NldF9mdHJhY2VfcGlkXFxcIik7XFxuLVxcdGNhdF9pbnRvX2ZpbGUoXFxcIjFcXFwiLCBUUkFDRURJUiBcXFwiL3RyYWNpbmdfb25cXFwiKTtcXG4tXFx0ZHByaW50ZjEoXFxcImVuYWJsZWQgdHJhY2luZ1xcXFxuXFxcIik7XFxuLSNlbmRpZlxcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCB0cmFjaW5nX29mZih2b2lkKVxcbi17XFxuLSNpZiBDT05UUk9MX1RSQUNJTkcgXFx1MDAzZSAwXFxuLVxcdGlmICghdHJhY2luZ19yb290X29rKCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFx0Y2F0X2ludG9fZmlsZShcXFwiMFxcXCIsIFxcXCIvc3lzL2tlcm5lbC90cmFjaW5nL3RyYWNpbmdfb25cXFwiKTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuLXZvaWQgYWJvcnRfaG9va3Modm9pZClcXG4te1xcbi1cXHRmZmx1c2goc3Rkb3V0KTtcXG4tXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJydW5uaW5nICVzKCkuLi5cXFxcblxcXCIsIF9fZnVuY19fKTtcXG4tXFx0dHJhY2luZ19vZmYoKTtcXG4tI2lmZGVmIFNMRUVQX09OX0FCT1JUXFxuLVxcdHNsZWVwKFNMRUVQX09OX0FCT1JUKTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuIC8qXFxuICAqIFRoaXMgYXR0ZW1wdHMgdG8gaGF2ZSByb3VnaGx5IGEgcGFnZSBvZiBpbnN0cnVjdGlvbnMgZm9sbG93ZWQgYnkgYSBmZXdcXG4gICogaW5zdHJ1Y3Rpb25zIHRoYXQgZG8gYSB3cml0ZSwgYW5kIGFub3RoZXIgcGFnZSBvZiBpbnN0cnVjdGlvbnMuICBUaGF0XFxuQEAgLTY2OSw3ICs1ODIsNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXlfd2l0aF9tcHJvdGVjdChsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSlcXG4gXFx0XFx0XFx0c2l6ZSwgcHJvdCwgcGtleSk7XFxuIFxcdHBrZXlfYXNzZXJ0KHBrZXkgXFx1MDAzYyBOUl9QS0VZUyk7XFxuIFxcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgcHJvdCwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xcbi1cXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XFxuK1xcdHBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTtcXG4gXFx0cmV0ID0gbXByb3RlY3RfcGtleSgodm9pZCAqKXB0ciwgUEFHRV9TSVpFLCBwcm90LCBwa2V5KTtcXG4gXFx0cGtleV9hc3NlcnQoIXJldCk7XFxuIFxcdHJlY29yZF9wa2V5X21hbGxvYyhwdHIsIHNpemUsIHByb3QpO1xcbkBAIC02OTIsNyArNjA1LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X2Fub25faHVnZShsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSlcXG4gXFx0ICovXFxuIFxcdHNpemUgPSBBTElHTl9VUChzaXplLCBIUEFHRV9TSVpFICogMik7XFxuIFxcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9OT05FLCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7XFxuLVxcdHBrZXlfYXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTtcXG4rXFx0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xcbiBcXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcXG4gXFx0bXByb3RlY3RfcGtleShwdHIsIHNpemUsIHByb3QsIHBrZXkpO1xcbiBcXG5AQCAtNzUwLDcgKzY2Myw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV9odWdldGxiKGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KVxcbiBcXHRzaXplID0gQUxJR05fVVAoc2l6ZSwgSFBBR0VfU0laRSAqIDIpO1xcbiBcXHRwa2V5X2Fzc2VydChwa2V5IFxcdTAwM2MgTlJfUEtFWVMpO1xcbiBcXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgZmxhZ3MsIC0xLCAwKTtcXG4tXFx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xcbitcXHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XFxuIFxcdG1wcm90ZWN0X3BrZXkocHRyLCBzaXplLCBwcm90LCBwa2V5KTtcXG4gXFxuIFxcdHJlY29yZF9wa2V5X21hbGxvYyhwdHIsIHNpemUsIHByb3QpO1xcbkBAIC03NzksNyArNjkyLDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5KGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KVxcbiBcXHRcXHRwa2V5X2Fzc2VydChtYWxsb2NfdHlwZSBcXHUwMDNjIG5yX21hbGxvY190eXBlcyk7XFxuIFxcbiBcXHRcXHRyZXQgPSBwa2V5X21hbGxvY1ttYWxsb2NfdHlwZV0oc2l6ZSwgcHJvdCwgcGtleSk7XFxuLVxcdFxcdHBrZXlfYXNzZXJ0KHJldCAhPSAodm9pZCAqKS0xKTtcXG4rXFx0XFx0cGtleV9hc3NlcnQocmV0ICE9IE1BUF9GQUlMRUQpO1xcbiBcXG4gXFx0XFx0bWFsbG9jX3R5cGUrKztcXG4gXFx0XFx0aWYgKG1hbGxvY190eXBlIFxcdTAwM2U9IG5yX21hbGxvY190eXBlcylcXG5AQCAtMTE5Nyw2ICsxMTEwLDcgQEAgc3RhdGljIHZvaWQgYXJjaF9mb3JjZV9wa2V5X3JlZ19pbml0KHZvaWQpXFxuIFxcdCAqIGRvaW5nIHRoZSBYU0FWRSBzaXplIGVudW1lcmF0aW9uIGRhbmNlLlxcbiBcXHQgKi9cXG4gXFx0YnVmID0gbW1hcChOVUxMLCAxKk1CLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xcbitcXHRwa2V5X2Fzc2VydChidWYgIT0gTUFQX0ZBSUxFRCk7XFxuIFxcbiBcXHQvKiBUaGVzZSBfX2J1aWx0aW5zIHJlcXVpcmUgY29tcGlsaW5nIHdpdGggLW14c2F2ZSAqL1xcbiBcXG5AQCAtMTc2Myw3ICsxNjc3LDggQEAgaW50IG1haW4odm9pZClcXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcInJ1bm5pbmcgUEtFWSB0ZXN0cyBmb3IgdW5zdXBwb3J0ZWQgQ1BVL09TXFxcXG5cXFwiKTtcXG4gXFxuIFxcdFxcdHB0ciAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xcbi1cXHRcXHRhc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xcbitcXHRcXHRpZiAocHRyID09IE1BUF9GQUlMRUQpXFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibW1hcFxcXCIpO1xcbiBcXHRcXHR0ZXN0X21wcm90ZWN0X3BrZXlfb25fdW5zdXBwb3J0ZWRfY3B1KHB0ciwgMSk7XFxuIFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcXFwicGtleSBvbiB1bnN1cHBvcnRlZCBDUFUvT1NcXFxcblxcXCIpO1xcbiBcXHRcXHRrc2Z0X2ZpbmlzaGVkKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDA4OjUzOjAyLjg2ODE3NzY1M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA2NjYxMTY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MzZjMTc0N2ZlZDY0ZGEyMDYzYjU5NDZiNjZiMWRiY2U1ZWY5YjU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgNiAwODo1MzowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhcbmluZGV4IDJjMzc3ZjRlOWRmMWQzLi40NmE4YTE4NzhkYzFmZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaFxuQEAgLTY4LDcgKzY4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHNpZ3NhZmVfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKVxuICNkZWZpbmUgZHByaW50ZjMoYXJncy4uLikgZHByaW50Zl9sZXZlbCgzLCBhcmdzKVxuICNkZWZpbmUgZHByaW50ZjQoYXJncy4uLikgZHByaW50Zl9sZXZlbCg0LCBhcmdzKVxuIFxuLWV4dGVybiB2b2lkIGFib3J0X2hvb2tzKHZvaWQpO1xuK3ZvaWQgdHJhY2luZ19vbih2b2lkKTtcbit2b2lkIHRyYWNpbmdfb2ZmKHZvaWQpO1xuK3ZvaWQgYWJvcnRfaG9va3Modm9pZCk7XG4gI2RlZmluZSBwa2V5X2Fzc2VydChjb25kaXRpb24pIGRvIHtcdFx0XFxcbiBcdGlmICghKGNvbmRpdGlvbikpIHtcdFx0XHRcXFxuIFx0XHRkcHJpbnRmMChcIiMgYXNzZXJ0KCkgYXQgJXM6OiVkIHRlc3RfbnI6ICVkIGl0ZXJhdGlvbjogJWRcXG5cIiwgXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oXG5pbmRleCAxN2JmMmQxYjAxOTJlMC4uMmNlODU1ODBiNDA0ODcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhcbkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICptYWxsb2NfcGtleV93aXRoX21wcm90ZWN0X3N1YnBhZ2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBcbiBcdFx0XHRzaXplLCBwcm90LCBwa2V5KTtcbiBcdHBrZXlfYXNzZXJ0KHBrZXkgXHUwMDNjIE5SX1BLRVlTKTtcbiBcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgcHJvdCwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuK1x0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xuIFxuIFx0cmV0ID0gc3lzY2FsbChfX05SX3N1YnBhZ2VfcHJvdCwgcHRyLCBzaXplLCBOVUxMKTtcbiBcdGlmIChyZXQpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jXG5pbmRleCAzMDJmZWY1NDA0OWM4Ny4uYzIxOGQwNTEwYTJhNDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmNcbkBAIC0xOSw3ICsxOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbkBAIC0yMDcsMjIgKzIwNiwyNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX3BrZXkwX2Rpc2FibGVkKHZvaWQpXG4gXHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhO1xuIFx0cHRocmVhZF9hdHRyX3QgYXR0cjtcbiBcdHB0aHJlYWRfdCB0aHI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPO1xuIFxuIFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyO1xuIFx0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4tXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCJzaWdhY3Rpb25cIik7XG4tXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbitcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCk7XG4rXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdHB0aHJlYWRfYXR0cl9pbml0KFx1MDAyNmF0dHIpO1xuIFx0cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3Zfd2l0aF9wa2V5MF9kaXNhYmxlZCwgTlVMTCk7XG4rXHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHIsIFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3dpdGhfcGtleTBfZGlzYWJsZWQsIE5VTEwpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRlcnJubyA9IHJldDtcbitcdFx0cGtleV9hc3NlcnQoMCk7XG4rXHR9XG4gXG4gXHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuIFx0d2hpbGUgKHNpZ2luZm8uc2lfc2lnbm8gPT0gMClcbkBAIC0yNDcsMjIgKzI0OSwyNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl9jYW5ub3RfYWNjZXNzX3N0YWNrKHZvaWQpXG4gXHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhO1xuIFx0cHRocmVhZF9hdHRyX3QgYXR0cjtcbiBcdHB0aHJlYWRfdCB0aHI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPO1xuIFxuIFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyO1xuIFx0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4tXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCJzaWdhY3Rpb25cIik7XG4tXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbitcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCk7XG4rXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdHB0aHJlYWRfYXR0cl9pbml0KFx1MDAyNmF0dHIpO1xuIFx0cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3ZfcGt1ZXJyX3N0YWNrLCBOVUxMKTtcbitcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3ZfcGt1ZXJyX3N0YWNrLCBOVUxMKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZXJybm8gPSByZXQ7XG4rXHRcdHBrZXlfYXNzZXJ0KDApO1xuK1x0fVxuIFxuIFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNm11dGV4KTtcbiBcdHdoaWxlIChzaWdpbmZvLnNpX3NpZ25vID09IDApXG5AQCAtMjg1LDI0ICsyOTAsMjIgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZClcbiBcdHN0YXRpYyBzdGFja190IHNpZ3N0YWNrO1xuIFx0dm9pZCAqc3RhY2s7XG4gXHRpbnQgcGtleTtcbi1cdGludCBwYXJlbnRfcGlkID0gMDtcbiBcdGludCBjaGlsZF9waWQgPSAwO1xuIFx0dTY0IHBrZXlfcmVnO1xuK1x0bG9uZyByZXQ7XG4gXG4gXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk8gfCBTQV9PTlNUQUNLO1xuIFxuIFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyO1xuIFxuIFx0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4tXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCJzaWdhY3Rpb25cIik7XG4tXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbitcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCk7XG4rXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRzdGFjayA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiBcdFx0ICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcbiBcbi1cdGFzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcbitcdHBrZXlfYXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xuIFxuIFx0LyogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBNUEsgMSAqL1xuIFx0cGtleV9yZWcgPSBwa2V5X3JlZ19yZXN0cmljdGl2ZV9kZWZhdWx0KCk7XG5AQCAtMzE3LDMzICszMjAsNDEgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZClcbiBcdC8qIFNldCB1cCBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrIHRoYXQgd2lsbCB1c2UgdGhlIGRlZmF1bHQgTVBLICovXG4gXHRzaWdzdGFjay5zc19zcCA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiBcdFx0XHQgICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcbitcdHBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpO1xuIFx0c2lnc3RhY2suc3NfZmxhZ3MgPSAwO1xuIFx0c2lnc3RhY2suc3Nfc2l6ZSA9IFNUQUNLX1NJWkU7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdC8qIFVzZSBjbG9uZSB0byBhdm9pZCBuZXdlciBnbGliY3MgdXNpbmcgcnNlcSBvbiBuZXcgdGhyZWFkcyAqL1xuLVx0bG9uZyByZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbi1cdFx0XHQgICAgIENMT05FX1NJR0hBTkQgfCBDTE9ORV9USFJFQUQgfCBDTE9ORV9TWVNWU0VNIHxcbi1cdFx0XHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XG4tXHRcdFx0ICAgICBDTE9ORV9ERVRBQ0hFRCxcbi1cdFx0XHQgICAgIHN0YWNrICsgU1RBQ0tfU0laRSxcbi1cdFx0XHQgICAgIFx1MDAyNnBhcmVudF9waWQsXG4tXHRcdFx0ICAgICBcdTAwMjZjaGlsZF9waWQpO1xuK1x0cmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XG4rXHRcdFx0Q0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxuK1x0XHRcdENMT05FX0RFVEFDSEVELFxuK1x0XHRcdHN0YWNrICsgU1RBQ0tfU0laRSxcbitcdFx0XHROVUxMLFxuK1x0XHRcdE5VTEwpO1xuIFxuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRlcnJubyA9IC1yZXQ7XG4tXHRcdHBlcnJvcihcImNsb25lXCIpO1xuK1x0XHRwa2V5X2Fzc2VydCgwKTtcbiBcdH0gZWxzZSBpZiAocmV0ID09IDApIHtcbiBcdFx0dGhyZWFkX3NlZ3ZfbWFwZXJyX3B0cihcdTAwMjZzaWdzdGFjayk7XG4gXHRcdHN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTtcbiBcdH1cbiBcbitcdGNoaWxkX3BpZCA9IHJldDtcbitcbiBcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZtdXRleCk7XG4gXHR3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKVxuIFx0XHRwdGhyZWFkX2NvbmRfd2FpdChcdTAwMjZjb25kLCBcdTAwMjZtdXRleCk7XG4gXHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZtdXRleCk7XG4gXG4rXHQvKiBXYWl0IGZvciBjaGlsZCB0byBleGl0IGJlZm9yZSByZXR1cm5pbmcgKi9cbitcdGRvIHtcbitcdFx0c2NoZWRfeWllbGQoKTtcbitcdFx0cmV0ID0gc3lzY2FsbF9yYXcoU1lTX3RraWxsLCBjaGlsZF9waWQsIDAsIDAsIDAsIDAsIDApO1xuK1x0fSB3aGlsZSAocmV0ICE9IC1FU1JDSCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FSU5WQUwpO1xuK1xuIFx0a3NmdF90ZXN0X3Jlc3VsdChzaWdpbmZvLnNpX3NpZ25vID09IFNJR1NFR1YgXHUwMDI2XHUwMDI2XG4gXHRcdFx0IHNpZ2luZm8uc2lfY29kZSA9PSBTRUdWX01BUEVSUiBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgc2lnaW5mby5zaV9hZGRyID09IE5VTEwsXG5AQCAtMzU4LDYgKzM2OSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9wcmVzZXJ2ZWRfYWZ0ZXJfc2lndXNyMSh2b2lkKVxuIHtcbiBcdHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4gXHR1NjQgcGtleV9yZWc7XG4rXHRpbnQgcmV0O1xuIFxuIFx0LyogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBhbiBhcmJpdHJhcnkgc2V0IG9mIGtleXMgKi9cbiBcdHBrZXlfcmVnID0gcGtleV9yZWdfcmVzdHJpY3RpdmVfZGVmYXVsdCgpO1xuQEAgLTM2OSwxMCArMzgxLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpXG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX2hhbmRsZXI7XG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcInNpZ2FjdGlvblwiKTtcbi1cdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuLVx0fVxuK1x0cmV0ID0gc2lnYWN0aW9uKFNJR1VTUjEsIFx1MDAyNnNhLCBOVUxMKTtcbitcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcbiBcbiBcdG1lbXNldChcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xuIFxuQEAgLTQ0MSw5ICs0NTEsMTUgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxuIFx0c3RhdGljIHN0YWNrX3Qgc2lnc3RhY2s7XG4gXHR2b2lkICpzdGFjaztcbiBcdGludCBwa2V5O1xuLVx0aW50IHBhcmVudF9waWQgPSAwO1xuIFx0aW50IGNoaWxkX3BpZCA9IDA7XG4gXHR1NjQgcGtleV9yZWc7XG4rXHRsb25nIHJldDtcbitcbitcdC8qXG4rXHQgKiBTSUdTRUdWIGhhbmRsZXIgaXMgcmVzZXQgdG8gU0lHX0RGTCBiZWxvdzsgdHVybiB0cmFjaW5nIG9mZiBmaXJzdFxuK1x0ICogc28gYSBjcmFzaCBkb2VzIG5vdCBsZWF2ZSBmdHJhY2UgZW5hYmxlZC5cbitcdCAqL1xuK1x0dHJhY2luZ19vZmYoKTtcbiBcbiBcdHNhLnNhX2hhbmRsZXIgPSBTSUdfREZMO1xuIFx0c2Euc2FfZmxhZ3MgPSAwO1xuQEAgLTQ1MywyNCArNDY5LDIwIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9zaWdyZXR1cm4odm9pZClcbiBcdCAqIEZvciB0aGlzIHRlc3RjYXNlLCB3ZSBkbyBub3Qgd2FudCB0byBoYW5kbGUgU0lHU0VHVi4gUmVzZXQgaGFuZGxlclxuIFx0ICogdG8gZGVmYXVsdCBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjYW4gY3Jhc2ggaWYgaXQgcmVjZWl2ZXMgU0lHU0VHVi5cbiBcdCAqL1xuLVx0aWYgKHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcbi1cdFx0cGVycm9yKFwic2lnYWN0aW9uXCIpO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4rXHRyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpO1xuK1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfT05TVEFDSztcbiBcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3VzcjJfaGFuZGxlcjtcbiBcdHNpZ2VtcHR5c2V0KFx1MDAyNnNhLnNhX21hc2spO1xuIFxuLVx0aWYgKHNpZ2FjdGlvbihTSUdVU1IyLCBcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcbi1cdFx0cGVycm9yKFwic2lnYWN0aW9uXCIpO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4rXHRyZXQgPSBzaWdhY3Rpb24oU0lHVVNSMiwgXHUwMDI2c2EsIE5VTEwpO1xuK1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0c3RhY2sgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdCAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4gXG4tXHRhc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XG4rXHRwa2V5X2Fzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdC8qXG4gXHQgKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIE1QSyAyLiBUaGUgY2hpbGQgdGhyZWFkICh0byBiZSBjcmVhdGVkXG5AQCAtNDkwLDIxICs1MDIsMjEgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxuIFx0LyogU2V0IHVwIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgdGhhdCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBNUEsgKi9cbiBcdHNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHRcdCAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuK1x0cGtleV9hc3NlcnQoc2lnc3RhY2suc3Nfc3AgIT0gTUFQX0ZBSUxFRCk7XG4gXHRzaWdzdGFjay5zc19mbGFncyA9IDA7XG4gXHRzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTtcbiBcbiBcdC8qIFVzZSBjbG9uZSB0byBhdm9pZCBuZXdlciBnbGliY3MgdXNpbmcgcnNlcSBvbiBuZXcgdGhyZWFkcyAqL1xuLVx0bG9uZyByZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbi1cdFx0XHQgICAgIENMT05FX1NJR0hBTkQgfCBDTE9ORV9USFJFQUQgfCBDTE9ORV9TWVNWU0VNIHxcbi1cdFx0XHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XG4tXHRcdFx0ICAgICBDTE9ORV9ERVRBQ0hFRCxcbi1cdFx0XHQgICAgIHN0YWNrICsgU1RBQ0tfU0laRSxcbi1cdFx0XHQgICAgIFx1MDAyNnBhcmVudF9waWQsXG4tXHRcdFx0ICAgICBcdTAwMjZjaGlsZF9waWQpO1xuK1x0cmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XG4rXHRcdFx0Q0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxuK1x0XHRcdENMT05FX0RFVEFDSEVELFxuK1x0XHRcdHN0YWNrICsgU1RBQ0tfU0laRSxcbitcdFx0XHROVUxMLFxuK1x0XHRcdE5VTEwpO1xuIFxuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRlcnJubyA9IC1yZXQ7XG4tXHRcdHBlcnJvcihcImNsb25lXCIpO1xuK1x0XHRwa2V5X2Fzc2VydCgwKTtcbiBcdH0gIGVsc2UgaWYgKHJldCA9PSAwKSB7XG4gXHRcdHRocmVhZF9zaWd1c3IyX3NlbGYoXHUwMDI2c2lnc3RhY2spO1xuIFx0XHRzeXNjYWxsX3JhdyhTWVNfZXhpdCwgMCwgMCwgMCwgMCwgMCwgMCk7XG5AQCAtNTMwLDE2ICs1NDIsMTcgQEAgc3RhdGljIHZvaWQgKCpwa2V5X3Rlc3RzW10pKHZvaWQpID0ge1xuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuLVx0aW50IGk7XG4tXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFx0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHBrZXlfdGVzdHMpKTtcbiBcbiBcdGlmICghaXNfcGtleXNfc3VwcG9ydGVkKCkpXG4gXHRcdGtzZnRfZXhpdF9za2lwKFwicGtleXMgbm90IHN1cHBvcnRlZFxcblwiKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocGtleV90ZXN0cyk7IGkrKylcbi1cdFx0KCpwa2V5X3Rlc3RzW2ldKSgpO1xuK1x0Zm9yICh0ZXN0X25yID0gMDsgdGVzdF9uciBcdTAwM2MgQVJSQVlfU0laRShwa2V5X3Rlc3RzKTsgdGVzdF9ucisrKSB7XG4rXHRcdHRyYWNpbmdfb24oKTtcbitcdFx0KCpwa2V5X3Rlc3RzW3Rlc3RfbnJdKSgpO1xuK1x0XHR0cmFjaW5nX29mZigpO1xuK1x0fVxuIFxuIFx0a3NmdF9maW5pc2hlZCgpO1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuY1xuaW5kZXggMjU1YjMzMmY3YTA4YjIuLmZiZWYzY2Q0NTQ0N2IxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jXG5AQCAtMiw5ICsyLDk5IEBAXG4gI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX19cbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJwa2V5LWhlbHBlcnMuaFwiXG4gXG4raW50IGl0ZXJhdGlvbl9uciA9IDE7XG4raW50IHRlc3RfbnI7XG4raW50IGRwcmludF9pbl9zaWduYWw7XG4rXG4rI2lmIENPTlRST0xfVFJBQ0lORyBcdTAwM2UgMFxuK3N0YXRpYyB2b2lkIGNhdF9pbnRvX2ZpbGUoY2hhciAqc3RyLCBjaGFyICpmaWxlKVxuK3tcbitcdGludCBmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcbitcdGludCByZXQ7XG4rXG4rXHRkcHJpbnRmMihcIiVzKCk6IHdyaXRpbmcgJyVzJyB0byAnJXMnXFxuXCIsIF9fZnVuY19fLCBzdHIsIGZpbGUpO1xuK1x0LypcbitcdCAqIHRoZXNlIG5lZWQgdG8gYmUgcmF3IGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIHVuZGVyXG4rXHQgKiBwa2V5X2Fzc2VydCgpXG4rXHQgKi9cbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJlcnJvciBvcGVuaW5nICclcydcXG5cIiwgZmlsZSk7XG4rXHRcdHBlcnJvcihcImVycm9yOiBcIik7XG4rXHRcdGV4aXQoX19MSU5FX18pO1xuK1x0fVxuK1xuK1x0cmV0ID0gd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpO1xuK1x0aWYgKHJldCAhPSBzdHJsZW4oc3RyKSkge1xuK1x0XHRwZXJyb3IoXCJ3cml0ZSB0byBmaWxlIGZhaWxlZFwiKTtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmlsZW5hbWU6ICclcycgc3RyOiAnJXMnXFxuXCIsIGZpbGUsIHN0cik7XG4rXHRcdGV4aXQoX19MSU5FX18pO1xuK1x0fVxuK1x0Y2xvc2UoZmQpO1xuK31cbitcbitzdGF0aWMgaW50IHdhcm5lZF90cmFjaW5nO1xuK3N0YXRpYyBpbnQgdHJhY2luZ19yb290X29rKHZvaWQpXG4re1xuK1x0aWYgKGdldGV1aWQoKSAhPSAwKSB7XG4rXHRcdGlmICghd2FybmVkX3RyYWNpbmcpXG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiV0FSTklORzogbm90IHJ1biBhcyByb290LCBcIlxuK1x0XHRcdFx0XHRcImNhbiBub3QgZG8gdHJhY2luZyBjb250cm9sXFxuXCIpO1xuK1x0XHR3YXJuZWRfdHJhY2luZyA9IDE7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0cmV0dXJuIDE7XG4rfVxuKyNlbmRpZlxuK1xuK3ZvaWQgdHJhY2luZ19vbih2b2lkKVxuK3tcbisjaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4rI2RlZmluZSBUUkFDRURJUiBcIi9zeXMva2VybmVsL3RyYWNpbmdcIlxuK1x0Y2hhciBwaWRzdHJbMzJdO1xuK1xuK1x0aWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3ByaW50ZihwaWRzdHIsIFwiJWRcIiwgZ2V0cGlkKCkpO1xuK1x0Y2F0X2ludG9fZmlsZShcIjBcIiwgVFJBQ0VESVIgXCIvdHJhY2luZ19vblwiKTtcbitcdGNhdF9pbnRvX2ZpbGUoXCJcXG5cIiwgVFJBQ0VESVIgXCIvdHJhY2VcIik7XG4rXHRpZiAoMSkge1xuK1x0XHRjYXRfaW50b19maWxlKFwiZnVuY3Rpb25fZ3JhcGhcIiwgVFJBQ0VESVIgXCIvY3VycmVudF90cmFjZXJcIik7XG4rXHRcdGNhdF9pbnRvX2ZpbGUoXCIxXCIsIFRSQUNFRElSIFwiL29wdGlvbnMvZnVuY2dyYXBoLXByb2NcIik7XG4rXHR9IGVsc2Uge1xuK1x0XHRjYXRfaW50b19maWxlKFwibm9wXCIsIFRSQUNFRElSIFwiL2N1cnJlbnRfdHJhY2VyXCIpO1xuK1x0fVxuK1x0Y2F0X2ludG9fZmlsZShwaWRzdHIsIFRSQUNFRElSIFwiL3NldF9mdHJhY2VfcGlkXCIpO1xuK1x0Y2F0X2ludG9fZmlsZShcIjFcIiwgVFJBQ0VESVIgXCIvdHJhY2luZ19vblwiKTtcbitcdGRwcmludGYxKFwiZW5hYmxlZCB0cmFjaW5nXFxuXCIpO1xuKyNlbmRpZlxuK31cbitcbit2b2lkIHRyYWNpbmdfb2ZmKHZvaWQpXG4re1xuKyNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbitcdGlmICghdHJhY2luZ19yb290X29rKCkpXG4rXHRcdHJldHVybjtcbitcdGNhdF9pbnRvX2ZpbGUoXCIwXCIsIFwiL3N5cy9rZXJuZWwvdHJhY2luZy90cmFjaW5nX29uXCIpO1xuKyNlbmRpZlxuK31cbitcbit2b2lkIGFib3J0X2hvb2tzKHZvaWQpXG4re1xuK1x0ZmZsdXNoKHN0ZG91dCk7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCJydW5uaW5nICVzKCkuLi5cXG5cIiwgX19mdW5jX18pO1xuK1x0dHJhY2luZ19vZmYoKTtcbisjaWZkZWYgU0xFRVBfT05fQUJPUlRcbitcdHNsZWVwKFNMRUVQX09OX0FCT1JUKTtcbisjZW5kaWZcbit9XG4rXG4gaW50IHN5c19wa2V5X2FsbG9jKHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgaW5pdF92YWwpXG4ge1xuIFx0aW50IHJldCA9IHN5c2NhbGwoU1lTX3BrZXlfYWxsb2MsIGZsYWdzLCBpbml0X3ZhbCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuaW5kZXggOWE2ZDk1NGVlMzcxMjYuLmFlNmUxNTMwYjM1NDg0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5AQCAtNDksMTEgKzQ5LDcgQEBcbiAjaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuICNpbmNsdWRlIFwicGtleS1oZWxwZXJzLmhcIlxuIFxuLWludCBpdGVyYXRpb25fbnIgPSAxO1xuLWludCB0ZXN0X25yO1xuLVxuIHU2NCBzaGFkb3dfcGtleV9yZWc7XG4taW50IGRwcmludF9pbl9zaWduYWw7XG4gXG4gbm9pbmxpbmUgaW50IHJlYWRfcHRyKGludCAqcHRyKVxuIHtcbkBAIC02Miw4OSArNTgsNiBAQCBub2lubGluZSBpbnQgcmVhZF9wdHIoaW50ICpwdHIpXG4gXHRyZXR1cm4gKnB0cjtcbiB9XG4gXG4tI2lmIENPTlRST0xfVFJBQ0lORyBcdTAwM2UgMFxuLXN0YXRpYyB2b2lkIGNhdF9pbnRvX2ZpbGUoY2hhciAqc3RyLCBjaGFyICpmaWxlKVxuLXtcbi1cdGludCBmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcbi1cdGludCByZXQ7XG4tXG4tXHRkcHJpbnRmMihcIiVzKCk6IHdyaXRpbmcgJyVzJyB0byAnJXMnXFxuXCIsIF9fZnVuY19fLCBzdHIsIGZpbGUpO1xuLVx0Lypcbi1cdCAqIHRoZXNlIG5lZWQgdG8gYmUgcmF3IGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIHVuZGVyXG4tXHQgKiBwa2V5X2Fzc2VydCgpXG4tXHQgKi9cbi1cdGlmIChmZCBcdTAwM2MgMCkge1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCJlcnJvciBvcGVuaW5nICclcydcXG5cIiwgc3RyKTtcbi1cdFx0cGVycm9yKFwiZXJyb3I6IFwiKTtcbi1cdFx0ZXhpdChfX0xJTkVfXyk7XG4tXHR9XG4tXG4tXHRyZXQgPSB3cml0ZShmZCwgc3RyLCBzdHJsZW4oc3RyKSk7XG4tXHRpZiAocmV0ICE9IHN0cmxlbihzdHIpKSB7XG4tXHRcdHBlcnJvcihcIndyaXRlIHRvIGZpbGUgZmFpbGVkXCIpO1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCJmaWxlbmFtZTogJyVzJyBzdHI6ICclcydcXG5cIiwgZmlsZSwgc3RyKTtcbi1cdFx0ZXhpdChfX0xJTkVfXyk7XG4tXHR9XG4tXHRjbG9zZShmZCk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgd2FybmVkX3RyYWNpbmc7XG4tc3RhdGljIGludCB0cmFjaW5nX3Jvb3Rfb2sodm9pZClcbi17XG4tXHRpZiAoZ2V0ZXVpZCgpICE9IDApIHtcbi1cdFx0aWYgKCF3YXJuZWRfdHJhY2luZylcbi1cdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJXQVJOSU5HOiBub3QgcnVuIGFzIHJvb3QsIFwiXG4tXHRcdFx0XHRcdFwiY2FuIG5vdCBkbyB0cmFjaW5nIGNvbnRyb2xcXG5cIik7XG4tXHRcdHdhcm5lZF90cmFjaW5nID0gMTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXHRyZXR1cm4gMTtcbi19XG4tI2VuZGlmXG4tXG4tc3RhdGljIHZvaWQgdHJhY2luZ19vbih2b2lkKVxuLXtcbi0jaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4tI2RlZmluZSBUUkFDRURJUiBcIi9zeXMva2VybmVsL3RyYWNpbmdcIlxuLVx0Y2hhciBwaWRzdHJbMzJdO1xuLVxuLVx0aWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c3ByaW50ZihwaWRzdHIsIFwiJWRcIiwgZ2V0cGlkKCkpO1xuLVx0Y2F0X2ludG9fZmlsZShcIjBcIiwgVFJBQ0VESVIgXCIvdHJhY2luZ19vblwiKTtcbi1cdGNhdF9pbnRvX2ZpbGUoXCJcXG5cIiwgVFJBQ0VESVIgXCIvdHJhY2VcIik7XG4tXHRpZiAoMSkge1xuLVx0XHRjYXRfaW50b19maWxlKFwiZnVuY3Rpb25fZ3JhcGhcIiwgVFJBQ0VESVIgXCIvY3VycmVudF90cmFjZXJcIik7XG4tXHRcdGNhdF9pbnRvX2ZpbGUoXCIxXCIsIFRSQUNFRElSIFwiL29wdGlvbnMvZnVuY2dyYXBoLXByb2NcIik7XG4tXHR9IGVsc2Uge1xuLVx0XHRjYXRfaW50b19maWxlKFwibm9wXCIsIFRSQUNFRElSIFwiL2N1cnJlbnRfdHJhY2VyXCIpO1xuLVx0fVxuLVx0Y2F0X2ludG9fZmlsZShwaWRzdHIsIFRSQUNFRElSIFwiL3NldF9mdHJhY2VfcGlkXCIpO1xuLVx0Y2F0X2ludG9fZmlsZShcIjFcIiwgVFJBQ0VESVIgXCIvdHJhY2luZ19vblwiKTtcbi1cdGRwcmludGYxKFwiZW5hYmxlZCB0cmFjaW5nXFxuXCIpO1xuLSNlbmRpZlxuLX1cbi1cbi1zdGF0aWMgdm9pZCB0cmFjaW5nX29mZih2b2lkKVxuLXtcbi0jaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4tXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxuLVx0XHRyZXR1cm47XG4tXHRjYXRfaW50b19maWxlKFwiMFwiLCBcIi9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2luZ19vblwiKTtcbi0jZW5kaWZcbi19XG4tXG4tdm9pZCBhYm9ydF9ob29rcyh2b2lkKVxuLXtcbi1cdGZmbHVzaChzdGRvdXQpO1xuLVx0ZnByaW50ZihzdGRlcnIsIFwicnVubmluZyAlcygpLi4uXFxuXCIsIF9fZnVuY19fKTtcbi1cdHRyYWNpbmdfb2ZmKCk7XG4tI2lmZGVmIFNMRUVQX09OX0FCT1JUXG4tXHRzbGVlcChTTEVFUF9PTl9BQk9SVCk7XG4tI2VuZGlmXG4tfVxuLVxuIC8qXG4gICogVGhpcyBhdHRlbXB0cyB0byBoYXZlIHJvdWdobHkgYSBwYWdlIG9mIGluc3RydWN0aW9ucyBmb2xsb3dlZCBieSBhIGZld1xuICAqIGluc3RydWN0aW9ucyB0aGF0IGRvIGEgd3JpdGUsIGFuZCBhbm90aGVyIHBhZ2Ugb2YgaW5zdHJ1Y3Rpb25zLiAgVGhhdFxuQEAgLTY2OSw3ICs1ODIsNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXlfd2l0aF9tcHJvdGVjdChsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSlcbiBcdFx0XHRzaXplLCBwcm90LCBwa2V5KTtcbiBcdHBrZXlfYXNzZXJ0KHBrZXkgXHUwMDNjIE5SX1BLRVlTKTtcbiBcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgcHJvdCwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuK1x0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xuIFx0cmV0ID0gbXByb3RlY3RfcGtleSgodm9pZCAqKXB0ciwgUEFHRV9TSVpFLCBwcm90LCBwa2V5KTtcbiBcdHBrZXlfYXNzZXJ0KCFyZXQpO1xuIFx0cmVjb3JkX3BrZXlfbWFsbG9jKHB0ciwgc2l6ZSwgcHJvdCk7XG5AQCAtNjkyLDcgKzYwNSw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV9hbm9uX2h1Z2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHQgKi9cbiBcdHNpemUgPSBBTElHTl9VUChzaXplLCBIUEFHRV9TSVpFICogMik7XG4gXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuK1x0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xuIFx0cmVjb3JkX3BrZXlfbWFsbG9jKHB0ciwgc2l6ZSwgcHJvdCk7XG4gXHRtcHJvdGVjdF9wa2V5KHB0ciwgc2l6ZSwgcHJvdCwgcGtleSk7XG4gXG5AQCAtNzUwLDcgKzY2Myw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV9odWdldGxiKGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KVxuIFx0c2l6ZSA9IEFMSUdOX1VQKHNpemUsIEhQQUdFX1NJWkUgKiAyKTtcbiBcdHBrZXlfYXNzZXJ0KHBrZXkgXHUwMDNjIE5SX1BLRVlTKTtcbiBcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9OT05FLCBmbGFncywgLTEsIDApO1xuLVx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuK1x0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xuIFx0bXByb3RlY3RfcGtleShwdHIsIHNpemUsIHByb3QsIHBrZXkpO1xuIFxuIFx0cmVjb3JkX3BrZXlfbWFsbG9jKHB0ciwgc2l6ZSwgcHJvdCk7XG5AQCAtNzc5LDcgKzY5Miw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleShsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSlcbiBcdFx0cGtleV9hc3NlcnQobWFsbG9jX3R5cGUgXHUwMDNjIG5yX21hbGxvY190eXBlcyk7XG4gXG4gXHRcdHJldCA9IHBrZXlfbWFsbG9jW21hbGxvY190eXBlXShzaXplLCBwcm90LCBwa2V5KTtcbi1cdFx0cGtleV9hc3NlcnQocmV0ICE9ICh2b2lkICopLTEpO1xuK1x0XHRwa2V5X2Fzc2VydChyZXQgIT0gTUFQX0ZBSUxFRCk7XG4gXG4gXHRcdG1hbGxvY190eXBlKys7XG4gXHRcdGlmIChtYWxsb2NfdHlwZSBcdTAwM2U9IG5yX21hbGxvY190eXBlcylcbkBAIC0xMTk3LDYgKzExMTAsNyBAQCBzdGF0aWMgdm9pZCBhcmNoX2ZvcmNlX3BrZXlfcmVnX2luaXQodm9pZClcbiBcdCAqIGRvaW5nIHRoZSBYU0FWRSBzaXplIGVudW1lcmF0aW9uIGRhbmNlLlxuIFx0ICovXG4gXHRidWYgPSBtbWFwKE5VTEwsIDEqTUIsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7XG4rXHRwa2V5X2Fzc2VydChidWYgIT0gTUFQX0ZBSUxFRCk7XG4gXG4gXHQvKiBUaGVzZSBfX2J1aWx0aW5zIHJlcXVpcmUgY29tcGlsaW5nIHdpdGggLW14c2F2ZSAqL1xuIFxuQEAgLTE3NjMsNyArMTY3Nyw4IEBAIGludCBtYWluKHZvaWQpXG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwicnVubmluZyBQS0VZIHRlc3RzIGZvciB1bnN1cHBvcnRlZCBDUFUvT1NcXG5cIik7XG4gXG4gXHRcdHB0ciAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0XHRhc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuK1x0XHRpZiAocHRyID09IE1BUF9GQUlMRUQpXG4rXHRcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwibW1hcFwiKTtcbiBcdFx0dGVzdF9tcHJvdGVjdF9wa2V5X29uX3Vuc3VwcG9ydGVkX2NwdShwdHIsIDEpO1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCJwa2V5IG9uIHVuc3VwcG9ydGVkIENQVS9PU1xcblwiKTtcbiBcdFx0a3NmdF9maW5pc2hlZCgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6NTM6MDIuODY4MTc5MjkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA2NjU3NTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBTZWxmdGVzdHMgYW5kIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBmaWxlcyBzcGVjaWZpY2FsbHkgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byB0aGUgc2VsZnRlc3RzLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0cy4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGlzIGRvZXNuJ3Qgd2FycmFudCBmdXp6aW5nLCBidXQgbGV0J3MgYmUgdGhvcm91Z2guXG5cbkdpdmVuIHRoYXQgdGhlc2UgYXJlIHNlbGZ0ZXN0cywgYW5kIHRoZXkgbGl2ZSBvdXRzaWRlIG9mIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gcGF0aCwgdGhlIGNoYW5nZXMgaGVyZSBzaG91bGRuJ3QgaW1wYWN0IHJ1bnRpbWUgYmVoYXZpb3IgdW5sZXNzIHdlICpjaG9vc2UqIHRvIHJ1biB0aGVtLiBUaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc3RhdGUgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaW52b2x2ZXMgRG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIGNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG9uJ3QgYWx0ZXIgZXhlY3V0aW9uLCBvciBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gXG5cbldhaXQgYSBtaW51dGUuLi4gdGhlc2UgYXJlICpzZWxmdGVzdHMqLiBUaGV5IGFyZSB1c2VyLXNwYWNlIHByb2dyYW1zIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGVzdGluZy4gVGhleSBhcmVuJ3Qga2VybmVsIGNvZGUuIFNvLCBtb2RpZnlpbmcgdGhlbSAqc2hvdWxkbid0KiBpbXBhY3QgYW55dGhpbmcgdGhhdCBuZWVkcyB0byBiZSBmdXp6ZWQuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ20gY2hlY2tpbmcgdGhlIGRpZmYgYWdhaW4g4oCTIHllcCwgaXQncyBzdHJpY3RseSB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gIGRpcmVjdG9yeS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbDsgaXQncyBqdXN0IGFib3V0IHJlZmluaW5nIHRoZSB0ZXN0aW5nIG1ldGhvZG9sb2d5LiBUaGlzIGdvZXMgaW50byB0aGUgJ25vJyBwaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDg3LCJPdXRwdXRUb2tlbnMiOjY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDg6NTM6MDkuOTM0NzU3NTA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowxgm6g[1] Phase: Running StartedAt: 2026-07-06 08:54:09 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgm6g[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-06 08:54:09 +0000 UTC FinishedAt: 2026-07-06 08:54:55 +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,}