Name: series-workflowlrq8n Phase: Failed StartedAt: 2026-08-04 20:51:33 +0000 UTC FinishedAt: 2026-08-04 20:53:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrq8n[0] Phase: Succeeded StartedAt: 2026-08-04 20:51:33 +0000 UTC FinishedAt: 2026-08-04 20:53:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrq8n[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 20:51:33 +0000 UTC FinishedAt: 2026-08-04 20:53:04 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDIwOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0IHByb2dyYW1zIGFuZCBkbyBub3QgY2hhbmdlIGFueSBrZXJuZWwgbG9naWMgdG8gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMDo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYxMzhmZjZhOTRiYjU3ODM3YmFhZDcyMWNjN2I4YmU5NDI1MTdmMGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDIwOjUyOjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbmluZGV4IGU4MzU2ZWU1NGQ3YjkuLmE2YTNlMTY1Nzg5NTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0xMzUsOCAmIzQzOzEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9yYW5kb21fdTY0KHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgXHUwMDNjXHUwMDNjIDMyKSB8IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbiB9XG4gXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heCk7XG4mIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpO1xuJiM0Mzt1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KTtcbiBcbiBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHtcbiBcdFZNX01FTV9TUkNfQU5PTllNT1VTLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG5pbmRleCA2YjAwYWIxMWYzYzAyLi40ZGZmNzJmNmJkMzQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuQEAgLTQzLDEyICYjNDM7NDMsMjYgQEAgdTMyIGt2bV9yYW5kb21fdTMyKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiBzdGF0ZS1cdTAwM2VzZWVkO1xuIH1cbiBcbiYjNDM7LyogUmV0dXJucyBhIHJhbmRvbSB1MzIgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4mIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsdWUsIHJhbmdlO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVChtaW4gXHUwMDNjPSBtYXgsIFwmIzM0O1BFQktBQywgbWluID0gMHgleCwgbWF4ID0gMHgleFwmIzM0OywgbWluLCBtYXgpO1xuJiM0MztcbiYjNDM7XHR2YWx1ZSA9IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSBtYXggLSBtaW47XG4mIzQzO1x0aWYgKHJhbmdlID09IFVJTlRfTUFYKVxuJiM0MztcdFx0cmV0dXJuIHZhbHVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWluICYjNDM7ICh2YWx1ZSAlIChyYW5nZSAmIzQzOyAxKSk7XG4mIzQzO31cbiYjNDM7XG4gLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heClcbiYjNDM7dTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heClcbiB7XG4tXHR1NjQgdmFsdWU7XG4tXHR1NjQgcmFuZ2U7XG4mIzQzO1x0dTY0IHZhbHVlLCByYW5nZTtcbiBcbiBcdFRFU1RfQVNTRVJUKG1pbiBcdTAwM2M9IG1heCwgXCYjMzQ7UEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHhcJiMzNDssIG1pbiwgbWF4KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbmluZGV4IGRjNmFmYWMzYWE5MTkuLmM3YzU2NjIyMDM4MTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuQEAgLTg3LDE0ICYjNDM7ODcsMTggQEAgc3RhdGljIHN0cnVjdCBrdm1faW50ZWxfcG11X2V2ZW50IGludGVsX2V2ZW50X3RvX2ZlYXR1cmUodTggaWR4KVxuIFx0cmV0dXJuIF9faW50ZWxfZXZlbnRfdG9fZmVhdHVyZVtpZHhdO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsXG4tXHRcdFx0XHRcdFx0ICB2b2lkICpndWVzdF9jb2RlLFxuLVx0XHRcdFx0XHRcdCAgdTggcG11X3ZlcnNpb24sXG4tXHRcdFx0XHRcdFx0ICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXModTMyIG5yX3ZjcHVzLCB2b2lkICpndWVzdF9jb2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHU4IHBtdV92ZXJzaW9uLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKipfX3ZjcHVzW10pXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzID0gY2FsbG9jKG5yX3ZjcHVzLCBzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSk7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaTtcbiBcbi1cdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7XG4mIzQzO1x0Kl9fdmNwdXMgPSB2Y3B1cztcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cyhucl92Y3B1cywgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9wbXVfdmVyc2lvbik7XG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgaGFyZHdhcmVfcG11X2FyY2hfZXZlbnRzKTtcbiBcbkBAIC0xMDIsMTMgJiM0MzsxMDYsMjIgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LFxuIFx0ICogU2V0IFBFUkZfQ0FQQUJJTElUSUVTIGJlZm9yZSBQTVUgdmVyc2lvbiBhcyBLVk0gZGlzYWxsb3dzIGVuYWJsaW5nXG4gXHQgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJiMzOTt0IGhhdmUgYSB2UE1VLlxuIFx0ICovXG4tXHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXG4tXHRcdHZjcHVfc2V0X21zcigqdmNwdSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChrdm1faGFzX3BlcmZfY2FwcylcbiYjNDM7XHRcdFx0dmNwdV9zZXRfbXNyKHZjcHVzW2ldLCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpO1xuJiM0MztcbiYjNDM7XHRcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2ldLCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcbiYjNDM7XHR9XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSgqdmNwdSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7XG4gXHRyZXR1cm4gdm07XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBwbXVfdm1fZnJlZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXMpXG4mIzQzO3tcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO1x0ZnJlZSh2Y3B1cyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB1Y2FsbCB1YztcbkBAIC0yNzMsNiAmIzQzOzI4Niw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXG4gXHRzdHJ1Y3Qga3ZtX3g4Nl9wbXVfZmVhdHVyZSBncF9ldmVudCwgZml4ZWRfZXZlbnQ7XG4gXHR1MzIgYmFzZV9wbWNfbXNyO1xuIFx0dW5zaWduZWQgaW50IGk7XG4mIzQzO1x0dTY0IGV2ZW50c2VsO1xuIFxuIFx0LyogVGhlIGhvc3Qgc2lkZSBzaG91bGRuJiMzOTt0IGludm9rZSB0aGlzIHdpdGhvdXQgYSBndWVzdCBQTVUuICovXG4gXHRHVUVTVF9BU1NFUlQocG11X3ZlcnNpb24pO1xuQEAgLTI4NywxOSAmIzQzOzMwMSwxNiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KVxuIFx0R1VFU1RfQVNTRVJUX0VRKGlkeCwgZ3BfZXZlbnQuZi5iaXQpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKG5yX2dwX2NvdW50ZXJzKTtcbiYjNDM7XHRpID0ga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2UoXHUwMDI2a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2dwX2NvdW50ZXJzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1NjQgZXZlbnRzZWwgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MgfFxuLVx0XHRcdFx0ICAgIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxuLVx0XHRcdFx0ICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xuJiM0MztcdGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHwgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8XG4mIzQzO1x0XHQgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTtcbiBcbi1cdFx0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApO1xuLVx0XHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXG4tXHRcdFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7XG4mIzQzO1x0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApO1xuJiM0MztcdGlmIChndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcbiYjNDM7XHRcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xuIFxuLVx0XHRfX2d1ZXN0X3Rlc3RfYXJjaF9ldmVudChpZHgsIGksIGJhc2VfcG1jX21zciAmIzQzOyBpLFxuLVx0XHRcdFx0XHRNU1JfUDZfRVZOVFNFTDAgJiM0MzsgaSwgZXZlbnRzZWwpO1xuLVx0fVxuJiM0MztcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICYjNDM7IGksIE1TUl9QNl9FVk5UU0VMMCAmIzQzOyBpLCBldmVudHNlbCk7XG4gXG4gXHRpZiAoIWd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxuIFx0XHRyZXR1cm47XG5AQCAtMzI4LDMwICYjNDM7MzM5LDcyIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuLVx0XHRcdCAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbiYjNDM7c3RhdGljIHZvaWQgX190ZXN0X2FyY2hfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuJiM0MztcdFx0XHQgICAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdC8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqL1xuLVx0aWYgKCFwbXVfdmVyc2lvbilcbi1cdFx0cmV0dXJuO1xuLVxuIFx0dW5hdmFpbGFibGVfbWFzayBcdTAwMjY9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsXG4gXHRcdFx0XHQgICAgWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5sb19iaXQpO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4tXG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCxcbiBcdFx0XHRcdGxlbmd0aCk7XG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLFxuIFx0XHRcdFx0dW5hdmFpbGFibGVfbWFzayk7XG4gXG4gXHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7fVxuIFxuLVx0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1x0dTMyIGs7XG4mIzQzO1x0dTggajtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxuJiM0MztcdCAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3RcbiYjNDM7XHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXG4mIzQzO1x0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcbiYjNDM7XHQgKiB3cm9uZyBiaXQocykuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XG4mIzQzO1x0XHQweDAsXG4mIzQzO1x0XHQweGZmZmZmZmZmdSxcbiYjNDM7XHRcdDB4YWFhYWFhYWF1LFxuJiM0MztcdFx0MHg1NTU1NTU1NXUsXG4mIzQzO1x0XHQweGYwZjBmMGYwdSxcbiYjNDM7XHRcdDB4MGYwZjBmMGZ1LFxuJiM0MztcdFx0MHhhMGEwYTBhMHUsXG4mIzQzO1x0XHQweDBhMGEwYTBhdSxcbiYjNDM7XHRcdDB4NTA1MDUwNTB1LFxuJiM0MztcdFx0MHgwNTA1MDUwNXUsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0cG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XG4mIzQzO1x0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXG4mIzQzO1x0aWYgKCFwbXVfdmVyc2lvbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDIpICogQVJSQVlfU0laRSh1bmF2YWlsYWJsZV9tYXNrcyksXG4mIzQzO1x0XHRcdFx0ICAgICAgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywgcG11X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0ICAgICAgcGVyZl9jYXBhYmlsaXRpZXMsIFx1MDAyNnZjcHVzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXAgdGhlIG51bWJlciBvZlxuJiM0MztcdCAqIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG8gd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGhcbiYjNDM7XHQgKiBpcyBncmVhdGVyIHRoYW4gdGhlIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kXG4mIzQzO1x0ICogYWxsIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChqID0gMDsgaiBcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDE7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGsgPSAxOyBrIFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgayYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdF9fdGVzdF9hcmNoX2V2ZW50cyh2Y3B1c1tpJiM0MzsmIzQzO10sIHBlcmZfY2FwYWJpbGl0aWVzLCBqLFxuJiM0MztcdFx0XHRcdFx0ICAgdW5hdmFpbGFibGVfbWFza3Nba10pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcbiB9XG4gXG4gLypcbkBAIC00OTUsMjEgJiM0Mzs1NDgsMjcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4tXHRcdFx0ICAgICB1OCBucl9ncF9jb3VudGVycylcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHR1OCBucl9ncF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyk7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHR1OCBqO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0bnJfZ3BfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLFxuLVx0XHRcdFx0bnJfZ3BfY291bnRlcnMpO1xuJiM0MztcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX2dwX2NvdW50ZXJzICYjNDM7IDEsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4gXG4tXHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tqXSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyxcbiYjNDM7XHRcdFx0XHRcdG5yX2dwX2NvdW50ZXJzKTtcbiBcbi1cdGt2bV92bV9mcmVlKHZtKTtcbiYjNDM7XHRcdHJ1bl92Y3B1KHZjcHVzW2pdKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcbkBAIC01NjEsNTkgJiM0Mzs2MjAsNTMgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4tXHRcdFx0XHR1OCBucl9maXhlZF9jb3VudGVycywgdTMyIHN1cHBvcnRlZF9iaXRtYXNrKVxuJiM0MztzdGF0aWMgdm9pZCBfX3Rlc3RfZml4ZWRfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBucl9maXhlZF9jb3VudGVycyxcbiYjNDM7XHRcdFx0XHQgIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXG4tXHRcdFx0XHRcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuLVxuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9GSVhFRF9DT1VOVEVSU19CSVRNQVNLLFxuIFx0XHRcdFx0c3VwcG9ydGVkX2JpdG1hc2spO1xuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyxcbiBcdFx0XHRcdG5yX2ZpeGVkX2NvdW50ZXJzKTtcbiBcbiBcdHJ1bl92Y3B1KHZjcHUpO1xuJiM0Mzt9XG4gXG4tXHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcbiYjNDM7e1xuJiM0MztcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTKTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1x0dTMyIGs7XG4mIzQzO1x0dTggajtcbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nICV1IGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0bnJfZml4ZWRfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4mIzQzO1xuJiM0MztcbiYjNDM7XHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygobnJfZml4ZWRfY291bnRlcnMgJiM0MzsgMSkgKiBCSVQobnJfZml4ZWRfY291bnRlcnMpLFxuJiM0MztcdFx0XHRcdCAgICAgIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjPSAoQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSAtIDEpOyBrJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0X190ZXN0X2ZpeGVkX2NvdW50ZXJzKHZjcHVzW2kmIzQzOyYjNDM7XSwgaiwgayk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXG4ge1xuLVx0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xuLVx0dTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpO1xuIFx0dTggcG11X3ZlcnNpb24gPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTik7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbi1cdHU4IHYsIGo7XG4tXHR1MzIgaztcbiYjNDM7XHR1OCB2O1xuIFxuIFx0Y29uc3QgdTY0IHBlcmZfY2Fwc1tdID0ge1xuIFx0XHQwLFxuIFx0XHRQTVVfQ0FQX0ZXX1dSSVRFUyxcbiBcdH07XG4gXG4tXHQvKlxuLVx0ICogVG8ga2VlcCB0aGUgdG90YWwgcnVudGltZSByZWFzb25hYmxlLCB0ZXN0IG9ubHkgYSBoYW5kZnVsIG9mIHNlbGVjdCxcbi1cdCAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3Rcbi1cdCAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGxcbi1cdCAqIGFzIGFsdGVybmF0aW5nIGJpdCBzZXF1ZW5jdWVzLCBlLmcuIHRvIGRldGVjdCBpZiBLVk0gaXMgY2hlY2tpbmcgdGhlXG4tXHQgKiB3cm9uZyBiaXQocykuXG4tXHQgKi9cbi1cdGNvbnN0IHUzMiB1bmF2YWlsYWJsZV9tYXNrc1tdID0ge1xuLVx0XHQweDAsXG4tXHRcdDB4ZmZmZmZmZmZ1LFxuLVx0XHQweGFhYWFhYWFhdSxcbi1cdFx0MHg1NTU1NTU1NXUsXG4tXHRcdDB4ZjBmMGYwZjB1LFxuLVx0XHQweDBmMGYwZjBmdSxcbi1cdFx0MHhhMGEwYTBhMHUsXG4tXHRcdDB4MGEwYTBhMGF1LFxuLVx0XHQweDUwNTA1MDUwdSxcbi1cdFx0MHgwNTA1MDUwNXUsXG4tXHR9O1xuLVxuIFx0LypcbiBcdCAqIFRlc3QgdXAgdG8gUE1VIHY1LCB3aGljaCBpcyB0aGUgY3VycmVudCBtYXhpbXVtIHZlcnNpb24gZGVmaW5lZCBieVxuIFx0ICogSW50ZWwsIGkuZS4gaXMgdGhlIGxhc3QgdmVyc2lvbiB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYmFja3dhcmRzXG5AQCAtNjQ5LDMyICYjNDM7NzAyLDkgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKVxuIFx0XHRcdGlmICgha3ZtX2hhc19wZXJmX2NhcHMgXHUwMDI2XHUwMDI2IHBlcmZfY2Fwc1tpXSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBhcmNoIGV2ZW50cywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwmIzM0Oyxcbi1cdFx0XHRcdHYsIHBlcmZfY2Fwc1tpXSk7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXBcbi1cdFx0XHQgKiB0aGUgbnVtYmVyIG9mIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG9cbi1cdFx0XHQgKiB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlXG4tXHRcdFx0ICogaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAmIzM5OzAmIzM5OyBhbmQgYWxsXG4tXHRcdFx0ICogb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gTlJfSU5URUxfQVJDSF9FVkVOVFMgJiM0MzsgMTsgaiYjNDM7JiM0MzspIHtcbi1cdFx0XHRcdGZvciAoayA9IDE7IGsgXHUwMDNjIEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrJiM0MzsmIzQzOylcbi1cdFx0XHRcdFx0dGVzdF9hcmNoX2V2ZW50cyh2LCBwZXJmX2NhcHNbaV0sIGosIHVuYXZhaWxhYmxlX21hc2tzW2tdKTtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0cHJfaW5mbyhcJiMzNDtUZXN0aW5nIEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGomIzQzOyYjNDM7KVxuLVx0XHRcdFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGopO1xuLVxuLVx0XHRcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwmIzM0Oyxcbi1cdFx0XHRcdHYsIHBlcmZfY2Fwc1tpXSk7XG4tXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2M9IG5yX2ZpeGVkX2NvdW50ZXJzOyBqJiM0MzsmIzQzOykge1xuLVx0XHRcdFx0Zm9yIChrID0gMDsgayBcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsmIzQzOyYjNDM7KVxuLVx0XHRcdFx0XHR0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgayk7XG4tXHRcdFx0fVxuJiM0MztcdFx0XHR0ZXN0X2FyY2hfZXZlbnRzKHYsIHBlcmZfY2Fwc1tpXSk7XG4mIzQzO1x0XHRcdHRlc3RfZ3BfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTtcbiYjNDM7XHRcdFx0dGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pO1xuIFx0XHR9XG4gXHR9XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIwOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdCBwcm9ncmFtcyBhbmQgZG8gbm90IGNoYW5nZSBhbnkga2VybmVsIGxvZ2ljIHRvIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MTM4ZmY2YTk0YmI1NzgzN2JhYWQ3MjFjYzdiOGJlOTQyNTE3ZjBhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAyMDo1Mjo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKaW5kZXggZTgzNTZlZTU0ZDdiOS4uYTZhM2UxNjU3ODk1OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKQEAgLTEzNSw4ICYjNDM7MTM1LDggQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3JhbmRvbV91NjQoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKQogCXJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgJmx0OyZsdDsgMzIpIHwga3ZtX3JhbmRvbV91MzIoc3RhdGUpOwogfQogCi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLAotCQkJICAgIHU2NCBtYXgpOwomIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpOwomIzQzO3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpOwogCiBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHsKIAlWTV9NRU1fU1JDX0FOT05ZTU9VUywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jCmluZGV4IDZiMDBhYjExZjNjMDIuLjRkZmY3MmY2YmQzNDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYwpAQCAtNDMsMTIgJiM0Mzs0MywyNiBAQCB1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKQogCXJldHVybiBzdGF0ZS0mZ3Q7c2VlZDsKIH0KIAomIzQzOy8qIFJldHVybnMgYSByYW5kb20gdTMyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqLwomIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpCiYjNDM7ewomIzQzOwl1MzIgdmFsdWUsIHJhbmdlOwomIzQzOwomIzQzOwlURVNUX0FTU0VSVChtaW4gJmx0Oz0gbWF4LCAmIzM0O1BFQktBQywgbWluID0gMHgleCwgbWF4ID0gMHgleCYjMzQ7LCBtaW4sIG1heCk7CiYjNDM7CiYjNDM7CXZhbHVlID0ga3ZtX3JhbmRvbV91MzIoc3RhdGUpOwomIzQzOwomIzQzOwlyYW5nZSA9IG1heCAtIG1pbjsKJiM0MzsJaWYgKHJhbmdlID09IFVJTlRfTUFYKQomIzQzOwkJcmV0dXJuIHZhbHVlOwomIzQzOwomIzQzOwlyZXR1cm4gbWluICYjNDM7ICh2YWx1ZSAlIChyYW5nZSAmIzQzOyAxKSk7CiYjNDM7fQomIzQzOwogLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovCi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLAotCQkJICAgIHU2NCBtYXgpCiYjNDM7dTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heCkKIHsKLQl1NjQgdmFsdWU7Ci0JdTY0IHJhbmdlOwomIzQzOwl1NjQgdmFsdWUsIHJhbmdlOwogCiAJVEVTVF9BU1NFUlQobWluICZsdDs9IG1heCwgJiMzNDtQRUJLQUMsIG1pbiA9IDB4JWx4LCBtYXggPSAweCVseCYjMzQ7LCBtaW4sIG1heCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYwppbmRleCBkYzZhZmFjM2FhOTE5Li5jN2M1NjYyMjAzODE1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jCkBAIC04NywxNCAmIzQzOzg3LDE4IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX2ludGVsX3BtdV9ldmVudCBpbnRlbF9ldmVudF90b19mZWF0dXJlKHU4IGlkeCkKIAlyZXR1cm4gX19pbnRlbF9ldmVudF90b19mZWF0dXJlW2lkeF07CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwKLQkJCQkJCSAgdm9pZCAqZ3Vlc3RfY29kZSwKLQkJCQkJCSAgdTggcG11X3ZlcnNpb24sCi0JCQkJCQkgIHU2NCBwZXJmX2NhcGFiaWxpdGllcykKJiM0MztzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBucl92Y3B1cywgdm9pZCAqZ3Vlc3RfY29kZSwKJiM0MzsJCQkJCSAgICAgICB1OCBwbXVfdmVyc2lvbiwKJiM0MzsJCQkJCSAgICAgICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IGt2bV92Y3B1ICoqX192Y3B1c1tdKQogewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cyA9IGNhbGxvYyhucl92Y3B1cywgc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSkpOwogCXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgaTsKIAotCXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7CiYjNDM7CSpfX3ZjcHVzID0gdmNwdXM7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfdmNwdXMsIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwga3ZtX3BtdV92ZXJzaW9uKTsKIAlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgaGFyZHdhcmVfcG11X2FyY2hfZXZlbnRzKTsKIApAQCAtMTAyLDEzICYjNDM7MTA2LDIyIEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwKIAkgKiBTZXQgUEVSRl9DQVBBQklMSVRJRVMgYmVmb3JlIFBNVSB2ZXJzaW9uIGFzIEtWTSBkaXNhbGxvd3MgZW5hYmxpbmcKIAkgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJiMzOTt0IGhhdmUgYSB2UE1VLgogCSAqLwotCWlmIChrdm1faGFzX3BlcmZfY2FwcykKLQkJdmNwdV9zZXRfbXNyKCp2Y3B1LCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoa3ZtX2hhc19wZXJmX2NhcHMpCiYjNDM7CQkJdmNwdV9zZXRfbXNyKHZjcHVzW2ldLCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwomIzQzOwkJdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdXNbaV0sIFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTiwgcG11X3ZlcnNpb24pOwomIzQzOwl9CiAKLQl2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSgqdmNwdSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7CiAJcmV0dXJuIHZtOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcG11X3ZtX2ZyZWUoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzKQomIzQzO3sKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzOwlmcmVlKHZjcHVzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHVjYWxsIHVjOwpAQCAtMjczLDYgJiM0MzsyODYsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KQogCXN0cnVjdCBrdm1feDg2X3BtdV9mZWF0dXJlIGdwX2V2ZW50LCBmaXhlZF9ldmVudDsKIAl1MzIgYmFzZV9wbWNfbXNyOwogCXVuc2lnbmVkIGludCBpOwomIzQzOwl1NjQgZXZlbnRzZWw7CiAKIAkvKiBUaGUgaG9zdCBzaWRlIHNob3VsZG4mIzM5O3QgaW52b2tlIHRoaXMgd2l0aG91dCBhIGd1ZXN0IFBNVS4gKi8KIAlHVUVTVF9BU1NFUlQocG11X3ZlcnNpb24pOwpAQCAtMjg3LDE5ICYjNDM7MzAxLDE2IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpCiAJR1VFU1RfQVNTRVJUX0VRKGlkeCwgZ3BfZXZlbnQuZi5iaXQpOwogCiAJR1VFU1RfQVNTRVJUKG5yX2dwX2NvdW50ZXJzKTsKJiM0MzsJaSA9IGt2bV9yYW5kb21fdTMyX2luX3JhbmdlKCZhbXA7a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBucl9ncF9jb3VudGVyczsgaSYjNDM7JiM0MzspIHsKLQkJdTY0IGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHwKLQkJCQkgICAgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8Ci0JCQkJICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdOwomIzQzOwlldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfAomIzQzOwkJICAgaW50ZWxfcG11X2FyY2hfZXZlbnRzW2lkeF07CiAKLQkJd3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApOwotCQlpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpCi0JCQl3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTsKJiM0MzsJd3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApOwomIzQzOwlpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpCiYjNDM7CQl3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTsKIAotCQlfX2d1ZXN0X3Rlc3RfYXJjaF9ldmVudChpZHgsIGksIGJhc2VfcG1jX21zciAmIzQzOyBpLAotCQkJCQlNU1JfUDZfRVZOVFNFTDAgJiM0MzsgaSwgZXZlbnRzZWwpOwotCX0KJiM0MzsJX19ndWVzdF90ZXN0X2FyY2hfZXZlbnQoaWR4LCBpLCBiYXNlX3BtY19tc3IgJiM0MzsgaSwgTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIGV2ZW50c2VsKTsKIAogCWlmICghZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpCiAJCXJldHVybjsKQEAgLTMyOCwzMCAmIzQzOzMzOSw3MiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpCiAJR1VFU1RfRE9ORSgpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsCi0JCQkgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spCiYjNDM7c3RhdGljIHZvaWQgX190ZXN0X2FyY2hfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLAomIzQzOwkJCSAgICAgICB1OCBsZW5ndGgsIHUzMiB1bmF2YWlsYWJsZV9tYXNrKQogewotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQlzdHJ1Y3Qga3ZtX3ZtICp2bTsKLQotCS8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqLwotCWlmICghcG11X3ZlcnNpb24pCi0JCXJldHVybjsKLQogCXVuYXZhaWxhYmxlX21hc2sgJmFtcDs9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsCiAJCQkJICAgIFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0subG9fYml0KTsKIAotCXZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywKLQkJCQkJIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7Ci0KIAl2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCwKIAkJCQlsZW5ndGgpOwogCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0ssCiAJCQkJdW5hdmFpbGFibGVfbWFzayk7CiAKIAlydW5fdmNwdSh2Y3B1KTsKJiM0Mzt9CiAKLQlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgaSA9IDA7CiYjNDM7CXUzMiBrOwomIzQzOwl1OCBqOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LAomIzQzOwkgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0CiYjNDM7CSAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGwKJiM0MzsJICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGUKJiM0MzsJICogd3JvbmcgYml0KHMpLgomIzQzOwkgKi8KJiM0MzsJY29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7CiYjNDM7CQkweDAsCiYjNDM7CQkweGZmZmZmZmZmdSwKJiM0MzsJCTB4YWFhYWFhYWF1LAomIzQzOwkJMHg1NTU1NTU1NXUsCiYjNDM7CQkweGYwZjBmMGYwdSwKJiM0MzsJCTB4MGYwZjBmMGZ1LAomIzQzOwkJMHhhMGEwYTBhMHUsCiYjNDM7CQkweDBhMGEwYTBhdSwKJiM0MzsJCTB4NTA1MDUwNTB1LAomIzQzOwkJMHgwNTA1MDUwNXUsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXByX2luZm8oJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKJiM0MzsJCXBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7CiYjNDM7CiYjNDM7CS8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqLwomIzQzOwlpZiAoIXBtdV92ZXJzaW9uKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygoTlJfSU5URUxfQVJDSF9FVkVOVFMgJiM0MzsgMikgKiBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKSwKJiM0MzsJCQkJICAgICAgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywgcG11X3ZlcnNpb24sCiYjNDM7CQkJCSAgICAgIHBlcmZfY2FwYWJpbGl0aWVzLCAmYW1wO3ZjcHVzKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwIHRoZSBudW1iZXIgb2YKJiM0MzsJICogZXZlbnRzICYjNDM7MSAodG8gdmVyaWZ5IEtWTSBkb2VzbiYjMzk7dCBkbyB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aAomIzQzOwkgKiBpcyBncmVhdGVyIHRoYW4gdGhlIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kCiYjNDM7CSAqIGFsbCBvbmVzIGkuZS4gYWxsIGV2ZW50cyBiZWluZyBhdmFpbGFibGUgYW5kIHVuYXZhaWxhYmxlLgomIzQzOwkgKi8KJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7PSBOUl9JTlRFTF9BUkNIX0VWRU5UUyAmIzQzOyAxOyBqJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChrID0gMTsgayAmbHQ7IEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrJiM0MzsmIzQzOykKJiM0MzsJCQlfX3Rlc3RfYXJjaF9ldmVudHModmNwdXNbaSYjNDM7JiM0MztdLCBwZXJmX2NhcGFiaWxpdGllcywgaiwKJiM0MzsJCQkJCSAgIHVuYXZhaWxhYmxlX21hc2tzW2tdKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwbXVfdm1fZnJlZSh2bSwgdmNwdXMpOwogfQogCiAvKgpAQCAtNDk1LDIxICYjNDM7NTQ4LDI3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnModm9pZCkKIAlHVUVTVF9ET05FKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcywKLQkJCSAgICAgdTggbnJfZ3BfY291bnRlcnMpCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKQogewotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJdTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1czsKIAlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJdTggajsKIAotCXZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycywKLQkJCQkJIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7CiYjNDM7CXByX2luZm8oJiMzNDtUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKJiM0MzsJCW5yX2dwX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwogCi0JdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUywKLQkJCQlucl9ncF9jb3VudGVycyk7CiYjNDM7CXZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX2dwX2NvdW50ZXJzICYjNDM7IDEsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsCiYjNDM7CQkJCSAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgJmFtcDt2Y3B1cyk7CiAKLQlydW5fdmNwdSh2Y3B1KTsKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7PSBucl9ncF9jb3VudGVyczsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2pdLCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLAomIzQzOwkJCQkJbnJfZ3BfY291bnRlcnMpOwogCi0Ja3ZtX3ZtX2ZyZWUodm0pOwomIzQzOwkJcnVuX3ZjcHUodmNwdXNbal0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZCkKQEAgLTU2MSw1OSAmIzQzOzYyMCw1MyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpCiAJR1VFU1RfRE9ORSgpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsCi0JCQkJdTggbnJfZml4ZWRfY291bnRlcnMsIHUzMiBzdXBwb3J0ZWRfYml0bWFzaykKJiM0MztzdGF0aWMgdm9pZCBfX3Rlc3RfZml4ZWRfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBucl9maXhlZF9jb3VudGVycywKJiM0MzsJCQkJICB1MzIgc3VwcG9ydGVkX2JpdG1hc2spCiB7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCXN0cnVjdCBrdm1fdm0gKnZtOwotCi0Jdm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLAotCQkJCQkgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTsKLQogCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRklYRURfQ09VTlRFUlNfQklUTUFTSywKIAkJCQlzdXBwb3J0ZWRfYml0bWFzayk7CiAJdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUywKIAkJCQlucl9maXhlZF9jb3VudGVycyk7CiAKIAlydW5fdmNwdSh2Y3B1KTsKJiM0Mzt9CiAKLQlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKQomIzQzO3sKJiM0MzsJdTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1czsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CWludCBpID0gMDsKJiM0MzsJdTMyIGs7CiYjNDM7CXU4IGo7CiYjNDM7CiYjNDM7CXByX2luZm8oJiMzNDtUZXN0aW5nICV1IGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKJiM0MzsJCW5yX2ZpeGVkX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwomIzQzOwomIzQzOwl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygobnJfZml4ZWRfY291bnRlcnMgJiM0MzsgMSkgKiBCSVQobnJfZml4ZWRfY291bnRlcnMpLAomIzQzOwkJCQkgICAgICBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLAomIzQzOwkJCQkgICAgICBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMsICZhbXA7dmNwdXMpOwomIzQzOwomIzQzOwlmb3IgKGogPSAwOyBqICZsdDs9IG5yX2ZpeGVkX2NvdW50ZXJzOyBqJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChrID0gMDsgayAmbHQ7PSAoQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSAtIDEpOyBrJiM0MzsmIzQzOykKJiM0MzsJCQlfX3Rlc3RfZml4ZWRfY291bnRlcnModmNwdXNbaSYjNDM7JiM0MztdLCBqLCBrKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwbXVfdm1fZnJlZSh2bSwgdmNwdXMpOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpCiB7Ci0JdTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpOwotCXU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTsKIAl1OCBwbXVfdmVyc2lvbiA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OKTsKIAl1bnNpZ25lZCBpbnQgaTsKLQl1OCB2LCBqOwotCXUzMiBrOwomIzQzOwl1OCB2OwogCiAJY29uc3QgdTY0IHBlcmZfY2Fwc1tdID0gewogCQkwLAogCQlQTVVfQ0FQX0ZXX1dSSVRFUywKIAl9OwogCi0JLyoKLQkgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LAotCSAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3QKLQkgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsCi0JICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGUKLQkgKiB3cm9uZyBiaXQocykuCi0JICovCi0JY29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7Ci0JCTB4MCwKLQkJMHhmZmZmZmZmZnUsCi0JCTB4YWFhYWFhYWF1LAotCQkweDU1NTU1NTU1dSwKLQkJMHhmMGYwZjBmMHUsCi0JCTB4MGYwZjBmMGZ1LAotCQkweGEwYTBhMGEwdSwKLQkJMHgwYTBhMGEwYXUsCi0JCTB4NTA1MDUwNTB1LAotCQkweDA1MDUwNTA1dSwKLQl9OwotCiAJLyoKIAkgKiBUZXN0IHVwIHRvIFBNVSB2NSwgd2hpY2ggaXMgdGhlIGN1cnJlbnQgbWF4aW11bSB2ZXJzaW9uIGRlZmluZWQgYnkKIAkgKiBJbnRlbCwgaS5lLiBpcyB0aGUgbGFzdCB2ZXJzaW9uIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBiYWNrd2FyZHMKQEAgLTY0OSwzMiAmIzQzOzcwMiw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZCkKIAkJCWlmICgha3ZtX2hhc19wZXJmX2NhcHMgJmFtcDsmYW1wOyBwZXJmX2NhcHNbaV0pCiAJCQkJY29udGludWU7CiAKLQkJCXByX2luZm8oJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKLQkJCQl2LCBwZXJmX2NhcHNbaV0pOwotCi0JCQkvKgotCQkJICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwCi0JCQkgKiB0aGUgbnVtYmVyIG9mIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG8KLQkJCSAqIHdlaXJkIHRoaW5ncyBpZiB0aGUgZ3Vlc3QgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGUKLQkJCSAqIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kIGFsbAotCQkJICogb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS4KLQkJCSAqLwotCQkJZm9yIChqID0gMDsgaiAmbHQ7PSBOUl9JTlRFTF9BUkNIX0VWRU5UUyAmIzQzOyAxOyBqJiM0MzsmIzQzOykgewotCQkJCWZvciAoayA9IDE7IGsgJmx0OyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgayYjNDM7JiM0MzspCi0JCQkJCXRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldLCBqLCB1bmF2YWlsYWJsZV9tYXNrc1trXSk7Ci0JCQl9Ci0KLQkJCXByX2luZm8oJiMzNDtUZXN0aW5nIEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKLQkJCQl2LCBwZXJmX2NhcHNbaV0pOwotCQkJZm9yIChqID0gMDsgaiAmbHQ7PSBucl9ncF9jb3VudGVyczsgaiYjNDM7JiM0MzspCi0JCQkJdGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGopOwotCi0JCQlwcl9pbmZvKCYjMzQ7VGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxuJiMzNDssCi0JCQkJdiwgcGVyZl9jYXBzW2ldKTsKLQkJCWZvciAoaiA9IDA7IGogJmx0Oz0gbnJfZml4ZWRfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7Ci0JCQkJZm9yIChrID0gMDsgayAmbHQ7PSAoQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSAtIDEpOyBrJiM0MzsmIzQzOykKLQkJCQkJdGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGosIGspOwotCQkJfQomIzQzOwkJCXRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldKTsKJiM0MzsJCQl0ZXN0X2dwX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7CiYjNDM7CQkJdGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pOwogCQl9CiAJfQogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzM5CgkJCQkJCQlvdXRwdXQ6IDcyCgkJCQkJCQl0aG91Z2h0czogNDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBEZWNpc2lvbjogTm8qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IHRvdWNoZXMgYSBmZXcgZmlsZXM6IGB0ZXN0X3V0aWwuaGAsIGB0ZXN0X3V0aWwuY2AsIGFuZCBgcG11X2NvdW50ZXJzX3Rlc3QuY2AsIGFsbCBuZXN0bGVkIHdpdGhpbiB0aGUgS1ZNIHNlbGZ0ZXN0cyBkaXJlY3RvcnkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBhY2NpZGVudGFsbHkgbGVhayBpbnRvIGtlcm5lbCBzcGFjZS4gQSBxdWljayBjaGVjayBvZiB0aGUgZGlmZiBjb25maXJtcyB0aGF0IGl0JiMzOTtzIGFsbCBzdGF5aW5nIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AuIFRoYXQmIzM5O3MgZ29vZC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBmdXp6aW5nIGltcGxpY2F0aW9ucy4gVGhlIHByb21wdCBwcm92aWRlcyBzb21lIGd1aWRhbmNlLiBJdCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IG1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIFBDSSBzd2l0Y2ggY29kZSwgYW5kIGRyaXZlciBgLnJlbW92ZWAgZnVuY3Rpb25zIGFzIHJlYXNvbnMgZm9yIG5vdCBmdXp6aW5nLiBXaGlsZSBpdCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IG1lbnRpb24gc2VsZnRlc3RzLCBJJiMzOTttIGludGVycHJldGluZyB0aGF0IHNlbGZ0ZXN0cywgYmVpbmcgKnVzZXItc3BhY2UgcHJvZ3JhbXMqIGRlc2lnbmVkIHRvIHZhbGlkYXRlIGtlcm5lbCBiZWhhdmlvciwgYXJlbiYjMzk7dCBrZXJuZWwgKmNvZGUqIGFuZCB0aGVyZWZvcmUgYXJlbiYjMzk7dCB3aGF0IHdlJiMzOTtyZSBhaW1pbmcgdG8gZnV6ei4gV2Ugd2FudCB0byBmdXp6IHRoZSAqa2VybmVsKiBpdHNlbGYsIHRoZSBjb3JlIGV4ZWN1dGlvbiBsb2dpYy4gVGhpcyBwYXRjaCwgY29uZmluZWQgdG8gc2VsZnRlc3RzLCB3b24mIzM5O3QgYWZmZWN0IHRoYXQuCgpJJiMzOTttIGRvaW5nIGEgZG91YmxlIGNoZWNrLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBJIGNhbiBjb25maXJtIHRoYXQgdGhlcmUmIzM5O3Mgbm8ga2VybmVsIGNvZGUgaW4gdGhpcyBkaWZmLgoKU28sIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoZSByZXN1bHQgdG8gYFdvcnRoRnV6emluZz1mYWxzZWAuIE15IHJlYXNvbmluZyB3aWxsIGJlIGNvbmNpc2U6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AsIHdoaWNoIGFyZSB1c2VyLXNwYWNlIHRlc3QgcHJvZ3JhbXMgYW5kIGRvIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBsb2dpYyB0byBiZSBmdXp6ZWQuJiMzNDsKCkkmIzM5O2xsIHF1aWNrbHkgcmV2aWV3IHRoZSBkaWZmIG9uZSBtb3JlIHRpbWUgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLi4uTm9wZSwganVzdCB0aGUgc2VsZnRlc3RzLgoKQWxsIHJpZ2h0LCBzZXR0aW5nIHRoZSByZXN1bHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8sIHdoaWNoIGFyZSB1c2VyLXNwYWNlIHRlc3QgcHJvZ3JhbXMgYW5kIGRvIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBsb2dpYyB0byBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdCBwcm9ncmFtcyBhbmQgZG8gbm90IGNoYW5nZSBhbnkga2VybmVsIGxvZ2ljIHRvIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMDo1Mjo0NS43MDYyMDg4NjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTE4NDA5MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdCBwcm9ncmFtcyBhbmQgZG8gbm90IGNoYW5nZSBhbnkga2VybmVsIGxvZ2ljIHRvIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIwOjUyOjQ1LjcwNjIxNTg0OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1ODY4MzkxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxMzhmZjZhOTRiYjU3ODM3YmFhZDcyMWNjN2I4YmU5NDI1MTdmMGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgNCAyMDo1Mjo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXFxuaW5kZXggZTgzNTZlZTU0ZDdiOS4uYTZhM2UxNjU3ODk1OSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXFxuQEAgLTEzNSw4ICsxMzUsOCBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1fcmFuZG9tX3U2NChzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXFxuIFxcdHJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgXFx1MDAzY1xcdTAwM2MgMzIpIHwga3ZtX3JhbmRvbV91MzIoc3RhdGUpO1xcbiB9XFxuIFxcbi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLFxcbi1cXHRcXHRcXHQgICAgdTY0IG1heCk7XFxuK3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpO1xcbit1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KTtcXG4gXFxuIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUge1xcbiBcXHRWTV9NRU1fU1JDX0FOT05ZTU9VUyxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcXG5pbmRleCA2YjAwYWIxMWYzYzAyLi40ZGZmNzJmNmJkMzQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXFxuQEAgLTQzLDEyICs0MywyNiBAQCB1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKVxcbiBcXHRyZXR1cm4gc3RhdGUtXFx1MDAzZXNlZWQ7XFxuIH1cXG4gXFxuKy8qIFJldHVybnMgYSByYW5kb20gdTMyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqL1xcbit1MzIga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1MzIgbWluLCB1MzIgbWF4KVxcbit7XFxuK1xcdHUzMiB2YWx1ZSwgcmFuZ2U7XFxuK1xcbitcXHRURVNUX0FTU0VSVChtaW4gXFx1MDAzYz0gbWF4LCBcXFwiUEVCS0FDLCBtaW4gPSAweCV4LCBtYXggPSAweCV4XFxcIiwgbWluLCBtYXgpO1xcbitcXG4rXFx0dmFsdWUgPSBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7XFxuK1xcbitcXHRyYW5nZSA9IG1heCAtIG1pbjtcXG4rXFx0aWYgKHJhbmdlID09IFVJTlRfTUFYKVxcbitcXHRcXHRyZXR1cm4gdmFsdWU7XFxuK1xcbitcXHRyZXR1cm4gbWluICsgKHZhbHVlICUgKHJhbmdlICsgMSkpO1xcbit9XFxuK1xcbiAvKiBSZXR1cm5zIGEgcmFuZG9tIHU2NCBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFttaW4sIG1heF0gKi9cXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcXG4tXFx0XFx0XFx0ICAgIHU2NCBtYXgpXFxuK3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpXFxuIHtcXG4tXFx0dTY0IHZhbHVlO1xcbi1cXHR1NjQgcmFuZ2U7XFxuK1xcdHU2NCB2YWx1ZSwgcmFuZ2U7XFxuIFxcbiBcXHRURVNUX0FTU0VSVChtaW4gXFx1MDAzYz0gbWF4LCBcXFwiUEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHhcXFwiLCBtaW4sIG1heCk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcXG5pbmRleCBkYzZhZmFjM2FhOTE5Li5jN2M1NjYyMjAzODE1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xcbkBAIC04NywxNCArODcsMTggQEAgc3RhdGljIHN0cnVjdCBrdm1faW50ZWxfcG11X2V2ZW50IGludGVsX2V2ZW50X3RvX2ZlYXR1cmUodTggaWR4KVxcbiBcXHRyZXR1cm4gX19pbnRlbF9ldmVudF90b19mZWF0dXJlW2lkeF07XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICB2b2lkICpndWVzdF9jb2RlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIHU4IHBtdV92ZXJzaW9uLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcXG4rc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cyh1MzIgbnJfdmNwdXMsIHZvaWQgKmd1ZXN0X2NvZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB1OCBwbXVfdmVyc2lvbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqKl9fdmNwdXNbXSlcXG4ge1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cyA9IGNhbGxvYyhucl92Y3B1cywgc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSkpO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0aW50IGk7XFxuIFxcbi1cXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpO1xcbitcXHQqX192Y3B1cyA9IHZjcHVzO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cyhucl92Y3B1cywgZ3Vlc3RfY29kZSwgdmNwdXMpO1xcbiBcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwga3ZtX3BtdV92ZXJzaW9uKTtcXG4gXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGhhcmR3YXJlX3BtdV9hcmNoX2V2ZW50cyk7XFxuIFxcbkBAIC0xMDIsMTMgKzEwNiwyMiBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsXFxuIFxcdCAqIFNldCBQRVJGX0NBUEFCSUxJVElFUyBiZWZvcmUgUE1VIHZlcnNpb24gYXMgS1ZNIGRpc2FsbG93cyBlbmFibGluZ1xcbiBcXHQgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJ3QgaGF2ZSBhIHZQTVUuXFxuIFxcdCAqL1xcbi1cXHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXFxuLVxcdFxcdHZjcHVfc2V0X21zcigqdmNwdSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspIHtcXG4rXFx0XFx0aWYgKGt2bV9oYXNfcGVyZl9jYXBzKVxcbitcXHRcXHRcXHR2Y3B1X3NldF9tc3IodmNwdXNbaV0sIE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTLCBwZXJmX2NhcGFiaWxpdGllcyk7XFxuK1xcbitcXHRcXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tpXSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7XFxuK1xcdH1cXG4gXFxuLVxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KCp2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcXG4gXFx0cmV0dXJuIHZtO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBwbXVfdm1fZnJlZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXMpXFxuK3tcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbitcXHRmcmVlKHZjcHVzKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB1Y2FsbCB1YztcXG5AQCAtMjczLDYgKzI4Niw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXFxuIFxcdHN0cnVjdCBrdm1feDg2X3BtdV9mZWF0dXJlIGdwX2V2ZW50LCBmaXhlZF9ldmVudDtcXG4gXFx0dTMyIGJhc2VfcG1jX21zcjtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdHU2NCBldmVudHNlbDtcXG4gXFxuIFxcdC8qIFRoZSBob3N0IHNpZGUgc2hvdWxkbid0IGludm9rZSB0aGlzIHdpdGhvdXQgYSBndWVzdCBQTVUuICovXFxuIFxcdEdVRVNUX0FTU0VSVChwbXVfdmVyc2lvbik7XFxuQEAgLTI4NywxOSArMzAxLDE2IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXFxuIFxcdEdVRVNUX0FTU0VSVF9FUShpZHgsIGdwX2V2ZW50LmYuYml0KTtcXG4gXFxuIFxcdEdVRVNUX0FTU0VSVChucl9ncF9jb3VudGVycyk7XFxuK1xcdGkgPSBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShcXHUwMDI2a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ncF9jb3VudGVyczsgaSsrKSB7XFxuLVxcdFxcdHU2NCBldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8XFxuLVxcdFxcdFxcdFxcdCAgICBBUkNIX1BFUkZNT05fRVZFTlRTRUxfRU5BQkxFIHxcXG4tXFx0XFx0XFx0XFx0ICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xcbitcXHRldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxcbitcXHRcXHQgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTtcXG4gXFxuLVxcdFxcdHdybXNyKE1TUl9QNl9FVk5UU0VMMCArIGksIDApO1xcbi1cXHRcXHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXFxuLVxcdFxcdFxcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xcbitcXHR3cm1zcihNU1JfUDZfRVZOVFNFTDAgKyBpLCAwKTtcXG4rXFx0aWYgKGd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxcbitcXHRcXHR3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTtcXG4gXFxuLVxcdFxcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICsgaSxcXG4tXFx0XFx0XFx0XFx0XFx0TVNSX1A2X0VWTlRTRUwwICsgaSwgZXZlbnRzZWwpO1xcbi1cXHR9XFxuK1xcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICsgaSwgTVNSX1A2X0VWTlRTRUwwICsgaSwgZXZlbnRzZWwpO1xcbiBcXG4gXFx0aWYgKCFndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0zMjgsMzAgKzMzOSw3MiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpXFxuIFxcdEdVRVNUX0RPTkUoKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxcbi1cXHRcXHRcXHQgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spXFxuK3N0YXRpYyB2b2lkIF9fdGVzdF9hcmNoX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcXG4rXFx0XFx0XFx0ICAgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spXFxuIHtcXG4tXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4tXFxuLVxcdC8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqL1xcbi1cXHRpZiAoIXBtdV92ZXJzaW9uKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHR1bmF2YWlsYWJsZV9tYXNrIFxcdTAwMjY9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsXFxuIFxcdFxcdFxcdFxcdCAgICBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLmxvX2JpdCk7XFxuIFxcbi1cXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyxcXG4tXFx0XFx0XFx0XFx0XFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XFxuLVxcbiBcXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCxcXG4gXFx0XFx0XFx0XFx0bGVuZ3RoKTtcXG4gXFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSyxcXG4gXFx0XFx0XFx0XFx0dW5hdmFpbGFibGVfbWFzayk7XFxuIFxcbiBcXHRydW5fdmNwdSh2Y3B1KTtcXG4rfVxcbiBcXG4tXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbitzdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRpbnQgaSA9IDA7XFxuK1xcdHUzMiBrO1xcbitcXHR1OCBqO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVG8ga2VlcCB0aGUgdG90YWwgcnVudGltZSByZWFzb25hYmxlLCB0ZXN0IG9ubHkgYSBoYW5kZnVsIG9mIHNlbGVjdCxcXG4rXFx0ICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdFxcbitcXHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXFxuK1xcdCAqIGFzIGFsdGVybmF0aW5nIGJpdCBzZXF1ZW5jdWVzLCBlLmcuIHRvIGRldGVjdCBpZiBLVk0gaXMgY2hlY2tpbmcgdGhlXFxuK1xcdCAqIHdyb25nIGJpdChzKS5cXG4rXFx0ICovXFxuK1xcdGNvbnN0IHUzMiB1bmF2YWlsYWJsZV9tYXNrc1tdID0ge1xcbitcXHRcXHQweDAsXFxuK1xcdFxcdDB4ZmZmZmZmZmZ1LFxcbitcXHRcXHQweGFhYWFhYWFhdSxcXG4rXFx0XFx0MHg1NTU1NTU1NXUsXFxuK1xcdFxcdDB4ZjBmMGYwZjB1LFxcbitcXHRcXHQweDBmMGYwZjBmdSxcXG4rXFx0XFx0MHhhMGEwYTBhMHUsXFxuK1xcdFxcdDB4MGEwYTBhMGF1LFxcbitcXHRcXHQweDUwNTA1MDUwdSxcXG4rXFx0XFx0MHgwNTA1MDUwNXUsXFxuK1xcdH07XFxuK1xcbitcXHRwcl9pbmZvKFxcXCJUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbitcXHRcXHRwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbitcXG4rXFx0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXFxuK1xcdGlmICghcG11X3ZlcnNpb24pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKChOUl9JTlRFTF9BUkNIX0VWRU5UUyArIDIpICogQVJSQVlfU0laRSh1bmF2YWlsYWJsZV9tYXNrcyksXFxuK1xcdFxcdFxcdFxcdCAgICAgIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHMsIHBtdV92ZXJzaW9uLFxcbitcXHRcXHRcXHRcXHQgICAgICBwZXJmX2NhcGFiaWxpdGllcywgXFx1MDAyNnZjcHVzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRlc3Qgc2luZ2xlIGJpdHMgZm9yIGFsbCBQTVUgdmVyc2lvbiBhbmQgbGVuZ3RocyB1cCB0aGUgbnVtYmVyIG9mXFxuK1xcdCAqIGV2ZW50cyArMSAodG8gdmVyaWZ5IEtWTSBkb2Vzbid0IGRvIHdlaXJkIHRoaW5ncyBpZiB0aGUgZ3Vlc3QgbGVuZ3RoXFxuK1xcdCAqIGlzIGdyZWF0ZXIgdGhhbiB0aGUgaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAnMCcgYW5kXFxuK1xcdCAqIGFsbCBvbmVzIGkuZS4gYWxsIGV2ZW50cyBiZWluZyBhdmFpbGFibGUgYW5kIHVuYXZhaWxhYmxlLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBOUl9JTlRFTF9BUkNIX0VWRU5UUyArIDE7IGorKykge1xcbitcXHRcXHRmb3IgKGsgPSAxOyBrIFxcdTAwM2MgQVJSQVlfU0laRSh1bmF2YWlsYWJsZV9tYXNrcyk7IGsrKylcXG4rXFx0XFx0XFx0X190ZXN0X2FyY2hfZXZlbnRzKHZjcHVzW2krK10sIHBlcmZfY2FwYWJpbGl0aWVzLCBqLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1bmF2YWlsYWJsZV9tYXNrc1trXSk7XFxuK1xcdH1cXG4rXFxuK1xcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTQ5NSwyMSArNTQ4LDI3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnModm9pZClcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXFxuLVxcdFxcdFxcdCAgICAgdTggbnJfZ3BfY291bnRlcnMpXFxuK3N0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XFxuIFxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHR1OCBqO1xcbiBcXG4tXFx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXFxuLVxcdFxcdFxcdFxcdFxcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbitcXHRwcl9pbmZvKFxcXCJUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbitcXHRcXHRucl9ncF9jb3VudGVycywgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4gXFxuLVxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMsXFxuLVxcdFxcdFxcdFxcdG5yX2dwX2NvdW50ZXJzKTtcXG4rXFx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfZ3BfY291bnRlcnMgKyAxLCBndWVzdF90ZXN0X2dwX2NvdW50ZXJzLFxcbitcXHRcXHRcXHRcXHQgICAgICBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMsIFxcdTAwMjZ2Y3B1cyk7XFxuIFxcbi1cXHRydW5fdmNwdSh2Y3B1KTtcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBucl9ncF9jb3VudGVyczsgaisrKSB7XFxuK1xcdFxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2pdLCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLFxcbitcXHRcXHRcXHRcXHRcXHRucl9ncF9jb3VudGVycyk7XFxuIFxcbi1cXHRrdm1fdm1fZnJlZSh2bSk7XFxuK1xcdFxcdHJ1bl92Y3B1KHZjcHVzW2pdKTtcXG4rXFx0fVxcbitcXG4rXFx0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyh2b2lkKVxcbkBAIC01NjEsNTkgKzYyMCw1MyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpXFxuIFxcdEdVRVNUX0RPTkUoKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxcbi1cXHRcXHRcXHRcXHR1OCBucl9maXhlZF9jb3VudGVycywgdTMyIHN1cHBvcnRlZF9iaXRtYXNrKVxcbitzdGF0aWMgdm9pZCBfX3Rlc3RfZml4ZWRfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBucl9maXhlZF9jb3VudGVycyxcXG4rXFx0XFx0XFx0XFx0ICB1MzIgc3VwcG9ydGVkX2JpdG1hc2spXFxuIHtcXG4tXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4tXFxuLVxcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFxcdTAwMjZ2Y3B1LCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLFxcbi1cXHRcXHRcXHRcXHRcXHQgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4tXFxuIFxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRklYRURfQ09VTlRFUlNfQklUTUFTSyxcXG4gXFx0XFx0XFx0XFx0c3VwcG9ydGVkX2JpdG1hc2spO1xcbiBcXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTLFxcbiBcXHRcXHRcXHRcXHRucl9maXhlZF9jb3VudGVycyk7XFxuIFxcbiBcXHRydW5fdmNwdSh2Y3B1KTtcXG4rfVxcbiBcXG4tXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbitzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXFxuK3tcXG4rXFx0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGludCBpID0gMDtcXG4rXFx0dTMyIGs7XFxuK1xcdHU4IGo7XFxuK1xcbitcXHRwcl9pbmZvKFxcXCJUZXN0aW5nICV1IGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbitcXHRcXHRucl9maXhlZF9jb3VudGVycywgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4rXFxuK1xcbitcXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygobnJfZml4ZWRfY291bnRlcnMgKyAxKSAqIEJJVChucl9maXhlZF9jb3VudGVycyksXFxuK1xcdFxcdFxcdFxcdCAgICAgIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgXFx1MDAyNnZjcHVzKTtcXG4rXFxuK1xcdGZvciAoaiA9IDA7IGogXFx1MDAzYz0gbnJfZml4ZWRfY291bnRlcnM7IGorKykge1xcbitcXHRcXHRmb3IgKGsgPSAwOyBrIFxcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsrKylcXG4rXFx0XFx0XFx0X190ZXN0X2ZpeGVkX2NvdW50ZXJzKHZjcHVzW2krK10sIGosIGspO1xcbitcXHR9XFxuK1xcbitcXHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXFxuIHtcXG4tXFx0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xcbi1cXHR1OCBucl9ncF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyk7XFxuIFxcdHU4IHBtdV92ZXJzaW9uID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04pO1xcbiBcXHR1bnNpZ25lZCBpbnQgaTtcXG4tXFx0dTggdiwgajtcXG4tXFx0dTMyIGs7XFxuK1xcdHU4IHY7XFxuIFxcbiBcXHRjb25zdCB1NjQgcGVyZl9jYXBzW10gPSB7XFxuIFxcdFxcdDAsXFxuIFxcdFxcdFBNVV9DQVBfRldfV1JJVEVTLFxcbiBcXHR9O1xcbiBcXG4tXFx0LypcXG4tXFx0ICogVG8ga2VlcCB0aGUgdG90YWwgcnVudGltZSByZWFzb25hYmxlLCB0ZXN0IG9ubHkgYSBoYW5kZnVsIG9mIHNlbGVjdCxcXG4tXFx0ICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdFxcbi1cXHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXFxuLVxcdCAqIGFzIGFsdGVybmF0aW5nIGJpdCBzZXF1ZW5jdWVzLCBlLmcuIHRvIGRldGVjdCBpZiBLVk0gaXMgY2hlY2tpbmcgdGhlXFxuLVxcdCAqIHdyb25nIGJpdChzKS5cXG4tXFx0ICovXFxuLVxcdGNvbnN0IHUzMiB1bmF2YWlsYWJsZV9tYXNrc1tdID0ge1xcbi1cXHRcXHQweDAsXFxuLVxcdFxcdDB4ZmZmZmZmZmZ1LFxcbi1cXHRcXHQweGFhYWFhYWFhdSxcXG4tXFx0XFx0MHg1NTU1NTU1NXUsXFxuLVxcdFxcdDB4ZjBmMGYwZjB1LFxcbi1cXHRcXHQweDBmMGYwZjBmdSxcXG4tXFx0XFx0MHhhMGEwYTBhMHUsXFxuLVxcdFxcdDB4MGEwYTBhMGF1LFxcbi1cXHRcXHQweDUwNTA1MDUwdSxcXG4tXFx0XFx0MHgwNTA1MDUwNXUsXFxuLVxcdH07XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBUZXN0IHVwIHRvIFBNVSB2NSwgd2hpY2ggaXMgdGhlIGN1cnJlbnQgbWF4aW11bSB2ZXJzaW9uIGRlZmluZWQgYnlcXG4gXFx0ICogSW50ZWwsIGkuZS4gaXMgdGhlIGxhc3QgdmVyc2lvbiB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYmFja3dhcmRzXFxuQEAgLTY0OSwzMiArNzAyLDkgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKVxcbiBcXHRcXHRcXHRpZiAoIWt2bV9oYXNfcGVyZl9jYXBzIFxcdTAwMjZcXHUwMDI2IHBlcmZfY2Fwc1tpXSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRwcl9pbmZvKFxcXCJUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHR2LCBwZXJmX2NhcHNbaV0pO1xcbi1cXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwXFxuLVxcdFxcdFxcdCAqIHRoZSBudW1iZXIgb2YgZXZlbnRzICsxICh0byB2ZXJpZnkgS1ZNIGRvZXNuJ3QgZG9cXG4tXFx0XFx0XFx0ICogd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZVxcbi1cXHRcXHRcXHQgKiBob3N0IGxlbmd0aCkuICBFeHBsaWNpdGx5IHRlc3QgYSBtYXNrIG9mICcwJyBhbmQgYWxsXFxuLVxcdFxcdFxcdCAqIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICsgMTsgaisrKSB7XFxuLVxcdFxcdFxcdFxcdGZvciAoayA9IDE7IGsgXFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgaysrKVxcbi1cXHRcXHRcXHRcXHRcXHR0ZXN0X2FyY2hfZXZlbnRzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgdW5hdmFpbGFibGVfbWFza3Nba10pO1xcbi1cXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRwcl9pbmZvKFxcXCJUZXN0aW5nIEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHR2LCBwZXJmX2NhcHNbaV0pO1xcbi1cXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2M9IG5yX2dwX2NvdW50ZXJzOyBqKyspXFxuLVxcdFxcdFxcdFxcdHRlc3RfZ3BfY291bnRlcnModiwgcGVyZl9jYXBzW2ldLCBqKTtcXG4tXFxuLVxcdFxcdFxcdHByX2luZm8oXFxcIlRlc3RpbmcgZml4ZWQgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHYsIHBlcmZfY2Fwc1tpXSk7XFxuLVxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYz0gbnJfZml4ZWRfY291bnRlcnM7IGorKykge1xcbi1cXHRcXHRcXHRcXHRmb3IgKGsgPSAwOyBrIFxcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsrKylcXG4tXFx0XFx0XFx0XFx0XFx0dGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGosIGspO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldKTtcXG4rXFx0XFx0XFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pO1xcbitcXHRcXHRcXHR0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIwOjUyOjQ2Ljk2NTU3NzcyMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcyNTkwMzQ4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0IHByb2dyYW1zIGFuZCBkbyBub3QgY2hhbmdlIGFueSBrZXJuZWwgbG9naWMgdG8gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjEzOGZmNmE5NGJiNTc4MzdiYWFkNzIxY2M3YjhiZTk0MjUxN2YwYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMjA6NTI6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5pbmRleCBlODM1NmVlNTRkN2I5Li5hNmEzZTE2NTc4OTU5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5AQCAtMTM1LDggKzEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9yYW5kb21fdTY0KHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgXHUwMDNjXHUwMDNjIDMyKSB8IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbiB9XG4gXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heCk7XG4rdTMyIGt2bV9yYW5kb21fdTMyX2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTMyIG1pbiwgdTMyIG1heCk7XG4rdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heCk7XG4gXG4gZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSB7XG4gXHRWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuaW5kZXggNmIwMGFiMTFmM2MwMi4uNGRmZjcyZjZiZDM0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcbkBAIC00MywxMiArNDMsMjYgQEAgdTMyIGt2bV9yYW5kb21fdTMyKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiBzdGF0ZS1cdTAwM2VzZWVkO1xuIH1cbiBcbisvKiBSZXR1cm5zIGEgcmFuZG9tIHUzMiBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFttaW4sIG1heF0gKi9cbit1MzIga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1MzIgbWluLCB1MzIgbWF4KVxuK3tcbitcdHUzMiB2YWx1ZSwgcmFuZ2U7XG4rXG4rXHRURVNUX0FTU0VSVChtaW4gXHUwMDNjPSBtYXgsIFwiUEVCS0FDLCBtaW4gPSAweCV4LCBtYXggPSAweCV4XCIsIG1pbiwgbWF4KTtcbitcbitcdHZhbHVlID0ga3ZtX3JhbmRvbV91MzIoc3RhdGUpO1xuK1xuK1x0cmFuZ2UgPSBtYXggLSBtaW47XG4rXHRpZiAocmFuZ2UgPT0gVUlOVF9NQVgpXG4rXHRcdHJldHVybiB2YWx1ZTtcbitcbitcdHJldHVybiBtaW4gKyAodmFsdWUgJSAocmFuZ2UgKyAxKSk7XG4rfVxuK1xuIC8qIFJldHVybnMgYSByYW5kb20gdTY0IGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqL1xuLXU2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sXG4tXHRcdFx0ICAgIHU2NCBtYXgpXG4rdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heClcbiB7XG4tXHR1NjQgdmFsdWU7XG4tXHR1NjQgcmFuZ2U7XG4rXHR1NjQgdmFsdWUsIHJhbmdlO1xuIFxuIFx0VEVTVF9BU1NFUlQobWluIFx1MDAzYz0gbWF4LCBcIlBFQktBQywgbWluID0gMHglbHgsIG1heCA9IDB4JWx4XCIsIG1pbiwgbWF4KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbmluZGV4IGRjNmFmYWMzYWE5MTkuLmM3YzU2NjIyMDM4MTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuQEAgLTg3LDE0ICs4NywxOCBAQCBzdGF0aWMgc3RydWN0IGt2bV9pbnRlbF9wbXVfZXZlbnQgaW50ZWxfZXZlbnRfdG9fZmVhdHVyZSh1OCBpZHgpXG4gXHRyZXR1cm4gX19pbnRlbF9ldmVudF90b19mZWF0dXJlW2lkeF07XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSxcbi1cdFx0XHRcdFx0XHQgIHZvaWQgKmd1ZXN0X2NvZGUsXG4tXHRcdFx0XHRcdFx0ICB1OCBwbXVfdmVyc2lvbixcbi1cdFx0XHRcdFx0XHQgIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcbitzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBucl92Y3B1cywgdm9pZCAqZ3Vlc3RfY29kZSxcbitcdFx0XHRcdFx0ICAgICAgIHU4IHBtdV92ZXJzaW9uLFxuK1x0XHRcdFx0XHQgICAgICAgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuK1x0XHRcdFx0XHQgICAgICAgc3RydWN0IGt2bV92Y3B1ICoqX192Y3B1c1tdKVxuIHtcbitcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzID0gY2FsbG9jKG5yX3ZjcHVzLCBzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSk7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBpO1xuIFxuLVx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBndWVzdF9jb2RlKTtcbitcdCpfX3ZjcHVzID0gdmNwdXM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX3ZjcHVzLCBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwga3ZtX3BtdV92ZXJzaW9uKTtcbiBcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBoYXJkd2FyZV9wbXVfYXJjaF9ldmVudHMpO1xuIFxuQEAgLTEwMiwxMyArMTA2LDIyIEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSxcbiBcdCAqIFNldCBQRVJGX0NBUEFCSUxJVElFUyBiZWZvcmUgUE1VIHZlcnNpb24gYXMgS1ZNIGRpc2FsbG93cyBlbmFibGluZ1xuIFx0ICogZmVhdHVyZXMgdmlhIFBFUkZfQ0FQQUJJTElUSUVTIGlmIHRoZSBndWVzdCBkb2Vzbid0IGhhdmUgYSB2UE1VLlxuIFx0ICovXG4tXHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXG4tXHRcdHZjcHVfc2V0X21zcigqdmNwdSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspIHtcbitcdFx0aWYgKGt2bV9oYXNfcGVyZl9jYXBzKVxuK1x0XHRcdHZjcHVfc2V0X21zcih2Y3B1c1tpXSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcbitcbitcdFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdXNbaV0sIFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTiwgcG11X3ZlcnNpb24pO1xuK1x0fVxuIFxuLVx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkoKnZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTiwgcG11X3ZlcnNpb24pO1xuIFx0cmV0dXJuIHZtO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBwbXVfdm1fZnJlZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXMpXG4re1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK1x0ZnJlZSh2Y3B1cyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgdWNhbGwgdWM7XG5AQCAtMjczLDYgKzI4Niw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXG4gXHRzdHJ1Y3Qga3ZtX3g4Nl9wbXVfZmVhdHVyZSBncF9ldmVudCwgZml4ZWRfZXZlbnQ7XG4gXHR1MzIgYmFzZV9wbWNfbXNyO1xuIFx0dW5zaWduZWQgaW50IGk7XG4rXHR1NjQgZXZlbnRzZWw7XG4gXG4gXHQvKiBUaGUgaG9zdCBzaWRlIHNob3VsZG4ndCBpbnZva2UgdGhpcyB3aXRob3V0IGEgZ3Vlc3QgUE1VLiAqL1xuIFx0R1VFU1RfQVNTRVJUKHBtdV92ZXJzaW9uKTtcbkBAIC0yODcsMTkgKzMwMSwxNiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KVxuIFx0R1VFU1RfQVNTRVJUX0VRKGlkeCwgZ3BfZXZlbnQuZi5iaXQpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKG5yX2dwX2NvdW50ZXJzKTtcbitcdGkgPSBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShcdTAwMjZrdm1fcm5nLCAwLCBucl9ncF9jb3VudGVycyAtIDEpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZ3BfY291bnRlcnM7IGkrKykge1xuLVx0XHR1NjQgZXZlbnRzZWwgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MgfFxuLVx0XHRcdFx0ICAgIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxuLVx0XHRcdFx0ICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xuK1x0ZXZlbnRzZWwgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MgfCBBUkNIX1BFUkZNT05fRVZFTlRTRUxfRU5BQkxFIHxcbitcdFx0ICAgaW50ZWxfcG11X2FyY2hfZXZlbnRzW2lkeF07XG4gXG4tXHRcdHdybXNyKE1TUl9QNl9FVk5UU0VMMCArIGksIDApO1xuLVx0XHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXG4tXHRcdFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7XG4rXHR3cm1zcihNU1JfUDZfRVZOVFNFTDAgKyBpLCAwKTtcbitcdGlmIChndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcbitcdFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7XG4gXG4tXHRcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICsgaSxcbi1cdFx0XHRcdFx0TVNSX1A2X0VWTlRTRUwwICsgaSwgZXZlbnRzZWwpO1xuLVx0fVxuK1x0X19ndWVzdF90ZXN0X2FyY2hfZXZlbnQoaWR4LCBpLCBiYXNlX3BtY19tc3IgKyBpLCBNU1JfUDZfRVZOVFNFTDAgKyBpLCBldmVudHNlbCk7XG4gXG4gXHRpZiAoIWd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxuIFx0XHRyZXR1cm47XG5AQCAtMzI4LDMwICszMzksNzIgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4tXHRcdFx0ICAgICB1OCBsZW5ndGgsIHUzMiB1bmF2YWlsYWJsZV9tYXNrKVxuK3N0YXRpYyB2b2lkIF9fdGVzdF9hcmNoX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbitcdFx0XHQgICAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdC8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqL1xuLVx0aWYgKCFwbXVfdmVyc2lvbilcbi1cdFx0cmV0dXJuO1xuLVxuIFx0dW5hdmFpbGFibGVfbWFzayBcdTAwMjY9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsXG4gXHRcdFx0XHQgICAgWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5sb19iaXQpO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4tXG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCxcbiBcdFx0XHRcdGxlbmd0aCk7XG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLFxuIFx0XHRcdFx0dW5hdmFpbGFibGVfbWFzayk7XG4gXG4gXHRydW5fdmNwdSh2Y3B1KTtcbit9XG4gXG4tXHRrdm1fdm1fZnJlZSh2bSk7XG4rc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxuK3tcbitcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzO1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRpbnQgaSA9IDA7XG4rXHR1MzIgaztcbitcdHU4IGo7XG4rXG4rXHQvKlxuK1x0ICogVG8ga2VlcCB0aGUgdG90YWwgcnVudGltZSByZWFzb25hYmxlLCB0ZXN0IG9ubHkgYSBoYW5kZnVsIG9mIHNlbGVjdCxcbitcdCAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3RcbitcdCAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGxcbitcdCAqIGFzIGFsdGVybmF0aW5nIGJpdCBzZXF1ZW5jdWVzLCBlLmcuIHRvIGRldGVjdCBpZiBLVk0gaXMgY2hlY2tpbmcgdGhlXG4rXHQgKiB3cm9uZyBiaXQocykuXG4rXHQgKi9cbitcdGNvbnN0IHUzMiB1bmF2YWlsYWJsZV9tYXNrc1tdID0ge1xuK1x0XHQweDAsXG4rXHRcdDB4ZmZmZmZmZmZ1LFxuK1x0XHQweGFhYWFhYWFhdSxcbitcdFx0MHg1NTU1NTU1NXUsXG4rXHRcdDB4ZjBmMGYwZjB1LFxuK1x0XHQweDBmMGYwZjBmdSxcbitcdFx0MHhhMGEwYTBhMHUsXG4rXHRcdDB4MGEwYTBhMGF1LFxuK1x0XHQweDUwNTA1MDUwdSxcbitcdFx0MHgwNTA1MDUwNXUsXG4rXHR9O1xuK1xuK1x0cHJfaW5mbyhcIlRlc3RpbmcgYXJjaCBldmVudHMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXG5cIixcbitcdFx0cG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbitcbitcdC8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqL1xuK1x0aWYgKCFwbXVfdmVyc2lvbilcbitcdFx0cmV0dXJuO1xuK1xuK1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKE5SX0lOVEVMX0FSQ0hfRVZFTlRTICsgMikgKiBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKSxcbitcdFx0XHRcdCAgICAgIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHMsIHBtdV92ZXJzaW9uLFxuK1x0XHRcdFx0ICAgICAgcGVyZl9jYXBhYmlsaXRpZXMsIFx1MDAyNnZjcHVzKTtcbitcbitcdC8qXG4rXHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXAgdGhlIG51bWJlciBvZlxuK1x0ICogZXZlbnRzICsxICh0byB2ZXJpZnkgS1ZNIGRvZXNuJ3QgZG8gd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGhcbitcdCAqIGlzIGdyZWF0ZXIgdGhhbiB0aGUgaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAnMCcgYW5kXG4rXHQgKiBhbGwgb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS5cbitcdCAqL1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICsgMTsgaisrKSB7XG4rXHRcdGZvciAoayA9IDE7IGsgXHUwMDNjIEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrKyspXG4rXHRcdFx0X190ZXN0X2FyY2hfZXZlbnRzKHZjcHVzW2krK10sIHBlcmZfY2FwYWJpbGl0aWVzLCBqLFxuK1x0XHRcdFx0XHQgICB1bmF2YWlsYWJsZV9tYXNrc1trXSk7XG4rXHR9XG4rXG4rXHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xuIH1cbiBcbiAvKlxuQEAgLTQ5NSwyMSArNTQ4LDI3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnModm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuLVx0XHRcdCAgICAgdTggbnJfZ3BfY291bnRlcnMpXG4rc3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzO1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4rXHR1OCBqO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4rXHRwcl9pbmZvKFwiVGVzdGluZyAldSBHUCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuK1x0XHRucl9ncF9jb3VudGVycywgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbiBcbi1cdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMsXG4tXHRcdFx0XHRucl9ncF9jb3VudGVycyk7XG4rXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cyhucl9ncF9jb3VudGVycyArIDEsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXG4rXHRcdFx0XHQgICAgICBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMsIFx1MDAyNnZjcHVzKTtcbiBcbi1cdHJ1bl92Y3B1KHZjcHUpO1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2M9IG5yX2dwX2NvdW50ZXJzOyBqKyspIHtcbitcdFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdXNbal0sIFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMsXG4rXHRcdFx0XHRcdG5yX2dwX2NvdW50ZXJzKTtcbiBcbi1cdGt2bV92bV9mcmVlKHZtKTtcbitcdFx0cnVuX3ZjcHUodmNwdXNbal0pO1xuK1x0fVxuK1xuK1x0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyh2b2lkKVxuQEAgLTU2MSw1OSArNjIwLDUzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuLVx0XHRcdFx0dTggbnJfZml4ZWRfY291bnRlcnMsIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcbitzdGF0aWMgdm9pZCBfX3Rlc3RfZml4ZWRfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBucl9maXhlZF9jb3VudGVycyxcbitcdFx0XHRcdCAgdTMyIHN1cHBvcnRlZF9iaXRtYXNrKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi1cdHN0cnVjdCBrdm1fdm0gKnZtO1xuLVxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4tXG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0ZJWEVEX0NPVU5URVJTX0JJVE1BU0ssXG4gXHRcdFx0XHRzdXBwb3J0ZWRfYml0bWFzayk7XG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTLFxuIFx0XHRcdFx0bnJfZml4ZWRfY291bnRlcnMpO1xuIFxuIFx0cnVuX3ZjcHUodmNwdSk7XG4rfVxuIFxuLVx0a3ZtX3ZtX2ZyZWUodm0pO1xuK3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcbit7XG4rXHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0aW50IGkgPSAwO1xuK1x0dTMyIGs7XG4rXHR1OCBqO1xuK1xuK1x0cHJfaW5mbyhcIlRlc3RpbmcgJXUgZml4ZWQgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXG5cIixcbitcdFx0bnJfZml4ZWRfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4rXG4rXG4rXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygobnJfZml4ZWRfY291bnRlcnMgKyAxKSAqIEJJVChucl9maXhlZF9jb3VudGVycyksXG4rXHRcdFx0XHQgICAgICBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLFxuK1x0XHRcdFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4rXG4rXHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZml4ZWRfY291bnRlcnM7IGorKykge1xuK1x0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYz0gKEJJVChucl9maXhlZF9jb3VudGVycykgLSAxKTsgaysrKVxuK1x0XHRcdF9fdGVzdF9maXhlZF9jb3VudGVycyh2Y3B1c1tpKytdLCBqLCBrKTtcbitcdH1cbitcbitcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcbiB7XG4tXHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XG4tXHR1OCBucl9ncF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyk7XG4gXHR1OCBwbXVfdmVyc2lvbiA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OKTtcbiBcdHVuc2lnbmVkIGludCBpO1xuLVx0dTggdiwgajtcbi1cdHUzMiBrO1xuK1x0dTggdjtcbiBcbiBcdGNvbnN0IHU2NCBwZXJmX2NhcHNbXSA9IHtcbiBcdFx0MCxcbiBcdFx0UE1VX0NBUF9GV19XUklURVMsXG4gXHR9O1xuIFxuLVx0Lypcbi1cdCAqIFRvIGtlZXAgdGhlIHRvdGFsIHJ1bnRpbWUgcmVhc29uYWJsZSwgdGVzdCBvbmx5IGEgaGFuZGZ1bCBvZiBzZWxlY3QsXG4tXHQgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0XG4tXHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXG4tXHQgKiBhcyBhbHRlcm5hdGluZyBiaXQgc2VxdWVuY3VlcywgZS5nLiB0byBkZXRlY3QgaWYgS1ZNIGlzIGNoZWNraW5nIHRoZVxuLVx0ICogd3JvbmcgYml0KHMpLlxuLVx0ICovXG4tXHRjb25zdCB1MzIgdW5hdmFpbGFibGVfbWFza3NbXSA9IHtcbi1cdFx0MHgwLFxuLVx0XHQweGZmZmZmZmZmdSxcbi1cdFx0MHhhYWFhYWFhYXUsXG4tXHRcdDB4NTU1NTU1NTV1LFxuLVx0XHQweGYwZjBmMGYwdSxcbi1cdFx0MHgwZjBmMGYwZnUsXG4tXHRcdDB4YTBhMGEwYTB1LFxuLVx0XHQweDBhMGEwYTBhdSxcbi1cdFx0MHg1MDUwNTA1MHUsXG4tXHRcdDB4MDUwNTA1MDV1LFxuLVx0fTtcbi1cbiBcdC8qXG4gXHQgKiBUZXN0IHVwIHRvIFBNVSB2NSwgd2hpY2ggaXMgdGhlIGN1cnJlbnQgbWF4aW11bSB2ZXJzaW9uIGRlZmluZWQgYnlcbiBcdCAqIEludGVsLCBpLmUuIGlzIHRoZSBsYXN0IHZlcnNpb24gdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGJhY2t3YXJkc1xuQEAgLTY0OSwzMiArNzAyLDkgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKVxuIFx0XHRcdGlmICgha3ZtX2hhc19wZXJmX2NhcHMgXHUwMDI2XHUwMDI2IHBlcmZfY2Fwc1tpXSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdHByX2luZm8oXCJUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4tXHRcdFx0XHR2LCBwZXJmX2NhcHNbaV0pO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwXG4tXHRcdFx0ICogdGhlIG51bWJlciBvZiBldmVudHMgKzEgKHRvIHZlcmlmeSBLVk0gZG9lc24ndCBkb1xuLVx0XHRcdCAqIHdlaXJkIHRoaW5ncyBpZiB0aGUgZ3Vlc3QgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGVcbi1cdFx0XHQgKiBob3N0IGxlbmd0aCkuICBFeHBsaWNpdGx5IHRlc3QgYSBtYXNrIG9mICcwJyBhbmQgYWxsXG4tXHRcdFx0ICogb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gTlJfSU5URUxfQVJDSF9FVkVOVFMgKyAxOyBqKyspIHtcbi1cdFx0XHRcdGZvciAoayA9IDE7IGsgXHUwMDNjIEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrKyspXG4tXHRcdFx0XHRcdHRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldLCBqLCB1bmF2YWlsYWJsZV9tYXNrc1trXSk7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdHByX2luZm8oXCJUZXN0aW5nIEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4tXHRcdFx0XHR2LCBwZXJmX2NhcHNbaV0pO1xuLVx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjPSBucl9ncF9jb3VudGVyczsgaisrKVxuLVx0XHRcdFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGopO1xuLVxuLVx0XHRcdHByX2luZm8oXCJUZXN0aW5nIGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4tXHRcdFx0XHR2LCBwZXJmX2NhcHNbaV0pO1xuLVx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaisrKSB7XG4tXHRcdFx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYz0gKEJJVChucl9maXhlZF9jb3VudGVycykgLSAxKTsgaysrKVxuLVx0XHRcdFx0XHR0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgayk7XG4tXHRcdFx0fVxuK1x0XHRcdHRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldKTtcbitcdFx0XHR0ZXN0X2dwX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7XG4rXHRcdFx0dGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pO1xuIFx0XHR9XG4gXHR9XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjA6NTI6NDYuOTY1NTc5NDQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI1OTAwOTYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb246IE5vKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBhIGZldyBmaWxlczogYHRlc3RfdXRpbC5oYCwgYHRlc3RfdXRpbC5jYCwgYW5kIGBwbXVfY291bnRlcnNfdGVzdC5jYCwgYWxsIG5lc3RsZWQgd2l0aGluIHRoZSBLVk0gc2VsZnRlc3RzIGRpcmVjdG9yeS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgYWNjaWRlbnRhbGx5IGxlYWsgaW50byBrZXJuZWwgc3BhY2UuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIGRpZmYgY29uZmlybXMgdGhhdCBpdCdzIGFsbCBzdGF5aW5nIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AuIFRoYXQncyBnb29kLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHRoZSBmdXp6aW5nIGltcGxpY2F0aW9ucy4gVGhlIHByb21wdCBwcm92aWRlcyBzb21lIGd1aWRhbmNlLiBJdCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IG1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIFBDSSBzd2l0Y2ggY29kZSwgYW5kIGRyaXZlciBgLnJlbW92ZWAgZnVuY3Rpb25zIGFzIHJlYXNvbnMgZm9yIG5vdCBmdXp6aW5nLiBXaGlsZSBpdCBkb2Vzbid0IGV4cGxpY2l0bHkgbWVudGlvbiBzZWxmdGVzdHMsIEknbSBpbnRlcnByZXRpbmcgdGhhdCBzZWxmdGVzdHMsIGJlaW5nICp1c2VyLXNwYWNlIHByb2dyYW1zKiBkZXNpZ25lZCB0byB2YWxpZGF0ZSBrZXJuZWwgYmVoYXZpb3IsIGFyZW4ndCBrZXJuZWwgKmNvZGUqIGFuZCB0aGVyZWZvcmUgYXJlbid0IHdoYXQgd2UncmUgYWltaW5nIHRvIGZ1enouIFdlIHdhbnQgdG8gZnV6eiB0aGUgKmtlcm5lbCogaXRzZWxmLCB0aGUgY29yZSBleGVjdXRpb24gbG9naWMuIFRoaXMgcGF0Y2gsIGNvbmZpbmVkIHRvIHNlbGZ0ZXN0cywgd29uJ3QgYWZmZWN0IHRoYXQuXG5cbkknbSBkb2luZyBhIGRvdWJsZSBjaGVjaywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgSSBjYW4gY29uZmlybSB0aGF0IHRoZXJlJ3Mgbm8ga2VybmVsIGNvZGUgaW4gdGhpcyBkaWZmLlxuXG5TbywgSSdtIGdvaW5nIHRvIHNldCB0aGUgcmVzdWx0IHRvIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBNeSByZWFzb25pbmcgd2lsbCBiZSBjb25jaXNlOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0IHByb2dyYW1zIGFuZCBkbyBub3QgY2hhbmdlIGFueSBrZXJuZWwgbG9naWMgdG8gYmUgZnV6emVkLlwiXG5cbkknbGwgcXVpY2tseSByZXZpZXcgdGhlIGRpZmYgb25lIG1vcmUgdGltZSB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4uLk5vcGUsIGp1c3QgdGhlIHNlbGZ0ZXN0cy5cblxuQWxsIHJpZ2h0LCBzZXR0aW5nIHRoZSByZXN1bHQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzM5LCJPdXRwdXRUb2tlbnMiOjcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjA6NTI6NTQuMjI0NTkxNzA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdCBwcm9ncmFtcyBhbmQgZG8gbm90IGNoYW5nZSBhbnkga2VybmVsIGxvZ2ljIHRvIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0IHByb2dyYW1zIGFuZCBkbyBub3QgY2hhbmdlIGFueSBrZXJuZWwgbG9naWMgdG8gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowlrq8n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 20:51:33 +0000 UTC FinishedAt: 2026-08-04 20:52:54 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDIwOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0IHByb2dyYW1zIGFuZCBkbyBub3QgY2hhbmdlIGFueSBrZXJuZWwgbG9naWMgdG8gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMDo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYxMzhmZjZhOTRiYjU3ODM3YmFhZDcyMWNjN2I4YmU5NDI1MTdmMGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDIwOjUyOjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbmluZGV4IGU4MzU2ZWU1NGQ3YjkuLmE2YTNlMTY1Nzg5NTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0xMzUsOCAmIzQzOzEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9yYW5kb21fdTY0KHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgXHUwMDNjXHUwMDNjIDMyKSB8IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbiB9XG4gXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heCk7XG4mIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpO1xuJiM0Mzt1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KTtcbiBcbiBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHtcbiBcdFZNX01FTV9TUkNfQU5PTllNT1VTLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG5pbmRleCA2YjAwYWIxMWYzYzAyLi40ZGZmNzJmNmJkMzQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuQEAgLTQzLDEyICYjNDM7NDMsMjYgQEAgdTMyIGt2bV9yYW5kb21fdTMyKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiBzdGF0ZS1cdTAwM2VzZWVkO1xuIH1cbiBcbiYjNDM7LyogUmV0dXJucyBhIHJhbmRvbSB1MzIgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4mIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsdWUsIHJhbmdlO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVChtaW4gXHUwMDNjPSBtYXgsIFwmIzM0O1BFQktBQywgbWluID0gMHgleCwgbWF4ID0gMHgleFwmIzM0OywgbWluLCBtYXgpO1xuJiM0MztcbiYjNDM7XHR2YWx1ZSA9IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0cmFuZ2UgPSBtYXggLSBtaW47XG4mIzQzO1x0aWYgKHJhbmdlID09IFVJTlRfTUFYKVxuJiM0MztcdFx0cmV0dXJuIHZhbHVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWluICYjNDM7ICh2YWx1ZSAlIChyYW5nZSAmIzQzOyAxKSk7XG4mIzQzO31cbiYjNDM7XG4gLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heClcbiYjNDM7dTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heClcbiB7XG4tXHR1NjQgdmFsdWU7XG4tXHR1NjQgcmFuZ2U7XG4mIzQzO1x0dTY0IHZhbHVlLCByYW5nZTtcbiBcbiBcdFRFU1RfQVNTRVJUKG1pbiBcdTAwM2M9IG1heCwgXCYjMzQ7UEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHhcJiMzNDssIG1pbiwgbWF4KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbmluZGV4IGRjNmFmYWMzYWE5MTkuLmM3YzU2NjIyMDM4MTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuQEAgLTg3LDE0ICYjNDM7ODcsMTggQEAgc3RhdGljIHN0cnVjdCBrdm1faW50ZWxfcG11X2V2ZW50IGludGVsX2V2ZW50X3RvX2ZlYXR1cmUodTggaWR4KVxuIFx0cmV0dXJuIF9faW50ZWxfZXZlbnRfdG9fZmVhdHVyZVtpZHhdO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsXG4tXHRcdFx0XHRcdFx0ICB2b2lkICpndWVzdF9jb2RlLFxuLVx0XHRcdFx0XHRcdCAgdTggcG11X3ZlcnNpb24sXG4tXHRcdFx0XHRcdFx0ICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXModTMyIG5yX3ZjcHVzLCB2b2lkICpndWVzdF9jb2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHU4IHBtdV92ZXJzaW9uLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKipfX3ZjcHVzW10pXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzID0gY2FsbG9jKG5yX3ZjcHVzLCBzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSk7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaTtcbiBcbi1cdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7XG4mIzQzO1x0Kl9fdmNwdXMgPSB2Y3B1cztcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cyhucl92Y3B1cywgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9wbXVfdmVyc2lvbik7XG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgaGFyZHdhcmVfcG11X2FyY2hfZXZlbnRzKTtcbiBcbkBAIC0xMDIsMTMgJiM0MzsxMDYsMjIgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LFxuIFx0ICogU2V0IFBFUkZfQ0FQQUJJTElUSUVTIGJlZm9yZSBQTVUgdmVyc2lvbiBhcyBLVk0gZGlzYWxsb3dzIGVuYWJsaW5nXG4gXHQgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJiMzOTt0IGhhdmUgYSB2UE1VLlxuIFx0ICovXG4tXHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXG4tXHRcdHZjcHVfc2V0X21zcigqdmNwdSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChrdm1faGFzX3BlcmZfY2FwcylcbiYjNDM7XHRcdFx0dmNwdV9zZXRfbXNyKHZjcHVzW2ldLCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpO1xuJiM0MztcbiYjNDM7XHRcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2ldLCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcbiYjNDM7XHR9XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSgqdmNwdSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7XG4gXHRyZXR1cm4gdm07XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBwbXVfdm1fZnJlZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXMpXG4mIzQzO3tcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO1x0ZnJlZSh2Y3B1cyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB1Y2FsbCB1YztcbkBAIC0yNzMsNiAmIzQzOzI4Niw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXG4gXHRzdHJ1Y3Qga3ZtX3g4Nl9wbXVfZmVhdHVyZSBncF9ldmVudCwgZml4ZWRfZXZlbnQ7XG4gXHR1MzIgYmFzZV9wbWNfbXNyO1xuIFx0dW5zaWduZWQgaW50IGk7XG4mIzQzO1x0dTY0IGV2ZW50c2VsO1xuIFxuIFx0LyogVGhlIGhvc3Qgc2lkZSBzaG91bGRuJiMzOTt0IGludm9rZSB0aGlzIHdpdGhvdXQgYSBndWVzdCBQTVUuICovXG4gXHRHVUVTVF9BU1NFUlQocG11X3ZlcnNpb24pO1xuQEAgLTI4NywxOSAmIzQzOzMwMSwxNiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KVxuIFx0R1VFU1RfQVNTRVJUX0VRKGlkeCwgZ3BfZXZlbnQuZi5iaXQpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKG5yX2dwX2NvdW50ZXJzKTtcbiYjNDM7XHRpID0ga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2UoXHUwMDI2a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2dwX2NvdW50ZXJzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1NjQgZXZlbnRzZWwgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MgfFxuLVx0XHRcdFx0ICAgIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxuLVx0XHRcdFx0ICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xuJiM0MztcdGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHwgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8XG4mIzQzO1x0XHQgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTtcbiBcbi1cdFx0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApO1xuLVx0XHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXG4tXHRcdFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7XG4mIzQzO1x0d3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApO1xuJiM0MztcdGlmIChndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcbiYjNDM7XHRcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xuIFxuLVx0XHRfX2d1ZXN0X3Rlc3RfYXJjaF9ldmVudChpZHgsIGksIGJhc2VfcG1jX21zciAmIzQzOyBpLFxuLVx0XHRcdFx0XHRNU1JfUDZfRVZOVFNFTDAgJiM0MzsgaSwgZXZlbnRzZWwpO1xuLVx0fVxuJiM0MztcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICYjNDM7IGksIE1TUl9QNl9FVk5UU0VMMCAmIzQzOyBpLCBldmVudHNlbCk7XG4gXG4gXHRpZiAoIWd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxuIFx0XHRyZXR1cm47XG5AQCAtMzI4LDMwICYjNDM7MzM5LDcyIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuLVx0XHRcdCAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbiYjNDM7c3RhdGljIHZvaWQgX190ZXN0X2FyY2hfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuJiM0MztcdFx0XHQgICAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdC8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqL1xuLVx0aWYgKCFwbXVfdmVyc2lvbilcbi1cdFx0cmV0dXJuO1xuLVxuIFx0dW5hdmFpbGFibGVfbWFzayBcdTAwMjY9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsXG4gXHRcdFx0XHQgICAgWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5sb19iaXQpO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4tXG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCxcbiBcdFx0XHRcdGxlbmd0aCk7XG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLFxuIFx0XHRcdFx0dW5hdmFpbGFibGVfbWFzayk7XG4gXG4gXHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7fVxuIFxuLVx0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1x0dTMyIGs7XG4mIzQzO1x0dTggajtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LFxuJiM0MztcdCAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3RcbiYjNDM7XHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXG4mIzQzO1x0ICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGVcbiYjNDM7XHQgKiB3cm9uZyBiaXQocykuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7XG4mIzQzO1x0XHQweDAsXG4mIzQzO1x0XHQweGZmZmZmZmZmdSxcbiYjNDM7XHRcdDB4YWFhYWFhYWF1LFxuJiM0MztcdFx0MHg1NTU1NTU1NXUsXG4mIzQzO1x0XHQweGYwZjBmMGYwdSxcbiYjNDM7XHRcdDB4MGYwZjBmMGZ1LFxuJiM0MztcdFx0MHhhMGEwYTBhMHUsXG4mIzQzO1x0XHQweDBhMGEwYTBhdSxcbiYjNDM7XHRcdDB4NTA1MDUwNTB1LFxuJiM0MztcdFx0MHgwNTA1MDUwNXUsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0cG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XG4mIzQzO1x0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXG4mIzQzO1x0aWYgKCFwbXVfdmVyc2lvbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDIpICogQVJSQVlfU0laRSh1bmF2YWlsYWJsZV9tYXNrcyksXG4mIzQzO1x0XHRcdFx0ICAgICAgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywgcG11X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0ICAgICAgcGVyZl9jYXBhYmlsaXRpZXMsIFx1MDAyNnZjcHVzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXAgdGhlIG51bWJlciBvZlxuJiM0MztcdCAqIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG8gd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGhcbiYjNDM7XHQgKiBpcyBncmVhdGVyIHRoYW4gdGhlIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kXG4mIzQzO1x0ICogYWxsIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChqID0gMDsgaiBcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICYjNDM7IDE7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGsgPSAxOyBrIFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgayYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdF9fdGVzdF9hcmNoX2V2ZW50cyh2Y3B1c1tpJiM0MzsmIzQzO10sIHBlcmZfY2FwYWJpbGl0aWVzLCBqLFxuJiM0MztcdFx0XHRcdFx0ICAgdW5hdmFpbGFibGVfbWFza3Nba10pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcbiB9XG4gXG4gLypcbkBAIC00OTUsMjEgJiM0Mzs1NDgsMjcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4tXHRcdFx0ICAgICB1OCBucl9ncF9jb3VudGVycylcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHR1OCBucl9ncF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyk7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHR1OCBqO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0bnJfZ3BfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4gXG4tXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLFxuLVx0XHRcdFx0bnJfZ3BfY291bnRlcnMpO1xuJiM0MztcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX2dwX2NvdW50ZXJzICYjNDM7IDEsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4gXG4tXHRydW5fdmNwdSh2Y3B1KTtcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tqXSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyxcbiYjNDM7XHRcdFx0XHRcdG5yX2dwX2NvdW50ZXJzKTtcbiBcbi1cdGt2bV92bV9mcmVlKHZtKTtcbiYjNDM7XHRcdHJ1bl92Y3B1KHZjcHVzW2pdKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcbkBAIC01NjEsNTkgJiM0Mzs2MjAsNTMgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4tXHRcdFx0XHR1OCBucl9maXhlZF9jb3VudGVycywgdTMyIHN1cHBvcnRlZF9iaXRtYXNrKVxuJiM0MztzdGF0aWMgdm9pZCBfX3Rlc3RfZml4ZWRfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBucl9maXhlZF9jb3VudGVycyxcbiYjNDM7XHRcdFx0XHQgIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXG4tXHRcdFx0XHRcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xuLVxuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9GSVhFRF9DT1VOVEVSU19CSVRNQVNLLFxuIFx0XHRcdFx0c3VwcG9ydGVkX2JpdG1hc2spO1xuIFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyxcbiBcdFx0XHRcdG5yX2ZpeGVkX2NvdW50ZXJzKTtcbiBcbiBcdHJ1bl92Y3B1KHZjcHUpO1xuJiM0Mzt9XG4gXG4tXHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcbiYjNDM7e1xuJiM0MztcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTKTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1x0dTMyIGs7XG4mIzQzO1x0dTggajtcbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtUZXN0aW5nICV1IGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0bnJfZml4ZWRfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4mIzQzO1xuJiM0MztcbiYjNDM7XHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygobnJfZml4ZWRfY291bnRlcnMgJiM0MzsgMSkgKiBCSVQobnJfZml4ZWRfY291bnRlcnMpLFxuJiM0MztcdFx0XHRcdCAgICAgIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXG4mIzQzO1x0XHRcdFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjPSAoQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSAtIDEpOyBrJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0X190ZXN0X2ZpeGVkX2NvdW50ZXJzKHZjcHVzW2kmIzQzOyYjNDM7XSwgaiwgayk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXG4ge1xuLVx0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xuLVx0dTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpO1xuIFx0dTggcG11X3ZlcnNpb24gPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTik7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbi1cdHU4IHYsIGo7XG4tXHR1MzIgaztcbiYjNDM7XHR1OCB2O1xuIFxuIFx0Y29uc3QgdTY0IHBlcmZfY2Fwc1tdID0ge1xuIFx0XHQwLFxuIFx0XHRQTVVfQ0FQX0ZXX1dSSVRFUyxcbiBcdH07XG4gXG4tXHQvKlxuLVx0ICogVG8ga2VlcCB0aGUgdG90YWwgcnVudGltZSByZWFzb25hYmxlLCB0ZXN0IG9ubHkgYSBoYW5kZnVsIG9mIHNlbGVjdCxcbi1cdCAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3Rcbi1cdCAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGxcbi1cdCAqIGFzIGFsdGVybmF0aW5nIGJpdCBzZXF1ZW5jdWVzLCBlLmcuIHRvIGRldGVjdCBpZiBLVk0gaXMgY2hlY2tpbmcgdGhlXG4tXHQgKiB3cm9uZyBiaXQocykuXG4tXHQgKi9cbi1cdGNvbnN0IHUzMiB1bmF2YWlsYWJsZV9tYXNrc1tdID0ge1xuLVx0XHQweDAsXG4tXHRcdDB4ZmZmZmZmZmZ1LFxuLVx0XHQweGFhYWFhYWFhdSxcbi1cdFx0MHg1NTU1NTU1NXUsXG4tXHRcdDB4ZjBmMGYwZjB1LFxuLVx0XHQweDBmMGYwZjBmdSxcbi1cdFx0MHhhMGEwYTBhMHUsXG4tXHRcdDB4MGEwYTBhMGF1LFxuLVx0XHQweDUwNTA1MDUwdSxcbi1cdFx0MHgwNTA1MDUwNXUsXG4tXHR9O1xuLVxuIFx0LypcbiBcdCAqIFRlc3QgdXAgdG8gUE1VIHY1LCB3aGljaCBpcyB0aGUgY3VycmVudCBtYXhpbXVtIHZlcnNpb24gZGVmaW5lZCBieVxuIFx0ICogSW50ZWwsIGkuZS4gaXMgdGhlIGxhc3QgdmVyc2lvbiB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYmFja3dhcmRzXG5AQCAtNjQ5LDMyICYjNDM7NzAyLDkgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKVxuIFx0XHRcdGlmICgha3ZtX2hhc19wZXJmX2NhcHMgXHUwMDI2XHUwMDI2IHBlcmZfY2Fwc1tpXSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBhcmNoIGV2ZW50cywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwmIzM0Oyxcbi1cdFx0XHRcdHYsIHBlcmZfY2Fwc1tpXSk7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXBcbi1cdFx0XHQgKiB0aGUgbnVtYmVyIG9mIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG9cbi1cdFx0XHQgKiB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlXG4tXHRcdFx0ICogaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAmIzM5OzAmIzM5OyBhbmQgYWxsXG4tXHRcdFx0ICogb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gTlJfSU5URUxfQVJDSF9FVkVOVFMgJiM0MzsgMTsgaiYjNDM7JiM0MzspIHtcbi1cdFx0XHRcdGZvciAoayA9IDE7IGsgXHUwMDNjIEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrJiM0MzsmIzQzOylcbi1cdFx0XHRcdFx0dGVzdF9hcmNoX2V2ZW50cyh2LCBwZXJmX2NhcHNbaV0sIGosIHVuYXZhaWxhYmxlX21hc2tzW2tdKTtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0cHJfaW5mbyhcJiMzNDtUZXN0aW5nIEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCYjMzQ7LFxuLVx0XHRcdFx0diwgcGVyZl9jYXBzW2ldKTtcbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZ3BfY291bnRlcnM7IGomIzQzOyYjNDM7KVxuLVx0XHRcdFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGopO1xuLVxuLVx0XHRcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwmIzM0Oyxcbi1cdFx0XHRcdHYsIHBlcmZfY2Fwc1tpXSk7XG4tXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2M9IG5yX2ZpeGVkX2NvdW50ZXJzOyBqJiM0MzsmIzQzOykge1xuLVx0XHRcdFx0Zm9yIChrID0gMDsgayBcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsmIzQzOyYjNDM7KVxuLVx0XHRcdFx0XHR0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgayk7XG4tXHRcdFx0fVxuJiM0MztcdFx0XHR0ZXN0X2FyY2hfZXZlbnRzKHYsIHBlcmZfY2Fwc1tpXSk7XG4mIzQzO1x0XHRcdHRlc3RfZ3BfY291bnRlcnModiwgcGVyZl9jYXBzW2ldKTtcbiYjNDM7XHRcdFx0dGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pO1xuIFx0XHR9XG4gXHR9XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIwOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdCBwcm9ncmFtcyBhbmQgZG8gbm90IGNoYW5nZSBhbnkga2VybmVsIGxvZ2ljIHRvIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MTM4ZmY2YTk0YmI1NzgzN2JhYWQ3MjFjYzdiOGJlOTQyNTE3ZjBhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAyMDo1Mjo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKaW5kZXggZTgzNTZlZTU0ZDdiOS4uYTZhM2UxNjU3ODk1OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKQEAgLTEzNSw4ICYjNDM7MTM1LDggQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3JhbmRvbV91NjQoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKQogCXJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgJmx0OyZsdDsgMzIpIHwga3ZtX3JhbmRvbV91MzIoc3RhdGUpOwogfQogCi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLAotCQkJICAgIHU2NCBtYXgpOwomIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpOwomIzQzO3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpOwogCiBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHsKIAlWTV9NRU1fU1JDX0FOT05ZTU9VUywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jCmluZGV4IDZiMDBhYjExZjNjMDIuLjRkZmY3MmY2YmQzNDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYwpAQCAtNDMsMTIgJiM0Mzs0MywyNiBAQCB1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKQogCXJldHVybiBzdGF0ZS0mZ3Q7c2VlZDsKIH0KIAomIzQzOy8qIFJldHVybnMgYSByYW5kb20gdTMyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqLwomIzQzO3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpCiYjNDM7ewomIzQzOwl1MzIgdmFsdWUsIHJhbmdlOwomIzQzOwomIzQzOwlURVNUX0FTU0VSVChtaW4gJmx0Oz0gbWF4LCAmIzM0O1BFQktBQywgbWluID0gMHgleCwgbWF4ID0gMHgleCYjMzQ7LCBtaW4sIG1heCk7CiYjNDM7CiYjNDM7CXZhbHVlID0ga3ZtX3JhbmRvbV91MzIoc3RhdGUpOwomIzQzOwomIzQzOwlyYW5nZSA9IG1heCAtIG1pbjsKJiM0MzsJaWYgKHJhbmdlID09IFVJTlRfTUFYKQomIzQzOwkJcmV0dXJuIHZhbHVlOwomIzQzOwomIzQzOwlyZXR1cm4gbWluICYjNDM7ICh2YWx1ZSAlIChyYW5nZSAmIzQzOyAxKSk7CiYjNDM7fQomIzQzOwogLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovCi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLAotCQkJICAgIHU2NCBtYXgpCiYjNDM7dTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heCkKIHsKLQl1NjQgdmFsdWU7Ci0JdTY0IHJhbmdlOwomIzQzOwl1NjQgdmFsdWUsIHJhbmdlOwogCiAJVEVTVF9BU1NFUlQobWluICZsdDs9IG1heCwgJiMzNDtQRUJLQUMsIG1pbiA9IDB4JWx4LCBtYXggPSAweCVseCYjMzQ7LCBtaW4sIG1heCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYwppbmRleCBkYzZhZmFjM2FhOTE5Li5jN2M1NjYyMjAzODE1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jCkBAIC04NywxNCAmIzQzOzg3LDE4IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX2ludGVsX3BtdV9ldmVudCBpbnRlbF9ldmVudF90b19mZWF0dXJlKHU4IGlkeCkKIAlyZXR1cm4gX19pbnRlbF9ldmVudF90b19mZWF0dXJlW2lkeF07CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwKLQkJCQkJCSAgdm9pZCAqZ3Vlc3RfY29kZSwKLQkJCQkJCSAgdTggcG11X3ZlcnNpb24sCi0JCQkJCQkgIHU2NCBwZXJmX2NhcGFiaWxpdGllcykKJiM0MztzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBucl92Y3B1cywgdm9pZCAqZ3Vlc3RfY29kZSwKJiM0MzsJCQkJCSAgICAgICB1OCBwbXVfdmVyc2lvbiwKJiM0MzsJCQkJCSAgICAgICB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IGt2bV92Y3B1ICoqX192Y3B1c1tdKQogewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cyA9IGNhbGxvYyhucl92Y3B1cywgc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSkpOwogCXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgaTsKIAotCXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7CiYjNDM7CSpfX3ZjcHVzID0gdmNwdXM7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfdmNwdXMsIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwga3ZtX3BtdV92ZXJzaW9uKTsKIAlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgaGFyZHdhcmVfcG11X2FyY2hfZXZlbnRzKTsKIApAQCAtMTAyLDEzICYjNDM7MTA2LDIyIEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwKIAkgKiBTZXQgUEVSRl9DQVBBQklMSVRJRVMgYmVmb3JlIFBNVSB2ZXJzaW9uIGFzIEtWTSBkaXNhbGxvd3MgZW5hYmxpbmcKIAkgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJiMzOTt0IGhhdmUgYSB2UE1VLgogCSAqLwotCWlmIChrdm1faGFzX3BlcmZfY2FwcykKLQkJdmNwdV9zZXRfbXNyKCp2Y3B1LCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoa3ZtX2hhc19wZXJmX2NhcHMpCiYjNDM7CQkJdmNwdV9zZXRfbXNyKHZjcHVzW2ldLCBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUywgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwomIzQzOwkJdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdXNbaV0sIFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTiwgcG11X3ZlcnNpb24pOwomIzQzOwl9CiAKLQl2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSgqdmNwdSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7CiAJcmV0dXJuIHZtOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcG11X3ZtX2ZyZWUoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzKQomIzQzO3sKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzOwlmcmVlKHZjcHVzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHVjYWxsIHVjOwpAQCAtMjczLDYgJiM0MzsyODYsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KQogCXN0cnVjdCBrdm1feDg2X3BtdV9mZWF0dXJlIGdwX2V2ZW50LCBmaXhlZF9ldmVudDsKIAl1MzIgYmFzZV9wbWNfbXNyOwogCXVuc2lnbmVkIGludCBpOwomIzQzOwl1NjQgZXZlbnRzZWw7CiAKIAkvKiBUaGUgaG9zdCBzaWRlIHNob3VsZG4mIzM5O3QgaW52b2tlIHRoaXMgd2l0aG91dCBhIGd1ZXN0IFBNVS4gKi8KIAlHVUVTVF9BU1NFUlQocG11X3ZlcnNpb24pOwpAQCAtMjg3LDE5ICYjNDM7MzAxLDE2IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpCiAJR1VFU1RfQVNTRVJUX0VRKGlkeCwgZ3BfZXZlbnQuZi5iaXQpOwogCiAJR1VFU1RfQVNTRVJUKG5yX2dwX2NvdW50ZXJzKTsKJiM0MzsJaSA9IGt2bV9yYW5kb21fdTMyX2luX3JhbmdlKCZhbXA7a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBucl9ncF9jb3VudGVyczsgaSYjNDM7JiM0MzspIHsKLQkJdTY0IGV2ZW50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TIHwKLQkJCQkgICAgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSB8Ci0JCQkJICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdOwomIzQzOwlldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfAomIzQzOwkJICAgaW50ZWxfcG11X2FyY2hfZXZlbnRzW2lkeF07CiAKLQkJd3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApOwotCQlpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpCi0JCQl3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTsKJiM0MzsJd3Jtc3IoTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIDApOwomIzQzOwlpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpCiYjNDM7CQl3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTsKIAotCQlfX2d1ZXN0X3Rlc3RfYXJjaF9ldmVudChpZHgsIGksIGJhc2VfcG1jX21zciAmIzQzOyBpLAotCQkJCQlNU1JfUDZfRVZOVFNFTDAgJiM0MzsgaSwgZXZlbnRzZWwpOwotCX0KJiM0MzsJX19ndWVzdF90ZXN0X2FyY2hfZXZlbnQoaWR4LCBpLCBiYXNlX3BtY19tc3IgJiM0MzsgaSwgTVNSX1A2X0VWTlRTRUwwICYjNDM7IGksIGV2ZW50c2VsKTsKIAogCWlmICghZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpCiAJCXJldHVybjsKQEAgLTMyOCwzMCAmIzQzOzMzOSw3MiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpCiAJR1VFU1RfRE9ORSgpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsCi0JCQkgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spCiYjNDM7c3RhdGljIHZvaWQgX190ZXN0X2FyY2hfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLAomIzQzOwkJCSAgICAgICB1OCBsZW5ndGgsIHUzMiB1bmF2YWlsYWJsZV9tYXNrKQogewotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQlzdHJ1Y3Qga3ZtX3ZtICp2bTsKLQotCS8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqLwotCWlmICghcG11X3ZlcnNpb24pCi0JCXJldHVybjsKLQogCXVuYXZhaWxhYmxlX21hc2sgJmFtcDs9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsCiAJCQkJICAgIFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0subG9fYml0KTsKIAotCXZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywKLQkJCQkJIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7Ci0KIAl2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCwKIAkJCQlsZW5ndGgpOwogCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRVZFTlRTX01BU0ssCiAJCQkJdW5hdmFpbGFibGVfbWFzayk7CiAKIAlydW5fdmNwdSh2Y3B1KTsKJiM0Mzt9CiAKLQlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgaSA9IDA7CiYjNDM7CXUzMiBrOwomIzQzOwl1OCBqOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LAomIzQzOwkgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0CiYjNDM7CSAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGwKJiM0MzsJICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGUKJiM0MzsJICogd3JvbmcgYml0KHMpLgomIzQzOwkgKi8KJiM0MzsJY29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7CiYjNDM7CQkweDAsCiYjNDM7CQkweGZmZmZmZmZmdSwKJiM0MzsJCTB4YWFhYWFhYWF1LAomIzQzOwkJMHg1NTU1NTU1NXUsCiYjNDM7CQkweGYwZjBmMGYwdSwKJiM0MzsJCTB4MGYwZjBmMGZ1LAomIzQzOwkJMHhhMGEwYTBhMHUsCiYjNDM7CQkweDBhMGEwYTBhdSwKJiM0MzsJCTB4NTA1MDUwNTB1LAomIzQzOwkJMHgwNTA1MDUwNXUsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXByX2luZm8oJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKJiM0MzsJCXBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7CiYjNDM7CiYjNDM7CS8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqLwomIzQzOwlpZiAoIXBtdV92ZXJzaW9uKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygoTlJfSU5URUxfQVJDSF9FVkVOVFMgJiM0MzsgMikgKiBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKSwKJiM0MzsJCQkJICAgICAgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cywgcG11X3ZlcnNpb24sCiYjNDM7CQkJCSAgICAgIHBlcmZfY2FwYWJpbGl0aWVzLCAmYW1wO3ZjcHVzKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwIHRoZSBudW1iZXIgb2YKJiM0MzsJICogZXZlbnRzICYjNDM7MSAodG8gdmVyaWZ5IEtWTSBkb2VzbiYjMzk7dCBkbyB3ZWlyZCB0aGluZ3MgaWYgdGhlIGd1ZXN0IGxlbmd0aAomIzQzOwkgKiBpcyBncmVhdGVyIHRoYW4gdGhlIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kCiYjNDM7CSAqIGFsbCBvbmVzIGkuZS4gYWxsIGV2ZW50cyBiZWluZyBhdmFpbGFibGUgYW5kIHVuYXZhaWxhYmxlLgomIzQzOwkgKi8KJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7PSBOUl9JTlRFTF9BUkNIX0VWRU5UUyAmIzQzOyAxOyBqJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChrID0gMTsgayAmbHQ7IEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrJiM0MzsmIzQzOykKJiM0MzsJCQlfX3Rlc3RfYXJjaF9ldmVudHModmNwdXNbaSYjNDM7JiM0MztdLCBwZXJmX2NhcGFiaWxpdGllcywgaiwKJiM0MzsJCQkJCSAgIHVuYXZhaWxhYmxlX21hc2tzW2tdKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwbXVfdm1fZnJlZSh2bSwgdmNwdXMpOwogfQogCiAvKgpAQCAtNDk1LDIxICYjNDM7NTQ4LDI3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnModm9pZCkKIAlHVUVTVF9ET05FKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcywKLQkJCSAgICAgdTggbnJfZ3BfY291bnRlcnMpCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKQogewotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJdTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1czsKIAlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJdTggajsKIAotCXZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycywKLQkJCQkJIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7CiYjNDM7CXByX2luZm8oJiMzNDtUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKJiM0MzsJCW5yX2dwX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwogCi0JdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUywKLQkJCQlucl9ncF9jb3VudGVycyk7CiYjNDM7CXZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX2dwX2NvdW50ZXJzICYjNDM7IDEsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsCiYjNDM7CQkJCSAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgJmFtcDt2Y3B1cyk7CiAKLQlydW5fdmNwdSh2Y3B1KTsKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7PSBucl9ncF9jb3VudGVyczsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2pdLCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLAomIzQzOwkJCQkJbnJfZ3BfY291bnRlcnMpOwogCi0Ja3ZtX3ZtX2ZyZWUodm0pOwomIzQzOwkJcnVuX3ZjcHUodmNwdXNbal0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZCkKQEAgLTU2MSw1OSAmIzQzOzYyMCw1MyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpCiAJR1VFU1RfRE9ORSgpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsCi0JCQkJdTggbnJfZml4ZWRfY291bnRlcnMsIHUzMiBzdXBwb3J0ZWRfYml0bWFzaykKJiM0MztzdGF0aWMgdm9pZCBfX3Rlc3RfZml4ZWRfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBucl9maXhlZF9jb3VudGVycywKJiM0MzsJCQkJICB1MzIgc3VwcG9ydGVkX2JpdG1hc2spCiB7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCXN0cnVjdCBrdm1fdm0gKnZtOwotCi0Jdm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLAotCQkJCQkgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTsKLQogCXZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRklYRURfQ09VTlRFUlNfQklUTUFTSywKIAkJCQlzdXBwb3J0ZWRfYml0bWFzayk7CiAJdmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUywKIAkJCQlucl9maXhlZF9jb3VudGVycyk7CiAKIAlydW5fdmNwdSh2Y3B1KTsKJiM0Mzt9CiAKLQlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKQomIzQzO3sKJiM0MzsJdTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1czsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CWludCBpID0gMDsKJiM0MzsJdTMyIGs7CiYjNDM7CXU4IGo7CiYjNDM7CiYjNDM7CXByX2luZm8oJiMzNDtUZXN0aW5nICV1IGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKJiM0MzsJCW5yX2ZpeGVkX2NvdW50ZXJzLCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpOwomIzQzOwomIzQzOwomIzQzOwl2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygobnJfZml4ZWRfY291bnRlcnMgJiM0MzsgMSkgKiBCSVQobnJfZml4ZWRfY291bnRlcnMpLAomIzQzOwkJCQkgICAgICBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLAomIzQzOwkJCQkgICAgICBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMsICZhbXA7dmNwdXMpOwomIzQzOwomIzQzOwlmb3IgKGogPSAwOyBqICZsdDs9IG5yX2ZpeGVkX2NvdW50ZXJzOyBqJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChrID0gMDsgayAmbHQ7PSAoQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSAtIDEpOyBrJiM0MzsmIzQzOykKJiM0MzsJCQlfX3Rlc3RfZml4ZWRfY291bnRlcnModmNwdXNbaSYjNDM7JiM0MztdLCBqLCBrKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwbXVfdm1fZnJlZSh2bSwgdmNwdXMpOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpCiB7Ci0JdTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpOwotCXU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTsKIAl1OCBwbXVfdmVyc2lvbiA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OKTsKIAl1bnNpZ25lZCBpbnQgaTsKLQl1OCB2LCBqOwotCXUzMiBrOwomIzQzOwl1OCB2OwogCiAJY29uc3QgdTY0IHBlcmZfY2Fwc1tdID0gewogCQkwLAogCQlQTVVfQ0FQX0ZXX1dSSVRFUywKIAl9OwogCi0JLyoKLQkgKiBUbyBrZWVwIHRoZSB0b3RhbCBydW50aW1lIHJlYXNvbmFibGUsIHRlc3Qgb25seSBhIGhhbmRmdWwgb2Ygc2VsZWN0LAotCSAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3QKLQkgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsCi0JICogYXMgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmN1ZXMsIGUuZy4gdG8gZGV0ZWN0IGlmIEtWTSBpcyBjaGVja2luZyB0aGUKLQkgKiB3cm9uZyBiaXQocykuCi0JICovCi0JY29uc3QgdTMyIHVuYXZhaWxhYmxlX21hc2tzW10gPSB7Ci0JCTB4MCwKLQkJMHhmZmZmZmZmZnUsCi0JCTB4YWFhYWFhYWF1LAotCQkweDU1NTU1NTU1dSwKLQkJMHhmMGYwZjBmMHUsCi0JCTB4MGYwZjBmMGZ1LAotCQkweGEwYTBhMGEwdSwKLQkJMHgwYTBhMGEwYXUsCi0JCTB4NTA1MDUwNTB1LAotCQkweDA1MDUwNTA1dSwKLQl9OwotCiAJLyoKIAkgKiBUZXN0IHVwIHRvIFBNVSB2NSwgd2hpY2ggaXMgdGhlIGN1cnJlbnQgbWF4aW11bSB2ZXJzaW9uIGRlZmluZWQgYnkKIAkgKiBJbnRlbCwgaS5lLiBpcyB0aGUgbGFzdCB2ZXJzaW9uIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBiYWNrd2FyZHMKQEAgLTY0OSwzMiAmIzQzOzcwMiw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZCkKIAkJCWlmICgha3ZtX2hhc19wZXJmX2NhcHMgJmFtcDsmYW1wOyBwZXJmX2NhcHNbaV0pCiAJCQkJY29udGludWU7CiAKLQkJCXByX2luZm8oJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKLQkJCQl2LCBwZXJmX2NhcHNbaV0pOwotCi0JCQkvKgotCQkJICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwCi0JCQkgKiB0aGUgbnVtYmVyIG9mIGV2ZW50cyAmIzQzOzEgKHRvIHZlcmlmeSBLVk0gZG9lc24mIzM5O3QgZG8KLQkJCSAqIHdlaXJkIHRoaW5ncyBpZiB0aGUgZ3Vlc3QgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGUKLQkJCSAqIGhvc3QgbGVuZ3RoKS4gIEV4cGxpY2l0bHkgdGVzdCBhIG1hc2sgb2YgJiMzOTswJiMzOTsgYW5kIGFsbAotCQkJICogb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS4KLQkJCSAqLwotCQkJZm9yIChqID0gMDsgaiAmbHQ7PSBOUl9JTlRFTF9BUkNIX0VWRU5UUyAmIzQzOyAxOyBqJiM0MzsmIzQzOykgewotCQkJCWZvciAoayA9IDE7IGsgJmx0OyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgayYjNDM7JiM0MzspCi0JCQkJCXRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldLCBqLCB1bmF2YWlsYWJsZV9tYXNrc1trXSk7Ci0JCQl9Ci0KLQkJCXByX2luZm8oJiMzNDtUZXN0aW5nIEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKLQkJCQl2LCBwZXJmX2NhcHNbaV0pOwotCQkJZm9yIChqID0gMDsgaiAmbHQ7PSBucl9ncF9jb3VudGVyczsgaiYjNDM7JiM0MzspCi0JCQkJdGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGopOwotCi0JCQlwcl9pbmZvKCYjMzQ7VGVzdGluZyBmaXhlZCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxuJiMzNDssCi0JCQkJdiwgcGVyZl9jYXBzW2ldKTsKLQkJCWZvciAoaiA9IDA7IGogJmx0Oz0gbnJfZml4ZWRfY291bnRlcnM7IGomIzQzOyYjNDM7KSB7Ci0JCQkJZm9yIChrID0gMDsgayAmbHQ7PSAoQklUKG5yX2ZpeGVkX2NvdW50ZXJzKSAtIDEpOyBrJiM0MzsmIzQzOykKLQkJCQkJdGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGosIGspOwotCQkJfQomIzQzOwkJCXRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldKTsKJiM0MzsJCQl0ZXN0X2dwX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7CiYjNDM7CQkJdGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pOwogCQl9CiAJfQogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzM5CgkJCQkJCQlvdXRwdXQ6IDcyCgkJCQkJCQl0aG91Z2h0czogNDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBEZWNpc2lvbjogTm8qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IHRvdWNoZXMgYSBmZXcgZmlsZXM6IGB0ZXN0X3V0aWwuaGAsIGB0ZXN0X3V0aWwuY2AsIGFuZCBgcG11X2NvdW50ZXJzX3Rlc3QuY2AsIGFsbCBuZXN0bGVkIHdpdGhpbiB0aGUgS1ZNIHNlbGZ0ZXN0cyBkaXJlY3RvcnkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBhY2NpZGVudGFsbHkgbGVhayBpbnRvIGtlcm5lbCBzcGFjZS4gQSBxdWljayBjaGVjayBvZiB0aGUgZGlmZiBjb25maXJtcyB0aGF0IGl0JiMzOTtzIGFsbCBzdGF5aW5nIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AuIFRoYXQmIzM5O3MgZ29vZC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBmdXp6aW5nIGltcGxpY2F0aW9ucy4gVGhlIHByb21wdCBwcm92aWRlcyBzb21lIGd1aWRhbmNlLiBJdCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IG1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIFBDSSBzd2l0Y2ggY29kZSwgYW5kIGRyaXZlciBgLnJlbW92ZWAgZnVuY3Rpb25zIGFzIHJlYXNvbnMgZm9yIG5vdCBmdXp6aW5nLiBXaGlsZSBpdCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IG1lbnRpb24gc2VsZnRlc3RzLCBJJiMzOTttIGludGVycHJldGluZyB0aGF0IHNlbGZ0ZXN0cywgYmVpbmcgKnVzZXItc3BhY2UgcHJvZ3JhbXMqIGRlc2lnbmVkIHRvIHZhbGlkYXRlIGtlcm5lbCBiZWhhdmlvciwgYXJlbiYjMzk7dCBrZXJuZWwgKmNvZGUqIGFuZCB0aGVyZWZvcmUgYXJlbiYjMzk7dCB3aGF0IHdlJiMzOTtyZSBhaW1pbmcgdG8gZnV6ei4gV2Ugd2FudCB0byBmdXp6IHRoZSAqa2VybmVsKiBpdHNlbGYsIHRoZSBjb3JlIGV4ZWN1dGlvbiBsb2dpYy4gVGhpcyBwYXRjaCwgY29uZmluZWQgdG8gc2VsZnRlc3RzLCB3b24mIzM5O3QgYWZmZWN0IHRoYXQuCgpJJiMzOTttIGRvaW5nIGEgZG91YmxlIGNoZWNrLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBJIGNhbiBjb25maXJtIHRoYXQgdGhlcmUmIzM5O3Mgbm8ga2VybmVsIGNvZGUgaW4gdGhpcyBkaWZmLgoKU28sIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoZSByZXN1bHQgdG8gYFdvcnRoRnV6emluZz1mYWxzZWAuIE15IHJlYXNvbmluZyB3aWxsIGJlIGNvbmNpc2U6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AsIHdoaWNoIGFyZSB1c2VyLXNwYWNlIHRlc3QgcHJvZ3JhbXMgYW5kIGRvIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBsb2dpYyB0byBiZSBmdXp6ZWQuJiMzNDsKCkkmIzM5O2xsIHF1aWNrbHkgcmV2aWV3IHRoZSBkaWZmIG9uZSBtb3JlIHRpbWUgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLi4uTm9wZSwganVzdCB0aGUgc2VsZnRlc3RzLgoKQWxsIHJpZ2h0LCBzZXR0aW5nIHRoZSByZXN1bHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8sIHdoaWNoIGFyZSB1c2VyLXNwYWNlIHRlc3QgcHJvZ3JhbXMgYW5kIGRvIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBsb2dpYyB0byBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdCBwcm9ncmFtcyBhbmQgZG8gbm90IGNoYW5nZSBhbnkga2VybmVsIGxvZ2ljIHRvIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMDo1Mjo0NS43MDYyMDg4NjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTE4NDA5MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdCBwcm9ncmFtcyBhbmQgZG8gbm90IGNoYW5nZSBhbnkga2VybmVsIGxvZ2ljIHRvIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIwOjUyOjQ1LjcwNjIxNTg0OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1ODY4MzkxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxMzhmZjZhOTRiYjU3ODM3YmFhZDcyMWNjN2I4YmU5NDI1MTdmMGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgNCAyMDo1Mjo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXFxuaW5kZXggZTgzNTZlZTU0ZDdiOS4uYTZhM2UxNjU3ODk1OSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXFxuQEAgLTEzNSw4ICsxMzUsOCBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1fcmFuZG9tX3U2NChzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXFxuIFxcdHJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgXFx1MDAzY1xcdTAwM2MgMzIpIHwga3ZtX3JhbmRvbV91MzIoc3RhdGUpO1xcbiB9XFxuIFxcbi11NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLFxcbi1cXHRcXHRcXHQgICAgdTY0IG1heCk7XFxuK3UzMiBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHUzMiBtaW4sIHUzMiBtYXgpO1xcbit1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLCB1NjQgbWF4KTtcXG4gXFxuIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUge1xcbiBcXHRWTV9NRU1fU1JDX0FOT05ZTU9VUyxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcXG5pbmRleCA2YjAwYWIxMWYzYzAyLi40ZGZmNzJmNmJkMzQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXFxuQEAgLTQzLDEyICs0MywyNiBAQCB1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKVxcbiBcXHRyZXR1cm4gc3RhdGUtXFx1MDAzZXNlZWQ7XFxuIH1cXG4gXFxuKy8qIFJldHVybnMgYSByYW5kb20gdTMyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqL1xcbit1MzIga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1MzIgbWluLCB1MzIgbWF4KVxcbit7XFxuK1xcdHUzMiB2YWx1ZSwgcmFuZ2U7XFxuK1xcbitcXHRURVNUX0FTU0VSVChtaW4gXFx1MDAzYz0gbWF4LCBcXFwiUEVCS0FDLCBtaW4gPSAweCV4LCBtYXggPSAweCV4XFxcIiwgbWluLCBtYXgpO1xcbitcXG4rXFx0dmFsdWUgPSBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7XFxuK1xcbitcXHRyYW5nZSA9IG1heCAtIG1pbjtcXG4rXFx0aWYgKHJhbmdlID09IFVJTlRfTUFYKVxcbitcXHRcXHRyZXR1cm4gdmFsdWU7XFxuK1xcbitcXHRyZXR1cm4gbWluICsgKHZhbHVlICUgKHJhbmdlICsgMSkpO1xcbit9XFxuK1xcbiAvKiBSZXR1cm5zIGEgcmFuZG9tIHU2NCBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFttaW4sIG1heF0gKi9cXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcXG4tXFx0XFx0XFx0ICAgIHU2NCBtYXgpXFxuK3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sIHU2NCBtYXgpXFxuIHtcXG4tXFx0dTY0IHZhbHVlO1xcbi1cXHR1NjQgcmFuZ2U7XFxuK1xcdHU2NCB2YWx1ZSwgcmFuZ2U7XFxuIFxcbiBcXHRURVNUX0FTU0VSVChtaW4gXFx1MDAzYz0gbWF4LCBcXFwiUEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHhcXFwiLCBtaW4sIG1heCk7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcXG5pbmRleCBkYzZhZmFjM2FhOTE5Li5jN2M1NjYyMjAzODE1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xcbkBAIC04NywxNCArODcsMTggQEAgc3RhdGljIHN0cnVjdCBrdm1faW50ZWxfcG11X2V2ZW50IGludGVsX2V2ZW50X3RvX2ZlYXR1cmUodTggaWR4KVxcbiBcXHRyZXR1cm4gX19pbnRlbF9ldmVudF90b19mZWF0dXJlW2lkeF07XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICB2b2lkICpndWVzdF9jb2RlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIHU4IHBtdV92ZXJzaW9uLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcXG4rc3RhdGljIHN0cnVjdCBrdm1fdm0gKnBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cyh1MzIgbnJfdmNwdXMsIHZvaWQgKmd1ZXN0X2NvZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB1OCBwbXVfdmVyc2lvbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqKl9fdmNwdXNbXSlcXG4ge1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cyA9IGNhbGxvYyhucl92Y3B1cywgc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSkpO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0aW50IGk7XFxuIFxcbi1cXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpO1xcbitcXHQqX192Y3B1cyA9IHZjcHVzO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cyhucl92Y3B1cywgZ3Vlc3RfY29kZSwgdmNwdXMpO1xcbiBcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwga3ZtX3BtdV92ZXJzaW9uKTtcXG4gXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGhhcmR3YXJlX3BtdV9hcmNoX2V2ZW50cyk7XFxuIFxcbkBAIC0xMDIsMTMgKzEwNiwyMiBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsXFxuIFxcdCAqIFNldCBQRVJGX0NBUEFCSUxJVElFUyBiZWZvcmUgUE1VIHZlcnNpb24gYXMgS1ZNIGRpc2FsbG93cyBlbmFibGluZ1xcbiBcXHQgKiBmZWF0dXJlcyB2aWEgUEVSRl9DQVBBQklMSVRJRVMgaWYgdGhlIGd1ZXN0IGRvZXNuJ3QgaGF2ZSBhIHZQTVUuXFxuIFxcdCAqL1xcbi1cXHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXFxuLVxcdFxcdHZjcHVfc2V0X21zcigqdmNwdSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspIHtcXG4rXFx0XFx0aWYgKGt2bV9oYXNfcGVyZl9jYXBzKVxcbitcXHRcXHRcXHR2Y3B1X3NldF9tc3IodmNwdXNbaV0sIE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTLCBwZXJmX2NhcGFiaWxpdGllcyk7XFxuK1xcbitcXHRcXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1c1tpXSwgWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OLCBwbXVfdmVyc2lvbik7XFxuK1xcdH1cXG4gXFxuLVxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KCp2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04sIHBtdV92ZXJzaW9uKTtcXG4gXFx0cmV0dXJuIHZtO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBwbXVfdm1fZnJlZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXMpXFxuK3tcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbitcXHRmcmVlKHZjcHVzKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB1Y2FsbCB1YztcXG5AQCAtMjczLDYgKzI4Niw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXFxuIFxcdHN0cnVjdCBrdm1feDg2X3BtdV9mZWF0dXJlIGdwX2V2ZW50LCBmaXhlZF9ldmVudDtcXG4gXFx0dTMyIGJhc2VfcG1jX21zcjtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdHU2NCBldmVudHNlbDtcXG4gXFxuIFxcdC8qIFRoZSBob3N0IHNpZGUgc2hvdWxkbid0IGludm9rZSB0aGlzIHdpdGhvdXQgYSBndWVzdCBQTVUuICovXFxuIFxcdEdVRVNUX0FTU0VSVChwbXVfdmVyc2lvbik7XFxuQEAgLTI4NywxOSArMzAxLDE2IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXFxuIFxcdEdVRVNUX0FTU0VSVF9FUShpZHgsIGdwX2V2ZW50LmYuYml0KTtcXG4gXFxuIFxcdEdVRVNUX0FTU0VSVChucl9ncF9jb3VudGVycyk7XFxuK1xcdGkgPSBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShcXHUwMDI2a3ZtX3JuZywgMCwgbnJfZ3BfY291bnRlcnMgLSAxKTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9ncF9jb3VudGVyczsgaSsrKSB7XFxuLVxcdFxcdHU2NCBldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8XFxuLVxcdFxcdFxcdFxcdCAgICBBUkNIX1BFUkZNT05fRVZFTlRTRUxfRU5BQkxFIHxcXG4tXFx0XFx0XFx0XFx0ICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xcbitcXHRldmVudHNlbCA9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyB8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxcbitcXHRcXHQgICBpbnRlbF9wbXVfYXJjaF9ldmVudHNbaWR4XTtcXG4gXFxuLVxcdFxcdHdybXNyKE1TUl9QNl9FVk5UU0VMMCArIGksIDApO1xcbi1cXHRcXHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXFxuLVxcdFxcdFxcdHdybXNyKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIEJJVF9VTEwoaSkpO1xcbitcXHR3cm1zcihNU1JfUDZfRVZOVFNFTDAgKyBpLCAwKTtcXG4rXFx0aWYgKGd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxcbitcXHRcXHR3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBCSVRfVUxMKGkpKTtcXG4gXFxuLVxcdFxcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICsgaSxcXG4tXFx0XFx0XFx0XFx0XFx0TVNSX1A2X0VWTlRTRUwwICsgaSwgZXZlbnRzZWwpO1xcbi1cXHR9XFxuK1xcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICsgaSwgTVNSX1A2X0VWTlRTRUwwICsgaSwgZXZlbnRzZWwpO1xcbiBcXG4gXFx0aWYgKCFndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0zMjgsMzAgKzMzOSw3MiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpXFxuIFxcdEdVRVNUX0RPTkUoKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxcbi1cXHRcXHRcXHQgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spXFxuK3N0YXRpYyB2b2lkIF9fdGVzdF9hcmNoX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcXG4rXFx0XFx0XFx0ICAgICAgIHU4IGxlbmd0aCwgdTMyIHVuYXZhaWxhYmxlX21hc2spXFxuIHtcXG4tXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4tXFxuLVxcdC8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqL1xcbi1cXHRpZiAoIXBtdV92ZXJzaW9uKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHR1bmF2YWlsYWJsZV9tYXNrIFxcdTAwMjY9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsXFxuIFxcdFxcdFxcdFxcdCAgICBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLmxvX2JpdCk7XFxuIFxcbi1cXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyxcXG4tXFx0XFx0XFx0XFx0XFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XFxuLVxcbiBcXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCxcXG4gXFx0XFx0XFx0XFx0bGVuZ3RoKTtcXG4gXFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdSwgWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSyxcXG4gXFx0XFx0XFx0XFx0dW5hdmFpbGFibGVfbWFzayk7XFxuIFxcbiBcXHRydW5fdmNwdSh2Y3B1KTtcXG4rfVxcbiBcXG4tXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbitzdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRpbnQgaSA9IDA7XFxuK1xcdHUzMiBrO1xcbitcXHR1OCBqO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVG8ga2VlcCB0aGUgdG90YWwgcnVudGltZSByZWFzb25hYmxlLCB0ZXN0IG9ubHkgYSBoYW5kZnVsIG9mIHNlbGVjdCxcXG4rXFx0ICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdFxcbitcXHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXFxuK1xcdCAqIGFzIGFsdGVybmF0aW5nIGJpdCBzZXF1ZW5jdWVzLCBlLmcuIHRvIGRldGVjdCBpZiBLVk0gaXMgY2hlY2tpbmcgdGhlXFxuK1xcdCAqIHdyb25nIGJpdChzKS5cXG4rXFx0ICovXFxuK1xcdGNvbnN0IHUzMiB1bmF2YWlsYWJsZV9tYXNrc1tdID0ge1xcbitcXHRcXHQweDAsXFxuK1xcdFxcdDB4ZmZmZmZmZmZ1LFxcbitcXHRcXHQweGFhYWFhYWFhdSxcXG4rXFx0XFx0MHg1NTU1NTU1NXUsXFxuK1xcdFxcdDB4ZjBmMGYwZjB1LFxcbitcXHRcXHQweDBmMGYwZjBmdSxcXG4rXFx0XFx0MHhhMGEwYTBhMHUsXFxuK1xcdFxcdDB4MGEwYTBhMGF1LFxcbitcXHRcXHQweDUwNTA1MDUwdSxcXG4rXFx0XFx0MHgwNTA1MDUwNXUsXFxuK1xcdH07XFxuK1xcbitcXHRwcl9pbmZvKFxcXCJUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbitcXHRcXHRwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbitcXG4rXFx0LyogVGVzdGluZyBhcmNoIGV2ZW50cyByZXF1aXJlcyBhIHZQTVUgKHRoZXJlIGFyZSBubyBuZWdhdGl2ZSB0ZXN0cykuICovXFxuK1xcdGlmICghcG11X3ZlcnNpb24pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKChOUl9JTlRFTF9BUkNIX0VWRU5UUyArIDIpICogQVJSQVlfU0laRSh1bmF2YWlsYWJsZV9tYXNrcyksXFxuK1xcdFxcdFxcdFxcdCAgICAgIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHMsIHBtdV92ZXJzaW9uLFxcbitcXHRcXHRcXHRcXHQgICAgICBwZXJmX2NhcGFiaWxpdGllcywgXFx1MDAyNnZjcHVzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRlc3Qgc2luZ2xlIGJpdHMgZm9yIGFsbCBQTVUgdmVyc2lvbiBhbmQgbGVuZ3RocyB1cCB0aGUgbnVtYmVyIG9mXFxuK1xcdCAqIGV2ZW50cyArMSAodG8gdmVyaWZ5IEtWTSBkb2Vzbid0IGRvIHdlaXJkIHRoaW5ncyBpZiB0aGUgZ3Vlc3QgbGVuZ3RoXFxuK1xcdCAqIGlzIGdyZWF0ZXIgdGhhbiB0aGUgaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAnMCcgYW5kXFxuK1xcdCAqIGFsbCBvbmVzIGkuZS4gYWxsIGV2ZW50cyBiZWluZyBhdmFpbGFibGUgYW5kIHVuYXZhaWxhYmxlLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBOUl9JTlRFTF9BUkNIX0VWRU5UUyArIDE7IGorKykge1xcbitcXHRcXHRmb3IgKGsgPSAxOyBrIFxcdTAwM2MgQVJSQVlfU0laRSh1bmF2YWlsYWJsZV9tYXNrcyk7IGsrKylcXG4rXFx0XFx0XFx0X190ZXN0X2FyY2hfZXZlbnRzKHZjcHVzW2krK10sIHBlcmZfY2FwYWJpbGl0aWVzLCBqLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1bmF2YWlsYWJsZV9tYXNrc1trXSk7XFxuK1xcdH1cXG4rXFxuK1xcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTQ5NSwyMSArNTQ4LDI3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnModm9pZClcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0X2dwX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXFxuLVxcdFxcdFxcdCAgICAgdTggbnJfZ3BfY291bnRlcnMpXFxuK3N0YXRpYyB2b2lkIHRlc3RfZ3BfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XFxuIFxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHR1OCBqO1xcbiBcXG4tXFx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXFxuLVxcdFxcdFxcdFxcdFxcdCBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMpO1xcbitcXHRwcl9pbmZvKFxcXCJUZXN0aW5nICV1IEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbitcXHRcXHRucl9ncF9jb3VudGVycywgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4gXFxuLVxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMsXFxuLVxcdFxcdFxcdFxcdG5yX2dwX2NvdW50ZXJzKTtcXG4rXFx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfZ3BfY291bnRlcnMgKyAxLCBndWVzdF90ZXN0X2dwX2NvdW50ZXJzLFxcbitcXHRcXHRcXHRcXHQgICAgICBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMsIFxcdTAwMjZ2Y3B1cyk7XFxuIFxcbi1cXHRydW5fdmNwdSh2Y3B1KTtcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjPSBucl9ncF9jb3VudGVyczsgaisrKSB7XFxuK1xcdFxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHVzW2pdLCBYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTLFxcbitcXHRcXHRcXHRcXHRcXHRucl9ncF9jb3VudGVycyk7XFxuIFxcbi1cXHRrdm1fdm1fZnJlZSh2bSk7XFxuK1xcdFxcdHJ1bl92Y3B1KHZjcHVzW2pdKTtcXG4rXFx0fVxcbitcXG4rXFx0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyh2b2lkKVxcbkBAIC01NjEsNTkgKzYyMCw1MyBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzKHZvaWQpXFxuIFxcdEdVRVNUX0RPTkUoKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxcbi1cXHRcXHRcXHRcXHR1OCBucl9maXhlZF9jb3VudGVycywgdTMyIHN1cHBvcnRlZF9iaXRtYXNrKVxcbitzdGF0aWMgdm9pZCBfX3Rlc3RfZml4ZWRfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBucl9maXhlZF9jb3VudGVycyxcXG4rXFx0XFx0XFx0XFx0ICB1MzIgc3VwcG9ydGVkX2JpdG1hc2spXFxuIHtcXG4tXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4tXFxuLVxcdHZtID0gcG11X3ZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFxcdTAwMjZ2Y3B1LCBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLFxcbi1cXHRcXHRcXHRcXHRcXHQgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4tXFxuIFxcdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfRklYRURfQ09VTlRFUlNfQklUTUFTSyxcXG4gXFx0XFx0XFx0XFx0c3VwcG9ydGVkX2JpdG1hc2spO1xcbiBcXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTLFxcbiBcXHRcXHRcXHRcXHRucl9maXhlZF9jb3VudGVycyk7XFxuIFxcbiBcXHRydW5fdmNwdSh2Y3B1KTtcXG4rfVxcbiBcXG4tXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbitzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMpXFxuK3tcXG4rXFx0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGludCBpID0gMDtcXG4rXFx0dTMyIGs7XFxuK1xcdHU4IGo7XFxuK1xcbitcXHRwcl9pbmZvKFxcXCJUZXN0aW5nICV1IGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbitcXHRcXHRucl9maXhlZF9jb3VudGVycywgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcXG4rXFxuK1xcbitcXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygobnJfZml4ZWRfY291bnRlcnMgKyAxKSAqIEJJVChucl9maXhlZF9jb3VudGVycyksXFxuK1xcdFxcdFxcdFxcdCAgICAgIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcywgXFx1MDAyNnZjcHVzKTtcXG4rXFxuK1xcdGZvciAoaiA9IDA7IGogXFx1MDAzYz0gbnJfZml4ZWRfY291bnRlcnM7IGorKykge1xcbitcXHRcXHRmb3IgKGsgPSAwOyBrIFxcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsrKylcXG4rXFx0XFx0XFx0X190ZXN0X2ZpeGVkX2NvdW50ZXJzKHZjcHVzW2krK10sIGosIGspO1xcbitcXHR9XFxuK1xcbitcXHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXFxuIHtcXG4tXFx0dTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpO1xcbi1cXHR1OCBucl9ncF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyk7XFxuIFxcdHU4IHBtdV92ZXJzaW9uID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04pO1xcbiBcXHR1bnNpZ25lZCBpbnQgaTtcXG4tXFx0dTggdiwgajtcXG4tXFx0dTMyIGs7XFxuK1xcdHU4IHY7XFxuIFxcbiBcXHRjb25zdCB1NjQgcGVyZl9jYXBzW10gPSB7XFxuIFxcdFxcdDAsXFxuIFxcdFxcdFBNVV9DQVBfRldfV1JJVEVTLFxcbiBcXHR9O1xcbiBcXG4tXFx0LypcXG4tXFx0ICogVG8ga2VlcCB0aGUgdG90YWwgcnVudGltZSByZWFzb25hYmxlLCB0ZXN0IG9ubHkgYSBoYW5kZnVsIG9mIHNlbGVjdCxcXG4tXFx0ICogc2VtaS1hcmJpdHJhcnkgdmFsdWVzIGZvciB0aGUgbWFzayBvZiB1bmF2YWlsYWJsZSBQTVUgZXZlbnRzLiAgVGVzdFxcbi1cXHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXFxuLVxcdCAqIGFzIGFsdGVybmF0aW5nIGJpdCBzZXF1ZW5jdWVzLCBlLmcuIHRvIGRldGVjdCBpZiBLVk0gaXMgY2hlY2tpbmcgdGhlXFxuLVxcdCAqIHdyb25nIGJpdChzKS5cXG4tXFx0ICovXFxuLVxcdGNvbnN0IHUzMiB1bmF2YWlsYWJsZV9tYXNrc1tdID0ge1xcbi1cXHRcXHQweDAsXFxuLVxcdFxcdDB4ZmZmZmZmZmZ1LFxcbi1cXHRcXHQweGFhYWFhYWFhdSxcXG4tXFx0XFx0MHg1NTU1NTU1NXUsXFxuLVxcdFxcdDB4ZjBmMGYwZjB1LFxcbi1cXHRcXHQweDBmMGYwZjBmdSxcXG4tXFx0XFx0MHhhMGEwYTBhMHUsXFxuLVxcdFxcdDB4MGEwYTBhMGF1LFxcbi1cXHRcXHQweDUwNTA1MDUwdSxcXG4tXFx0XFx0MHgwNTA1MDUwNXUsXFxuLVxcdH07XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBUZXN0IHVwIHRvIFBNVSB2NSwgd2hpY2ggaXMgdGhlIGN1cnJlbnQgbWF4aW11bSB2ZXJzaW9uIGRlZmluZWQgYnlcXG4gXFx0ICogSW50ZWwsIGkuZS4gaXMgdGhlIGxhc3QgdmVyc2lvbiB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYmFja3dhcmRzXFxuQEAgLTY0OSwzMiArNzAyLDkgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKVxcbiBcXHRcXHRcXHRpZiAoIWt2bV9oYXNfcGVyZl9jYXBzIFxcdTAwMjZcXHUwMDI2IHBlcmZfY2Fwc1tpXSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRwcl9pbmZvKFxcXCJUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHR2LCBwZXJmX2NhcHNbaV0pO1xcbi1cXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwXFxuLVxcdFxcdFxcdCAqIHRoZSBudW1iZXIgb2YgZXZlbnRzICsxICh0byB2ZXJpZnkgS1ZNIGRvZXNuJ3QgZG9cXG4tXFx0XFx0XFx0ICogd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZVxcbi1cXHRcXHRcXHQgKiBob3N0IGxlbmd0aCkuICBFeHBsaWNpdGx5IHRlc3QgYSBtYXNrIG9mICcwJyBhbmQgYWxsXFxuLVxcdFxcdFxcdCAqIG9uZXMgaS5lLiBhbGwgZXZlbnRzIGJlaW5nIGF2YWlsYWJsZSBhbmQgdW5hdmFpbGFibGUuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICsgMTsgaisrKSB7XFxuLVxcdFxcdFxcdFxcdGZvciAoayA9IDE7IGsgXFx1MDAzYyBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKTsgaysrKVxcbi1cXHRcXHRcXHRcXHRcXHR0ZXN0X2FyY2hfZXZlbnRzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgdW5hdmFpbGFibGVfbWFza3Nba10pO1xcbi1cXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRwcl9pbmZvKFxcXCJUZXN0aW5nIEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHR2LCBwZXJmX2NhcHNbaV0pO1xcbi1cXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2M9IG5yX2dwX2NvdW50ZXJzOyBqKyspXFxuLVxcdFxcdFxcdFxcdHRlc3RfZ3BfY291bnRlcnModiwgcGVyZl9jYXBzW2ldLCBqKTtcXG4tXFxuLVxcdFxcdFxcdHByX2luZm8oXFxcIlRlc3RpbmcgZml4ZWQgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHYsIHBlcmZfY2Fwc1tpXSk7XFxuLVxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYz0gbnJfZml4ZWRfY291bnRlcnM7IGorKykge1xcbi1cXHRcXHRcXHRcXHRmb3IgKGsgPSAwOyBrIFxcdTAwM2M9IChCSVQobnJfZml4ZWRfY291bnRlcnMpIC0gMSk7IGsrKylcXG4tXFx0XFx0XFx0XFx0XFx0dGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGosIGspO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldKTtcXG4rXFx0XFx0XFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pO1xcbitcXHRcXHRcXHR0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIwOjUyOjQ2Ljk2NTU3NzcyMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcyNTkwMzQ4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0IHByb2dyYW1zIGFuZCBkbyBub3QgY2hhbmdlIGFueSBrZXJuZWwgbG9naWMgdG8gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjEzOGZmNmE5NGJiNTc4MzdiYWFkNzIxY2M3YjhiZTk0MjUxN2YwYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMjA6NTI6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5pbmRleCBlODM1NmVlNTRkN2I5Li5hNmEzZTE2NTc4OTU5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5AQCAtMTM1LDggKzEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9yYW5kb21fdTY0KHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgXHUwMDNjXHUwMDNjIDMyKSB8IGt2bV9yYW5kb21fdTMyKHN0YXRlKTtcbiB9XG4gXG4tdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbi1cdFx0XHQgICAgdTY0IG1heCk7XG4rdTMyIGt2bV9yYW5kb21fdTMyX2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTMyIG1pbiwgdTMyIG1heCk7XG4rdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heCk7XG4gXG4gZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSB7XG4gXHRWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuY1xuaW5kZXggNmIwMGFiMTFmM2MwMi4uNGRmZjcyZjZiZDM0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcbkBAIC00MywxMiArNDMsMjYgQEAgdTMyIGt2bV9yYW5kb21fdTMyKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiBcdHJldHVybiBzdGF0ZS1cdTAwM2VzZWVkO1xuIH1cbiBcbisvKiBSZXR1cm5zIGEgcmFuZG9tIHUzMiBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFttaW4sIG1heF0gKi9cbit1MzIga3ZtX3JhbmRvbV91MzJfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1MzIgbWluLCB1MzIgbWF4KVxuK3tcbitcdHUzMiB2YWx1ZSwgcmFuZ2U7XG4rXG4rXHRURVNUX0FTU0VSVChtaW4gXHUwMDNjPSBtYXgsIFwiUEVCS0FDLCBtaW4gPSAweCV4LCBtYXggPSAweCV4XCIsIG1pbiwgbWF4KTtcbitcbitcdHZhbHVlID0ga3ZtX3JhbmRvbV91MzIoc3RhdGUpO1xuK1xuK1x0cmFuZ2UgPSBtYXggLSBtaW47XG4rXHRpZiAocmFuZ2UgPT0gVUlOVF9NQVgpXG4rXHRcdHJldHVybiB2YWx1ZTtcbitcbitcdHJldHVybiBtaW4gKyAodmFsdWUgJSAocmFuZ2UgKyAxKSk7XG4rfVxuK1xuIC8qIFJldHVybnMgYSByYW5kb20gdTY0IGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgW21pbiwgbWF4XSAqL1xuLXU2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sXG4tXHRcdFx0ICAgIHU2NCBtYXgpXG4rdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbiwgdTY0IG1heClcbiB7XG4tXHR1NjQgdmFsdWU7XG4tXHR1NjQgcmFuZ2U7XG4rXHR1NjQgdmFsdWUsIHJhbmdlO1xuIFxuIFx0VEVTVF9BU1NFUlQobWluIFx1MDAzYz0gbWF4LCBcIlBFQktBQywgbWluID0gMHglbHgsIG1heCA9IDB4JWx4XCIsIG1pbiwgbWF4KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbmluZGV4IGRjNmFmYWMzYWE5MTkuLmM3YzU2NjIyMDM4MTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuQEAgLTg3LDE0ICs4NywxOCBAQCBzdGF0aWMgc3RydWN0IGt2bV9pbnRlbF9wbXVfZXZlbnQgaW50ZWxfZXZlbnRfdG9fZmVhdHVyZSh1OCBpZHgpXG4gXHRyZXR1cm4gX19pbnRlbF9ldmVudF90b19mZWF0dXJlW2lkeF07XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSxcbi1cdFx0XHRcdFx0XHQgIHZvaWQgKmd1ZXN0X2NvZGUsXG4tXHRcdFx0XHRcdFx0ICB1OCBwbXVfdmVyc2lvbixcbi1cdFx0XHRcdFx0XHQgIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcbitzdGF0aWMgc3RydWN0IGt2bV92bSAqcG11X3ZtX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBucl92Y3B1cywgdm9pZCAqZ3Vlc3RfY29kZSxcbitcdFx0XHRcdFx0ICAgICAgIHU4IHBtdV92ZXJzaW9uLFxuK1x0XHRcdFx0XHQgICAgICAgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuK1x0XHRcdFx0XHQgICAgICAgc3RydWN0IGt2bV92Y3B1ICoqX192Y3B1c1tdKVxuIHtcbitcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzID0gY2FsbG9jKG5yX3ZjcHVzLCBzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSk7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBpO1xuIFxuLVx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBndWVzdF9jb2RlKTtcbitcdCpfX3ZjcHVzID0gdmNwdXM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX3ZjcHVzKG5yX3ZjcHVzLCBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwga3ZtX3BtdV92ZXJzaW9uKTtcbiBcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBoYXJkd2FyZV9wbXVfYXJjaF9ldmVudHMpO1xuIFxuQEAgLTEwMiwxMyArMTA2LDIyIEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSxcbiBcdCAqIFNldCBQRVJGX0NBUEFCSUxJVElFUyBiZWZvcmUgUE1VIHZlcnNpb24gYXMgS1ZNIGRpc2FsbG93cyBlbmFibGluZ1xuIFx0ICogZmVhdHVyZXMgdmlhIFBFUkZfQ0FQQUJJTElUSUVTIGlmIHRoZSBndWVzdCBkb2Vzbid0IGhhdmUgYSB2UE1VLlxuIFx0ICovXG4tXHRpZiAoa3ZtX2hhc19wZXJmX2NhcHMpXG4tXHRcdHZjcHVfc2V0X21zcigqdmNwdSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspIHtcbitcdFx0aWYgKGt2bV9oYXNfcGVyZl9jYXBzKVxuK1x0XHRcdHZjcHVfc2V0X21zcih2Y3B1c1tpXSwgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMsIHBlcmZfY2FwYWJpbGl0aWVzKTtcbitcbitcdFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdXNbaV0sIFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTiwgcG11X3ZlcnNpb24pO1xuK1x0fVxuIFxuLVx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkoKnZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfVkVSU0lPTiwgcG11X3ZlcnNpb24pO1xuIFx0cmV0dXJuIHZtO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBwbXVfdm1fZnJlZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXMpXG4re1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK1x0ZnJlZSh2Y3B1cyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgdWNhbGwgdWM7XG5AQCAtMjczLDYgKzI4Niw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXG4gXHRzdHJ1Y3Qga3ZtX3g4Nl9wbXVfZmVhdHVyZSBncF9ldmVudCwgZml4ZWRfZXZlbnQ7XG4gXHR1MzIgYmFzZV9wbWNfbXNyO1xuIFx0dW5zaWduZWQgaW50IGk7XG4rXHR1NjQgZXZlbnRzZWw7XG4gXG4gXHQvKiBUaGUgaG9zdCBzaWRlIHNob3VsZG4ndCBpbnZva2UgdGhpcyB3aXRob3V0IGEgZ3Vlc3QgUE1VLiAqL1xuIFx0R1VFU1RfQVNTRVJUKHBtdV92ZXJzaW9uKTtcbkBAIC0yODcsMTkgKzMwMSwxNiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KVxuIFx0R1VFU1RfQVNTRVJUX0VRKGlkeCwgZ3BfZXZlbnQuZi5iaXQpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKG5yX2dwX2NvdW50ZXJzKTtcbitcdGkgPSBrdm1fcmFuZG9tX3UzMl9pbl9yYW5nZShcdTAwMjZrdm1fcm5nLCAwLCBucl9ncF9jb3VudGVycyAtIDEpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZ3BfY291bnRlcnM7IGkrKykge1xuLVx0XHR1NjQgZXZlbnRzZWwgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MgfFxuLVx0XHRcdFx0ICAgIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9FTkFCTEUgfFxuLVx0XHRcdFx0ICAgIGludGVsX3BtdV9hcmNoX2V2ZW50c1tpZHhdO1xuK1x0ZXZlbnRzZWwgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MgfCBBUkNIX1BFUkZNT05fRVZFTlRTRUxfRU5BQkxFIHxcbitcdFx0ICAgaW50ZWxfcG11X2FyY2hfZXZlbnRzW2lkeF07XG4gXG4tXHRcdHdybXNyKE1TUl9QNl9FVk5UU0VMMCArIGksIDApO1xuLVx0XHRpZiAoZ3Vlc3RfaGFzX3BlcmZfZ2xvYmFsX2N0cmwpXG4tXHRcdFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7XG4rXHR3cm1zcihNU1JfUDZfRVZOVFNFTDAgKyBpLCAwKTtcbitcdGlmIChndWVzdF9oYXNfcGVyZl9nbG9iYWxfY3RybClcbitcdFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgQklUX1VMTChpKSk7XG4gXG4tXHRcdF9fZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGlkeCwgaSwgYmFzZV9wbWNfbXNyICsgaSxcbi1cdFx0XHRcdFx0TVNSX1A2X0VWTlRTRUwwICsgaSwgZXZlbnRzZWwpO1xuLVx0fVxuK1x0X19ndWVzdF90ZXN0X2FyY2hfZXZlbnQoaWR4LCBpLCBiYXNlX3BtY19tc3IgKyBpLCBNU1JfUDZfRVZOVFNFTDAgKyBpLCBldmVudHNlbCk7XG4gXG4gXHRpZiAoIWd1ZXN0X2hhc19wZXJmX2dsb2JhbF9jdHJsKVxuIFx0XHRyZXR1cm47XG5AQCAtMzI4LDMwICszMzksNzIgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXG4tXHRcdFx0ICAgICB1OCBsZW5ndGgsIHUzMiB1bmF2YWlsYWJsZV9tYXNrKVxuK3N0YXRpYyB2b2lkIF9fdGVzdF9hcmNoX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbitcdFx0XHQgICAgICAgdTggbGVuZ3RoLCB1MzIgdW5hdmFpbGFibGVfbWFzaylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cbi1cdC8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqL1xuLVx0aWYgKCFwbXVfdmVyc2lvbilcbi1cdFx0cmV0dXJuO1xuLVxuIFx0dW5hdmFpbGFibGVfbWFzayBcdTAwMjY9IEdFTk1BU0soWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5oaV9iaXQsXG4gXHRcdFx0XHQgICAgWDg2X1BST1BFUlRZX1BNVV9FVkVOVFNfTUFTSy5sb19iaXQpO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4tXG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VCWF9CSVRfVkVDVE9SX0xFTkdUSCxcbiBcdFx0XHRcdGxlbmd0aCk7XG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0VWRU5UU19NQVNLLFxuIFx0XHRcdFx0dW5hdmFpbGFibGVfbWFzayk7XG4gXG4gXHRydW5fdmNwdSh2Y3B1KTtcbit9XG4gXG4tXHRrdm1fdm1fZnJlZSh2bSk7XG4rc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxuK3tcbitcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzO1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRpbnQgaSA9IDA7XG4rXHR1MzIgaztcbitcdHU4IGo7XG4rXG4rXHQvKlxuK1x0ICogVG8ga2VlcCB0aGUgdG90YWwgcnVudGltZSByZWFzb25hYmxlLCB0ZXN0IG9ubHkgYSBoYW5kZnVsIG9mIHNlbGVjdCxcbitcdCAqIHNlbWktYXJiaXRyYXJ5IHZhbHVlcyBmb3IgdGhlIG1hc2sgb2YgdW5hdmFpbGFibGUgUE1VIGV2ZW50cy4gIFRlc3RcbitcdCAqIDAgKGFsbCBldmVudHMgYXZhaWxhYmxlKSBhbmQgYWxsIG9uZXMgKG5vIGV2ZW50cyBhdmFpbGFibGUpIGFzIHdlbGxcbitcdCAqIGFzIGFsdGVybmF0aW5nIGJpdCBzZXF1ZW5jdWVzLCBlLmcuIHRvIGRldGVjdCBpZiBLVk0gaXMgY2hlY2tpbmcgdGhlXG4rXHQgKiB3cm9uZyBiaXQocykuXG4rXHQgKi9cbitcdGNvbnN0IHUzMiB1bmF2YWlsYWJsZV9tYXNrc1tdID0ge1xuK1x0XHQweDAsXG4rXHRcdDB4ZmZmZmZmZmZ1LFxuK1x0XHQweGFhYWFhYWFhdSxcbitcdFx0MHg1NTU1NTU1NXUsXG4rXHRcdDB4ZjBmMGYwZjB1LFxuK1x0XHQweDBmMGYwZjBmdSxcbitcdFx0MHhhMGEwYTBhMHUsXG4rXHRcdDB4MGEwYTBhMGF1LFxuK1x0XHQweDUwNTA1MDUwdSxcbitcdFx0MHgwNTA1MDUwNXUsXG4rXHR9O1xuK1xuK1x0cHJfaW5mbyhcIlRlc3RpbmcgYXJjaCBldmVudHMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXG5cIixcbitcdFx0cG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbitcbitcdC8qIFRlc3RpbmcgYXJjaCBldmVudHMgcmVxdWlyZXMgYSB2UE1VICh0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdGVzdHMpLiAqL1xuK1x0aWYgKCFwbXVfdmVyc2lvbilcbitcdFx0cmV0dXJuO1xuK1xuK1x0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfdmNwdXMoKE5SX0lOVEVMX0FSQ0hfRVZFTlRTICsgMikgKiBBUlJBWV9TSVpFKHVuYXZhaWxhYmxlX21hc2tzKSxcbitcdFx0XHRcdCAgICAgIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHMsIHBtdV92ZXJzaW9uLFxuK1x0XHRcdFx0ICAgICAgcGVyZl9jYXBhYmlsaXRpZXMsIFx1MDAyNnZjcHVzKTtcbitcbitcdC8qXG4rXHQgKiBUZXN0IHNpbmdsZSBiaXRzIGZvciBhbGwgUE1VIHZlcnNpb24gYW5kIGxlbmd0aHMgdXAgdGhlIG51bWJlciBvZlxuK1x0ICogZXZlbnRzICsxICh0byB2ZXJpZnkgS1ZNIGRvZXNuJ3QgZG8gd2VpcmQgdGhpbmdzIGlmIHRoZSBndWVzdCBsZW5ndGhcbitcdCAqIGlzIGdyZWF0ZXIgdGhhbiB0aGUgaG9zdCBsZW5ndGgpLiAgRXhwbGljaXRseSB0ZXN0IGEgbWFzayBvZiAnMCcgYW5kXG4rXHQgKiBhbGwgb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS5cbitcdCAqL1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2M9IE5SX0lOVEVMX0FSQ0hfRVZFTlRTICsgMTsgaisrKSB7XG4rXHRcdGZvciAoayA9IDE7IGsgXHUwMDNjIEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrKyspXG4rXHRcdFx0X190ZXN0X2FyY2hfZXZlbnRzKHZjcHVzW2krK10sIHBlcmZfY2FwYWJpbGl0aWVzLCBqLFxuK1x0XHRcdFx0XHQgICB1bmF2YWlsYWJsZV9tYXNrc1trXSk7XG4rXHR9XG4rXG4rXHRwbXVfdm1fZnJlZSh2bSwgdmNwdXMpO1xuIH1cbiBcbiAvKlxuQEAgLTQ5NSwyMSArNTQ4LDI3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnModm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuLVx0XHRcdCAgICAgdTggbnJfZ3BfY291bnRlcnMpXG4rc3RhdGljIHZvaWQgdGVzdF9ncF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqKnZjcHVzO1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4rXHR1OCBqO1xuIFxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9ncF9jb3VudGVycyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4rXHRwcl9pbmZvKFwiVGVzdGluZyAldSBHUCBjb3VudGVycywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwiLFxuK1x0XHRucl9ncF9jb3VudGVycywgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzKTtcbiBcbi1cdHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHZjcHUsIFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMsXG4tXHRcdFx0XHRucl9ncF9jb3VudGVycyk7XG4rXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cyhucl9ncF9jb3VudGVycyArIDEsIGd1ZXN0X3Rlc3RfZ3BfY291bnRlcnMsXG4rXHRcdFx0XHQgICAgICBwbXVfdmVyc2lvbiwgcGVyZl9jYXBhYmlsaXRpZXMsIFx1MDAyNnZjcHVzKTtcbiBcbi1cdHJ1bl92Y3B1KHZjcHUpO1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2M9IG5yX2dwX2NvdW50ZXJzOyBqKyspIHtcbitcdFx0dmNwdV9zZXRfY3B1aWRfcHJvcGVydHkodmNwdXNbal0sIFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMsXG4rXHRcdFx0XHRcdG5yX2dwX2NvdW50ZXJzKTtcbiBcbi1cdGt2bV92bV9mcmVlKHZtKTtcbitcdFx0cnVuX3ZjcHUodmNwdXNbal0pO1xuK1x0fVxuK1xuK1x0cG11X3ZtX2ZyZWUodm0sIHZjcHVzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyh2b2lkKVxuQEAgLTU2MSw1OSArNjIwLDUzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfZml4ZWRfY291bnRlcnModm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVycyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuLVx0XHRcdFx0dTggbnJfZml4ZWRfY291bnRlcnMsIHUzMiBzdXBwb3J0ZWRfYml0bWFzaylcbitzdGF0aWMgdm9pZCBfX3Rlc3RfZml4ZWRfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBucl9maXhlZF9jb3VudGVycyxcbitcdFx0XHRcdCAgdTMyIHN1cHBvcnRlZF9iaXRtYXNrKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi1cdHN0cnVjdCBrdm1fdm0gKnZtO1xuLVxuLVx0dm0gPSBwbXVfdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfdGVzdF9maXhlZF9jb3VudGVycyxcbi1cdFx0XHRcdFx0IHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4tXG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX0ZJWEVEX0NPVU5URVJTX0JJVE1BU0ssXG4gXHRcdFx0XHRzdXBwb3J0ZWRfYml0bWFzayk7XG4gXHR2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eSh2Y3B1LCBYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTLFxuIFx0XHRcdFx0bnJfZml4ZWRfY291bnRlcnMpO1xuIFxuIFx0cnVuX3ZjcHUodmNwdSk7XG4rfVxuIFxuLVx0a3ZtX3ZtX2ZyZWUodm0pO1xuK3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcylcbit7XG4rXHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1cztcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0aW50IGkgPSAwO1xuK1x0dTMyIGs7XG4rXHR1OCBqO1xuK1xuK1x0cHJfaW5mbyhcIlRlc3RpbmcgJXUgZml4ZWQgY291bnRlcnMsIFBNVSB2ZXJzaW9uICV1LCBwZXJmX2NhcHMgPSAlbHhcXG5cIixcbitcdFx0bnJfZml4ZWRfY291bnRlcnMsIHBtdV92ZXJzaW9uLCBwZXJmX2NhcGFiaWxpdGllcyk7XG4rXG4rXG4rXHR2bSA9IHBtdV92bV9jcmVhdGVfd2l0aF92Y3B1cygobnJfZml4ZWRfY291bnRlcnMgKyAxKSAqIEJJVChucl9maXhlZF9jb3VudGVycyksXG4rXHRcdFx0XHQgICAgICBndWVzdF90ZXN0X2ZpeGVkX2NvdW50ZXJzLFxuK1x0XHRcdFx0ICAgICAgcG11X3ZlcnNpb24sIHBlcmZfY2FwYWJpbGl0aWVzLCBcdTAwMjZ2Y3B1cyk7XG4rXG4rXHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gbnJfZml4ZWRfY291bnRlcnM7IGorKykge1xuK1x0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYz0gKEJJVChucl9maXhlZF9jb3VudGVycykgLSAxKTsgaysrKVxuK1x0XHRcdF9fdGVzdF9maXhlZF9jb3VudGVycyh2Y3B1c1tpKytdLCBqLCBrKTtcbitcdH1cbitcbitcdHBtdV92bV9mcmVlKHZtLCB2Y3B1cyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcbiB7XG4tXHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XG4tXHR1OCBucl9ncF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyk7XG4gXHR1OCBwbXVfdmVyc2lvbiA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OKTtcbiBcdHVuc2lnbmVkIGludCBpO1xuLVx0dTggdiwgajtcbi1cdHUzMiBrO1xuK1x0dTggdjtcbiBcbiBcdGNvbnN0IHU2NCBwZXJmX2NhcHNbXSA9IHtcbiBcdFx0MCxcbiBcdFx0UE1VX0NBUF9GV19XUklURVMsXG4gXHR9O1xuIFxuLVx0Lypcbi1cdCAqIFRvIGtlZXAgdGhlIHRvdGFsIHJ1bnRpbWUgcmVhc29uYWJsZSwgdGVzdCBvbmx5IGEgaGFuZGZ1bCBvZiBzZWxlY3QsXG4tXHQgKiBzZW1pLWFyYml0cmFyeSB2YWx1ZXMgZm9yIHRoZSBtYXNrIG9mIHVuYXZhaWxhYmxlIFBNVSBldmVudHMuICBUZXN0XG4tXHQgKiAwIChhbGwgZXZlbnRzIGF2YWlsYWJsZSkgYW5kIGFsbCBvbmVzIChubyBldmVudHMgYXZhaWxhYmxlKSBhcyB3ZWxsXG4tXHQgKiBhcyBhbHRlcm5hdGluZyBiaXQgc2VxdWVuY3VlcywgZS5nLiB0byBkZXRlY3QgaWYgS1ZNIGlzIGNoZWNraW5nIHRoZVxuLVx0ICogd3JvbmcgYml0KHMpLlxuLVx0ICovXG4tXHRjb25zdCB1MzIgdW5hdmFpbGFibGVfbWFza3NbXSA9IHtcbi1cdFx0MHgwLFxuLVx0XHQweGZmZmZmZmZmdSxcbi1cdFx0MHhhYWFhYWFhYXUsXG4tXHRcdDB4NTU1NTU1NTV1LFxuLVx0XHQweGYwZjBmMGYwdSxcbi1cdFx0MHgwZjBmMGYwZnUsXG4tXHRcdDB4YTBhMGEwYTB1LFxuLVx0XHQweDBhMGEwYTBhdSxcbi1cdFx0MHg1MDUwNTA1MHUsXG4tXHRcdDB4MDUwNTA1MDV1LFxuLVx0fTtcbi1cbiBcdC8qXG4gXHQgKiBUZXN0IHVwIHRvIFBNVSB2NSwgd2hpY2ggaXMgdGhlIGN1cnJlbnQgbWF4aW11bSB2ZXJzaW9uIGRlZmluZWQgYnlcbiBcdCAqIEludGVsLCBpLmUuIGlzIHRoZSBsYXN0IHZlcnNpb24gdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGJhY2t3YXJkc1xuQEAgLTY0OSwzMiArNzAyLDkgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKVxuIFx0XHRcdGlmICgha3ZtX2hhc19wZXJmX2NhcHMgXHUwMDI2XHUwMDI2IHBlcmZfY2Fwc1tpXSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdHByX2luZm8oXCJUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4tXHRcdFx0XHR2LCBwZXJmX2NhcHNbaV0pO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVGVzdCBzaW5nbGUgYml0cyBmb3IgYWxsIFBNVSB2ZXJzaW9uIGFuZCBsZW5ndGhzIHVwXG4tXHRcdFx0ICogdGhlIG51bWJlciBvZiBldmVudHMgKzEgKHRvIHZlcmlmeSBLVk0gZG9lc24ndCBkb1xuLVx0XHRcdCAqIHdlaXJkIHRoaW5ncyBpZiB0aGUgZ3Vlc3QgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGVcbi1cdFx0XHQgKiBob3N0IGxlbmd0aCkuICBFeHBsaWNpdGx5IHRlc3QgYSBtYXNrIG9mICcwJyBhbmQgYWxsXG4tXHRcdFx0ICogb25lcyBpLmUuIGFsbCBldmVudHMgYmVpbmcgYXZhaWxhYmxlIGFuZCB1bmF2YWlsYWJsZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYz0gTlJfSU5URUxfQVJDSF9FVkVOVFMgKyAxOyBqKyspIHtcbi1cdFx0XHRcdGZvciAoayA9IDE7IGsgXHUwMDNjIEFSUkFZX1NJWkUodW5hdmFpbGFibGVfbWFza3MpOyBrKyspXG4tXHRcdFx0XHRcdHRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldLCBqLCB1bmF2YWlsYWJsZV9tYXNrc1trXSk7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdHByX2luZm8oXCJUZXN0aW5nIEdQIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4tXHRcdFx0XHR2LCBwZXJmX2NhcHNbaV0pO1xuLVx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjPSBucl9ncF9jb3VudGVyczsgaisrKVxuLVx0XHRcdFx0dGVzdF9ncF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0sIGopO1xuLVxuLVx0XHRcdHByX2luZm8oXCJUZXN0aW5nIGZpeGVkIGNvdW50ZXJzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4tXHRcdFx0XHR2LCBwZXJmX2NhcHNbaV0pO1xuLVx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjPSBucl9maXhlZF9jb3VudGVyczsgaisrKSB7XG4tXHRcdFx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYz0gKEJJVChucl9maXhlZF9jb3VudGVycykgLSAxKTsgaysrKVxuLVx0XHRcdFx0XHR0ZXN0X2ZpeGVkX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSwgaiwgayk7XG4tXHRcdFx0fVxuK1x0XHRcdHRlc3RfYXJjaF9ldmVudHModiwgcGVyZl9jYXBzW2ldKTtcbitcdFx0XHR0ZXN0X2dwX2NvdW50ZXJzKHYsIHBlcmZfY2Fwc1tpXSk7XG4rXHRcdFx0dGVzdF9maXhlZF9jb3VudGVycyh2LCBwZXJmX2NhcHNbaV0pO1xuIFx0XHR9XG4gXHR9XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjA6NTI6NDYuOTY1NTc5NDQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI1OTAwOTYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb246IE5vKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBhIGZldyBmaWxlczogYHRlc3RfdXRpbC5oYCwgYHRlc3RfdXRpbC5jYCwgYW5kIGBwbXVfY291bnRlcnNfdGVzdC5jYCwgYWxsIG5lc3RsZWQgd2l0aGluIHRoZSBLVk0gc2VsZnRlc3RzIGRpcmVjdG9yeS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgYWNjaWRlbnRhbGx5IGxlYWsgaW50byBrZXJuZWwgc3BhY2UuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIGRpZmYgY29uZmlybXMgdGhhdCBpdCdzIGFsbCBzdGF5aW5nIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AuIFRoYXQncyBnb29kLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHRoZSBmdXp6aW5nIGltcGxpY2F0aW9ucy4gVGhlIHByb21wdCBwcm92aWRlcyBzb21lIGd1aWRhbmNlLiBJdCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IG1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIFBDSSBzd2l0Y2ggY29kZSwgYW5kIGRyaXZlciBgLnJlbW92ZWAgZnVuY3Rpb25zIGFzIHJlYXNvbnMgZm9yIG5vdCBmdXp6aW5nLiBXaGlsZSBpdCBkb2Vzbid0IGV4cGxpY2l0bHkgbWVudGlvbiBzZWxmdGVzdHMsIEknbSBpbnRlcnByZXRpbmcgdGhhdCBzZWxmdGVzdHMsIGJlaW5nICp1c2VyLXNwYWNlIHByb2dyYW1zKiBkZXNpZ25lZCB0byB2YWxpZGF0ZSBrZXJuZWwgYmVoYXZpb3IsIGFyZW4ndCBrZXJuZWwgKmNvZGUqIGFuZCB0aGVyZWZvcmUgYXJlbid0IHdoYXQgd2UncmUgYWltaW5nIHRvIGZ1enouIFdlIHdhbnQgdG8gZnV6eiB0aGUgKmtlcm5lbCogaXRzZWxmLCB0aGUgY29yZSBleGVjdXRpb24gbG9naWMuIFRoaXMgcGF0Y2gsIGNvbmZpbmVkIHRvIHNlbGZ0ZXN0cywgd29uJ3QgYWZmZWN0IHRoYXQuXG5cbkknbSBkb2luZyBhIGRvdWJsZSBjaGVjaywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgSSBjYW4gY29uZmlybSB0aGF0IHRoZXJlJ3Mgbm8ga2VybmVsIGNvZGUgaW4gdGhpcyBkaWZmLlxuXG5TbywgSSdtIGdvaW5nIHRvIHNldCB0aGUgcmVzdWx0IHRvIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBNeSByZWFzb25pbmcgd2lsbCBiZSBjb25jaXNlOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0IHByb2dyYW1zIGFuZCBkbyBub3QgY2hhbmdlIGFueSBrZXJuZWwgbG9naWMgdG8gYmUgZnV6emVkLlwiXG5cbkknbGwgcXVpY2tseSByZXZpZXcgdGhlIGRpZmYgb25lIG1vcmUgdGltZSB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4uLk5vcGUsIGp1c3QgdGhlIHNlbGZ0ZXN0cy5cblxuQWxsIHJpZ2h0LCBzZXR0aW5nIHRoZSByZXN1bHQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzM5LCJPdXRwdXRUb2tlbnMiOjcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjA6NTI6NTQuMjI0NTkxNzA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdCBwcm9ncmFtcyBhbmQgZG8gbm90IGNoYW5nZSBhbnkga2VybmVsIGxvZ2ljIHRvIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0IHByb2dyYW1zIGFuZCBkbyBub3QgY2hhbmdlIGFueSBrZXJuZWwgbG9naWMgdG8gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowlrq8n[1] Phase: Running StartedAt: 2026-08-04 20:53:04 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrq8n[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-04 20:53:04 +0000 UTC FinishedAt: 2026-08-04 20:53:08 +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,}