Name: series-workflowj4zkg Phase: Failed StartedAt: 2026-08-04 17:44:46 +0000 UTC FinishedAt: 2026-08-04 17:46:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj4zkg[0] Phase: Succeeded StartedAt: 2026-08-04 17:44:46 +0000 UTC FinishedAt: 2026-08-04 17:46:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj4zkg[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 17:44:46 +0000 UTC FinishedAt: 2026-08-04 17:46: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+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBpcyB1c2VyLXNwYWNlIHRlc3QgY29kZSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNzo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg0ZGNkODFlZWViMTY3NjQ4MzlhOTg4NTM3ODFkNjlkYjAxYTA1ODBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjQ1OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbmluZGV4IGU4MzU2ZWU1NGQ3YjkuLmE2YTNlMTY1Nzg5NTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0xMzUsOCAmIzQzOzEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9yYW5kb21fdTY0KHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgXHUwMDNjXHUwMDNjIDMyKSB8IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbiB9XG4gXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heCk7XG4mIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpO1xuJiM0Mzt1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KTtcbiBcbiBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHtcbiBcdFZNX01FTV9TUkNfQU5PTllNT1VTLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG5pbmRleCA2YjAwYWIxMWYzYzAyLi40ZGZmNzJmNmJkMzQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuQEAgLTQzLDEyICYjNDM7NDMsMjYgQEAgdTMyIGt2bV9yYW5kb21fdTMyKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiBzdGF0ZS1cdTAwM2VzZWVkO1xuIH1cbiBcbiYjNDM7LyogUmV0dXJucyBhIHJhbmRvbSB1MzIgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4mIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsdWUsIHJhbmdlO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVChtaW4gXHUwMDNjPSBtYXgsIFwmIzM0O1BFQktBQywgbWluID0gMHgleCwgbWF4ID0gMHgleFwmIzM0OywgbWluLCBtYXgpO1xuJiM0MztcbiYjNDM7XHR2YWx1ZSA9IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSBtYXggLSBtaW47XG4mIzQzO1x0aWYgKHJhbmdlID09IFVJTlRfTUFYKVxuJiM0MztcdFx0cmV0dXJuIHZhbHVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWluICYjNDM7ICh2YWx1ZSAlIChyYW5nZSAmIzQzOyAxKSk7XG4mIzQzO31cbiYjNDM7XG4gLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heClcbiYjNDM7dTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heClcbiB7XG4tXHR1NjQgdmFsdWU7XG4tXHR1NjQgcmFuZ2U7XG4mIzQzO1x0dTY0IHZhbHVlLCByYW5nZTtcbiBcbiBcdFRFU1RfQVNTRVJUKG1pbiBcdTAwM2M9IG1heCwgXCYjMzQ7UEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHhcJiMzNDssIG1pbiwgbWF4KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbmluZGV4IGRjNmFmYWMzYWE5MTkuLmM3YzU2NjIyMDM4MTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuQEAgLTg3LDE0ICYjNDM7ODcsMTggQEAgc3RhdGljIHN0cnVjdCBrdm1faW50ZWxfcG11X2V2ZW50IGludGVsX2V2ZW50X3RvX2ZlYXR1cmUodTggaWR4KVxuIFx0cmV0dXJuIF9faW50ZWxfZXZlbnRfdG9fZmVhdHVyZVtpZHhdO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsXG4tXHRcdFx0XHRcdFx0ICB2b2lkICpndWVzdF9jb2RlLFxuLVx0XHRcdFx0XHRcdCAgdTggcG11X3ZlcnNpb24sXG4tXHRcdFx0XHRcdFx0ICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXModTMyIG5yX3ZjcHVzLCB2b2lkICpndWVzdF9jb2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHU4IHBtdV92ZXJzaW9uLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKipfX3ZjcHVzW10pXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzID0gY2FsbG9jKG5yX3ZjcHVzLCBzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSk7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaTtcbiBcbi1cdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7XG4mIzQzO1x0Kl9fdmNwdXMgPSB2Y3B1cztcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cyhucl92Y3B1cywgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9wbXVfdmVyc2lvbik7XG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgaGFyZHdhcmVfcG11X2FyY2hfZXZlbnRzKTtcbiBcbkBAIC0xMDIsMTMgJiM0MzsxMDYsMjIgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LFxuIFx0ICogU2V0IFBFUkZfQ0FQQUJJTElUSUVTIGJlZm9yZSBQTVUgdmVyc2lvbiBhcyBLVk0gZGlzYWxsb3dzIGVuYWJsaW5nXG4gXHQgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJiMzOTt0IGhhdmUgYSB2UE1VLlxuIFx0ICovXG4tXHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXG4tXHRcdHZjcHVfc2V0X21zcigqdmNwdSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChrdm1faGFzX3BlcmZfY2FwcylcbiYjNDM7XHRcdFx0dmNwdV9zZXRfbXNyKHZjcHVzW2ldLCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpO1xuJiM0MztcbiYjNDM7XHRcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2ldLCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcbiYjNDM7XHR9XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSgqdmNwdSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7XG4gXHRyZXR1cm4gdm07XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBwbXVfdm1fZnJlZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXMpXG4mIzQzO3tcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO1x0ZnJlZSh2Y3B1cyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB1Y2FsbCB1YztcbkBAIC0yNzMsNiAmIzQzOzI4Niw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXG4gXHRzdHJ1Y3Qga3ZtX3g4Nl9wbXVfZmVhdHVyZSBncF9ldmVudCwgZml4ZWRfZXZlbnQ7XG4gXHR1MzIgYmFzZV9wbWNfbXNyO1xuIFx0dW5zaWduZWQgaW50IGk7XG4mIzQzO1x0dTY0IGV2ZW50c2VsO1xuIFxuIFx0LyogVGhlIGhvc3Qgc2lkZSBzaG91bGRuJiMzOTt0IGludm9rZSB0aGlzIHdpdGhvdXQgYSBndWVzdCBQTVUuICovXG4gXHRHVUVTVF9BU1NFUlQocG11X3ZlcnNpb24pO1xuQEAgLTI4NywxOSAmIzQzOzMwMSwxNiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KVxuIFx0R1VFU1RfQVNTRVJUX0VRKGlkeCwgZ3BfZXZlbnQuZi5iaXQpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKG5yX2dwX2NvdW50ZXJzKTtcbiYjNDM7XHRpID0ga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2UoXHUwMDI2a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2dwX2NvdW50ZXJzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1NjQgZXZlbnRzZWwgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MgfFxuLVx0XHRcdFx0ICAgIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxuLVx0XHRcdFx0ICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xuJiM0MztcdGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHwgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8XG4mIzQzO1x0XHQgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTtcbiBcbi1cdFx0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApO1xuLVx0XHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXG4tXHRcdFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7XG4mIzQzO1x0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApO1xuJiM0MztcdGlmIChndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcbiYjNDM7XHRcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xuIFxuLVx0XHRfX2d1ZXN0X3Rlc3RfYXJjaF9ldmVudChpZHgsIGksIGJhc2VfcG1jX21zciAmIzQzOyBpLFxuLVx0XHRcdFx0XHRNU1JfUDZfRVZOVFNFTDAgJiM0MzsgaSwgZXZlbnRzZWwpO1xuLVx0fVxuJiM0MztcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICYjNDM7IGksIE1TUl9QNl9FVk5UU0VMMCAmIzQzOyBpLCBldmVudHNlbCk7XG4gXG4gXHRpZiAoIWd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxuIFx0XHRyZXR1cm47XG5AQCAtMzI4LDMwICYjNDM7MzM5LDcyIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuLVx0XHRcdCAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbiYjNDM7c3RhdGljIHZvaWQgX190ZXN0X2FyY2hfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuJiM0MztcdFx0XHQgICAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdC8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqL1xuLVx0aWYgKCFwbXVfdmVyc2lvbilcbi1cdFx0cmV0dXJuO1xuLVxuIFx0dW5hdmFpbGFibGVfbWFzayBcdTAwMjY9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsXG4gXHRcdFx0XHQgICAgWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5sb19iaXQpO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4tXG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCxcbiBcdFx0XHRcdGxlbmd0aCk7XG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLFxuIFx0XHRcdFx0dW5hdmFpbGFibGVfbWFzayk7XG4gXG4gXHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7fVxuIFxuLVx0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1x0dTMyIGs7XG4mIzQzO1x0dTggajtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxuJiM0MztcdCAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3RcbiYjNDM7XHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXG4mIzQzO1x0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcbiYjNDM7XHQgKiB3cm9uZyBiaXQocykuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XG4mIzQzO1x0XHQweDAsXG4mIzQzO1x0XHQweGZmZmZmZmZmdSxcbiYjNDM7XHRcdDB4YWFhYWFhYWF1LFxuJiM0MztcdFx0MHg1NTU1NTU1NXUsXG4mIzQzO1x0XHQweGYwZjBmMGYwdSxcbiYjNDM7XHRcdDB4MGYwZjBmMGZ1LFxuJiM0MztcdFx0MHhhMGEwYTBhMHUsXG4mIzQzO1x0XHQweDBhMGEwYTBhdSxcbiYjNDM7XHRcdDB4NTA1MDUwNTB1LFxuJiM0MztcdFx0MHgwNTA1MDUwNXUsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0cG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XG4mIzQzO1x0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXG4mIzQzO1x0aWYgKCFwbXVfdmVyc2lvbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDIpICogQVJSQVlfU0laRSh1bmF2YWlsYWJsZV9tYXNrcyksXG4mIzQzO1x0XHRcdFx0ICAgICAgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywgcG11X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0ICAgICAgcGVyZl9jYXBhYmlsaXRpZXMsIFx1MDAyNnZjcHVzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXAgdGhlIG51bWJlciBvZlxuJiM0MztcdCAqIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG8gd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGhcbiYjNDM7XHQgKiBpcyBncmVhdGVyIHRoYW4gdGhlIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kXG4mIzQzO1x0ICogYWxsIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChqID0gMDsgaiBcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDE7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGsgPSAxOyBrIFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgayYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdF9fdGVzdF9hcmNoX2V2ZW50cyh2Y3B1c1tpJiM0MzsmIzQzO10sIHBlcmZfY2FwYWJpbGl0aWVzLCBqLFxuJiM0MztcdFx0XHRcdFx0ICAgdW5hdmFpbGFibGVfbWFza3Nba10pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcbiB9XG4gXG4gLypcbkBAIC00OTUsMjEgJiM0Mzs1NDgsMjcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4tXHRcdFx0ICAgICB1OCBucl9ncF9jb3VudGVycylcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHR1OCBucl9ncF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyk7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHR1OCBqO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0bnJfZ3BfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLFxuLVx0XHRcdFx0bnJfZ3BfY291bnRlcnMpO1xuJiM0MztcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX2dwX2NvdW50ZXJzICYjNDM7IDEsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4gXG4tXHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tqXSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyxcbiYjNDM7XHRcdFx0XHRcdG5yX2dwX2NvdW50ZXJzKTtcbiBcbi1cdGt2bV92bV9mcmVlKHZtKTtcbiYjNDM7XHRcdHJ1bl92Y3B1KHZjcHVzW2pdKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcbkBAIC01NjEsNTkgJiM0Mzs2MjAsNTMgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4tXHRcdFx0XHR1OCBucl9maXhlZF9jb3VudGVycywgdTMyIHN1cHBvcnRlZF9iaXRtYXNrKVxuJiM0MztzdGF0aWMgdm9pZCBfX3Rlc3RfZml4ZWRfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBucl9maXhlZF9jb3VudGVycyxcbiYjNDM7XHRcdFx0XHQgIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXG4tXHRcdFx0XHRcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuLVxuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9GSVhFRF9DT1VOVEVSU19CSVRNQVNLLFxuIFx0XHRcdFx0c3VwcG9ydGVkX2JpdG1hc2spO1xuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyxcbiBcdFx0XHRcdG5yX2ZpeGVkX2NvdW50ZXJzKTtcbiBcbiBcdHJ1bl92Y3B1KHZjcHUpO1xuJiM0Mzt9XG4gXG4tXHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcbiYjNDM7e1xuJiM0MztcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTKTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1x0dTMyIGs7XG4mIzQzO1x0dTggajtcbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nICV1IGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0bnJfZml4ZWRfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4mIzQzO1xuJiM0MztcbiYjNDM7XHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygobnJfZml4ZWRfY291bnRlcnMgJiM0MzsgMSkgKiBCSVQobnJfZml4ZWRfY291bnRlcnMpLFxuJiM0MztcdFx0XHRcdCAgICAgIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjPSAoQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSAtIDEpOyBrJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0X190ZXN0X2ZpeGVkX2NvdW50ZXJzKHZjcHVzW2kmIzQzOyYjNDM7XSwgaiwgayk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXG4ge1xuLVx0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xuLVx0dTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpO1xuIFx0dTggcG11X3ZlcnNpb24gPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTik7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbi1cdHU4IHYsIGo7XG4tXHR1MzIgaztcbiYjNDM7XHR1OCB2O1xuIFxuIFx0Y29uc3QgdTY0IHBlcmZfY2Fwc1tdID0ge1xuIFx0XHQwLFxuIFx0XHRQTVVfQ0FQX0ZXX1dSSVRFUyxcbiBcdH07XG4gXG4tXHQvKlxuLVx0ICogVG8ga2VlcCB0aGUgdG90YWwgcnVudGltZSByZWFzb25hYmxlLCB0ZXN0IG9ubHkgYSBoYW5kZnVsIG9mIHNlbGVjdCxcbi1cdCAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3Rcbi1cdCAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGxcbi1cdCAqIGFzIGFsdGVybmF0aW5nIGJpdCBzZXF1ZW5jdWVzLCBlLmcuIHRvIGRldGVjdCBpZiBLVk0gaXMgY2hlY2tpbmcgdGhlXG4tXHQgKiB3cm9uZyBiaXQocykuXG4tXHQgKi9cbi1cdGNvbnN0IHUzMiB1bmF2YWlsYWJsZV9tYXNrc1tdID0ge1xuLVx0XHQweDAsXG4tXHRcdDB4ZmZmZmZmZmZ1LFxuLVx0XHQweGFhYWFhYWFhdSxcbi1cdFx0MHg1NTU1NTU1NXUsXG4tXHRcdDB4ZjBmMGYwZjB1LFxuLVx0XHQweDBmMGYwZjBmdSxcbi1cdFx0MHhhMGEwYTBhMHUsXG4tXHRcdDB4MGEwYTBhMGF1LFxuLVx0XHQweDUwNTA1MDUwdSxcbi1cdFx0MHgwNTA1MDUwNXUsXG4tXHR9O1xuLVxuIFx0LypcbiBcdCAqIFRlc3QgdXAgdG8gUE1VIHY1LCB3aGljaCBpcyB0aGUgY3VycmVudCBtYXhpbXVtIHZlcnNpb24gZGVmaW5lZCBieVxuIFx0ICogSW50ZWwsIGkuZS4gaXMgdGhlIGxhc3QgdmVyc2lvbiB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYmFja3dhcmRzXG5AQCAtNjQ5LDMyICYjNDM7NzAyLDkgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKVxuIFx0XHRcdGlmICgha3ZtX2hhc19wZXJmX2NhcHMgXHUwMDI2XHUwMDI2IHBlcmZfY2Fwc1tpXSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBhcmNoIGV2ZW50cywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwmIzM0Oyxcbi1cdFx0XHRcdHYsIHBlcmZfY2Fwc1tpXSk7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXBcbi1cdFx0XHQgKiB0aGUgbnVtYmVyIG9mIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG9cbi1cdFx0XHQgKiB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlXG4tXHRcdFx0ICogaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAmIzM5OzAmIzM5OyBhbmQgYWxsXG4tXHRcdFx0ICogb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gTlJfSU5URUxfQVJDSF9FVkVOVFMgJiM0MzsgMTsgaiYjNDM7JiM0MzspIHtcbi1cdFx0XHRcdGZvciAoayA9IDE7IGsgXHUwMDNjIEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrJiM0MzsmIzQzOylcbi1cdFx0XHRcdFx0dGVzdF9hcmNoX2V2ZW50cyh2LCBwZXJmX2NhcHNbaV0sIGosIHVuYXZhaWxhYmxlX21hc2tzW2tdKTtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0cHJfaW5mbyhcJiMzNDtUZXN0aW5nIEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGomIzQzOyYjNDM7KVxuLVx0XHRcdFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGopO1xuLVxuLVx0XHRcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwmIzM0Oyxcbi1cdFx0XHRcdHYsIHBlcmZfY2Fwc1tpXSk7XG4tXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2M9IG5yX2ZpeGVkX2NvdW50ZXJzOyBqJiM0MzsmIzQzOykge1xuLVx0XHRcdFx0Zm9yIChrID0gMDsgayBcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsmIzQzOyYjNDM7KVxuLVx0XHRcdFx0XHR0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgayk7XG4tXHRcdFx0fVxuJiM0MztcdFx0XHR0ZXN0X2FyY2hfZXZlbnRzKHYsIHBlcmZfY2Fwc1tpXSk7XG4mIzQzO1x0XHRcdHRlc3RfZ3BfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTtcbiYjNDM7XHRcdFx0dGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pO1xuIFx0XHR9XG4gXHR9XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggaXMgdXNlci1zcGFjZSB0ZXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NGRjZDgxZWVlYjE2NzY0ODM5YTk4ODUzNzgxZDY5ZGIwMWEwNTgwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAxNzo0NTo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKaW5kZXggZTgzNTZlZTU0ZDdiOS4uYTZhM2UxNjU3ODk1OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKQEAgLTEzNSw4ICYjNDM7MTM1LDggQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3JhbmRvbV91NjQoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKQogCXJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgJmx0OyZsdDsgMzIpIHwga3ZtX3JhbmRvbV91MzIoc3RhdGUpOwogfQogCi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLAotCQkJICAgIHU2NCBtYXgpOwomIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpOwomIzQzO3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpOwogCiBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHsKIAlWTV9NRU1fU1JDX0FOT05ZTU9VUywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jCmluZGV4IDZiMDBhYjExZjNjMDIuLjRkZmY3MmY2YmQzNDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYwpAQCAtNDMsMTIgJiM0Mzs0MywyNiBAQCB1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKQogCXJldHVybiBzdGF0ZS0mZ3Q7c2VlZDsKIH0KIAomIzQzOy8qIFJldHVybnMgYSByYW5kb20gdTMyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqLwomIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpCiYjNDM7ewomIzQzOwl1MzIgdmFsdWUsIHJhbmdlOwomIzQzOwomIzQzOwlURVNUX0FTU0VSVChtaW4gJmx0Oz0gbWF4LCAmIzM0O1BFQktBQywgbWluID0gMHgleCwgbWF4ID0gMHgleCYjMzQ7LCBtaW4sIG1heCk7CiYjNDM7CiYjNDM7CXZhbHVlID0ga3ZtX3JhbmRvbV91MzIoc3RhdGUpOwomIzQzOwomIzQzOwlyYW5nZSA9IG1heCAtIG1pbjsKJiM0MzsJaWYgKHJhbmdlID09IFVJTlRfTUFYKQomIzQzOwkJcmV0dXJuIHZhbHVlOwomIzQzOwomIzQzOwlyZXR1cm4gbWluICYjNDM7ICh2YWx1ZSAlIChyYW5nZSAmIzQzOyAxKSk7CiYjNDM7fQomIzQzOwogLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovCi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLAotCQkJICAgIHU2NCBtYXgpCiYjNDM7dTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heCkKIHsKLQl1NjQgdmFsdWU7Ci0JdTY0IHJhbmdlOwomIzQzOwl1NjQgdmFsdWUsIHJhbmdlOwogCiAJVEVTVF9BU1NFUlQobWluICZsdDs9IG1heCwgJiMzNDtQRUJLQUMsIG1pbiA9IDB4JWx4LCBtYXggPSAweCVseCYjMzQ7LCBtaW4sIG1heCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYwppbmRleCBkYzZhZmFjM2FhOTE5Li5jN2M1NjYyMjAzODE1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jCkBAIC04NywxNCAmIzQzOzg3LDE4IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX2ludGVsX3BtdV9ldmVudCBpbnRlbF9ldmVudF90b19mZWF0dXJlKHU4IGlkeCkKIAlyZXR1cm4gX19pbnRlbF9ldmVudF90b19mZWF0dXJlW2lkeF07CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwKLQkJCQkJCSAgdm9pZCAqZ3Vlc3RfY29kZSwKLQkJCQkJCSAgdTggcG11X3ZlcnNpb24sCi0JCQkJCQkgIHU2NCBwZXJmX2NhcGFiaWxpdGllcykKJiM0MztzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBucl92Y3B1cywgdm9pZCAqZ3Vlc3RfY29kZSwKJiM0MzsJCQkJCSAgICAgICB1OCBwbXVfdmVyc2lvbiwKJiM0MzsJCQkJCSAgICAgICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IGt2bV92Y3B1ICoqX192Y3B1c1tdKQogewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cyA9IGNhbGxvYyhucl92Y3B1cywgc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSkpOwogCXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgaTsKIAotCXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7CiYjNDM7CSpfX3ZjcHVzID0gdmNwdXM7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfdmNwdXMsIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwga3ZtX3BtdV92ZXJzaW9uKTsKIAlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgaGFyZHdhcmVfcG11X2FyY2hfZXZlbnRzKTsKIApAQCAtMTAyLDEzICYjNDM7MTA2LDIyIEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwKIAkgKiBTZXQgUEVSRl9DQVBBQklMSVRJRVMgYmVmb3JlIFBNVSB2ZXJzaW9uIGFzIEtWTSBkaXNhbGxvd3MgZW5hYmxpbmcKIAkgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJiMzOTt0IGhhdmUgYSB2UE1VLgogCSAqLwotCWlmIChrdm1faGFzX3BlcmZfY2FwcykKLQkJdmNwdV9zZXRfbXNyKCp2Y3B1LCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoa3ZtX2hhc19wZXJmX2NhcHMpCiYjNDM7CQkJdmNwdV9zZXRfbXNyKHZjcHVzW2ldLCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwomIzQzOwkJdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdXNbaV0sIFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTiwgcG11X3ZlcnNpb24pOwomIzQzOwl9CiAKLQl2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSgqdmNwdSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7CiAJcmV0dXJuIHZtOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcG11X3ZtX2ZyZWUoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzKQomIzQzO3sKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzOwlmcmVlKHZjcHVzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHVjYWxsIHVjOwpAQCAtMjczLDYgJiM0MzsyODYsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KQogCXN0cnVjdCBrdm1feDg2X3BtdV9mZWF0dXJlIGdwX2V2ZW50LCBmaXhlZF9ldmVudDsKIAl1MzIgYmFzZV9wbWNfbXNyOwogCXVuc2lnbmVkIGludCBpOwomIzQzOwl1NjQgZXZlbnRzZWw7CiAKIAkvKiBUaGUgaG9zdCBzaWRlIHNob3VsZG4mIzM5O3QgaW52b2tlIHRoaXMgd2l0aG91dCBhIGd1ZXN0IFBNVS4gKi8KIAlHVUVTVF9BU1NFUlQocG11X3ZlcnNpb24pOwpAQCAtMjg3LDE5ICYjNDM7MzAxLDE2IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpCiAJR1VFU1RfQVNTRVJUX0VRKGlkeCwgZ3BfZXZlbnQuZi5iaXQpOwogCiAJR1VFU1RfQVNTRVJUKG5yX2dwX2NvdW50ZXJzKTsKJiM0MzsJaSA9IGt2bV9yYW5kb21fdTMyX2luX3JhbmdlKCZhbXA7a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBucl9ncF9jb3VudGVyczsgaSYjNDM7JiM0MzspIHsKLQkJdTY0IGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHwKLQkJCQkgICAgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8Ci0JCQkJICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdOwomIzQzOwlldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfAomIzQzOwkJICAgaW50ZWxfcG11X2FyY2hfZXZlbnRzW2lkeF07CiAKLQkJd3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApOwotCQlpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpCi0JCQl3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTsKJiM0MzsJd3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApOwomIzQzOwlpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpCiYjNDM7CQl3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTsKIAotCQlfX2d1ZXN0X3Rlc3RfYXJjaF9ldmVudChpZHgsIGksIGJhc2VfcG1jX21zciAmIzQzOyBpLAotCQkJCQlNU1JfUDZfRVZOVFNFTDAgJiM0MzsgaSwgZXZlbnRzZWwpOwotCX0KJiM0MzsJX19ndWVzdF90ZXN0X2FyY2hfZXZlbnQoaWR4LCBpLCBiYXNlX3BtY19tc3IgJiM0MzsgaSwgTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIGV2ZW50c2VsKTsKIAogCWlmICghZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpCiAJCXJldHVybjsKQEAgLTMyOCwzMCAmIzQzOzMzOSw3MiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpCiAJR1VFU1RfRE9ORSgpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsCi0JCQkgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spCiYjNDM7c3RhdGljIHZvaWQgX190ZXN0X2FyY2hfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLAomIzQzOwkJCSAgICAgICB1OCBsZW5ndGgsIHUzMiB1bmF2YWlsYWJsZV9tYXNrKQogewotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQlzdHJ1Y3Qga3ZtX3ZtICp2bTsKLQotCS8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqLwotCWlmICghcG11X3ZlcnNpb24pCi0JCXJldHVybjsKLQogCXVuYXZhaWxhYmxlX21hc2sgJmFtcDs9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsCiAJCQkJICAgIFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0subG9fYml0KTsKIAotCXZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywKLQkJCQkJIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7Ci0KIAl2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCwKIAkJCQlsZW5ndGgpOwogCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0ssCiAJCQkJdW5hdmFpbGFibGVfbWFzayk7CiAKIAlydW5fdmNwdSh2Y3B1KTsKJiM0Mzt9CiAKLQlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgaSA9IDA7CiYjNDM7CXUzMiBrOwomIzQzOwl1OCBqOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LAomIzQzOwkgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0CiYjNDM7CSAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGwKJiM0MzsJICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGUKJiM0MzsJICogd3JvbmcgYml0KHMpLgomIzQzOwkgKi8KJiM0MzsJY29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7CiYjNDM7CQkweDAsCiYjNDM7CQkweGZmZmZmZmZmdSwKJiM0MzsJCTB4YWFhYWFhYWF1LAomIzQzOwkJMHg1NTU1NTU1NXUsCiYjNDM7CQkweGYwZjBmMGYwdSwKJiM0MzsJCTB4MGYwZjBmMGZ1LAomIzQzOwkJMHhhMGEwYTBhMHUsCiYjNDM7CQkweDBhMGEwYTBhdSwKJiM0MzsJCTB4NTA1MDUwNTB1LAomIzQzOwkJMHgwNTA1MDUwNXUsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXByX2luZm8oJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKJiM0MzsJCXBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7CiYjNDM7CiYjNDM7CS8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqLwomIzQzOwlpZiAoIXBtdV92ZXJzaW9uKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygoTlJfSU5URUxfQVJDSF9FVkVOVFMgJiM0MzsgMikgKiBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKSwKJiM0MzsJCQkJICAgICAgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywgcG11X3ZlcnNpb24sCiYjNDM7CQkJCSAgICAgIHBlcmZfY2FwYWJpbGl0aWVzLCAmYW1wO3ZjcHVzKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwIHRoZSBudW1iZXIgb2YKJiM0MzsJICogZXZlbnRzICYjNDM7MSAodG8gdmVyaWZ5IEtWTSBkb2VzbiYjMzk7dCBkbyB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aAomIzQzOwkgKiBpcyBncmVhdGVyIHRoYW4gdGhlIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kCiYjNDM7CSAqIGFsbCBvbmVzIGkuZS4gYWxsIGV2ZW50cyBiZWluZyBhdmFpbGFibGUgYW5kIHVuYXZhaWxhYmxlLgomIzQzOwkgKi8KJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7PSBOUl9JTlRFTF9BUkNIX0VWRU5UUyAmIzQzOyAxOyBqJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChrID0gMTsgayAmbHQ7IEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrJiM0MzsmIzQzOykKJiM0MzsJCQlfX3Rlc3RfYXJjaF9ldmVudHModmNwdXNbaSYjNDM7JiM0MztdLCBwZXJmX2NhcGFiaWxpdGllcywgaiwKJiM0MzsJCQkJCSAgIHVuYXZhaWxhYmxlX21hc2tzW2tdKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwbXVfdm1fZnJlZSh2bSwgdmNwdXMpOwogfQogCiAvKgpAQCAtNDk1LDIxICYjNDM7NTQ4LDI3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnModm9pZCkKIAlHVUVTVF9ET05FKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcywKLQkJCSAgICAgdTggbnJfZ3BfY291bnRlcnMpCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKQogewotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJdTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1czsKIAlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJdTggajsKIAotCXZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycywKLQkJCQkJIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7CiYjNDM7CXByX2luZm8oJiMzNDtUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKJiM0MzsJCW5yX2dwX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwogCi0JdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUywKLQkJCQlucl9ncF9jb3VudGVycyk7CiYjNDM7CXZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX2dwX2NvdW50ZXJzICYjNDM7IDEsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsCiYjNDM7CQkJCSAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgJmFtcDt2Y3B1cyk7CiAKLQlydW5fdmNwdSh2Y3B1KTsKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7PSBucl9ncF9jb3VudGVyczsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2pdLCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLAomIzQzOwkJCQkJbnJfZ3BfY291bnRlcnMpOwogCi0Ja3ZtX3ZtX2ZyZWUodm0pOwomIzQzOwkJcnVuX3ZjcHUodmNwdXNbal0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZCkKQEAgLTU2MSw1OSAmIzQzOzYyMCw1MyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpCiAJR1VFU1RfRE9ORSgpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsCi0JCQkJdTggbnJfZml4ZWRfY291bnRlcnMsIHUzMiBzdXBwb3J0ZWRfYml0bWFzaykKJiM0MztzdGF0aWMgdm9pZCBfX3Rlc3RfZml4ZWRfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBucl9maXhlZF9jb3VudGVycywKJiM0MzsJCQkJICB1MzIgc3VwcG9ydGVkX2JpdG1hc2spCiB7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCXN0cnVjdCBrdm1fdm0gKnZtOwotCi0Jdm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLAotCQkJCQkgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTsKLQogCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRklYRURfQ09VTlRFUlNfQklUTUFTSywKIAkJCQlzdXBwb3J0ZWRfYml0bWFzayk7CiAJdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUywKIAkJCQlucl9maXhlZF9jb3VudGVycyk7CiAKIAlydW5fdmNwdSh2Y3B1KTsKJiM0Mzt9CiAKLQlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKQomIzQzO3sKJiM0MzsJdTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1czsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CWludCBpID0gMDsKJiM0MzsJdTMyIGs7CiYjNDM7CXU4IGo7CiYjNDM7CiYjNDM7CXByX2luZm8oJiMzNDtUZXN0aW5nICV1IGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKJiM0MzsJCW5yX2ZpeGVkX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwomIzQzOwomIzQzOwl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygobnJfZml4ZWRfY291bnRlcnMgJiM0MzsgMSkgKiBCSVQobnJfZml4ZWRfY291bnRlcnMpLAomIzQzOwkJCQkgICAgICBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLAomIzQzOwkJCQkgICAgICBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMsICZhbXA7dmNwdXMpOwomIzQzOwomIzQzOwlmb3IgKGogPSAwOyBqICZsdDs9IG5yX2ZpeGVkX2NvdW50ZXJzOyBqJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChrID0gMDsgayAmbHQ7PSAoQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSAtIDEpOyBrJiM0MzsmIzQzOykKJiM0MzsJCQlfX3Rlc3RfZml4ZWRfY291bnRlcnModmNwdXNbaSYjNDM7JiM0MztdLCBqLCBrKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwbXVfdm1fZnJlZSh2bSwgdmNwdXMpOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpCiB7Ci0JdTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpOwotCXU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTsKIAl1OCBwbXVfdmVyc2lvbiA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OKTsKIAl1bnNpZ25lZCBpbnQgaTsKLQl1OCB2LCBqOwotCXUzMiBrOwomIzQzOwl1OCB2OwogCiAJY29uc3QgdTY0IHBlcmZfY2Fwc1tdID0gewogCQkwLAogCQlQTVVfQ0FQX0ZXX1dSSVRFUywKIAl9OwogCi0JLyoKLQkgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LAotCSAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3QKLQkgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsCi0JICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGUKLQkgKiB3cm9uZyBiaXQocykuCi0JICovCi0JY29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7Ci0JCTB4MCwKLQkJMHhmZmZmZmZmZnUsCi0JCTB4YWFhYWFhYWF1LAotCQkweDU1NTU1NTU1dSwKLQkJMHhmMGYwZjBmMHUsCi0JCTB4MGYwZjBmMGZ1LAotCQkweGEwYTBhMGEwdSwKLQkJMHgwYTBhMGEwYXUsCi0JCTB4NTA1MDUwNTB1LAotCQkweDA1MDUwNTA1dSwKLQl9OwotCiAJLyoKIAkgKiBUZXN0IHVwIHRvIFBNVSB2NSwgd2hpY2ggaXMgdGhlIGN1cnJlbnQgbWF4aW11bSB2ZXJzaW9uIGRlZmluZWQgYnkKIAkgKiBJbnRlbCwgaS5lLiBpcyB0aGUgbGFzdCB2ZXJzaW9uIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBiYWNrd2FyZHMKQEAgLTY0OSwzMiAmIzQzOzcwMiw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZCkKIAkJCWlmICgha3ZtX2hhc19wZXJmX2NhcHMgJmFtcDsmYW1wOyBwZXJmX2NhcHNbaV0pCiAJCQkJY29udGludWU7CiAKLQkJCXByX2luZm8oJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKLQkJCQl2LCBwZXJmX2NhcHNbaV0pOwotCi0JCQkvKgotCQkJICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwCi0JCQkgKiB0aGUgbnVtYmVyIG9mIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG8KLQkJCSAqIHdlaXJkIHRoaW5ncyBpZiB0aGUgZ3Vlc3QgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGUKLQkJCSAqIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kIGFsbAotCQkJICogb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS4KLQkJCSAqLwotCQkJZm9yIChqID0gMDsgaiAmbHQ7PSBOUl9JTlRFTF9BUkNIX0VWRU5UUyAmIzQzOyAxOyBqJiM0MzsmIzQzOykgewotCQkJCWZvciAoayA9IDE7IGsgJmx0OyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgayYjNDM7JiM0MzspCi0JCQkJCXRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldLCBqLCB1bmF2YWlsYWJsZV9tYXNrc1trXSk7Ci0JCQl9Ci0KLQkJCXByX2luZm8oJiMzNDtUZXN0aW5nIEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKLQkJCQl2LCBwZXJmX2NhcHNbaV0pOwotCQkJZm9yIChqID0gMDsgaiAmbHQ7PSBucl9ncF9jb3VudGVyczsgaiYjNDM7JiM0MzspCi0JCQkJdGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGopOwotCi0JCQlwcl9pbmZvKCYjMzQ7VGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxuJiMzNDssCi0JCQkJdiwgcGVyZl9jYXBzW2ldKTsKLQkJCWZvciAoaiA9IDA7IGogJmx0Oz0gbnJfZml4ZWRfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7Ci0JCQkJZm9yIChrID0gMDsgayAmbHQ7PSAoQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSAtIDEpOyBrJiM0MzsmIzQzOykKLQkJCQkJdGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGosIGspOwotCQkJfQomIzQzOwkJCXRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldKTsKJiM0MzsJCQl0ZXN0X2dwX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7CiYjNDM7CQkJdGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pOwogCQl9CiAJfQogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzQxCgkJCQkJCQlvdXRwdXQ6IDczCgkJCQkJCQl0aG91Z2h0czogNjQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBEZXRlcm1pbmluZyBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jYC4gUmlnaHQgYXdheSwgSSYjMzk7bSB0aGlua2luZywgdGhpcyBsb29rcyBsaWtlIGl0JiMzOTtzIG1ha2luZyBzb21lIGNoYW5nZXMgdG8gdGhlIEtWTSBzZWxmdGVzdHMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIGBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZWAgdG8gYHRlc3RfdXRpbC5jYCwgYW5kIHRoZSBgcG11X2NvdW50ZXJzX3Rlc3QuY2AgZmlsZSBpcyBiZWluZyBtb2RpZmllZCB0byBoYW5kbGUgVk1zIHdpdGggbXVsdGlwbGUgdkNQVXMsIHdoaWNoIGlzIGxpa2VseSBmb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLgoKTm93LCBsZXQgbWUgcGF1c2UgYW5kIHRoaW5rIHRocm91Z2ggdGhpcy4gVGhlc2UgZmlsZXMgYXJlICpzcGVjaWZpY2FsbHkqIGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbC4gVGhpcyBpc24mIzM5O3QgdG91Y2hpbmcgY29yZSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhpcyBpcyBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgc2VsZnRlc3QgZnJhbWV3b3JrLgoKTGV0JiMzOTtzIHJlZmVyIGJhY2sgdG8gdGhlIGluc3RydWN0aW9ucyB3ZSBoYXZlIGZvciB0aGlzLiBUaGUgaW5zdHJ1Y3Rpb25zIHN0YXRlIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBtb2RpZmljYXRpb25zIHRvIHRoaW5ncyBsaWtlIERvY3VtZW50YXRpb24sIEtjb25maWcgZmlsZXMsIGNvbW1lbnRzLCBsb2dnaW5nLCBhbmQgY29uc3RhbnRzIHRoYXQgZG9uJiMzOTt0IGNoYW5nZSBleGVjdXRpb24gZmxvdywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocy4gQWxzbywgaW1wb3J0YW50bHksIGl0IG1lbnRpb25zIG5vdCBmdXp6aW5nIHZlbmRvci1zcGVjaWZpYyBQQ0llIGFuZCBHUFUgZHJpdmVyIGNvZGUgcmVxdWlyaW5nIHNwZWNpYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkLCBhbmQgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcy4gSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIGV4cGxpY2l0bHkgYWJvdXQgc2VsZnRlc3RzLCBidXQgdGhlc2UgdGVzdHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBrZXJuZWwgaXRzZWxmLgoKVGhlIGluc3RydWN0aW9ucyBhbHNvIHN0YXRlLCDigJxJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLuKAnSBTaW5jZSB0aGlzIHBhdGNoIGlzICpvbmx5KiBtb2RpZnlpbmcgZmlsZXMgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCBkaXJlY3RvcnksIGl0JiMzOTtzIG5vdCBhY3R1YWxseSB0b3VjaGluZyBjb3JlIGtlcm5lbCBjb2RlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYWZmZWN0ZWQgZmlsZXM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNgLiBZZXMsIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCBkaXJlY3RvcnkuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudC4gSSYjMzk7bGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKUmVhc29uaW5nOiBUaGlzIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5LiBUaGlzIGlzIHVzZXItc3BhY2UgdGVzdCBjb2RlLCBhbmQgaXQgZG9lc24mIzM5O3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzbiYjMzk7dCB3YXJyYW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggaXMgdXNlci1zcGFjZSB0ZXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBpcyB1c2VyLXNwYWNlIHRlc3QgY29kZSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjQ1OjUxLjAyMTQ5NTQ2NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjY1MDM1MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggaXMgdXNlci1zcGFjZSB0ZXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjQ1OjUxLjAyMTUxNjgwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3OTE3Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODRkY2Q4MWVlZWIxNjc2NDgzOWE5ODg1Mzc4MWQ2OWRiMDFhMDU4MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjQ1OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcXG5pbmRleCBlODM1NmVlNTRkN2I5Li5hNmEzZTE2NTc4OTU5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcXG5AQCAtMTM1LDggKzEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9yYW5kb21fdTY0KHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcXG4gXFx0cmV0dXJuICgodTY0KWt2bV9yYW5kb21fdTMyKHN0YXRlKSBcXHUwMDNjXFx1MDAzYyAzMikgfCBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7XFxuIH1cXG4gXFxuLXU2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sXFxuLVxcdFxcdFxcdCAgICB1NjQgbWF4KTtcXG4rdTMyIGt2bV9yYW5kb21fdTMyX2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTMyIG1pbiwgdTMyIG1heCk7XFxuK3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpO1xcbiBcXG4gZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSB7XFxuIFxcdFZNX01FTV9TUkNfQU5PTllNT1VTLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xcbmluZGV4IDZiMDBhYjExZjNjMDIuLjRkZmY3MmY2YmQzNDYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcXG5AQCAtNDMsMTIgKzQzLDI2IEBAIHUzMiBrdm1fcmFuZG9tX3UzMihzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXFxuIFxcdHJldHVybiBzdGF0ZS1cXHUwMDNlc2VlZDtcXG4gfVxcbiBcXG4rLyogUmV0dXJucyBhIHJhbmRvbSB1MzIgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXFxuK3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpXFxuK3tcXG4rXFx0dTMyIHZhbHVlLCByYW5nZTtcXG4rXFxuK1xcdFRFU1RfQVNTRVJUKG1pbiBcXHUwMDNjPSBtYXgsIFxcXCJQRUJLQUMsIG1pbiA9IDB4JXgsIG1heCA9IDB4JXhcXFwiLCBtaW4sIG1heCk7XFxuK1xcbitcXHR2YWx1ZSA9IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcXG4rXFxuK1xcdHJhbmdlID0gbWF4IC0gbWluO1xcbitcXHRpZiAocmFuZ2UgPT0gVUlOVF9NQVgpXFxuK1xcdFxcdHJldHVybiB2YWx1ZTtcXG4rXFxuK1xcdHJldHVybiBtaW4gKyAodmFsdWUgJSAocmFuZ2UgKyAxKSk7XFxuK31cXG4rXFxuIC8qIFJldHVybnMgYSByYW5kb20gdTY0IGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqL1xcbi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLFxcbi1cXHRcXHRcXHQgICAgdTY0IG1heClcXG4rdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heClcXG4ge1xcbi1cXHR1NjQgdmFsdWU7XFxuLVxcdHU2NCByYW5nZTtcXG4rXFx0dTY0IHZhbHVlLCByYW5nZTtcXG4gXFxuIFxcdFRFU1RfQVNTRVJUKG1pbiBcXHUwMDNjPSBtYXgsIFxcXCJQRUJLQUMsIG1pbiA9IDB4JWx4LCBtYXggPSAweCVseFxcXCIsIG1pbiwgbWF4KTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xcbmluZGV4IGRjNmFmYWMzYWE5MTkuLmM3YzU2NjIyMDM4MTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jXFxuQEAgLTg3LDE0ICs4NywxOCBAQCBzdGF0aWMgc3RydWN0IGt2bV9pbnRlbF9wbXVfZXZlbnQgaW50ZWxfZXZlbnRfdG9fZmVhdHVyZSh1OCBpZHgpXFxuIFxcdHJldHVybiBfX2ludGVsX2V2ZW50X3RvX2ZlYXR1cmVbaWR4XTtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmd1ZXN0X2NvZGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgdTggcG11X3ZlcnNpb24sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxcbitzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBucl92Y3B1cywgdm9pZCAqZ3Vlc3RfY29kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHU4IHBtdV92ZXJzaW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGt2bV92Y3B1ICoqX192Y3B1c1tdKVxcbiB7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzID0gY2FsbG9jKG5yX3ZjcHVzLCBzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSk7XFxuIFxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRpbnQgaTtcXG4gXFxuLVxcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7XFxuK1xcdCpfX3ZjcHVzID0gdmNwdXM7XFxuK1xcbitcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX3ZjcHVzLCBndWVzdF9jb2RlLCB2Y3B1cyk7XFxuIFxcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBrdm1fcG11X3ZlcnNpb24pO1xcbiBcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgaGFyZHdhcmVfcG11X2FyY2hfZXZlbnRzKTtcXG4gXFxuQEAgLTEwMiwxMyArMTA2LDIyIEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSxcXG4gXFx0ICogU2V0IFBFUkZfQ0FQQUJJTElUSUVTIGJlZm9yZSBQTVUgdmVyc2lvbiBhcyBLVk0gZGlzYWxsb3dzIGVuYWJsaW5nXFxuIFxcdCAqIGZlYXR1cmVzIHZpYSBQRVJGX0NBUEFCSUxJVElFUyBpZiB0aGUgZ3Vlc3QgZG9lc24ndCBoYXZlIGEgdlBNVS5cXG4gXFx0ICovXFxuLVxcdGlmIChrdm1faGFzX3BlcmZfY2FwcylcXG4tXFx0XFx0dmNwdV9zZXRfbXNyKCp2Y3B1LCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfdmNwdXM7IGkrKykge1xcbitcXHRcXHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXFxuK1xcdFxcdFxcdHZjcHVfc2V0X21zcih2Y3B1c1tpXSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4rXFxuK1xcdFxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2ldLCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcXG4rXFx0fVxcbiBcXG4tXFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkoKnZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTiwgcG11X3ZlcnNpb24pO1xcbiBcXHRyZXR1cm4gdm07XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHBtdV92bV9mcmVlKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cylcXG4re1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK1xcdGZyZWUodmNwdXMpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IHVjYWxsIHVjO1xcbkBAIC0yNzMsNiArMjg2LDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KHU4IGlkeClcXG4gXFx0c3RydWN0IGt2bV94ODZfcG11X2ZlYXR1cmUgZ3BfZXZlbnQsIGZpeGVkX2V2ZW50O1xcbiBcXHR1MzIgYmFzZV9wbWNfbXNyO1xcbiBcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0dTY0IGV2ZW50c2VsO1xcbiBcXG4gXFx0LyogVGhlIGhvc3Qgc2lkZSBzaG91bGRuJ3QgaW52b2tlIHRoaXMgd2l0aG91dCBhIGd1ZXN0IFBNVS4gKi9cXG4gXFx0R1VFU1RfQVNTRVJUKHBtdV92ZXJzaW9uKTtcXG5AQCAtMjg3LDE5ICszMDEsMTYgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KHU4IGlkeClcXG4gXFx0R1VFU1RfQVNTRVJUX0VRKGlkeCwgZ3BfZXZlbnQuZi5iaXQpO1xcbiBcXG4gXFx0R1VFU1RfQVNTRVJUKG5yX2dwX2NvdW50ZXJzKTtcXG4rXFx0aSA9IGt2bV9yYW5kb21fdTMyX2luX3JhbmdlKFxcdTAwMjZrdm1fcm5nLCAwLCBucl9ncF9jb3VudGVycyAtIDEpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2dwX2NvdW50ZXJzOyBpKyspIHtcXG4tXFx0XFx0dTY0IGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHxcXG4tXFx0XFx0XFx0XFx0ICAgIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxcbi1cXHRcXHRcXHRcXHQgICAgaW50ZWxfcG11X2FyY2hfZXZlbnRzW2lkeF07XFxuK1xcdGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHwgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8XFxuK1xcdFxcdCAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xcbiBcXG4tXFx0XFx0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICsgaSwgMCk7XFxuLVxcdFxcdGlmIChndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcXG4tXFx0XFx0XFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7XFxuK1xcdHdybXNyKE1TUl9QNl9FVk5UU0VMMCArIGksIDApO1xcbitcXHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXFxuK1xcdFxcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xcbiBcXG4tXFx0XFx0X19ndWVzdF90ZXN0X2FyY2hfZXZlbnQoaWR4LCBpLCBiYXNlX3BtY19tc3IgKyBpLFxcbi1cXHRcXHRcXHRcXHRcXHRNU1JfUDZfRVZOVFNFTDAgKyBpLCBldmVudHNlbCk7XFxuLVxcdH1cXG4rXFx0X19ndWVzdF90ZXN0X2FyY2hfZXZlbnQoaWR4LCBpLCBiYXNlX3BtY19tc3IgKyBpLCBNU1JfUDZfRVZOVFNFTDAgKyBpLCBldmVudHNlbCk7XFxuIFxcbiBcXHRpZiAoIWd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTMyOCwzMCArMzM5LDcyIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZClcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXFxuLVxcdFxcdFxcdCAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcXG4rc3RhdGljIHZvaWQgX190ZXN0X2FyY2hfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxcbitcXHRcXHRcXHQgICAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuLVxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbi1cXG4tXFx0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXFxuLVxcdGlmICghcG11X3ZlcnNpb24pXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdHVuYXZhaWxhYmxlX21hc2sgXFx1MDAyNj0gR0VOTUFTSyhYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLmhpX2JpdCxcXG4gXFx0XFx0XFx0XFx0ICAgIFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0subG9fYml0KTtcXG4gXFxuLVxcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFxcdTAwMjZ2Y3B1LCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzLFxcbi1cXHRcXHRcXHRcXHRcXHQgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4tXFxuIFxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRUJYX0JJVF9WRUNUT1JfTEVOR1RILFxcbiBcXHRcXHRcXHRcXHRsZW5ndGgpO1xcbiBcXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLFxcbiBcXHRcXHRcXHRcXHR1bmF2YWlsYWJsZV9tYXNrKTtcXG4gXFxuIFxcdHJ1bl92Y3B1KHZjcHUpO1xcbit9XFxuIFxcbi1cXHRrdm1fdm1fZnJlZSh2bSk7XFxuK3N0YXRpYyB2b2lkIHRlc3RfYXJjaF9ldmVudHModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGludCBpID0gMDtcXG4rXFx0dTMyIGs7XFxuK1xcdHU4IGo7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxcbitcXHQgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0XFxuK1xcdCAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGxcXG4rXFx0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcXG4rXFx0ICogd3JvbmcgYml0KHMpLlxcbitcXHQgKi9cXG4rXFx0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XFxuK1xcdFxcdDB4MCxcXG4rXFx0XFx0MHhmZmZmZmZmZnUsXFxuK1xcdFxcdDB4YWFhYWFhYWF1LFxcbitcXHRcXHQweDU1NTU1NTU1dSxcXG4rXFx0XFx0MHhmMGYwZjBmMHUsXFxuK1xcdFxcdDB4MGYwZjBmMGZ1LFxcbitcXHRcXHQweGEwYTBhMGEwdSxcXG4rXFx0XFx0MHgwYTBhMGEwYXUsXFxuK1xcdFxcdDB4NTA1MDUwNTB1LFxcbitcXHRcXHQweDA1MDUwNTA1dSxcXG4rXFx0fTtcXG4rXFxuK1xcdHByX2luZm8oXFxcIlRlc3RpbmcgYXJjaCBldmVudHMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuK1xcdFxcdHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XFxuK1xcbitcXHQvKiBUZXN0aW5nIGFyY2ggZXZlbnRzIHJlcXVpcmVzIGEgdlBNVSAodGhlcmUgYXJlIG5vIG5lZ2F0aXZlIHRlc3RzKS4gKi9cXG4rXFx0aWYgKCFwbXVfdmVyc2lvbilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKE5SX0lOVEVMX0FSQ0hfRVZFTlRTICsgMikgKiBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywgcG11X3ZlcnNpb24sXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBlcmZfY2FwYWJpbGl0aWVzLCBcXHUwMDI2dmNwdXMpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwIHRoZSBudW1iZXIgb2ZcXG4rXFx0ICogZXZlbnRzICsxICh0byB2ZXJpZnkgS1ZNIGRvZXNuJ3QgZG8gd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGhcXG4rXFx0ICogaXMgZ3JlYXRlciB0aGFuIHRoZSBob3N0IGxlbmd0aCkuICBFeHBsaWNpdGx5IHRlc3QgYSBtYXNrIG9mICcwJyBhbmRcXG4rXFx0ICogYWxsIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICsgMTsgaisrKSB7XFxuK1xcdFxcdGZvciAoayA9IDE7IGsgXFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgaysrKVxcbitcXHRcXHRcXHRfX3Rlc3RfYXJjaF9ldmVudHModmNwdXNbaSsrXSwgcGVyZl9jYXBhYmlsaXRpZXMsIGosXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHVuYXZhaWxhYmxlX21hc2tzW2tdKTtcXG4rXFx0fVxcbitcXG4rXFx0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNDk1LDIxICs1NDgsMjcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyh2b2lkKVxcbiBcXHRHVUVTVF9ET05FKCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcXG4tXFx0XFx0XFx0ICAgICB1OCBucl9ncF9jb3VudGVycylcXG4rc3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFx0dTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcXG4gXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdHU4IGo7XFxuIFxcbi1cXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyxcXG4tXFx0XFx0XFx0XFx0XFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XFxuK1xcdHByX2luZm8oXFxcIlRlc3RpbmcgJXUgR1AgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuK1xcdFxcdG5yX2dwX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbiBcXG4tXFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyxcXG4tXFx0XFx0XFx0XFx0bnJfZ3BfY291bnRlcnMpO1xcbitcXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cyhucl9ncF9jb3VudGVycyArIDEsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgXFx1MDAyNnZjcHVzKTtcXG4gXFxuLVxcdHJ1bl92Y3B1KHZjcHUpO1xcbitcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2M9IG5yX2dwX2NvdW50ZXJzOyBqKyspIHtcXG4rXFx0XFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdXNbal0sIFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMsXFxuK1xcdFxcdFxcdFxcdFxcdG5yX2dwX2NvdW50ZXJzKTtcXG4gXFxuLVxcdGt2bV92bV9mcmVlKHZtKTtcXG4rXFx0XFx0cnVuX3ZjcHUodmNwdXNbal0pO1xcbitcXHR9XFxuK1xcbitcXHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpXFxuQEAgLTU2MSw1OSArNjIwLDUzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXFxuLVxcdFxcdFxcdFxcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzLCB1MzIgc3VwcG9ydGVkX2JpdG1hc2spXFxuK3N0YXRpYyB2b2lkIF9fdGVzdF9maXhlZF9jb3VudGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IG5yX2ZpeGVkX2NvdW50ZXJzLFxcbitcXHRcXHRcXHRcXHQgIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuLVxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbi1cXG4tXFx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXFxuLVxcdFxcdFxcdFxcdFxcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbi1cXG4gXFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9GSVhFRF9DT1VOVEVSU19CSVRNQVNLLFxcbiBcXHRcXHRcXHRcXHRzdXBwb3J0ZWRfYml0bWFzayk7XFxuIFxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMsXFxuIFxcdFxcdFxcdFxcdG5yX2ZpeGVkX2NvdW50ZXJzKTtcXG4gXFxuIFxcdHJ1bl92Y3B1KHZjcHUpO1xcbit9XFxuIFxcbi1cXHRrdm1fdm1fZnJlZSh2bSk7XFxuK3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcXG4re1xcbitcXHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0aW50IGkgPSAwO1xcbitcXHR1MzIgaztcXG4rXFx0dTggajtcXG4rXFxuK1xcdHByX2luZm8oXFxcIlRlc3RpbmcgJXUgZml4ZWQgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuK1xcdFxcdG5yX2ZpeGVkX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbitcXG4rXFxuK1xcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKChucl9maXhlZF9jb3VudGVycyArIDEpICogQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcXHUwMDI2dmNwdXMpO1xcbitcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaisrKSB7XFxuK1xcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYz0gKEJJVChucl9maXhlZF9jb3VudGVycykgLSAxKTsgaysrKVxcbitcXHRcXHRcXHRfX3Rlc3RfZml4ZWRfY291bnRlcnModmNwdXNbaSsrXSwgaiwgayk7XFxuK1xcdH1cXG4rXFxuK1xcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcXG4ge1xcbi1cXHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XFxuLVxcdHU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTtcXG4gXFx0dTggcG11X3ZlcnNpb24gPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTik7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbi1cXHR1OCB2LCBqO1xcbi1cXHR1MzIgaztcXG4rXFx0dTggdjtcXG4gXFxuIFxcdGNvbnN0IHU2NCBwZXJmX2NhcHNbXSA9IHtcXG4gXFx0XFx0MCxcXG4gXFx0XFx0UE1VX0NBUF9GV19XUklURVMsXFxuIFxcdH07XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxcbi1cXHQgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0XFxuLVxcdCAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGxcXG4tXFx0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcXG4tXFx0ICogd3JvbmcgYml0KHMpLlxcbi1cXHQgKi9cXG4tXFx0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XFxuLVxcdFxcdDB4MCxcXG4tXFx0XFx0MHhmZmZmZmZmZnUsXFxuLVxcdFxcdDB4YWFhYWFhYWF1LFxcbi1cXHRcXHQweDU1NTU1NTU1dSxcXG4tXFx0XFx0MHhmMGYwZjBmMHUsXFxuLVxcdFxcdDB4MGYwZjBmMGZ1LFxcbi1cXHRcXHQweGEwYTBhMGEwdSxcXG4tXFx0XFx0MHgwYTBhMGEwYXUsXFxuLVxcdFxcdDB4NTA1MDUwNTB1LFxcbi1cXHRcXHQweDA1MDUwNTA1dSxcXG4tXFx0fTtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIFRlc3QgdXAgdG8gUE1VIHY1LCB3aGljaCBpcyB0aGUgY3VycmVudCBtYXhpbXVtIHZlcnNpb24gZGVmaW5lZCBieVxcbiBcXHQgKiBJbnRlbCwgaS5lLiBpcyB0aGUgbGFzdCB2ZXJzaW9uIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBiYWNrd2FyZHNcXG5AQCAtNjQ5LDMyICs3MDIsOSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXFxuIFxcdFxcdFxcdGlmICgha3ZtX2hhc19wZXJmX2NhcHMgXFx1MDAyNlxcdTAwMjYgcGVyZl9jYXBzW2ldKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdHByX2luZm8oXFxcIlRlc3RpbmcgYXJjaCBldmVudHMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHYsIHBlcmZfY2Fwc1tpXSk7XFxuLVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXBcXG4tXFx0XFx0XFx0ICogdGhlIG51bWJlciBvZiBldmVudHMgKzEgKHRvIHZlcmlmeSBLVk0gZG9lc24ndCBkb1xcbi1cXHRcXHRcXHQgKiB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlXFxuLVxcdFxcdFxcdCAqIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJzAnIGFuZCBhbGxcXG4tXFx0XFx0XFx0ICogb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYz0gTlJfSU5URUxfQVJDSF9FVkVOVFMgKyAxOyBqKyspIHtcXG4tXFx0XFx0XFx0XFx0Zm9yIChrID0gMTsgayBcXHUwMDNjIEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrKyspXFxuLVxcdFxcdFxcdFxcdFxcdHRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldLCBqLCB1bmF2YWlsYWJsZV9tYXNrc1trXSk7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdHByX2luZm8oXFxcIlRlc3RpbmcgR1AgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHYsIHBlcmZfY2Fwc1tpXSk7XFxuLVxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGorKylcXG4tXFx0XFx0XFx0XFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGopO1xcbi1cXG4tXFx0XFx0XFx0cHJfaW5mbyhcXFwiVGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0diwgcGVyZl9jYXBzW2ldKTtcXG4tXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaisrKSB7XFxuLVxcdFxcdFxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYz0gKEJJVChucl9maXhlZF9jb3VudGVycykgLSAxKTsgaysrKVxcbi1cXHRcXHRcXHRcXHRcXHR0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgayk7XFxuLVxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0dGVzdF9hcmNoX2V2ZW50cyh2LCBwZXJmX2NhcHNbaV0pO1xcbitcXHRcXHRcXHR0ZXN0X2dwX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7XFxuK1xcdFxcdFxcdHRlc3RfZml4ZWRfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6NDU6NTEuNTIwMDk4MjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NzY2NDE5ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggaXMgdXNlci1zcGFjZSB0ZXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg0ZGNkODFlZWViMTY3NjQ4MzlhOTg4NTM3ODFkNjlkYjAxYTA1ODBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjQ1OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuaW5kZXggZTgzNTZlZTU0ZDdiOS4uYTZhM2UxNjU3ODk1OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuQEAgLTEzNSw4ICsxMzUsOCBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1fcmFuZG9tX3U2NChzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXG4gXHRyZXR1cm4gKCh1NjQpa3ZtX3JhbmRvbV91MzIoc3RhdGUpIFx1MDAzY1x1MDAzYyAzMikgfCBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7XG4gfVxuIFxuLXU2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sXG4tXHRcdFx0ICAgIHU2NCBtYXgpO1xuK3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpO1xuK3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpO1xuIFxuIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUge1xuIFx0Vk1fTUVNX1NSQ19BTk9OWU1PVVMsXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcbmluZGV4IDZiMDBhYjExZjNjMDIuLjRkZmY3MmY2YmQzNDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG5AQCAtNDMsMTIgKzQzLDI2IEBAIHUzMiBrdm1fcmFuZG9tX3UzMihzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXG4gXHRyZXR1cm4gc3RhdGUtXHUwMDNlc2VlZDtcbiB9XG4gXG4rLyogUmV0dXJucyBhIHJhbmRvbSB1MzIgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4rdTMyIGt2bV9yYW5kb21fdTMyX2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTMyIG1pbiwgdTMyIG1heClcbit7XG4rXHR1MzIgdmFsdWUsIHJhbmdlO1xuK1xuK1x0VEVTVF9BU1NFUlQobWluIFx1MDAzYz0gbWF4LCBcIlBFQktBQywgbWluID0gMHgleCwgbWF4ID0gMHgleFwiLCBtaW4sIG1heCk7XG4rXG4rXHR2YWx1ZSA9IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbitcbitcdHJhbmdlID0gbWF4IC0gbWluO1xuK1x0aWYgKHJhbmdlID09IFVJTlRfTUFYKVxuK1x0XHRyZXR1cm4gdmFsdWU7XG4rXG4rXHRyZXR1cm4gbWluICsgKHZhbHVlICUgKHJhbmdlICsgMSkpO1xuK31cbitcbiAvKiBSZXR1cm5zIGEgcmFuZG9tIHU2NCBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFttaW4sIG1heF0gKi9cbi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLFxuLVx0XHRcdCAgICB1NjQgbWF4KVxuK3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpXG4ge1xuLVx0dTY0IHZhbHVlO1xuLVx0dTY0IHJhbmdlO1xuK1x0dTY0IHZhbHVlLCByYW5nZTtcbiBcbiBcdFRFU1RfQVNTRVJUKG1pbiBcdTAwM2M9IG1heCwgXCJQRUJLQUMsIG1pbiA9IDB4JWx4LCBtYXggPSAweCVseFwiLCBtaW4sIG1heCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jXG5pbmRleCBkYzZhZmFjM2FhOTE5Li5jN2M1NjYyMjAzODE1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbkBAIC04NywxNCArODcsMTggQEAgc3RhdGljIHN0cnVjdCBrdm1faW50ZWxfcG11X2V2ZW50IGludGVsX2V2ZW50X3RvX2ZlYXR1cmUodTggaWR4KVxuIFx0cmV0dXJuIF9faW50ZWxfZXZlbnRfdG9fZmVhdHVyZVtpZHhdO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsXG4tXHRcdFx0XHRcdFx0ICB2b2lkICpndWVzdF9jb2RlLFxuLVx0XHRcdFx0XHRcdCAgdTggcG11X3ZlcnNpb24sXG4tXHRcdFx0XHRcdFx0ICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4rc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cyh1MzIgbnJfdmNwdXMsIHZvaWQgKmd1ZXN0X2NvZGUsXG4rXHRcdFx0XHRcdCAgICAgICB1OCBwbXVfdmVyc2lvbixcbitcdFx0XHRcdFx0ICAgICAgIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbitcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqKl9fdmNwdXNbXSlcbiB7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cyA9IGNhbGxvYyhucl92Y3B1cywgc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSkpO1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4rXHRpbnQgaTtcbiBcbi1cdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7XG4rXHQqX192Y3B1cyA9IHZjcHVzO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cyhucl92Y3B1cywgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9wbXVfdmVyc2lvbik7XG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgaGFyZHdhcmVfcG11X2FyY2hfZXZlbnRzKTtcbiBcbkBAIC0xMDIsMTMgKzEwNiwyMiBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsXG4gXHQgKiBTZXQgUEVSRl9DQVBBQklMSVRJRVMgYmVmb3JlIFBNVSB2ZXJzaW9uIGFzIEtWTSBkaXNhbGxvd3MgZW5hYmxpbmdcbiBcdCAqIGZlYXR1cmVzIHZpYSBQRVJGX0NBUEFCSUxJVElFUyBpZiB0aGUgZ3Vlc3QgZG9lc24ndCBoYXZlIGEgdlBNVS5cbiBcdCAqL1xuLVx0aWYgKGt2bV9oYXNfcGVyZl9jYXBzKVxuLVx0XHR2Y3B1X3NldF9tc3IoKnZjcHUsIE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSsrKSB7XG4rXHRcdGlmIChrdm1faGFzX3BlcmZfY2FwcylcbitcdFx0XHR2Y3B1X3NldF9tc3IodmNwdXNbaV0sIE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4rXG4rXHRcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2ldLCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcbitcdH1cbiBcbi1cdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KCp2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcbiBcdHJldHVybiB2bTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcG11X3ZtX2ZyZWUoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzKVxuK3tcbitcdGt2bV92bV9mcmVlKHZtKTtcbitcdGZyZWUodmNwdXMpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHVjYWxsIHVjO1xuQEAgLTI3Myw2ICsyODYsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KVxuIFx0c3RydWN0IGt2bV94ODZfcG11X2ZlYXR1cmUgZ3BfZXZlbnQsIGZpeGVkX2V2ZW50O1xuIFx0dTMyIGJhc2VfcG1jX21zcjtcbiBcdHVuc2lnbmVkIGludCBpO1xuK1x0dTY0IGV2ZW50c2VsO1xuIFxuIFx0LyogVGhlIGhvc3Qgc2lkZSBzaG91bGRuJ3QgaW52b2tlIHRoaXMgd2l0aG91dCBhIGd1ZXN0IFBNVS4gKi9cbiBcdEdVRVNUX0FTU0VSVChwbXVfdmVyc2lvbik7XG5AQCAtMjg3LDE5ICszMDEsMTYgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KHU4IGlkeClcbiBcdEdVRVNUX0FTU0VSVF9FUShpZHgsIGdwX2V2ZW50LmYuYml0KTtcbiBcbiBcdEdVRVNUX0FTU0VSVChucl9ncF9jb3VudGVycyk7XG4rXHRpID0ga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2UoXHUwMDI2a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2dwX2NvdW50ZXJzOyBpKyspIHtcbi1cdFx0dTY0IGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHxcbi1cdFx0XHRcdCAgICBBUkNIX1BFUkZNT05fRVZFTlRTRUxfRU5BQkxFIHxcbi1cdFx0XHRcdCAgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTtcbitcdGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHwgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8XG4rXHRcdCAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xuIFxuLVx0XHR3cm1zcihNU1JfUDZfRVZOVFNFTDAgKyBpLCAwKTtcbi1cdFx0aWYgKGd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxuLVx0XHRcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xuK1x0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICsgaSwgMCk7XG4rXHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXG4rXHRcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xuIFxuLVx0XHRfX2d1ZXN0X3Rlc3RfYXJjaF9ldmVudChpZHgsIGksIGJhc2VfcG1jX21zciArIGksXG4tXHRcdFx0XHRcdE1TUl9QNl9FVk5UU0VMMCArIGksIGV2ZW50c2VsKTtcbi1cdH1cbitcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICsgaSwgTVNSX1A2X0VWTlRTRUwwICsgaSwgZXZlbnRzZWwpO1xuIFxuIFx0aWYgKCFndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcbiBcdFx0cmV0dXJuO1xuQEAgLTMyOCwzMCArMzM5LDcyIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuLVx0XHRcdCAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbitzdGF0aWMgdm9pZCBfX3Rlc3RfYXJjaF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4rXHRcdFx0ICAgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spXG4ge1xuLVx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0c3RydWN0IGt2bV92bSAqdm07XG4tXG4tXHQvKiBUZXN0aW5nIGFyY2ggZXZlbnRzIHJlcXVpcmVzIGEgdlBNVSAodGhlcmUgYXJlIG5vIG5lZ2F0aXZlIHRlc3RzKS4gKi9cbi1cdGlmICghcG11X3ZlcnNpb24pXG4tXHRcdHJldHVybjtcbi1cbiBcdHVuYXZhaWxhYmxlX21hc2sgXHUwMDI2PSBHRU5NQVNLKFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0suaGlfYml0LFxuIFx0XHRcdFx0ICAgIFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0subG9fYml0KTtcbiBcbi1cdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHMsXG4tXHRcdFx0XHRcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuLVxuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9FQlhfQklUX1ZFQ1RPUl9MRU5HVEgsXG4gXHRcdFx0XHRsZW5ndGgpO1xuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSyxcbiBcdFx0XHRcdHVuYXZhaWxhYmxlX21hc2spO1xuIFxuIFx0cnVuX3ZjcHUodmNwdSk7XG4rfVxuIFxuLVx0a3ZtX3ZtX2ZyZWUodm0pO1xuK3N0YXRpYyB2b2lkIHRlc3RfYXJjaF9ldmVudHModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0aW50IGkgPSAwO1xuK1x0dTMyIGs7XG4rXHR1OCBqO1xuK1xuK1x0LypcbitcdCAqIFRvIGtlZXAgdGhlIHRvdGFsIHJ1bnRpbWUgcmVhc29uYWJsZSwgdGVzdCBvbmx5IGEgaGFuZGZ1bCBvZiBzZWxlY3QsXG4rXHQgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0XG4rXHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXG4rXHQgKiBhcyBhbHRlcm5hdGluZyBiaXQgc2VxdWVuY3VlcywgZS5nLiB0byBkZXRlY3QgaWYgS1ZNIGlzIGNoZWNraW5nIHRoZVxuK1x0ICogd3JvbmcgYml0KHMpLlxuK1x0ICovXG4rXHRjb25zdCB1MzIgdW5hdmFpbGFibGVfbWFza3NbXSA9IHtcbitcdFx0MHgwLFxuK1x0XHQweGZmZmZmZmZmdSxcbitcdFx0MHhhYWFhYWFhYXUsXG4rXHRcdDB4NTU1NTU1NTV1LFxuK1x0XHQweGYwZjBmMGYwdSxcbitcdFx0MHgwZjBmMGYwZnUsXG4rXHRcdDB4YTBhMGEwYTB1LFxuK1x0XHQweDBhMGEwYTBhdSxcbitcdFx0MHg1MDUwNTA1MHUsXG4rXHRcdDB4MDUwNTA1MDV1LFxuK1x0fTtcbitcbitcdHByX2luZm8oXCJUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4rXHRcdHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4rXG4rXHQvKiBUZXN0aW5nIGFyY2ggZXZlbnRzIHJlcXVpcmVzIGEgdlBNVSAodGhlcmUgYXJlIG5vIG5lZ2F0aXZlIHRlc3RzKS4gKi9cbitcdGlmICghcG11X3ZlcnNpb24pXG4rXHRcdHJldHVybjtcbitcbitcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKChOUl9JTlRFTF9BUkNIX0VWRU5UUyArIDIpICogQVJSQVlfU0laRSh1bmF2YWlsYWJsZV9tYXNrcyksXG4rXHRcdFx0XHQgICAgICBndWVzdF90ZXN0X2FyY2hfZXZlbnRzLCBwbXVfdmVyc2lvbixcbitcdFx0XHRcdCAgICAgIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4rXG4rXHQvKlxuK1x0ICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwIHRoZSBudW1iZXIgb2ZcbitcdCAqIGV2ZW50cyArMSAodG8gdmVyaWZ5IEtWTSBkb2Vzbid0IGRvIHdlaXJkIHRoaW5ncyBpZiB0aGUgZ3Vlc3QgbGVuZ3RoXG4rXHQgKiBpcyBncmVhdGVyIHRoYW4gdGhlIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJzAnIGFuZFxuK1x0ICogYWxsIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXG4rXHQgKi9cbitcdGZvciAoaiA9IDA7IGogXHUwMDNjPSBOUl9JTlRFTF9BUkNIX0VWRU5UUyArIDE7IGorKykge1xuK1x0XHRmb3IgKGsgPSAxOyBrIFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgaysrKVxuK1x0XHRcdF9fdGVzdF9hcmNoX2V2ZW50cyh2Y3B1c1tpKytdLCBwZXJmX2NhcGFiaWxpdGllcywgaixcbitcdFx0XHRcdFx0ICAgdW5hdmFpbGFibGVfbWFza3Nba10pO1xuK1x0fVxuK1xuK1x0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcbiB9XG4gXG4gLypcbkBAIC00OTUsMjEgKzU0OCwyNyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2dwX2NvdW50ZXJzKHZvaWQpXG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbi1cdFx0XHQgICAgIHU4IG5yX2dwX2NvdW50ZXJzKVxuK3N0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHR1OCBucl9ncF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyk7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbiBcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0dTggajtcbiBcbi1cdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXG4tXHRcdFx0XHRcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuK1x0cHJfaW5mbyhcIlRlc3RpbmcgJXUgR1AgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXG5cIixcbitcdFx0bnJfZ3BfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLFxuLVx0XHRcdFx0bnJfZ3BfY291bnRlcnMpO1xuK1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfZ3BfY291bnRlcnMgKyAxLCBndWVzdF90ZXN0X2dwX2NvdW50ZXJzLFxuK1x0XHRcdFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4gXG4tXHRydW5fdmNwdSh2Y3B1KTtcbitcdGZvciAoaiA9IDA7IGogXHUwMDNjPSBucl9ncF9jb3VudGVyczsgaisrKSB7XG4rXHRcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2pdLCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLFxuK1x0XHRcdFx0XHRucl9ncF9jb3VudGVycyk7XG4gXG4tXHRrdm1fdm1fZnJlZSh2bSk7XG4rXHRcdHJ1bl92Y3B1KHZjcHVzW2pdKTtcbitcdH1cbitcbitcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcbkBAIC01NjEsNTkgKzYyMCw1MyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpXG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbi1cdFx0XHRcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzLCB1MzIgc3VwcG9ydGVkX2JpdG1hc2spXG4rc3RhdGljIHZvaWQgX190ZXN0X2ZpeGVkX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggbnJfZml4ZWRfY291bnRlcnMsXG4rXHRcdFx0XHQgIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXG4tXHRcdFx0XHRcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuLVxuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9GSVhFRF9DT1VOVEVSU19CSVRNQVNLLFxuIFx0XHRcdFx0c3VwcG9ydGVkX2JpdG1hc2spO1xuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyxcbiBcdFx0XHRcdG5yX2ZpeGVkX2NvdW50ZXJzKTtcbiBcbiBcdHJ1bl92Y3B1KHZjcHUpO1xuK31cbiBcbi1cdGt2bV92bV9mcmVlKHZtKTtcbitzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4re1xuK1x0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xuK1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBpID0gMDtcbitcdHUzMiBrO1xuK1x0dTggajtcbitcbitcdHByX2luZm8oXCJUZXN0aW5nICV1IGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4rXHRcdG5yX2ZpeGVkX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuK1xuK1xuK1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKG5yX2ZpeGVkX2NvdW50ZXJzICsgMSkgKiBCSVQobnJfZml4ZWRfY291bnRlcnMpLFxuK1x0XHRcdFx0ICAgICAgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyxcbitcdFx0XHRcdCAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgXHUwMDI2dmNwdXMpO1xuK1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2M9IG5yX2ZpeGVkX2NvdW50ZXJzOyBqKyspIHtcbitcdFx0Zm9yIChrID0gMDsgayBcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsrKylcbitcdFx0XHRfX3Rlc3RfZml4ZWRfY291bnRlcnModmNwdXNbaSsrXSwgaiwgayk7XG4rXHR9XG4rXG4rXHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXG4ge1xuLVx0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xuLVx0dTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpO1xuIFx0dTggcG11X3ZlcnNpb24gPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTik7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbi1cdHU4IHYsIGo7XG4tXHR1MzIgaztcbitcdHU4IHY7XG4gXG4gXHRjb25zdCB1NjQgcGVyZl9jYXBzW10gPSB7XG4gXHRcdDAsXG4gXHRcdFBNVV9DQVBfRldfV1JJVEVTLFxuIFx0fTtcbiBcbi1cdC8qXG4tXHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxuLVx0ICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdFxuLVx0ICogMCAoYWxsIGV2ZW50cyBhdmFpbGFibGUpIGFuZCBhbGwgb25lcyAobm8gZXZlbnRzIGF2YWlsYWJsZSkgYXMgd2VsbFxuLVx0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcbi1cdCAqIHdyb25nIGJpdChzKS5cbi1cdCAqL1xuLVx0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XG4tXHRcdDB4MCxcbi1cdFx0MHhmZmZmZmZmZnUsXG4tXHRcdDB4YWFhYWFhYWF1LFxuLVx0XHQweDU1NTU1NTU1dSxcbi1cdFx0MHhmMGYwZjBmMHUsXG4tXHRcdDB4MGYwZjBmMGZ1LFxuLVx0XHQweGEwYTBhMGEwdSxcbi1cdFx0MHgwYTBhMGEwYXUsXG4tXHRcdDB4NTA1MDUwNTB1LFxuLVx0XHQweDA1MDUwNTA1dSxcbi1cdH07XG4tXG4gXHQvKlxuIFx0ICogVGVzdCB1cCB0byBQTVUgdjUsIHdoaWNoIGlzIHRoZSBjdXJyZW50IG1heGltdW0gdmVyc2lvbiBkZWZpbmVkIGJ5XG4gXHQgKiBJbnRlbCwgaS5lLiBpcyB0aGUgbGFzdCB2ZXJzaW9uIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBiYWNrd2FyZHNcbkBAIC02NDksMzIgKzcwMiw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcbiBcdFx0XHRpZiAoIWt2bV9oYXNfcGVyZl9jYXBzIFx1MDAyNlx1MDAyNiBwZXJmX2NhcHNbaV0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRwcl9pbmZvKFwiVGVzdGluZyBhcmNoIGV2ZW50cywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRlc3Qgc2luZ2xlIGJpdHMgZm9yIGFsbCBQTVUgdmVyc2lvbiBhbmQgbGVuZ3RocyB1cFxuLVx0XHRcdCAqIHRoZSBudW1iZXIgb2YgZXZlbnRzICsxICh0byB2ZXJpZnkgS1ZNIGRvZXNuJ3QgZG9cbi1cdFx0XHQgKiB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlXG4tXHRcdFx0ICogaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAnMCcgYW5kIGFsbFxuLVx0XHRcdCAqIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXG4tXHRcdFx0ICovXG4tXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICsgMTsgaisrKSB7XG4tXHRcdFx0XHRmb3IgKGsgPSAxOyBrIFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgaysrKVxuLVx0XHRcdFx0XHR0ZXN0X2FyY2hfZXZlbnRzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgdW5hdmFpbGFibGVfbWFza3Nba10pO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRwcl9pbmZvKFwiVGVzdGluZyBHUCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGorKylcbi1cdFx0XHRcdHRlc3RfZ3BfY291bnRlcnModiwgcGVyZl9jYXBzW2ldLCBqKTtcbi1cbi1cdFx0XHRwcl9pbmZvKFwiVGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZml4ZWRfY291bnRlcnM7IGorKykge1xuLVx0XHRcdFx0Zm9yIChrID0gMDsgayBcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsrKylcbi1cdFx0XHRcdFx0dGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGosIGspO1xuLVx0XHRcdH1cbitcdFx0XHR0ZXN0X2FyY2hfZXZlbnRzKHYsIHBlcmZfY2Fwc1tpXSk7XG4rXHRcdFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pO1xuK1x0XHRcdHRlc3RfZml4ZWRfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTtcbiBcdFx0fVxuIFx0fVxuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjQ1OjUxLjUyMDEwMTM1OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3NjYzOTYwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IERldGVybWluaW5nIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgaXQncyB0b3VjaGluZyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNgLiBSaWdodCBhd2F5LCBJJ20gdGhpbmtpbmcsIHRoaXMgbG9va3MgbGlrZSBpdCdzIG1ha2luZyBzb21lIGNoYW5nZXMgdG8gdGhlIEtWTSBzZWxmdGVzdHMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB3ZSdyZSBhZGRpbmcgYGt2bV9yYW5kb21fdTMyX2luX3JhbmdlYCB0byBgdGVzdF91dGlsLmNgLCBhbmQgdGhlIGBwbXVfY291bnRlcnNfdGVzdC5jYCBmaWxlIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGhhbmRsZSBWTXMgd2l0aCBtdWx0aXBsZSB2Q1BVcywgd2hpY2ggaXMgbGlrZWx5IGZvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuXG5cbk5vdywgbGV0IG1lIHBhdXNlIGFuZCB0aGluayB0aHJvdWdoIHRoaXMuIFRoZXNlIGZpbGVzIGFyZSAqc3BlY2lmaWNhbGx5KiBpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeS4gVGhhdCdzIGEga2V5IGRldGFpbC4gVGhpcyBpc24ndCB0b3VjaGluZyBjb3JlIGtlcm5lbCBjb2RlLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGlzIGlzIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBzZWxmdGVzdCBmcmFtZXdvcmsuXG5cbkxldCdzIHJlZmVyIGJhY2sgdG8gdGhlIGluc3RydWN0aW9ucyB3ZSBoYXZlIGZvciB0aGlzLiBUaGUgaW5zdHJ1Y3Rpb25zIHN0YXRlIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBtb2RpZmljYXRpb25zIHRvIHRoaW5ncyBsaWtlIERvY3VtZW50YXRpb24sIEtjb25maWcgZmlsZXMsIGNvbW1lbnRzLCBsb2dnaW5nLCBhbmQgY29uc3RhbnRzIHRoYXQgZG9uJ3QgY2hhbmdlIGV4ZWN1dGlvbiBmbG93LCBvciB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiBBbHNvLCBpbXBvcnRhbnRseSwgaXQgbWVudGlvbnMgbm90IGZ1enppbmcgdmVuZG9yLXNwZWNpZmljIFBDSWUgYW5kIEdQVSBkcml2ZXIgY29kZSByZXF1aXJpbmcgc3BlY2lhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQsIGFuZCBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzLiBJIGRvbid0IHNlZSBhbnl0aGluZyBleHBsaWNpdGx5IGFib3V0IHNlbGZ0ZXN0cywgYnV0IHRoZXNlIHRlc3RzIGFyZSBub3QgcGFydCBvZiB0aGUga2VybmVsIGl0c2VsZi5cblxuVGhlIGluc3RydWN0aW9ucyBhbHNvIHN0YXRlLCDigJxJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLuKAnSBTaW5jZSB0aGlzIHBhdGNoIGlzICpvbmx5KiBtb2RpZnlpbmcgZmlsZXMgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCBkaXJlY3RvcnksIGl0J3Mgbm90IGFjdHVhbGx5IHRvdWNoaW5nIGNvcmUga2VybmVsIGNvZGUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGFmZmVjdGVkIGZpbGVzOiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jYC4gWWVzLCBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgZGlyZWN0b3J5LlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50LiBJJ2xsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuUmVhc29uaW5nOiBUaGlzIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5LiBUaGlzIGlzIHVzZXItc3BhY2UgdGVzdCBjb2RlLCBhbmQgaXQgZG9lc24ndCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGVyZWZvcmUsIGZ1enppbmcgaXNuJ3Qgd2FycmFudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzQxLCJPdXRwdXRUb2tlbnMiOjczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6NDY6MDEuMjg2NTAwMzk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggaXMgdXNlci1zcGFjZSB0ZXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBpcyB1c2VyLXNwYWNlIHRlc3QgY29kZSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj4zkg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 17:44:46 +0000 UTC FinishedAt: 2026-08-04 17:46:02 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBpcyB1c2VyLXNwYWNlIHRlc3QgY29kZSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNzo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg0ZGNkODFlZWViMTY3NjQ4MzlhOTg4NTM3ODFkNjlkYjAxYTA1ODBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjQ1OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbmluZGV4IGU4MzU2ZWU1NGQ3YjkuLmE2YTNlMTY1Nzg5NTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0xMzUsOCAmIzQzOzEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9yYW5kb21fdTY0KHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgXHUwMDNjXHUwMDNjIDMyKSB8IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbiB9XG4gXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heCk7XG4mIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpO1xuJiM0Mzt1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KTtcbiBcbiBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHtcbiBcdFZNX01FTV9TUkNfQU5PTllNT1VTLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG5pbmRleCA2YjAwYWIxMWYzYzAyLi40ZGZmNzJmNmJkMzQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuQEAgLTQzLDEyICYjNDM7NDMsMjYgQEAgdTMyIGt2bV9yYW5kb21fdTMyKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiBzdGF0ZS1cdTAwM2VzZWVkO1xuIH1cbiBcbiYjNDM7LyogUmV0dXJucyBhIHJhbmRvbSB1MzIgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4mIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsdWUsIHJhbmdlO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVChtaW4gXHUwMDNjPSBtYXgsIFwmIzM0O1BFQktBQywgbWluID0gMHgleCwgbWF4ID0gMHgleFwmIzM0OywgbWluLCBtYXgpO1xuJiM0MztcbiYjNDM7XHR2YWx1ZSA9IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSBtYXggLSBtaW47XG4mIzQzO1x0aWYgKHJhbmdlID09IFVJTlRfTUFYKVxuJiM0MztcdFx0cmV0dXJuIHZhbHVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWluICYjNDM7ICh2YWx1ZSAlIChyYW5nZSAmIzQzOyAxKSk7XG4mIzQzO31cbiYjNDM7XG4gLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heClcbiYjNDM7dTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heClcbiB7XG4tXHR1NjQgdmFsdWU7XG4tXHR1NjQgcmFuZ2U7XG4mIzQzO1x0dTY0IHZhbHVlLCByYW5nZTtcbiBcbiBcdFRFU1RfQVNTRVJUKG1pbiBcdTAwM2M9IG1heCwgXCYjMzQ7UEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHhcJiMzNDssIG1pbiwgbWF4KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbmluZGV4IGRjNmFmYWMzYWE5MTkuLmM3YzU2NjIyMDM4MTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuQEAgLTg3LDE0ICYjNDM7ODcsMTggQEAgc3RhdGljIHN0cnVjdCBrdm1faW50ZWxfcG11X2V2ZW50IGludGVsX2V2ZW50X3RvX2ZlYXR1cmUodTggaWR4KVxuIFx0cmV0dXJuIF9faW50ZWxfZXZlbnRfdG9fZmVhdHVyZVtpZHhdO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsXG4tXHRcdFx0XHRcdFx0ICB2b2lkICpndWVzdF9jb2RlLFxuLVx0XHRcdFx0XHRcdCAgdTggcG11X3ZlcnNpb24sXG4tXHRcdFx0XHRcdFx0ICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXModTMyIG5yX3ZjcHVzLCB2b2lkICpndWVzdF9jb2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHU4IHBtdV92ZXJzaW9uLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKipfX3ZjcHVzW10pXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzID0gY2FsbG9jKG5yX3ZjcHVzLCBzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSk7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaTtcbiBcbi1cdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7XG4mIzQzO1x0Kl9fdmNwdXMgPSB2Y3B1cztcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cyhucl92Y3B1cywgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9wbXVfdmVyc2lvbik7XG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgaGFyZHdhcmVfcG11X2FyY2hfZXZlbnRzKTtcbiBcbkBAIC0xMDIsMTMgJiM0MzsxMDYsMjIgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LFxuIFx0ICogU2V0IFBFUkZfQ0FQQUJJTElUSUVTIGJlZm9yZSBQTVUgdmVyc2lvbiBhcyBLVk0gZGlzYWxsb3dzIGVuYWJsaW5nXG4gXHQgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJiMzOTt0IGhhdmUgYSB2UE1VLlxuIFx0ICovXG4tXHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXG4tXHRcdHZjcHVfc2V0X21zcigqdmNwdSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChrdm1faGFzX3BlcmZfY2FwcylcbiYjNDM7XHRcdFx0dmNwdV9zZXRfbXNyKHZjcHVzW2ldLCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpO1xuJiM0MztcbiYjNDM7XHRcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2ldLCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcbiYjNDM7XHR9XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSgqdmNwdSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7XG4gXHRyZXR1cm4gdm07XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBwbXVfdm1fZnJlZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXMpXG4mIzQzO3tcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO1x0ZnJlZSh2Y3B1cyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB1Y2FsbCB1YztcbkBAIC0yNzMsNiAmIzQzOzI4Niw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXG4gXHRzdHJ1Y3Qga3ZtX3g4Nl9wbXVfZmVhdHVyZSBncF9ldmVudCwgZml4ZWRfZXZlbnQ7XG4gXHR1MzIgYmFzZV9wbWNfbXNyO1xuIFx0dW5zaWduZWQgaW50IGk7XG4mIzQzO1x0dTY0IGV2ZW50c2VsO1xuIFxuIFx0LyogVGhlIGhvc3Qgc2lkZSBzaG91bGRuJiMzOTt0IGludm9rZSB0aGlzIHdpdGhvdXQgYSBndWVzdCBQTVUuICovXG4gXHRHVUVTVF9BU1NFUlQocG11X3ZlcnNpb24pO1xuQEAgLTI4NywxOSAmIzQzOzMwMSwxNiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KVxuIFx0R1VFU1RfQVNTRVJUX0VRKGlkeCwgZ3BfZXZlbnQuZi5iaXQpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKG5yX2dwX2NvdW50ZXJzKTtcbiYjNDM7XHRpID0ga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2UoXHUwMDI2a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2dwX2NvdW50ZXJzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1NjQgZXZlbnRzZWwgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MgfFxuLVx0XHRcdFx0ICAgIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxuLVx0XHRcdFx0ICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xuJiM0MztcdGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHwgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8XG4mIzQzO1x0XHQgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTtcbiBcbi1cdFx0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApO1xuLVx0XHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXG4tXHRcdFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7XG4mIzQzO1x0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApO1xuJiM0MztcdGlmIChndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcbiYjNDM7XHRcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xuIFxuLVx0XHRfX2d1ZXN0X3Rlc3RfYXJjaF9ldmVudChpZHgsIGksIGJhc2VfcG1jX21zciAmIzQzOyBpLFxuLVx0XHRcdFx0XHRNU1JfUDZfRVZOVFNFTDAgJiM0MzsgaSwgZXZlbnRzZWwpO1xuLVx0fVxuJiM0MztcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICYjNDM7IGksIE1TUl9QNl9FVk5UU0VMMCAmIzQzOyBpLCBldmVudHNlbCk7XG4gXG4gXHRpZiAoIWd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxuIFx0XHRyZXR1cm47XG5AQCAtMzI4LDMwICYjNDM7MzM5LDcyIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuLVx0XHRcdCAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbiYjNDM7c3RhdGljIHZvaWQgX190ZXN0X2FyY2hfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuJiM0MztcdFx0XHQgICAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdC8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqL1xuLVx0aWYgKCFwbXVfdmVyc2lvbilcbi1cdFx0cmV0dXJuO1xuLVxuIFx0dW5hdmFpbGFibGVfbWFzayBcdTAwMjY9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsXG4gXHRcdFx0XHQgICAgWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5sb19iaXQpO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4tXG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCxcbiBcdFx0XHRcdGxlbmd0aCk7XG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLFxuIFx0XHRcdFx0dW5hdmFpbGFibGVfbWFzayk7XG4gXG4gXHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7fVxuIFxuLVx0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1x0dTMyIGs7XG4mIzQzO1x0dTggajtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxuJiM0MztcdCAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3RcbiYjNDM7XHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXG4mIzQzO1x0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcbiYjNDM7XHQgKiB3cm9uZyBiaXQocykuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XG4mIzQzO1x0XHQweDAsXG4mIzQzO1x0XHQweGZmZmZmZmZmdSxcbiYjNDM7XHRcdDB4YWFhYWFhYWF1LFxuJiM0MztcdFx0MHg1NTU1NTU1NXUsXG4mIzQzO1x0XHQweGYwZjBmMGYwdSxcbiYjNDM7XHRcdDB4MGYwZjBmMGZ1LFxuJiM0MztcdFx0MHhhMGEwYTBhMHUsXG4mIzQzO1x0XHQweDBhMGEwYTBhdSxcbiYjNDM7XHRcdDB4NTA1MDUwNTB1LFxuJiM0MztcdFx0MHgwNTA1MDUwNXUsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0cG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XG4mIzQzO1x0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXG4mIzQzO1x0aWYgKCFwbXVfdmVyc2lvbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDIpICogQVJSQVlfU0laRSh1bmF2YWlsYWJsZV9tYXNrcyksXG4mIzQzO1x0XHRcdFx0ICAgICAgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywgcG11X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0ICAgICAgcGVyZl9jYXBhYmlsaXRpZXMsIFx1MDAyNnZjcHVzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXAgdGhlIG51bWJlciBvZlxuJiM0MztcdCAqIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG8gd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGhcbiYjNDM7XHQgKiBpcyBncmVhdGVyIHRoYW4gdGhlIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kXG4mIzQzO1x0ICogYWxsIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChqID0gMDsgaiBcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDE7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGsgPSAxOyBrIFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgayYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdF9fdGVzdF9hcmNoX2V2ZW50cyh2Y3B1c1tpJiM0MzsmIzQzO10sIHBlcmZfY2FwYWJpbGl0aWVzLCBqLFxuJiM0MztcdFx0XHRcdFx0ICAgdW5hdmFpbGFibGVfbWFza3Nba10pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcbiB9XG4gXG4gLypcbkBAIC00OTUsMjEgJiM0Mzs1NDgsMjcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4tXHRcdFx0ICAgICB1OCBucl9ncF9jb3VudGVycylcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHR1OCBucl9ncF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyk7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHR1OCBqO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0bnJfZ3BfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLFxuLVx0XHRcdFx0bnJfZ3BfY291bnRlcnMpO1xuJiM0MztcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX2dwX2NvdW50ZXJzICYjNDM7IDEsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4gXG4tXHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tqXSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyxcbiYjNDM7XHRcdFx0XHRcdG5yX2dwX2NvdW50ZXJzKTtcbiBcbi1cdGt2bV92bV9mcmVlKHZtKTtcbiYjNDM7XHRcdHJ1bl92Y3B1KHZjcHVzW2pdKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcbkBAIC01NjEsNTkgJiM0Mzs2MjAsNTMgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4tXHRcdFx0XHR1OCBucl9maXhlZF9jb3VudGVycywgdTMyIHN1cHBvcnRlZF9iaXRtYXNrKVxuJiM0MztzdGF0aWMgdm9pZCBfX3Rlc3RfZml4ZWRfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBucl9maXhlZF9jb3VudGVycyxcbiYjNDM7XHRcdFx0XHQgIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXG4tXHRcdFx0XHRcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuLVxuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9GSVhFRF9DT1VOVEVSU19CSVRNQVNLLFxuIFx0XHRcdFx0c3VwcG9ydGVkX2JpdG1hc2spO1xuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyxcbiBcdFx0XHRcdG5yX2ZpeGVkX2NvdW50ZXJzKTtcbiBcbiBcdHJ1bl92Y3B1KHZjcHUpO1xuJiM0Mzt9XG4gXG4tXHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcbiYjNDM7e1xuJiM0MztcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTKTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1x0dTMyIGs7XG4mIzQzO1x0dTggajtcbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nICV1IGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0bnJfZml4ZWRfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4mIzQzO1xuJiM0MztcbiYjNDM7XHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygobnJfZml4ZWRfY291bnRlcnMgJiM0MzsgMSkgKiBCSVQobnJfZml4ZWRfY291bnRlcnMpLFxuJiM0MztcdFx0XHRcdCAgICAgIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjPSAoQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSAtIDEpOyBrJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0X190ZXN0X2ZpeGVkX2NvdW50ZXJzKHZjcHVzW2kmIzQzOyYjNDM7XSwgaiwgayk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXG4ge1xuLVx0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xuLVx0dTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpO1xuIFx0dTggcG11X3ZlcnNpb24gPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTik7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbi1cdHU4IHYsIGo7XG4tXHR1MzIgaztcbiYjNDM7XHR1OCB2O1xuIFxuIFx0Y29uc3QgdTY0IHBlcmZfY2Fwc1tdID0ge1xuIFx0XHQwLFxuIFx0XHRQTVVfQ0FQX0ZXX1dSSVRFUyxcbiBcdH07XG4gXG4tXHQvKlxuLVx0ICogVG8ga2VlcCB0aGUgdG90YWwgcnVudGltZSByZWFzb25hYmxlLCB0ZXN0IG9ubHkgYSBoYW5kZnVsIG9mIHNlbGVjdCxcbi1cdCAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3Rcbi1cdCAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGxcbi1cdCAqIGFzIGFsdGVybmF0aW5nIGJpdCBzZXF1ZW5jdWVzLCBlLmcuIHRvIGRldGVjdCBpZiBLVk0gaXMgY2hlY2tpbmcgdGhlXG4tXHQgKiB3cm9uZyBiaXQocykuXG4tXHQgKi9cbi1cdGNvbnN0IHUzMiB1bmF2YWlsYWJsZV9tYXNrc1tdID0ge1xuLVx0XHQweDAsXG4tXHRcdDB4ZmZmZmZmZmZ1LFxuLVx0XHQweGFhYWFhYWFhdSxcbi1cdFx0MHg1NTU1NTU1NXUsXG4tXHRcdDB4ZjBmMGYwZjB1LFxuLVx0XHQweDBmMGYwZjBmdSxcbi1cdFx0MHhhMGEwYTBhMHUsXG4tXHRcdDB4MGEwYTBhMGF1LFxuLVx0XHQweDUwNTA1MDUwdSxcbi1cdFx0MHgwNTA1MDUwNXUsXG4tXHR9O1xuLVxuIFx0LypcbiBcdCAqIFRlc3QgdXAgdG8gUE1VIHY1LCB3aGljaCBpcyB0aGUgY3VycmVudCBtYXhpbXVtIHZlcnNpb24gZGVmaW5lZCBieVxuIFx0ICogSW50ZWwsIGkuZS4gaXMgdGhlIGxhc3QgdmVyc2lvbiB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYmFja3dhcmRzXG5AQCAtNjQ5LDMyICYjNDM7NzAyLDkgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKVxuIFx0XHRcdGlmICgha3ZtX2hhc19wZXJmX2NhcHMgXHUwMDI2XHUwMDI2IHBlcmZfY2Fwc1tpXSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBhcmNoIGV2ZW50cywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwmIzM0Oyxcbi1cdFx0XHRcdHYsIHBlcmZfY2Fwc1tpXSk7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXBcbi1cdFx0XHQgKiB0aGUgbnVtYmVyIG9mIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG9cbi1cdFx0XHQgKiB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlXG4tXHRcdFx0ICogaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAmIzM5OzAmIzM5OyBhbmQgYWxsXG4tXHRcdFx0ICogb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gTlJfSU5URUxfQVJDSF9FVkVOVFMgJiM0MzsgMTsgaiYjNDM7JiM0MzspIHtcbi1cdFx0XHRcdGZvciAoayA9IDE7IGsgXHUwMDNjIEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrJiM0MzsmIzQzOylcbi1cdFx0XHRcdFx0dGVzdF9hcmNoX2V2ZW50cyh2LCBwZXJmX2NhcHNbaV0sIGosIHVuYXZhaWxhYmxlX21hc2tzW2tdKTtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0cHJfaW5mbyhcJiMzNDtUZXN0aW5nIEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGomIzQzOyYjNDM7KVxuLVx0XHRcdFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGopO1xuLVxuLVx0XHRcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwmIzM0Oyxcbi1cdFx0XHRcdHYsIHBlcmZfY2Fwc1tpXSk7XG4tXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2M9IG5yX2ZpeGVkX2NvdW50ZXJzOyBqJiM0MzsmIzQzOykge1xuLVx0XHRcdFx0Zm9yIChrID0gMDsgayBcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsmIzQzOyYjNDM7KVxuLVx0XHRcdFx0XHR0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgayk7XG4tXHRcdFx0fVxuJiM0MztcdFx0XHR0ZXN0X2FyY2hfZXZlbnRzKHYsIHBlcmZfY2Fwc1tpXSk7XG4mIzQzO1x0XHRcdHRlc3RfZ3BfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTtcbiYjNDM7XHRcdFx0dGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pO1xuIFx0XHR9XG4gXHR9XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE3OjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggaXMgdXNlci1zcGFjZSB0ZXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NGRjZDgxZWVlYjE2NzY0ODM5YTk4ODUzNzgxZDY5ZGIwMWEwNTgwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAxNzo0NTo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKaW5kZXggZTgzNTZlZTU0ZDdiOS4uYTZhM2UxNjU3ODk1OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKQEAgLTEzNSw4ICYjNDM7MTM1LDggQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3JhbmRvbV91NjQoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKQogCXJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgJmx0OyZsdDsgMzIpIHwga3ZtX3JhbmRvbV91MzIoc3RhdGUpOwogfQogCi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLAotCQkJICAgIHU2NCBtYXgpOwomIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpOwomIzQzO3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpOwogCiBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHsKIAlWTV9NRU1fU1JDX0FOT05ZTU9VUywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jCmluZGV4IDZiMDBhYjExZjNjMDIuLjRkZmY3MmY2YmQzNDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYwpAQCAtNDMsMTIgJiM0Mzs0MywyNiBAQCB1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKQogCXJldHVybiBzdGF0ZS0mZ3Q7c2VlZDsKIH0KIAomIzQzOy8qIFJldHVybnMgYSByYW5kb20gdTMyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqLwomIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpCiYjNDM7ewomIzQzOwl1MzIgdmFsdWUsIHJhbmdlOwomIzQzOwomIzQzOwlURVNUX0FTU0VSVChtaW4gJmx0Oz0gbWF4LCAmIzM0O1BFQktBQywgbWluID0gMHgleCwgbWF4ID0gMHgleCYjMzQ7LCBtaW4sIG1heCk7CiYjNDM7CiYjNDM7CXZhbHVlID0ga3ZtX3JhbmRvbV91MzIoc3RhdGUpOwomIzQzOwomIzQzOwlyYW5nZSA9IG1heCAtIG1pbjsKJiM0MzsJaWYgKHJhbmdlID09IFVJTlRfTUFYKQomIzQzOwkJcmV0dXJuIHZhbHVlOwomIzQzOwomIzQzOwlyZXR1cm4gbWluICYjNDM7ICh2YWx1ZSAlIChyYW5nZSAmIzQzOyAxKSk7CiYjNDM7fQomIzQzOwogLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovCi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLAotCQkJICAgIHU2NCBtYXgpCiYjNDM7dTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heCkKIHsKLQl1NjQgdmFsdWU7Ci0JdTY0IHJhbmdlOwomIzQzOwl1NjQgdmFsdWUsIHJhbmdlOwogCiAJVEVTVF9BU1NFUlQobWluICZsdDs9IG1heCwgJiMzNDtQRUJLQUMsIG1pbiA9IDB4JWx4LCBtYXggPSAweCVseCYjMzQ7LCBtaW4sIG1heCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYwppbmRleCBkYzZhZmFjM2FhOTE5Li5jN2M1NjYyMjAzODE1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jCkBAIC04NywxNCAmIzQzOzg3LDE4IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX2ludGVsX3BtdV9ldmVudCBpbnRlbF9ldmVudF90b19mZWF0dXJlKHU4IGlkeCkKIAlyZXR1cm4gX19pbnRlbF9ldmVudF90b19mZWF0dXJlW2lkeF07CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwKLQkJCQkJCSAgdm9pZCAqZ3Vlc3RfY29kZSwKLQkJCQkJCSAgdTggcG11X3ZlcnNpb24sCi0JCQkJCQkgIHU2NCBwZXJmX2NhcGFiaWxpdGllcykKJiM0MztzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBucl92Y3B1cywgdm9pZCAqZ3Vlc3RfY29kZSwKJiM0MzsJCQkJCSAgICAgICB1OCBwbXVfdmVyc2lvbiwKJiM0MzsJCQkJCSAgICAgICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IGt2bV92Y3B1ICoqX192Y3B1c1tdKQogewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cyA9IGNhbGxvYyhucl92Y3B1cywgc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSkpOwogCXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgaTsKIAotCXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7CiYjNDM7CSpfX3ZjcHVzID0gdmNwdXM7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfdmNwdXMsIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwga3ZtX3BtdV92ZXJzaW9uKTsKIAlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgaGFyZHdhcmVfcG11X2FyY2hfZXZlbnRzKTsKIApAQCAtMTAyLDEzICYjNDM7MTA2LDIyIEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwKIAkgKiBTZXQgUEVSRl9DQVBBQklMSVRJRVMgYmVmb3JlIFBNVSB2ZXJzaW9uIGFzIEtWTSBkaXNhbGxvd3MgZW5hYmxpbmcKIAkgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJiMzOTt0IGhhdmUgYSB2UE1VLgogCSAqLwotCWlmIChrdm1faGFzX3BlcmZfY2FwcykKLQkJdmNwdV9zZXRfbXNyKCp2Y3B1LCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoa3ZtX2hhc19wZXJmX2NhcHMpCiYjNDM7CQkJdmNwdV9zZXRfbXNyKHZjcHVzW2ldLCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwomIzQzOwkJdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdXNbaV0sIFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTiwgcG11X3ZlcnNpb24pOwomIzQzOwl9CiAKLQl2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSgqdmNwdSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7CiAJcmV0dXJuIHZtOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcG11X3ZtX2ZyZWUoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzKQomIzQzO3sKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzOwlmcmVlKHZjcHVzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHVjYWxsIHVjOwpAQCAtMjczLDYgJiM0MzsyODYsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KQogCXN0cnVjdCBrdm1feDg2X3BtdV9mZWF0dXJlIGdwX2V2ZW50LCBmaXhlZF9ldmVudDsKIAl1MzIgYmFzZV9wbWNfbXNyOwogCXVuc2lnbmVkIGludCBpOwomIzQzOwl1NjQgZXZlbnRzZWw7CiAKIAkvKiBUaGUgaG9zdCBzaWRlIHNob3VsZG4mIzM5O3QgaW52b2tlIHRoaXMgd2l0aG91dCBhIGd1ZXN0IFBNVS4gKi8KIAlHVUVTVF9BU1NFUlQocG11X3ZlcnNpb24pOwpAQCAtMjg3LDE5ICYjNDM7MzAxLDE2IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpCiAJR1VFU1RfQVNTRVJUX0VRKGlkeCwgZ3BfZXZlbnQuZi5iaXQpOwogCiAJR1VFU1RfQVNTRVJUKG5yX2dwX2NvdW50ZXJzKTsKJiM0MzsJaSA9IGt2bV9yYW5kb21fdTMyX2luX3JhbmdlKCZhbXA7a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBucl9ncF9jb3VudGVyczsgaSYjNDM7JiM0MzspIHsKLQkJdTY0IGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHwKLQkJCQkgICAgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8Ci0JCQkJICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdOwomIzQzOwlldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfAomIzQzOwkJICAgaW50ZWxfcG11X2FyY2hfZXZlbnRzW2lkeF07CiAKLQkJd3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApOwotCQlpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpCi0JCQl3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTsKJiM0MzsJd3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApOwomIzQzOwlpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpCiYjNDM7CQl3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTsKIAotCQlfX2d1ZXN0X3Rlc3RfYXJjaF9ldmVudChpZHgsIGksIGJhc2VfcG1jX21zciAmIzQzOyBpLAotCQkJCQlNU1JfUDZfRVZOVFNFTDAgJiM0MzsgaSwgZXZlbnRzZWwpOwotCX0KJiM0MzsJX19ndWVzdF90ZXN0X2FyY2hfZXZlbnQoaWR4LCBpLCBiYXNlX3BtY19tc3IgJiM0MzsgaSwgTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIGV2ZW50c2VsKTsKIAogCWlmICghZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpCiAJCXJldHVybjsKQEAgLTMyOCwzMCAmIzQzOzMzOSw3MiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpCiAJR1VFU1RfRE9ORSgpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsCi0JCQkgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spCiYjNDM7c3RhdGljIHZvaWQgX190ZXN0X2FyY2hfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLAomIzQzOwkJCSAgICAgICB1OCBsZW5ndGgsIHUzMiB1bmF2YWlsYWJsZV9tYXNrKQogewotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQlzdHJ1Y3Qga3ZtX3ZtICp2bTsKLQotCS8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqLwotCWlmICghcG11X3ZlcnNpb24pCi0JCXJldHVybjsKLQogCXVuYXZhaWxhYmxlX21hc2sgJmFtcDs9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsCiAJCQkJICAgIFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0subG9fYml0KTsKIAotCXZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywKLQkJCQkJIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7Ci0KIAl2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCwKIAkJCQlsZW5ndGgpOwogCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0ssCiAJCQkJdW5hdmFpbGFibGVfbWFzayk7CiAKIAlydW5fdmNwdSh2Y3B1KTsKJiM0Mzt9CiAKLQlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgaSA9IDA7CiYjNDM7CXUzMiBrOwomIzQzOwl1OCBqOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LAomIzQzOwkgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0CiYjNDM7CSAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGwKJiM0MzsJICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGUKJiM0MzsJICogd3JvbmcgYml0KHMpLgomIzQzOwkgKi8KJiM0MzsJY29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7CiYjNDM7CQkweDAsCiYjNDM7CQkweGZmZmZmZmZmdSwKJiM0MzsJCTB4YWFhYWFhYWF1LAomIzQzOwkJMHg1NTU1NTU1NXUsCiYjNDM7CQkweGYwZjBmMGYwdSwKJiM0MzsJCTB4MGYwZjBmMGZ1LAomIzQzOwkJMHhhMGEwYTBhMHUsCiYjNDM7CQkweDBhMGEwYTBhdSwKJiM0MzsJCTB4NTA1MDUwNTB1LAomIzQzOwkJMHgwNTA1MDUwNXUsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXByX2luZm8oJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKJiM0MzsJCXBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7CiYjNDM7CiYjNDM7CS8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqLwomIzQzOwlpZiAoIXBtdV92ZXJzaW9uKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygoTlJfSU5URUxfQVJDSF9FVkVOVFMgJiM0MzsgMikgKiBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKSwKJiM0MzsJCQkJICAgICAgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywgcG11X3ZlcnNpb24sCiYjNDM7CQkJCSAgICAgIHBlcmZfY2FwYWJpbGl0aWVzLCAmYW1wO3ZjcHVzKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwIHRoZSBudW1iZXIgb2YKJiM0MzsJICogZXZlbnRzICYjNDM7MSAodG8gdmVyaWZ5IEtWTSBkb2VzbiYjMzk7dCBkbyB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aAomIzQzOwkgKiBpcyBncmVhdGVyIHRoYW4gdGhlIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kCiYjNDM7CSAqIGFsbCBvbmVzIGkuZS4gYWxsIGV2ZW50cyBiZWluZyBhdmFpbGFibGUgYW5kIHVuYXZhaWxhYmxlLgomIzQzOwkgKi8KJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7PSBOUl9JTlRFTF9BUkNIX0VWRU5UUyAmIzQzOyAxOyBqJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChrID0gMTsgayAmbHQ7IEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrJiM0MzsmIzQzOykKJiM0MzsJCQlfX3Rlc3RfYXJjaF9ldmVudHModmNwdXNbaSYjNDM7JiM0MztdLCBwZXJmX2NhcGFiaWxpdGllcywgaiwKJiM0MzsJCQkJCSAgIHVuYXZhaWxhYmxlX21hc2tzW2tdKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwbXVfdm1fZnJlZSh2bSwgdmNwdXMpOwogfQogCiAvKgpAQCAtNDk1LDIxICYjNDM7NTQ4LDI3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnModm9pZCkKIAlHVUVTVF9ET05FKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcywKLQkJCSAgICAgdTggbnJfZ3BfY291bnRlcnMpCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKQogewotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJdTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1czsKIAlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJdTggajsKIAotCXZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycywKLQkJCQkJIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7CiYjNDM7CXByX2luZm8oJiMzNDtUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKJiM0MzsJCW5yX2dwX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwogCi0JdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUywKLQkJCQlucl9ncF9jb3VudGVycyk7CiYjNDM7CXZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX2dwX2NvdW50ZXJzICYjNDM7IDEsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsCiYjNDM7CQkJCSAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgJmFtcDt2Y3B1cyk7CiAKLQlydW5fdmNwdSh2Y3B1KTsKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7PSBucl9ncF9jb3VudGVyczsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2pdLCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLAomIzQzOwkJCQkJbnJfZ3BfY291bnRlcnMpOwogCi0Ja3ZtX3ZtX2ZyZWUodm0pOwomIzQzOwkJcnVuX3ZjcHUodmNwdXNbal0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZCkKQEAgLTU2MSw1OSAmIzQzOzYyMCw1MyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpCiAJR1VFU1RfRE9ORSgpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsCi0JCQkJdTggbnJfZml4ZWRfY291bnRlcnMsIHUzMiBzdXBwb3J0ZWRfYml0bWFzaykKJiM0MztzdGF0aWMgdm9pZCBfX3Rlc3RfZml4ZWRfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBucl9maXhlZF9jb3VudGVycywKJiM0MzsJCQkJICB1MzIgc3VwcG9ydGVkX2JpdG1hc2spCiB7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCXN0cnVjdCBrdm1fdm0gKnZtOwotCi0Jdm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLAotCQkJCQkgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTsKLQogCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRklYRURfQ09VTlRFUlNfQklUTUFTSywKIAkJCQlzdXBwb3J0ZWRfYml0bWFzayk7CiAJdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUywKIAkJCQlucl9maXhlZF9jb3VudGVycyk7CiAKIAlydW5fdmNwdSh2Y3B1KTsKJiM0Mzt9CiAKLQlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKQomIzQzO3sKJiM0MzsJdTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1czsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CWludCBpID0gMDsKJiM0MzsJdTMyIGs7CiYjNDM7CXU4IGo7CiYjNDM7CiYjNDM7CXByX2luZm8oJiMzNDtUZXN0aW5nICV1IGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKJiM0MzsJCW5yX2ZpeGVkX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwomIzQzOwomIzQzOwl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygobnJfZml4ZWRfY291bnRlcnMgJiM0MzsgMSkgKiBCSVQobnJfZml4ZWRfY291bnRlcnMpLAomIzQzOwkJCQkgICAgICBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLAomIzQzOwkJCQkgICAgICBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMsICZhbXA7dmNwdXMpOwomIzQzOwomIzQzOwlmb3IgKGogPSAwOyBqICZsdDs9IG5yX2ZpeGVkX2NvdW50ZXJzOyBqJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChrID0gMDsgayAmbHQ7PSAoQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSAtIDEpOyBrJiM0MzsmIzQzOykKJiM0MzsJCQlfX3Rlc3RfZml4ZWRfY291bnRlcnModmNwdXNbaSYjNDM7JiM0MztdLCBqLCBrKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwbXVfdm1fZnJlZSh2bSwgdmNwdXMpOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpCiB7Ci0JdTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpOwotCXU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTsKIAl1OCBwbXVfdmVyc2lvbiA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OKTsKIAl1bnNpZ25lZCBpbnQgaTsKLQl1OCB2LCBqOwotCXUzMiBrOwomIzQzOwl1OCB2OwogCiAJY29uc3QgdTY0IHBlcmZfY2Fwc1tdID0gewogCQkwLAogCQlQTVVfQ0FQX0ZXX1dSSVRFUywKIAl9OwogCi0JLyoKLQkgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LAotCSAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3QKLQkgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsCi0JICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGUKLQkgKiB3cm9uZyBiaXQocykuCi0JICovCi0JY29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7Ci0JCTB4MCwKLQkJMHhmZmZmZmZmZnUsCi0JCTB4YWFhYWFhYWF1LAotCQkweDU1NTU1NTU1dSwKLQkJMHhmMGYwZjBmMHUsCi0JCTB4MGYwZjBmMGZ1LAotCQkweGEwYTBhMGEwdSwKLQkJMHgwYTBhMGEwYXUsCi0JCTB4NTA1MDUwNTB1LAotCQkweDA1MDUwNTA1dSwKLQl9OwotCiAJLyoKIAkgKiBUZXN0IHVwIHRvIFBNVSB2NSwgd2hpY2ggaXMgdGhlIGN1cnJlbnQgbWF4aW11bSB2ZXJzaW9uIGRlZmluZWQgYnkKIAkgKiBJbnRlbCwgaS5lLiBpcyB0aGUgbGFzdCB2ZXJzaW9uIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBiYWNrd2FyZHMKQEAgLTY0OSwzMiAmIzQzOzcwMiw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZCkKIAkJCWlmICgha3ZtX2hhc19wZXJmX2NhcHMgJmFtcDsmYW1wOyBwZXJmX2NhcHNbaV0pCiAJCQkJY29udGludWU7CiAKLQkJCXByX2luZm8oJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKLQkJCQl2LCBwZXJmX2NhcHNbaV0pOwotCi0JCQkvKgotCQkJICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwCi0JCQkgKiB0aGUgbnVtYmVyIG9mIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG8KLQkJCSAqIHdlaXJkIHRoaW5ncyBpZiB0aGUgZ3Vlc3QgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGUKLQkJCSAqIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kIGFsbAotCQkJICogb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS4KLQkJCSAqLwotCQkJZm9yIChqID0gMDsgaiAmbHQ7PSBOUl9JTlRFTF9BUkNIX0VWRU5UUyAmIzQzOyAxOyBqJiM0MzsmIzQzOykgewotCQkJCWZvciAoayA9IDE7IGsgJmx0OyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgayYjNDM7JiM0MzspCi0JCQkJCXRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldLCBqLCB1bmF2YWlsYWJsZV9tYXNrc1trXSk7Ci0JCQl9Ci0KLQkJCXByX2luZm8oJiMzNDtUZXN0aW5nIEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKLQkJCQl2LCBwZXJmX2NhcHNbaV0pOwotCQkJZm9yIChqID0gMDsgaiAmbHQ7PSBucl9ncF9jb3VudGVyczsgaiYjNDM7JiM0MzspCi0JCQkJdGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGopOwotCi0JCQlwcl9pbmZvKCYjMzQ7VGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxuJiMzNDssCi0JCQkJdiwgcGVyZl9jYXBzW2ldKTsKLQkJCWZvciAoaiA9IDA7IGogJmx0Oz0gbnJfZml4ZWRfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7Ci0JCQkJZm9yIChrID0gMDsgayAmbHQ7PSAoQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSAtIDEpOyBrJiM0MzsmIzQzOykKLQkJCQkJdGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGosIGspOwotCQkJfQomIzQzOwkJCXRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldKTsKJiM0MzsJCQl0ZXN0X2dwX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7CiYjNDM7CQkJdGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pOwogCQl9CiAJfQogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzQxCgkJCQkJCQlvdXRwdXQ6IDczCgkJCQkJCQl0aG91Z2h0czogNjQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBEZXRlcm1pbmluZyBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jYC4gUmlnaHQgYXdheSwgSSYjMzk7bSB0aGlua2luZywgdGhpcyBsb29rcyBsaWtlIGl0JiMzOTtzIG1ha2luZyBzb21lIGNoYW5nZXMgdG8gdGhlIEtWTSBzZWxmdGVzdHMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIGBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZWAgdG8gYHRlc3RfdXRpbC5jYCwgYW5kIHRoZSBgcG11X2NvdW50ZXJzX3Rlc3QuY2AgZmlsZSBpcyBiZWluZyBtb2RpZmllZCB0byBoYW5kbGUgVk1zIHdpdGggbXVsdGlwbGUgdkNQVXMsIHdoaWNoIGlzIGxpa2VseSBmb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLgoKTm93LCBsZXQgbWUgcGF1c2UgYW5kIHRoaW5rIHRocm91Z2ggdGhpcy4gVGhlc2UgZmlsZXMgYXJlICpzcGVjaWZpY2FsbHkqIGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbC4gVGhpcyBpc24mIzM5O3QgdG91Y2hpbmcgY29yZSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhpcyBpcyBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgc2VsZnRlc3QgZnJhbWV3b3JrLgoKTGV0JiMzOTtzIHJlZmVyIGJhY2sgdG8gdGhlIGluc3RydWN0aW9ucyB3ZSBoYXZlIGZvciB0aGlzLiBUaGUgaW5zdHJ1Y3Rpb25zIHN0YXRlIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBtb2RpZmljYXRpb25zIHRvIHRoaW5ncyBsaWtlIERvY3VtZW50YXRpb24sIEtjb25maWcgZmlsZXMsIGNvbW1lbnRzLCBsb2dnaW5nLCBhbmQgY29uc3RhbnRzIHRoYXQgZG9uJiMzOTt0IGNoYW5nZSBleGVjdXRpb24gZmxvdywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocy4gQWxzbywgaW1wb3J0YW50bHksIGl0IG1lbnRpb25zIG5vdCBmdXp6aW5nIHZlbmRvci1zcGVjaWZpYyBQQ0llIGFuZCBHUFUgZHJpdmVyIGNvZGUgcmVxdWlyaW5nIHNwZWNpYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkLCBhbmQgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcy4gSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIGV4cGxpY2l0bHkgYWJvdXQgc2VsZnRlc3RzLCBidXQgdGhlc2UgdGVzdHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBrZXJuZWwgaXRzZWxmLgoKVGhlIGluc3RydWN0aW9ucyBhbHNvIHN0YXRlLCDigJxJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLuKAnSBTaW5jZSB0aGlzIHBhdGNoIGlzICpvbmx5KiBtb2RpZnlpbmcgZmlsZXMgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCBkaXJlY3RvcnksIGl0JiMzOTtzIG5vdCBhY3R1YWxseSB0b3VjaGluZyBjb3JlIGtlcm5lbCBjb2RlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYWZmZWN0ZWQgZmlsZXM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNgLiBZZXMsIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCBkaXJlY3RvcnkuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudC4gSSYjMzk7bGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKUmVhc29uaW5nOiBUaGlzIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5LiBUaGlzIGlzIHVzZXItc3BhY2UgdGVzdCBjb2RlLCBhbmQgaXQgZG9lc24mIzM5O3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzbiYjMzk7dCB3YXJyYW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggaXMgdXNlci1zcGFjZSB0ZXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBpcyB1c2VyLXNwYWNlIHRlc3QgY29kZSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjQ1OjUxLjAyMTQ5NTQ2NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjY1MDM1MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggaXMgdXNlci1zcGFjZSB0ZXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjQ1OjUxLjAyMTUxNjgwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3OTE3Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODRkY2Q4MWVlZWIxNjc2NDgzOWE5ODg1Mzc4MWQ2OWRiMDFhMDU4MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjQ1OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcXG5pbmRleCBlODM1NmVlNTRkN2I5Li5hNmEzZTE2NTc4OTU5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcXG5AQCAtMTM1LDggKzEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9yYW5kb21fdTY0KHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcXG4gXFx0cmV0dXJuICgodTY0KWt2bV9yYW5kb21fdTMyKHN0YXRlKSBcXHUwMDNjXFx1MDAzYyAzMikgfCBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7XFxuIH1cXG4gXFxuLXU2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sXFxuLVxcdFxcdFxcdCAgICB1NjQgbWF4KTtcXG4rdTMyIGt2bV9yYW5kb21fdTMyX2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTMyIG1pbiwgdTMyIG1heCk7XFxuK3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpO1xcbiBcXG4gZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSB7XFxuIFxcdFZNX01FTV9TUkNfQU5PTllNT1VTLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xcbmluZGV4IDZiMDBhYjExZjNjMDIuLjRkZmY3MmY2YmQzNDYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcXG5AQCAtNDMsMTIgKzQzLDI2IEBAIHUzMiBrdm1fcmFuZG9tX3UzMihzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXFxuIFxcdHJldHVybiBzdGF0ZS1cXHUwMDNlc2VlZDtcXG4gfVxcbiBcXG4rLyogUmV0dXJucyBhIHJhbmRvbSB1MzIgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXFxuK3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpXFxuK3tcXG4rXFx0dTMyIHZhbHVlLCByYW5nZTtcXG4rXFxuK1xcdFRFU1RfQVNTRVJUKG1pbiBcXHUwMDNjPSBtYXgsIFxcXCJQRUJLQUMsIG1pbiA9IDB4JXgsIG1heCA9IDB4JXhcXFwiLCBtaW4sIG1heCk7XFxuK1xcbitcXHR2YWx1ZSA9IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcXG4rXFxuK1xcdHJhbmdlID0gbWF4IC0gbWluO1xcbitcXHRpZiAocmFuZ2UgPT0gVUlOVF9NQVgpXFxuK1xcdFxcdHJldHVybiB2YWx1ZTtcXG4rXFxuK1xcdHJldHVybiBtaW4gKyAodmFsdWUgJSAocmFuZ2UgKyAxKSk7XFxuK31cXG4rXFxuIC8qIFJldHVybnMgYSByYW5kb20gdTY0IGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqL1xcbi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLFxcbi1cXHRcXHRcXHQgICAgdTY0IG1heClcXG4rdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heClcXG4ge1xcbi1cXHR1NjQgdmFsdWU7XFxuLVxcdHU2NCByYW5nZTtcXG4rXFx0dTY0IHZhbHVlLCByYW5nZTtcXG4gXFxuIFxcdFRFU1RfQVNTRVJUKG1pbiBcXHUwMDNjPSBtYXgsIFxcXCJQRUJLQUMsIG1pbiA9IDB4JWx4LCBtYXggPSAweCVseFxcXCIsIG1pbiwgbWF4KTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xcbmluZGV4IGRjNmFmYWMzYWE5MTkuLmM3YzU2NjIyMDM4MTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jXFxuQEAgLTg3LDE0ICs4NywxOCBAQCBzdGF0aWMgc3RydWN0IGt2bV9pbnRlbF9wbXVfZXZlbnQgaW50ZWxfZXZlbnRfdG9fZmVhdHVyZSh1OCBpZHgpXFxuIFxcdHJldHVybiBfX2ludGVsX2V2ZW50X3RvX2ZlYXR1cmVbaWR4XTtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmd1ZXN0X2NvZGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgdTggcG11X3ZlcnNpb24sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxcbitzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBucl92Y3B1cywgdm9pZCAqZ3Vlc3RfY29kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHU4IHBtdV92ZXJzaW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGt2bV92Y3B1ICoqX192Y3B1c1tdKVxcbiB7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzID0gY2FsbG9jKG5yX3ZjcHVzLCBzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSk7XFxuIFxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRpbnQgaTtcXG4gXFxuLVxcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7XFxuK1xcdCpfX3ZjcHVzID0gdmNwdXM7XFxuK1xcbitcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX3ZjcHVzLCBndWVzdF9jb2RlLCB2Y3B1cyk7XFxuIFxcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBrdm1fcG11X3ZlcnNpb24pO1xcbiBcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgaGFyZHdhcmVfcG11X2FyY2hfZXZlbnRzKTtcXG4gXFxuQEAgLTEwMiwxMyArMTA2LDIyIEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSxcXG4gXFx0ICogU2V0IFBFUkZfQ0FQQUJJTElUSUVTIGJlZm9yZSBQTVUgdmVyc2lvbiBhcyBLVk0gZGlzYWxsb3dzIGVuYWJsaW5nXFxuIFxcdCAqIGZlYXR1cmVzIHZpYSBQRVJGX0NBUEFCSUxJVElFUyBpZiB0aGUgZ3Vlc3QgZG9lc24ndCBoYXZlIGEgdlBNVS5cXG4gXFx0ICovXFxuLVxcdGlmIChrdm1faGFzX3BlcmZfY2FwcylcXG4tXFx0XFx0dmNwdV9zZXRfbXNyKCp2Y3B1LCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfdmNwdXM7IGkrKykge1xcbitcXHRcXHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXFxuK1xcdFxcdFxcdHZjcHVfc2V0X21zcih2Y3B1c1tpXSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4rXFxuK1xcdFxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2ldLCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcXG4rXFx0fVxcbiBcXG4tXFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkoKnZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTiwgcG11X3ZlcnNpb24pO1xcbiBcXHRyZXR1cm4gdm07XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHBtdV92bV9mcmVlKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cylcXG4re1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK1xcdGZyZWUodmNwdXMpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IHVjYWxsIHVjO1xcbkBAIC0yNzMsNiArMjg2LDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KHU4IGlkeClcXG4gXFx0c3RydWN0IGt2bV94ODZfcG11X2ZlYXR1cmUgZ3BfZXZlbnQsIGZpeGVkX2V2ZW50O1xcbiBcXHR1MzIgYmFzZV9wbWNfbXNyO1xcbiBcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0dTY0IGV2ZW50c2VsO1xcbiBcXG4gXFx0LyogVGhlIGhvc3Qgc2lkZSBzaG91bGRuJ3QgaW52b2tlIHRoaXMgd2l0aG91dCBhIGd1ZXN0IFBNVS4gKi9cXG4gXFx0R1VFU1RfQVNTRVJUKHBtdV92ZXJzaW9uKTtcXG5AQCAtMjg3LDE5ICszMDEsMTYgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KHU4IGlkeClcXG4gXFx0R1VFU1RfQVNTRVJUX0VRKGlkeCwgZ3BfZXZlbnQuZi5iaXQpO1xcbiBcXG4gXFx0R1VFU1RfQVNTRVJUKG5yX2dwX2NvdW50ZXJzKTtcXG4rXFx0aSA9IGt2bV9yYW5kb21fdTMyX2luX3JhbmdlKFxcdTAwMjZrdm1fcm5nLCAwLCBucl9ncF9jb3VudGVycyAtIDEpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2dwX2NvdW50ZXJzOyBpKyspIHtcXG4tXFx0XFx0dTY0IGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHxcXG4tXFx0XFx0XFx0XFx0ICAgIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxcbi1cXHRcXHRcXHRcXHQgICAgaW50ZWxfcG11X2FyY2hfZXZlbnRzW2lkeF07XFxuK1xcdGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHwgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8XFxuK1xcdFxcdCAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xcbiBcXG4tXFx0XFx0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICsgaSwgMCk7XFxuLVxcdFxcdGlmIChndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcXG4tXFx0XFx0XFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7XFxuK1xcdHdybXNyKE1TUl9QNl9FVk5UU0VMMCArIGksIDApO1xcbitcXHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXFxuK1xcdFxcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xcbiBcXG4tXFx0XFx0X19ndWVzdF90ZXN0X2FyY2hfZXZlbnQoaWR4LCBpLCBiYXNlX3BtY19tc3IgKyBpLFxcbi1cXHRcXHRcXHRcXHRcXHRNU1JfUDZfRVZOVFNFTDAgKyBpLCBldmVudHNlbCk7XFxuLVxcdH1cXG4rXFx0X19ndWVzdF90ZXN0X2FyY2hfZXZlbnQoaWR4LCBpLCBiYXNlX3BtY19tc3IgKyBpLCBNU1JfUDZfRVZOVFNFTDAgKyBpLCBldmVudHNlbCk7XFxuIFxcbiBcXHRpZiAoIWd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTMyOCwzMCArMzM5LDcyIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZClcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXFxuLVxcdFxcdFxcdCAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcXG4rc3RhdGljIHZvaWQgX190ZXN0X2FyY2hfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxcbitcXHRcXHRcXHQgICAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuLVxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbi1cXG4tXFx0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXFxuLVxcdGlmICghcG11X3ZlcnNpb24pXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdHVuYXZhaWxhYmxlX21hc2sgXFx1MDAyNj0gR0VOTUFTSyhYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLmhpX2JpdCxcXG4gXFx0XFx0XFx0XFx0ICAgIFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0subG9fYml0KTtcXG4gXFxuLVxcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFxcdTAwMjZ2Y3B1LCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzLFxcbi1cXHRcXHRcXHRcXHRcXHQgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4tXFxuIFxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRUJYX0JJVF9WRUNUT1JfTEVOR1RILFxcbiBcXHRcXHRcXHRcXHRsZW5ndGgpO1xcbiBcXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLFxcbiBcXHRcXHRcXHRcXHR1bmF2YWlsYWJsZV9tYXNrKTtcXG4gXFxuIFxcdHJ1bl92Y3B1KHZjcHUpO1xcbit9XFxuIFxcbi1cXHRrdm1fdm1fZnJlZSh2bSk7XFxuK3N0YXRpYyB2b2lkIHRlc3RfYXJjaF9ldmVudHModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGludCBpID0gMDtcXG4rXFx0dTMyIGs7XFxuK1xcdHU4IGo7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxcbitcXHQgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0XFxuK1xcdCAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGxcXG4rXFx0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcXG4rXFx0ICogd3JvbmcgYml0KHMpLlxcbitcXHQgKi9cXG4rXFx0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XFxuK1xcdFxcdDB4MCxcXG4rXFx0XFx0MHhmZmZmZmZmZnUsXFxuK1xcdFxcdDB4YWFhYWFhYWF1LFxcbitcXHRcXHQweDU1NTU1NTU1dSxcXG4rXFx0XFx0MHhmMGYwZjBmMHUsXFxuK1xcdFxcdDB4MGYwZjBmMGZ1LFxcbitcXHRcXHQweGEwYTBhMGEwdSxcXG4rXFx0XFx0MHgwYTBhMGEwYXUsXFxuK1xcdFxcdDB4NTA1MDUwNTB1LFxcbitcXHRcXHQweDA1MDUwNTA1dSxcXG4rXFx0fTtcXG4rXFxuK1xcdHByX2luZm8oXFxcIlRlc3RpbmcgYXJjaCBldmVudHMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuK1xcdFxcdHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XFxuK1xcbitcXHQvKiBUZXN0aW5nIGFyY2ggZXZlbnRzIHJlcXVpcmVzIGEgdlBNVSAodGhlcmUgYXJlIG5vIG5lZ2F0aXZlIHRlc3RzKS4gKi9cXG4rXFx0aWYgKCFwbXVfdmVyc2lvbilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKE5SX0lOVEVMX0FSQ0hfRVZFTlRTICsgMikgKiBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywgcG11X3ZlcnNpb24sXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBlcmZfY2FwYWJpbGl0aWVzLCBcXHUwMDI2dmNwdXMpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwIHRoZSBudW1iZXIgb2ZcXG4rXFx0ICogZXZlbnRzICsxICh0byB2ZXJpZnkgS1ZNIGRvZXNuJ3QgZG8gd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGhcXG4rXFx0ICogaXMgZ3JlYXRlciB0aGFuIHRoZSBob3N0IGxlbmd0aCkuICBFeHBsaWNpdGx5IHRlc3QgYSBtYXNrIG9mICcwJyBhbmRcXG4rXFx0ICogYWxsIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICsgMTsgaisrKSB7XFxuK1xcdFxcdGZvciAoayA9IDE7IGsgXFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgaysrKVxcbitcXHRcXHRcXHRfX3Rlc3RfYXJjaF9ldmVudHModmNwdXNbaSsrXSwgcGVyZl9jYXBhYmlsaXRpZXMsIGosXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHVuYXZhaWxhYmxlX21hc2tzW2tdKTtcXG4rXFx0fVxcbitcXG4rXFx0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNDk1LDIxICs1NDgsMjcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyh2b2lkKVxcbiBcXHRHVUVTVF9ET05FKCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcXG4tXFx0XFx0XFx0ICAgICB1OCBucl9ncF9jb3VudGVycylcXG4rc3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFx0dTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcXG4gXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdHU4IGo7XFxuIFxcbi1cXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyxcXG4tXFx0XFx0XFx0XFx0XFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XFxuK1xcdHByX2luZm8oXFxcIlRlc3RpbmcgJXUgR1AgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuK1xcdFxcdG5yX2dwX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbiBcXG4tXFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyxcXG4tXFx0XFx0XFx0XFx0bnJfZ3BfY291bnRlcnMpO1xcbitcXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cyhucl9ncF9jb3VudGVycyArIDEsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgXFx1MDAyNnZjcHVzKTtcXG4gXFxuLVxcdHJ1bl92Y3B1KHZjcHUpO1xcbitcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2M9IG5yX2dwX2NvdW50ZXJzOyBqKyspIHtcXG4rXFx0XFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdXNbal0sIFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMsXFxuK1xcdFxcdFxcdFxcdFxcdG5yX2dwX2NvdW50ZXJzKTtcXG4gXFxuLVxcdGt2bV92bV9mcmVlKHZtKTtcXG4rXFx0XFx0cnVuX3ZjcHUodmNwdXNbal0pO1xcbitcXHR9XFxuK1xcbitcXHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpXFxuQEAgLTU2MSw1OSArNjIwLDUzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXFxuLVxcdFxcdFxcdFxcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzLCB1MzIgc3VwcG9ydGVkX2JpdG1hc2spXFxuK3N0YXRpYyB2b2lkIF9fdGVzdF9maXhlZF9jb3VudGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IG5yX2ZpeGVkX2NvdW50ZXJzLFxcbitcXHRcXHRcXHRcXHQgIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuLVxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbi1cXG4tXFx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXFxuLVxcdFxcdFxcdFxcdFxcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbi1cXG4gXFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9GSVhFRF9DT1VOVEVSU19CSVRNQVNLLFxcbiBcXHRcXHRcXHRcXHRzdXBwb3J0ZWRfYml0bWFzayk7XFxuIFxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMsXFxuIFxcdFxcdFxcdFxcdG5yX2ZpeGVkX2NvdW50ZXJzKTtcXG4gXFxuIFxcdHJ1bl92Y3B1KHZjcHUpO1xcbit9XFxuIFxcbi1cXHRrdm1fdm1fZnJlZSh2bSk7XFxuK3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcXG4re1xcbitcXHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0aW50IGkgPSAwO1xcbitcXHR1MzIgaztcXG4rXFx0dTggajtcXG4rXFxuK1xcdHByX2luZm8oXFxcIlRlc3RpbmcgJXUgZml4ZWQgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuK1xcdFxcdG5yX2ZpeGVkX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbitcXG4rXFxuK1xcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKChucl9maXhlZF9jb3VudGVycyArIDEpICogQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcXHUwMDI2dmNwdXMpO1xcbitcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaisrKSB7XFxuK1xcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYz0gKEJJVChucl9maXhlZF9jb3VudGVycykgLSAxKTsgaysrKVxcbitcXHRcXHRcXHRfX3Rlc3RfZml4ZWRfY291bnRlcnModmNwdXNbaSsrXSwgaiwgayk7XFxuK1xcdH1cXG4rXFxuK1xcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcXG4ge1xcbi1cXHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XFxuLVxcdHU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTtcXG4gXFx0dTggcG11X3ZlcnNpb24gPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTik7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbi1cXHR1OCB2LCBqO1xcbi1cXHR1MzIgaztcXG4rXFx0dTggdjtcXG4gXFxuIFxcdGNvbnN0IHU2NCBwZXJmX2NhcHNbXSA9IHtcXG4gXFx0XFx0MCxcXG4gXFx0XFx0UE1VX0NBUF9GV19XUklURVMsXFxuIFxcdH07XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxcbi1cXHQgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0XFxuLVxcdCAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGxcXG4tXFx0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcXG4tXFx0ICogd3JvbmcgYml0KHMpLlxcbi1cXHQgKi9cXG4tXFx0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XFxuLVxcdFxcdDB4MCxcXG4tXFx0XFx0MHhmZmZmZmZmZnUsXFxuLVxcdFxcdDB4YWFhYWFhYWF1LFxcbi1cXHRcXHQweDU1NTU1NTU1dSxcXG4tXFx0XFx0MHhmMGYwZjBmMHUsXFxuLVxcdFxcdDB4MGYwZjBmMGZ1LFxcbi1cXHRcXHQweGEwYTBhMGEwdSxcXG4tXFx0XFx0MHgwYTBhMGEwYXUsXFxuLVxcdFxcdDB4NTA1MDUwNTB1LFxcbi1cXHRcXHQweDA1MDUwNTA1dSxcXG4tXFx0fTtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIFRlc3QgdXAgdG8gUE1VIHY1LCB3aGljaCBpcyB0aGUgY3VycmVudCBtYXhpbXVtIHZlcnNpb24gZGVmaW5lZCBieVxcbiBcXHQgKiBJbnRlbCwgaS5lLiBpcyB0aGUgbGFzdCB2ZXJzaW9uIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBiYWNrd2FyZHNcXG5AQCAtNjQ5LDMyICs3MDIsOSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXFxuIFxcdFxcdFxcdGlmICgha3ZtX2hhc19wZXJmX2NhcHMgXFx1MDAyNlxcdTAwMjYgcGVyZl9jYXBzW2ldKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdHByX2luZm8oXFxcIlRlc3RpbmcgYXJjaCBldmVudHMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHYsIHBlcmZfY2Fwc1tpXSk7XFxuLVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXBcXG4tXFx0XFx0XFx0ICogdGhlIG51bWJlciBvZiBldmVudHMgKzEgKHRvIHZlcmlmeSBLVk0gZG9lc24ndCBkb1xcbi1cXHRcXHRcXHQgKiB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlXFxuLVxcdFxcdFxcdCAqIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJzAnIGFuZCBhbGxcXG4tXFx0XFx0XFx0ICogb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYz0gTlJfSU5URUxfQVJDSF9FVkVOVFMgKyAxOyBqKyspIHtcXG4tXFx0XFx0XFx0XFx0Zm9yIChrID0gMTsgayBcXHUwMDNjIEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrKyspXFxuLVxcdFxcdFxcdFxcdFxcdHRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldLCBqLCB1bmF2YWlsYWJsZV9tYXNrc1trXSk7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdHByX2luZm8oXFxcIlRlc3RpbmcgR1AgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHYsIHBlcmZfY2Fwc1tpXSk7XFxuLVxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGorKylcXG4tXFx0XFx0XFx0XFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGopO1xcbi1cXG4tXFx0XFx0XFx0cHJfaW5mbyhcXFwiVGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0diwgcGVyZl9jYXBzW2ldKTtcXG4tXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaisrKSB7XFxuLVxcdFxcdFxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYz0gKEJJVChucl9maXhlZF9jb3VudGVycykgLSAxKTsgaysrKVxcbi1cXHRcXHRcXHRcXHRcXHR0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgayk7XFxuLVxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0dGVzdF9hcmNoX2V2ZW50cyh2LCBwZXJmX2NhcHNbaV0pO1xcbitcXHRcXHRcXHR0ZXN0X2dwX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7XFxuK1xcdFxcdFxcdHRlc3RfZml4ZWRfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6NDU6NTEuNTIwMDk4MjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NzY2NDE5ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggaXMgdXNlci1zcGFjZSB0ZXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg0ZGNkODFlZWViMTY3NjQ4MzlhOTg4NTM3ODFkNjlkYjAxYTA1ODBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDE3OjQ1OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuaW5kZXggZTgzNTZlZTU0ZDdiOS4uYTZhM2UxNjU3ODk1OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuQEAgLTEzNSw4ICsxMzUsOCBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1fcmFuZG9tX3U2NChzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXG4gXHRyZXR1cm4gKCh1NjQpa3ZtX3JhbmRvbV91MzIoc3RhdGUpIFx1MDAzY1x1MDAzYyAzMikgfCBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7XG4gfVxuIFxuLXU2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sXG4tXHRcdFx0ICAgIHU2NCBtYXgpO1xuK3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpO1xuK3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpO1xuIFxuIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUge1xuIFx0Vk1fTUVNX1NSQ19BTk9OWU1PVVMsXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcbmluZGV4IDZiMDBhYjExZjNjMDIuLjRkZmY3MmY2YmQzNDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG5AQCAtNDMsMTIgKzQzLDI2IEBAIHUzMiBrdm1fcmFuZG9tX3UzMihzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXG4gXHRyZXR1cm4gc3RhdGUtXHUwMDNlc2VlZDtcbiB9XG4gXG4rLyogUmV0dXJucyBhIHJhbmRvbSB1MzIgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4rdTMyIGt2bV9yYW5kb21fdTMyX2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTMyIG1pbiwgdTMyIG1heClcbit7XG4rXHR1MzIgdmFsdWUsIHJhbmdlO1xuK1xuK1x0VEVTVF9BU1NFUlQobWluIFx1MDAzYz0gbWF4LCBcIlBFQktBQywgbWluID0gMHgleCwgbWF4ID0gMHgleFwiLCBtaW4sIG1heCk7XG4rXG4rXHR2YWx1ZSA9IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbitcbitcdHJhbmdlID0gbWF4IC0gbWluO1xuK1x0aWYgKHJhbmdlID09IFVJTlRfTUFYKVxuK1x0XHRyZXR1cm4gdmFsdWU7XG4rXG4rXHRyZXR1cm4gbWluICsgKHZhbHVlICUgKHJhbmdlICsgMSkpO1xuK31cbitcbiAvKiBSZXR1cm5zIGEgcmFuZG9tIHU2NCBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFttaW4sIG1heF0gKi9cbi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLFxuLVx0XHRcdCAgICB1NjQgbWF4KVxuK3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpXG4ge1xuLVx0dTY0IHZhbHVlO1xuLVx0dTY0IHJhbmdlO1xuK1x0dTY0IHZhbHVlLCByYW5nZTtcbiBcbiBcdFRFU1RfQVNTRVJUKG1pbiBcdTAwM2M9IG1heCwgXCJQRUJLQUMsIG1pbiA9IDB4JWx4LCBtYXggPSAweCVseFwiLCBtaW4sIG1heCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jXG5pbmRleCBkYzZhZmFjM2FhOTE5Li5jN2M1NjYyMjAzODE1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbkBAIC04NywxNCArODcsMTggQEAgc3RhdGljIHN0cnVjdCBrdm1faW50ZWxfcG11X2V2ZW50IGludGVsX2V2ZW50X3RvX2ZlYXR1cmUodTggaWR4KVxuIFx0cmV0dXJuIF9faW50ZWxfZXZlbnRfdG9fZmVhdHVyZVtpZHhdO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsXG4tXHRcdFx0XHRcdFx0ICB2b2lkICpndWVzdF9jb2RlLFxuLVx0XHRcdFx0XHRcdCAgdTggcG11X3ZlcnNpb24sXG4tXHRcdFx0XHRcdFx0ICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4rc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cyh1MzIgbnJfdmNwdXMsIHZvaWQgKmd1ZXN0X2NvZGUsXG4rXHRcdFx0XHRcdCAgICAgICB1OCBwbXVfdmVyc2lvbixcbitcdFx0XHRcdFx0ICAgICAgIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbitcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqKl9fdmNwdXNbXSlcbiB7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cyA9IGNhbGxvYyhucl92Y3B1cywgc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSkpO1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4rXHRpbnQgaTtcbiBcbi1cdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7XG4rXHQqX192Y3B1cyA9IHZjcHVzO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cyhucl92Y3B1cywgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9wbXVfdmVyc2lvbik7XG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgaGFyZHdhcmVfcG11X2FyY2hfZXZlbnRzKTtcbiBcbkBAIC0xMDIsMTMgKzEwNiwyMiBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsXG4gXHQgKiBTZXQgUEVSRl9DQVBBQklMSVRJRVMgYmVmb3JlIFBNVSB2ZXJzaW9uIGFzIEtWTSBkaXNhbGxvd3MgZW5hYmxpbmdcbiBcdCAqIGZlYXR1cmVzIHZpYSBQRVJGX0NBUEFCSUxJVElFUyBpZiB0aGUgZ3Vlc3QgZG9lc24ndCBoYXZlIGEgdlBNVS5cbiBcdCAqL1xuLVx0aWYgKGt2bV9oYXNfcGVyZl9jYXBzKVxuLVx0XHR2Y3B1X3NldF9tc3IoKnZjcHUsIE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSsrKSB7XG4rXHRcdGlmIChrdm1faGFzX3BlcmZfY2FwcylcbitcdFx0XHR2Y3B1X3NldF9tc3IodmNwdXNbaV0sIE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4rXG4rXHRcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2ldLCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcbitcdH1cbiBcbi1cdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KCp2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcbiBcdHJldHVybiB2bTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcG11X3ZtX2ZyZWUoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzKVxuK3tcbitcdGt2bV92bV9mcmVlKHZtKTtcbitcdGZyZWUodmNwdXMpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHVjYWxsIHVjO1xuQEAgLTI3Myw2ICsyODYsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KVxuIFx0c3RydWN0IGt2bV94ODZfcG11X2ZlYXR1cmUgZ3BfZXZlbnQsIGZpeGVkX2V2ZW50O1xuIFx0dTMyIGJhc2VfcG1jX21zcjtcbiBcdHVuc2lnbmVkIGludCBpO1xuK1x0dTY0IGV2ZW50c2VsO1xuIFxuIFx0LyogVGhlIGhvc3Qgc2lkZSBzaG91bGRuJ3QgaW52b2tlIHRoaXMgd2l0aG91dCBhIGd1ZXN0IFBNVS4gKi9cbiBcdEdVRVNUX0FTU0VSVChwbXVfdmVyc2lvbik7XG5AQCAtMjg3LDE5ICszMDEsMTYgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KHU4IGlkeClcbiBcdEdVRVNUX0FTU0VSVF9FUShpZHgsIGdwX2V2ZW50LmYuYml0KTtcbiBcbiBcdEdVRVNUX0FTU0VSVChucl9ncF9jb3VudGVycyk7XG4rXHRpID0ga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2UoXHUwMDI2a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2dwX2NvdW50ZXJzOyBpKyspIHtcbi1cdFx0dTY0IGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHxcbi1cdFx0XHRcdCAgICBBUkNIX1BFUkZNT05fRVZFTlRTRUxfRU5BQkxFIHxcbi1cdFx0XHRcdCAgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTtcbitcdGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHwgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8XG4rXHRcdCAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xuIFxuLVx0XHR3cm1zcihNU1JfUDZfRVZOVFNFTDAgKyBpLCAwKTtcbi1cdFx0aWYgKGd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxuLVx0XHRcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xuK1x0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICsgaSwgMCk7XG4rXHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXG4rXHRcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xuIFxuLVx0XHRfX2d1ZXN0X3Rlc3RfYXJjaF9ldmVudChpZHgsIGksIGJhc2VfcG1jX21zciArIGksXG4tXHRcdFx0XHRcdE1TUl9QNl9FVk5UU0VMMCArIGksIGV2ZW50c2VsKTtcbi1cdH1cbitcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICsgaSwgTVNSX1A2X0VWTlRTRUwwICsgaSwgZXZlbnRzZWwpO1xuIFxuIFx0aWYgKCFndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcbiBcdFx0cmV0dXJuO1xuQEAgLTMyOCwzMCArMzM5LDcyIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuLVx0XHRcdCAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbitzdGF0aWMgdm9pZCBfX3Rlc3RfYXJjaF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4rXHRcdFx0ICAgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spXG4ge1xuLVx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0c3RydWN0IGt2bV92bSAqdm07XG4tXG4tXHQvKiBUZXN0aW5nIGFyY2ggZXZlbnRzIHJlcXVpcmVzIGEgdlBNVSAodGhlcmUgYXJlIG5vIG5lZ2F0aXZlIHRlc3RzKS4gKi9cbi1cdGlmICghcG11X3ZlcnNpb24pXG4tXHRcdHJldHVybjtcbi1cbiBcdHVuYXZhaWxhYmxlX21hc2sgXHUwMDI2PSBHRU5NQVNLKFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0suaGlfYml0LFxuIFx0XHRcdFx0ICAgIFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0subG9fYml0KTtcbiBcbi1cdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHMsXG4tXHRcdFx0XHRcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuLVxuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9FQlhfQklUX1ZFQ1RPUl9MRU5HVEgsXG4gXHRcdFx0XHRsZW5ndGgpO1xuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSyxcbiBcdFx0XHRcdHVuYXZhaWxhYmxlX21hc2spO1xuIFxuIFx0cnVuX3ZjcHUodmNwdSk7XG4rfVxuIFxuLVx0a3ZtX3ZtX2ZyZWUodm0pO1xuK3N0YXRpYyB2b2lkIHRlc3RfYXJjaF9ldmVudHModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0aW50IGkgPSAwO1xuK1x0dTMyIGs7XG4rXHR1OCBqO1xuK1xuK1x0LypcbitcdCAqIFRvIGtlZXAgdGhlIHRvdGFsIHJ1bnRpbWUgcmVhc29uYWJsZSwgdGVzdCBvbmx5IGEgaGFuZGZ1bCBvZiBzZWxlY3QsXG4rXHQgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0XG4rXHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXG4rXHQgKiBhcyBhbHRlcm5hdGluZyBiaXQgc2VxdWVuY3VlcywgZS5nLiB0byBkZXRlY3QgaWYgS1ZNIGlzIGNoZWNraW5nIHRoZVxuK1x0ICogd3JvbmcgYml0KHMpLlxuK1x0ICovXG4rXHRjb25zdCB1MzIgdW5hdmFpbGFibGVfbWFza3NbXSA9IHtcbitcdFx0MHgwLFxuK1x0XHQweGZmZmZmZmZmdSxcbitcdFx0MHhhYWFhYWFhYXUsXG4rXHRcdDB4NTU1NTU1NTV1LFxuK1x0XHQweGYwZjBmMGYwdSxcbitcdFx0MHgwZjBmMGYwZnUsXG4rXHRcdDB4YTBhMGEwYTB1LFxuK1x0XHQweDBhMGEwYTBhdSxcbitcdFx0MHg1MDUwNTA1MHUsXG4rXHRcdDB4MDUwNTA1MDV1LFxuK1x0fTtcbitcbitcdHByX2luZm8oXCJUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4rXHRcdHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4rXG4rXHQvKiBUZXN0aW5nIGFyY2ggZXZlbnRzIHJlcXVpcmVzIGEgdlBNVSAodGhlcmUgYXJlIG5vIG5lZ2F0aXZlIHRlc3RzKS4gKi9cbitcdGlmICghcG11X3ZlcnNpb24pXG4rXHRcdHJldHVybjtcbitcbitcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKChOUl9JTlRFTF9BUkNIX0VWRU5UUyArIDIpICogQVJSQVlfU0laRSh1bmF2YWlsYWJsZV9tYXNrcyksXG4rXHRcdFx0XHQgICAgICBndWVzdF90ZXN0X2FyY2hfZXZlbnRzLCBwbXVfdmVyc2lvbixcbitcdFx0XHRcdCAgICAgIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4rXG4rXHQvKlxuK1x0ICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwIHRoZSBudW1iZXIgb2ZcbitcdCAqIGV2ZW50cyArMSAodG8gdmVyaWZ5IEtWTSBkb2Vzbid0IGRvIHdlaXJkIHRoaW5ncyBpZiB0aGUgZ3Vlc3QgbGVuZ3RoXG4rXHQgKiBpcyBncmVhdGVyIHRoYW4gdGhlIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJzAnIGFuZFxuK1x0ICogYWxsIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXG4rXHQgKi9cbitcdGZvciAoaiA9IDA7IGogXHUwMDNjPSBOUl9JTlRFTF9BUkNIX0VWRU5UUyArIDE7IGorKykge1xuK1x0XHRmb3IgKGsgPSAxOyBrIFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgaysrKVxuK1x0XHRcdF9fdGVzdF9hcmNoX2V2ZW50cyh2Y3B1c1tpKytdLCBwZXJmX2NhcGFiaWxpdGllcywgaixcbitcdFx0XHRcdFx0ICAgdW5hdmFpbGFibGVfbWFza3Nba10pO1xuK1x0fVxuK1xuK1x0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcbiB9XG4gXG4gLypcbkBAIC00OTUsMjEgKzU0OCwyNyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2dwX2NvdW50ZXJzKHZvaWQpXG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbi1cdFx0XHQgICAgIHU4IG5yX2dwX2NvdW50ZXJzKVxuK3N0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHR1OCBucl9ncF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyk7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbiBcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0dTggajtcbiBcbi1cdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXG4tXHRcdFx0XHRcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuK1x0cHJfaW5mbyhcIlRlc3RpbmcgJXUgR1AgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXG5cIixcbitcdFx0bnJfZ3BfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLFxuLVx0XHRcdFx0bnJfZ3BfY291bnRlcnMpO1xuK1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfZ3BfY291bnRlcnMgKyAxLCBndWVzdF90ZXN0X2dwX2NvdW50ZXJzLFxuK1x0XHRcdFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4gXG4tXHRydW5fdmNwdSh2Y3B1KTtcbitcdGZvciAoaiA9IDA7IGogXHUwMDNjPSBucl9ncF9jb3VudGVyczsgaisrKSB7XG4rXHRcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2pdLCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLFxuK1x0XHRcdFx0XHRucl9ncF9jb3VudGVycyk7XG4gXG4tXHRrdm1fdm1fZnJlZSh2bSk7XG4rXHRcdHJ1bl92Y3B1KHZjcHVzW2pdKTtcbitcdH1cbitcbitcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcbkBAIC01NjEsNTkgKzYyMCw1MyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpXG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbi1cdFx0XHRcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzLCB1MzIgc3VwcG9ydGVkX2JpdG1hc2spXG4rc3RhdGljIHZvaWQgX190ZXN0X2ZpeGVkX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggbnJfZml4ZWRfY291bnRlcnMsXG4rXHRcdFx0XHQgIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXG4tXHRcdFx0XHRcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuLVxuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9GSVhFRF9DT1VOVEVSU19CSVRNQVNLLFxuIFx0XHRcdFx0c3VwcG9ydGVkX2JpdG1hc2spO1xuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyxcbiBcdFx0XHRcdG5yX2ZpeGVkX2NvdW50ZXJzKTtcbiBcbiBcdHJ1bl92Y3B1KHZjcHUpO1xuK31cbiBcbi1cdGt2bV92bV9mcmVlKHZtKTtcbitzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4re1xuK1x0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xuK1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBpID0gMDtcbitcdHUzMiBrO1xuK1x0dTggajtcbitcbitcdHByX2luZm8oXCJUZXN0aW5nICV1IGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4rXHRcdG5yX2ZpeGVkX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuK1xuK1xuK1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKG5yX2ZpeGVkX2NvdW50ZXJzICsgMSkgKiBCSVQobnJfZml4ZWRfY291bnRlcnMpLFxuK1x0XHRcdFx0ICAgICAgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyxcbitcdFx0XHRcdCAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgXHUwMDI2dmNwdXMpO1xuK1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2M9IG5yX2ZpeGVkX2NvdW50ZXJzOyBqKyspIHtcbitcdFx0Zm9yIChrID0gMDsgayBcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsrKylcbitcdFx0XHRfX3Rlc3RfZml4ZWRfY291bnRlcnModmNwdXNbaSsrXSwgaiwgayk7XG4rXHR9XG4rXG4rXHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXG4ge1xuLVx0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xuLVx0dTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpO1xuIFx0dTggcG11X3ZlcnNpb24gPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTik7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbi1cdHU4IHYsIGo7XG4tXHR1MzIgaztcbitcdHU4IHY7XG4gXG4gXHRjb25zdCB1NjQgcGVyZl9jYXBzW10gPSB7XG4gXHRcdDAsXG4gXHRcdFBNVV9DQVBfRldfV1JJVEVTLFxuIFx0fTtcbiBcbi1cdC8qXG4tXHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxuLVx0ICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdFxuLVx0ICogMCAoYWxsIGV2ZW50cyBhdmFpbGFibGUpIGFuZCBhbGwgb25lcyAobm8gZXZlbnRzIGF2YWlsYWJsZSkgYXMgd2VsbFxuLVx0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcbi1cdCAqIHdyb25nIGJpdChzKS5cbi1cdCAqL1xuLVx0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XG4tXHRcdDB4MCxcbi1cdFx0MHhmZmZmZmZmZnUsXG4tXHRcdDB4YWFhYWFhYWF1LFxuLVx0XHQweDU1NTU1NTU1dSxcbi1cdFx0MHhmMGYwZjBmMHUsXG4tXHRcdDB4MGYwZjBmMGZ1LFxuLVx0XHQweGEwYTBhMGEwdSxcbi1cdFx0MHgwYTBhMGEwYXUsXG4tXHRcdDB4NTA1MDUwNTB1LFxuLVx0XHQweDA1MDUwNTA1dSxcbi1cdH07XG4tXG4gXHQvKlxuIFx0ICogVGVzdCB1cCB0byBQTVUgdjUsIHdoaWNoIGlzIHRoZSBjdXJyZW50IG1heGltdW0gdmVyc2lvbiBkZWZpbmVkIGJ5XG4gXHQgKiBJbnRlbCwgaS5lLiBpcyB0aGUgbGFzdCB2ZXJzaW9uIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBiYWNrd2FyZHNcbkBAIC02NDksMzIgKzcwMiw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcbiBcdFx0XHRpZiAoIWt2bV9oYXNfcGVyZl9jYXBzIFx1MDAyNlx1MDAyNiBwZXJmX2NhcHNbaV0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRwcl9pbmZvKFwiVGVzdGluZyBhcmNoIGV2ZW50cywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRlc3Qgc2luZ2xlIGJpdHMgZm9yIGFsbCBQTVUgdmVyc2lvbiBhbmQgbGVuZ3RocyB1cFxuLVx0XHRcdCAqIHRoZSBudW1iZXIgb2YgZXZlbnRzICsxICh0byB2ZXJpZnkgS1ZNIGRvZXNuJ3QgZG9cbi1cdFx0XHQgKiB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlXG4tXHRcdFx0ICogaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAnMCcgYW5kIGFsbFxuLVx0XHRcdCAqIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXG4tXHRcdFx0ICovXG4tXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICsgMTsgaisrKSB7XG4tXHRcdFx0XHRmb3IgKGsgPSAxOyBrIFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgaysrKVxuLVx0XHRcdFx0XHR0ZXN0X2FyY2hfZXZlbnRzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgdW5hdmFpbGFibGVfbWFza3Nba10pO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRwcl9pbmZvKFwiVGVzdGluZyBHUCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGorKylcbi1cdFx0XHRcdHRlc3RfZ3BfY291bnRlcnModiwgcGVyZl9jYXBzW2ldLCBqKTtcbi1cbi1cdFx0XHRwcl9pbmZvKFwiVGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZml4ZWRfY291bnRlcnM7IGorKykge1xuLVx0XHRcdFx0Zm9yIChrID0gMDsgayBcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsrKylcbi1cdFx0XHRcdFx0dGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGosIGspO1xuLVx0XHRcdH1cbitcdFx0XHR0ZXN0X2FyY2hfZXZlbnRzKHYsIHBlcmZfY2Fwc1tpXSk7XG4rXHRcdFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pO1xuK1x0XHRcdHRlc3RfZml4ZWRfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTtcbiBcdFx0fVxuIFx0fVxuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE3OjQ1OjUxLjUyMDEwMTM1OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3NjYzOTYwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IERldGVybWluaW5nIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgaXQncyB0b3VjaGluZyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNgLiBSaWdodCBhd2F5LCBJJ20gdGhpbmtpbmcsIHRoaXMgbG9va3MgbGlrZSBpdCdzIG1ha2luZyBzb21lIGNoYW5nZXMgdG8gdGhlIEtWTSBzZWxmdGVzdHMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB3ZSdyZSBhZGRpbmcgYGt2bV9yYW5kb21fdTMyX2luX3JhbmdlYCB0byBgdGVzdF91dGlsLmNgLCBhbmQgdGhlIGBwbXVfY291bnRlcnNfdGVzdC5jYCBmaWxlIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGhhbmRsZSBWTXMgd2l0aCBtdWx0aXBsZSB2Q1BVcywgd2hpY2ggaXMgbGlrZWx5IGZvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuXG5cbk5vdywgbGV0IG1lIHBhdXNlIGFuZCB0aGluayB0aHJvdWdoIHRoaXMuIFRoZXNlIGZpbGVzIGFyZSAqc3BlY2lmaWNhbGx5KiBpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeS4gVGhhdCdzIGEga2V5IGRldGFpbC4gVGhpcyBpc24ndCB0b3VjaGluZyBjb3JlIGtlcm5lbCBjb2RlLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGlzIGlzIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBzZWxmdGVzdCBmcmFtZXdvcmsuXG5cbkxldCdzIHJlZmVyIGJhY2sgdG8gdGhlIGluc3RydWN0aW9ucyB3ZSBoYXZlIGZvciB0aGlzLiBUaGUgaW5zdHJ1Y3Rpb25zIHN0YXRlIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBtb2RpZmljYXRpb25zIHRvIHRoaW5ncyBsaWtlIERvY3VtZW50YXRpb24sIEtjb25maWcgZmlsZXMsIGNvbW1lbnRzLCBsb2dnaW5nLCBhbmQgY29uc3RhbnRzIHRoYXQgZG9uJ3QgY2hhbmdlIGV4ZWN1dGlvbiBmbG93LCBvciB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiBBbHNvLCBpbXBvcnRhbnRseSwgaXQgbWVudGlvbnMgbm90IGZ1enppbmcgdmVuZG9yLXNwZWNpZmljIFBDSWUgYW5kIEdQVSBkcml2ZXIgY29kZSByZXF1aXJpbmcgc3BlY2lhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQsIGFuZCBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzLiBJIGRvbid0IHNlZSBhbnl0aGluZyBleHBsaWNpdGx5IGFib3V0IHNlbGZ0ZXN0cywgYnV0IHRoZXNlIHRlc3RzIGFyZSBub3QgcGFydCBvZiB0aGUga2VybmVsIGl0c2VsZi5cblxuVGhlIGluc3RydWN0aW9ucyBhbHNvIHN0YXRlLCDigJxJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLuKAnSBTaW5jZSB0aGlzIHBhdGNoIGlzICpvbmx5KiBtb2RpZnlpbmcgZmlsZXMgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCBkaXJlY3RvcnksIGl0J3Mgbm90IGFjdHVhbGx5IHRvdWNoaW5nIGNvcmUga2VybmVsIGNvZGUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGFmZmVjdGVkIGZpbGVzOiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jYC4gWWVzLCBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgZGlyZWN0b3J5LlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50LiBJJ2xsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuUmVhc29uaW5nOiBUaGlzIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5LiBUaGlzIGlzIHVzZXItc3BhY2UgdGVzdCBjb2RlLCBhbmQgaXQgZG9lc24ndCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGVyZWZvcmUsIGZ1enppbmcgaXNuJ3Qgd2FycmFudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzQxLCJPdXRwdXRUb2tlbnMiOjczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTc6NDY6MDEuMjg2NTAwMzk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggaXMgdXNlci1zcGFjZSB0ZXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBpcyB1c2VyLXNwYWNlIHRlc3QgY29kZSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj4zkg[1] Phase: Running StartedAt: 2026-08-04 17:46:12 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj4zkg[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-04 17:46:12 +0000 UTC FinishedAt: 2026-08-04 17:46:16 +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,}