Name: series-workflowwkhds Phase: Failed StartedAt: 2026-09-15 15:58:14 +0000 UTC FinishedAt: 2026-09-15 17:03:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkhds[0] Phase: Succeeded StartedAt: 2026-09-15 15:58:14 +0000 UTC FinishedAt: 2026-09-15 17:03:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkhds[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 15:58:14 +0000 UTC FinishedAt: 2026-09-15 17:03:01 +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+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NDZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7JiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSBjb2RlIHdpdGhpbiB0b29scy9saWIvYnBmIChsaWJicGYgbGlicmFyeSkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZiAoc2VsZnRlc3RzKS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSBvciBhbnkga2VybmVsIG1vZHVsZXMsIHNvIGl0IGlzIG5vdCBhcHBsaWNhYmxlIGZvciBzeXprYWxsZXIga2VybmVsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWMyNmU4YzE0MmY0NmZkNzEwNDE5ZTBkYjg4MzBkZTkyY2QyNmE5NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDE2OjE2OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5pbmRleCBjMDM2ZThhOTFlZDg4Li5hNzcxMTVlMWIxNzE1IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuQEAgLTc1MSw2ICYjNDM7NzUxLDggQEAgc3RydWN0IGJwZl9vYmplY3Qge1xuIFx0Ym9vbCBidGZfbW9kdWxlc19sb2FkZWQ7XG4gXHRzaXplX3QgYnRmX21vZHVsZV9jbnQ7XG4gXHRzaXplX3QgYnRmX21vZHVsZV9jYXA7XG4mIzQzO1x0Y2hhciAqKmJ0Zl9tb2R1bGVfYWxsb3dsaXN0O1xuJiM0MztcdHNzaXplX3QgYnRmX21vZHVsZV9hbGxvd2xpc3RfY250O1xuIFxuIFx0Lyogb3B0aW9uYWwgbG9nIHNldHRpbmdzIHBhc3NlZCB0byBCUEZfQlRGX0xPQUQgYW5kIEJQRl9QUk9HX0xPQUQgY29tbWFuZHMgKi9cbiBcdGNoYXIgKmxvZ19idWY7XG5AQCAtNTg1MSw2ICYjNDM7NTg1MywyMSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBpc19idGZfbW9kX2FsbG93ZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHNzaXplX3QgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChzdHJjbXAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0W2ldLCBuYW1lKSA9PSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiB7XG4gXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XG5AQCAtNTg3Myw2ICYjNDM7NTg5MCw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0aWYgKCFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX01PRFVMRV9CVEYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRpZiAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0ZXJyID0gYnBmX2J0Zl9nZXRfbmV4dF9pZChpZCwgXHUwMDI2aWQpO1xuIFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTk9FTlQpXG5AQCAtNTkxNSw2ICYjNDM7NTkzNSwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKCFpc19idGZfbW9kX2FsbG93ZWQob2JqLCBuYW1lKSkge1xuJiM0MztcdFx0XHRjbG9zZShmZCk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0YnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuIFx0XHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XG4gXHRcdGlmIChlcnIpIHtcbkBAIC01OTM5LDYgJiM0Mzs1OTY0LDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRpZiAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9PSBvYmotXHUwMDNlYnRmX21vZHVsZV9jbnQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKGVycikge1xuQEAgLTg0ODEsNiAmIzQzOzg1MDksOCBAQCBzdGF0aWMgc3RydWN0IGJwZl9vYmplY3QgKmJwZl9vYmplY3Rfb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB2b2lkICpvYmpfYnVmLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyAqb3B0cylcbiB7XG4gXHRjb25zdCBjaGFyICprY29uZmlnLCAqYnRmX3RtcF9wYXRoLCAqdG9rZW5fcGF0aDtcbiYjNDM7XHRzaXplX3QgbW9kX2FsbG93X2NudCwgaSwgajtcbiYjNDM7XHRjb25zdCBjaGFyICoqbW9kX2FsbG93O1xuIFx0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbiBcdGludCBlcnI7XG4gXHRjaGFyICpsb2dfYnVmO1xuQEAgLTg1MjUsNiAmIzQzOzg1NTUsMjIgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcbiBcdGlmICh0b2tlbl9wYXRoIFx1MDAyNlx1MDAyNiBzdHJsZW4odG9rZW5fcGF0aCkgXHUwMDNlPSBQQVRIX01BWClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7XG4gXG4mIzQzO1x0bW9kX2FsbG93ID0gT1BUU19HRVQob3B0cywgYnRmX21vZHVsZV9hbGxvd2xpc3QsIE5VTEwpO1xuJiM0MztcdG1vZF9hbGxvd19jbnQgPSBPUFRTX0dFVChvcHRzLCBidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQsIDApO1xuJiM0MztcbiYjNDM7XHRpZiAobW9kX2FsbG93X2NudCBcdTAwM2UgU1NJWkVfTUFYIHx8ICghbW9kX2FsbG93IFx1MDAyNlx1MDAyNiBtb2RfYWxsb3dfY250IFx1MDAzZSAwKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtb2RfYWxsb3dfY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFtb2RfYWxsb3dbaV0gfHwgIW1vZF9hbGxvd1tpXVswXSlcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHN0cmNtcChtb2RfYWxsb3dbaV0sIG1vZF9hbGxvd1tqXSkgPT0gMClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0b2JqID0gYnBmX29iamVjdF9fbmV3KHBhdGgsIG9ial9idWYsIG9ial9idWZfc3osIG9ial9uYW1lKTtcbiBcdGlmIChJU19FUlIob2JqKSlcbiBcdFx0cmV0dXJuIG9iajtcbkBAIC04NTYzLDYgJiM0Mzs4NjA5LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID0gbW9kX2FsbG93ID8gbW9kX2FsbG93X2NudCA6IC0xO1xuJiM0MztcdGlmIChtb2RfYWxsb3dfY250IFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3QgPVxuJiM0MztcdFx0XHRjYWxsb2MobW9kX2FsbG93X2NudCwgc2l6ZW9mKCpvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3QpKTtcbiYjNDM7XHRcdGlmICghb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1vZF9hbGxvd19jbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdFtpXSA9IHN0cmR1cChtb2RfYWxsb3dbaV0pO1xuJiM0MztcdFx0XHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdFtpXSkge1xuJiM0MztcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZXJyID0gYnBmX29iamVjdF9fZWxmX2luaXQob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9leHRlcm5zKG9iaik7XG5AQCAtOTY4NCw2ICYjNDM7OTc0OCwxMiBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGNsb3NlKG9iai1cdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlanVtcHRhYmxlX21hcHMpO1xuIFxuJiM0MztcdGlmIChvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3QpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RbaV0pO1xuJiM0MztcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uODk3NjgyNDRkNWQ5ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0yMjQsMTAgJiM0MzsyMjQsMjQgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcbiBcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxuIFx0ICovXG4gXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9wdGlvbmFsIGFsbG93bGlzdCBvZiBrZXJuZWwgbW9kdWxlIG5hbWVzIHdob3NlIEJURnMgbGliYnBmIGlzXG4mIzQzO1x0ICogYWxsb3dlZCB0byBsb2FkLiBUaGUgYWxsb3dsaXN0IGxpbWl0cyB3aGljaCBrZXJuZWwgbW9kdWxlIEJURnMgbGliYnBmXG4mIzQzO1x0ICogd2lsbCBjb25zdWx0IHdoZXJldmVyIG1vZHVsZSBCVEYgbWlnaHQgYmUgbmVlZGVkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogV2hlbiB0aGUgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBleGlzdGluZyBiZWhhdmlvciByZW1haW5zXG4mIzQzO1x0ICogdW5jaGFuZ2VkLiBBbiBleHBsaWNpdGx5IHNwZWNpZmllZCBlbXB0eSBsaXN0IHByZXZlbnRzIGxpYmJwZiBmcm9tXG4mIzQzO1x0ICogY29uc3VsdGluZyBhbnkga2VybmVsIG1vZHVsZSBCVEZzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIGxpc3QgbXVzdCBjb250YWluIHZhbGlkLCBub24tZW1wdHkgbW9kdWxlIG5hbWVzIGFuZCBtdXN0IG5vdFxuJiM0MztcdCAqIGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzIHJldHVybmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGNvbnN0IGNoYXIgKipidGZfbW9kdWxlX2FsbG93bGlzdDtcbiYjNDM7XHRzaXplX3QgYnRmX21vZHVsZV9hbGxvd2xpc3RfY250O1xuIFxuIFx0c2l6ZV90IDowO1xuIH07XG4tI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aFxuJiM0MzsjZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudFxuIFxuIC8qKlxuICAqIEBicmllZiAqKmJwZl9vYmplY3RfX29wZW4oKSoqIGNyZWF0ZXMgYSBicGZfb2JqZWN0IGJ5IG9wZW5pbmdcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX2FsbG93bGlzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9hbGxvd2xpc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjMxODkxMzNlZTU4YjZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmNcbkBAIC0wLDAgJiM0MzsxLDE2MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2J0Zi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0LnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9sb2FkX3dpdGhfbGlzdChjb25zdCBjaGFyICoqbGlzdCwgc2l6ZV90IGNvdW50LFxuJiM0MztcdFx0XHRcdGludCBleHBlY3RlZF9yZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmX21vZHVsZV9hbGxvd2xpc3QgKnNrZWw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5idGZfbW9kdWxlX2FsbG93bGlzdCA9IGxpc3QsXG4mIzQzO1x0XHQuYnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID0gY291bnQsXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuX29wdHNcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZChza2VsKTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCBleHBlY3RlZF9yZXQsIFwmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X19sb2FkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2RlZmF1bHQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidGZfbW9kdWxlX2FsbG93bGlzdCAqc2tlbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRza2VsID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW4oKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7YnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW5cJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZChza2VsKTtcbiYjNDM7XHRBU1NFUlRfT0socmV0LCBcJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX2FsbG93bGlzdF9hbGxvdyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbW9kX2xpc3RbXSA9IHsgXCYjMzQ7YnBmX3Rlc3Rtb2RcJiMzNDsgfTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9sb2FkX3dpdGhfbGlzdChtb2RfbGlzdCwgMSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgbm9uLU5VTEwgYWxsb3dsaXN0IHdpdGggYSBjb3VudCBvZiAwIGV4cGxpY2l0bHkgZGlzYWJsZXMgbW9kdWxlIEJURnMuXG4mIzQzOyAqIFRoZSBwb2ludGVyIG11c3QgYmUgbm9uLU5VTEwgdG8gZGlzdGluZ3Vpc2ggdGhpcyBmcm9tIGFuIHVuc3BlY2lmaWVkXG4mIzQzOyAqIGFsbG93bGlzdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2VtcHR5bGlzdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbW9kX2xpc3RbXSA9IHsgTlVMTCB9O1xuJiM0MztcbiYjNDM7XHR0ZXN0X2xvYWRfd2l0aF9saXN0KG1vZF9saXN0LCAwLCAtRVNSQ0gpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBicGZfdGVzdG1vZCBpcyBub3QgaW4gdGhlIGFsbG93bGlzdCwgc28gaXRzIEJURiBzaG91bGQgbm90IGJlIGxvYWRlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X3NraXB1bmxpc3RlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbW9kX2xpc3RbXSA9IHsgXCYjMzQ7bW9kdWxlX25vbmV4aXN0XCYjMzQ7IH07XG4mIzQzO1x0c3RydWN0IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0ICpza2VsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4mIzQzO1x0XHQuYnRmX21vZHVsZV9hbGxvd2xpc3QgPSBtb2RfbGlzdCxcbiYjNDM7XHRcdC5idGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgPSAxLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dyYW1fX3NldF9hdHRhY2hfdGFyZ2V0KHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9idGZfbW9kdWxlX2FsbG93bGlzdCwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7YnBmX3Rlc3Rtb2Q6YnBmX3Rlc3Rtb2RfZmVudHJ5X3Rlc3QxXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAtRVNSQ0gsIFwmIzM0O2JwZl9wcm9ncmFtX19zZXRfYXR0YWNoX3RhcmdldFwmIzM0Oyk7XG4mIzQzO1x0YnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9pbnB1dChjb25zdCBjaGFyICoqbGlzdCwgc2l6ZV90IGNvdW50LFxuJiM0MztcdFx0XHQgICAgICAgY29uc3QgY2hhciAqdGVzdF9uYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0ICpza2VsO1xuJiM0MztcdGNoYXIgYXNzZXJ0X25hbWVbNjRdO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4mIzQzO1x0XHQuYnRmX21vZHVsZV9hbGxvd2xpc3QgPSBsaXN0LFxuJiM0MztcdFx0LmJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9IGNvdW50LFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGFzc2VydF9uYW1lLCBzaXplb2YoYXNzZXJ0X25hbWUpLCBcJiMzNDslczogb3Blbl9vcHRzXCYjMzQ7LCB0ZXN0X25hbWUpO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdGVyciA9IGVycm5vO1xuJiM0MztcdGlmICghQVNTRVJUX05VTEwoc2tlbCwgYXNzZXJ0X25hbWUpKSB7XG4mIzQzO1x0XHRidGZfbW9kdWxlX2FsbG93bGlzdF9fZGVzdHJveShza2VsKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0c25wcmludGYoYXNzZXJ0X25hbWUsIHNpemVvZihhc3NlcnRfbmFtZSksIFwmIzM0OyVzOiBvcGVuX29wdHMgZXJyXCYjMzQ7LCB0ZXN0X25hbWUpO1xuJiM0MztcdEFTU0VSVF9FUShlcnIsIEVJTlZBTCwgYXNzZXJ0X25hbWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX2FsbG93bGlzdF9pbnZhbGlkaW5wdXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWVzW10gPSB7IE5VTEwgfTtcbiYjNDM7XHRjb25zdCBjaGFyICplbXB0eV9uYW1lc1tdID0geyBcJiMzNDtcJiMzNDsgfTtcbiYjNDM7XHRjb25zdCBjaGFyICpkdXBsaWNhdGVfbmFtZXNbXSA9IHsgXCYjMzQ7YnBmX3Rlc3Rtb2RcJiMzNDssIFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7IH07XG4mIzQzO1xuJiM0MztcdHRlc3RfaW52YWxpZF9pbnB1dChOVUxMLCAxLCBcJiMzNDtudWxsX2xpc3RcJiMzNDspO1xuJiM0MztcdHRlc3RfaW52YWxpZF9pbnB1dChuYW1lcywgMSwgXCYjMzQ7bnVsbF9uYW1lXCYjMzQ7KTtcbiYjNDM7XHR0ZXN0X2ludmFsaWRfaW5wdXQoZW1wdHlfbmFtZXMsIDEsIFwmIzM0O2VtcHR5X25hbWVcJiMzNDspO1xuJiM0MztcdHRlc3RfaW52YWxpZF9pbnB1dChkdXBsaWNhdGVfbmFtZXMsIDIsIFwmIzM0O2R1cGxpY2F0ZV9uYW1lXCYjMzQ7KTtcbiYjNDM7XHR0ZXN0X2ludmFsaWRfaW5wdXQobmFtZXMsIChzaXplX3QpU1NJWkVfTUFYICYjNDM7IDEsIFwmIzM0O2xhcmdlX2NvdW50XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2J0Zl9tb2R1bGVfYWxsb3dsaXN0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmICp2bWxpbnV4X2J0ZiA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGJ0ZiAqbW9kdWxlX2J0ZiA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdGlmICghZW52Lmhhc190ZXN0bW9kKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDogYnBmX3Rlc3Rtb2QgaXMgbm90IGF2YWlsYWJsZVxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dm1saW51eF9idGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTtcbiYjNDM7XHRpZiAoIXZtbGludXhfYnRmKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDogdm1saW51eF9idGYgaXMgbm90IGF2YWlsYWJsZVxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRW5zdXJlIGJwZl90ZXN0bW9kIEJURiBpcyBhdmFpbGFibGUuICovXG4mIzQzO1x0bW9kdWxlX2J0ZiA9IGJ0Zl9fbG9hZF9tb2R1bGVfYnRmKFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7LCB2bWxpbnV4X2J0Zik7XG4mIzQzO1x0aWYgKCFtb2R1bGVfYnRmKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDogYnBmX3Rlc3Rtb2QmIzM5O3MgQlRGIGlzIG5vdCBhdmFpbGFibGVcXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRcdGJ0Zl9fZnJlZSh2bWxpbnV4X2J0Zik7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidGZfX2ZyZWUobW9kdWxlX2J0Zik7XG4mIzQzO1x0YnRmX19mcmVlKHZtbGludXhfYnRmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YnRmX21vZHVsZV9hbGxvd2xpc3RfZGVmYXVsdFwmIzM0OykpXG4mIzQzO1x0XHRidGZfbW9kdWxlX2FsbG93bGlzdF9kZWZhdWx0KCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X2FsbG93XCYjMzQ7KSlcbiYjNDM7XHRcdGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2FsbG93KCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X3NraXB1bmxpc3RlZFwmIzM0OykpXG4mIzQzO1x0XHRidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YnRmX21vZHVsZV9hbGxvd2xpc3RfZW1wdHlsaXN0XCYjMzQ7KSlcbiYjNDM7XHRcdGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2VtcHR5bGlzdCgpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9pbnZhbGlkaW5wdXRcJiMzNDspKVxuJiM0MztcdFx0YnRmX21vZHVsZV9hbGxvd2xpc3RfaW52YWxpZGlucHV0KCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9hbGxvd2xpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX2FsbG93bGlzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmIzYzM4YmVlNzdkNlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmNcbkBAIC0wLDAgJiM0MzsxLDEzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9idGZfbW9kdWxlX2FsbG93bGlzdClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjQ2bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgY29kZSB3aXRoaW4gdG9vbHMvbGliL2JwZiAobGliYnBmIGxpYnJhcnkpIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYgKHNlbGZ0ZXN0cykuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2Ugb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3QgYXBwbGljYWJsZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFjMjZlOGMxNDJmNDZmZDcxMDQxOWUwZGI4ODMwZGU5MmNkMjZhOTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAxNjoxNjowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCmluZGV4IGMwMzZlOGE5MWVkODguLmE3NzExNWUxYjE3MTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwpAQCAtNzUxLDYgJiM0Mzs3NTEsOCBAQCBzdHJ1Y3QgYnBmX29iamVjdCB7CiAJYm9vbCBidGZfbW9kdWxlc19sb2FkZWQ7CiAJc2l6ZV90IGJ0Zl9tb2R1bGVfY250OwogCXNpemVfdCBidGZfbW9kdWxlX2NhcDsKJiM0MzsJY2hhciAqKmJ0Zl9tb2R1bGVfYWxsb3dsaXN0OwomIzQzOwlzc2l6ZV90IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudDsKIAogCS8qIG9wdGlvbmFsIGxvZyBzZXR0aW5ncyBwYXNzZWQgdG8gQlBGX0JURl9MT0FEIGFuZCBCUEZfUFJPR19MT0FEIGNvbW1hbmRzICovCiAJY2hhciAqbG9nX2J1ZjsKQEAgLTU4NTEsNiAmIzQzOzU4NTMsMjEgQEAgaW50IGJwZl9jb3JlX2FkZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY2FuZCAqbG9jYWxfY2FuZCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBib29sIGlzX2J0Zl9tb2RfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJc3NpemVfdCBpOwomIzQzOwomIzQzOwlpZiAob2JqLSZndDtidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBvYmotJmd0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzdHJjbXAob2JqLSZndDtidGZfbW9kdWxlX2FsbG93bGlzdFtpXSwgbmFtZSkgPT0gMCkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IGJwZl9idGZfaW5mbyBpbmZvOwpAQCAtNTg3Myw2ICYjNDM7NTg5MCw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCWlmICgha2VybmVsX3N1cHBvcnRzKG9iaiwgRkVBVF9NT0RVTEVfQlRGKSkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJaWYgKG9iai0mZ3Q7YnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID09IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAl3aGlsZSAodHJ1ZSkgewogCQllcnIgPSBicGZfYnRmX2dldF9uZXh0X2lkKGlkLCAmYW1wO2lkKTsKIAkJaWYgKGVyciAmYW1wOyZhbXA7IGVycm5vID09IEVOT0VOVCkKQEAgLTU5MTUsNiAmIzQzOzU5MzUsMTEgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCQljb250aW51ZTsKIAkJfQogCiYjNDM7CQlpZiAoIWlzX2J0Zl9tb2RfYWxsb3dlZChvYmosIG5hbWUpKSB7CiYjNDM7CQkJY2xvc2UoZmQpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwogCQlidGYgPSBidGZfZ2V0X2Zyb21fZmQoZmQsIG9iai0mZ3Q7YnRmX3ZtbGludXgpOwogCQllcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7CiAJCWlmIChlcnIpIHsKQEAgLTU5MzksNiAmIzQzOzU5NjQsOSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJCWJyZWFrOwogCQl9CiAJCW9iai0mZ3Q7YnRmX21vZHVsZV9jbnQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJaWYgKG9iai0mZ3Q7YnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID09IG9iai0mZ3Q7YnRmX21vZHVsZV9jbnQpCiYjNDM7CQkJYnJlYWs7CiAJfQogCiAJaWYgKGVycikgewpAQCAtODQ4MSw2ICYjNDM7ODUwOSw4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsCiAJCQkJCSAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKQogewogCWNvbnN0IGNoYXIgKmtjb25maWcsICpidGZfdG1wX3BhdGgsICp0b2tlbl9wYXRoOwomIzQzOwlzaXplX3QgbW9kX2FsbG93X2NudCwgaSwgajsKJiM0MzsJY29uc3QgY2hhciAqKm1vZF9hbGxvdzsKIAlzdHJ1Y3QgYnBmX29iamVjdCAqb2JqOwogCWludCBlcnI7CiAJY2hhciAqbG9nX2J1ZjsKQEAgLTg1MjUsNiAmIzQzOzg1NTUsMjIgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZiwKIAlpZiAodG9rZW5fcGF0aCAmYW1wOyZhbXA7IHN0cmxlbih0b2tlbl9wYXRoKSAmZ3Q7PSBQQVRIX01BWCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CiAKJiM0MzsJbW9kX2FsbG93ID0gT1BUU19HRVQob3B0cywgYnRmX21vZHVsZV9hbGxvd2xpc3QsIE5VTEwpOwomIzQzOwltb2RfYWxsb3dfY250ID0gT1BUU19HRVQob3B0cywgYnRmX21vZHVsZV9hbGxvd2xpc3RfY250LCAwKTsKJiM0MzsKJiM0MzsJaWYgKG1vZF9hbGxvd19jbnQgJmd0OyBTU0laRV9NQVggfHwgKCFtb2RfYWxsb3cgJmFtcDsmYW1wOyBtb2RfYWxsb3dfY250ICZndDsgMCkpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1vZF9hbGxvd19jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoIW1vZF9hbGxvd1tpXSB8fCAhbW9kX2FsbG93W2ldWzBdKQomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IGk7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKHN0cmNtcChtb2RfYWxsb3dbaV0sIG1vZF9hbGxvd1tqXSkgPT0gMCkKJiM0MzsJCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlvYmogPSBicGZfb2JqZWN0X19uZXcocGF0aCwgb2JqX2J1Ziwgb2JqX2J1Zl9zeiwgb2JqX25hbWUpOwogCWlmIChJU19FUlIob2JqKSkKIAkJcmV0dXJuIG9iajsKQEAgLTg1NjMsNiAmIzQzOzg2MDksMjQgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZiwKIAkJfQogCX0KIAomIzQzOwlvYmotJmd0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9IG1vZF9hbGxvdyA/IG1vZF9hbGxvd19jbnQgOiAtMTsKJiM0MzsJaWYgKG1vZF9hbGxvd19jbnQgJmd0OyAwKSB7CiYjNDM7CQlvYmotJmd0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0ID0KJiM0MzsJCQljYWxsb2MobW9kX2FsbG93X2NudCwgc2l6ZW9mKCpvYmotJmd0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0KSk7CiYjNDM7CQlpZiAoIW9iai0mZ3Q7YnRmX21vZHVsZV9hbGxvd2xpc3QpIHsKJiM0MzsJCQllcnIgPSAtRU5PTUVNOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG1vZF9hbGxvd19jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJb2JqLSZndDtidGZfbW9kdWxlX2FsbG93bGlzdFtpXSA9IHN0cmR1cChtb2RfYWxsb3dbaV0pOwomIzQzOwkJCWlmICghb2JqLSZndDtidGZfbW9kdWxlX2FsbG93bGlzdFtpXSkgewomIzQzOwkJCQllcnIgPSAtRU5PTUVNOwomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBicGZfb2JqZWN0X19lbGZfaW5pdChvYmopOwogCWVyciA9IGVyciA/IDogYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qob2JqKTsKIAllcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2NvbGxlY3RfZXh0ZXJucyhvYmopOwpAQCAtOTY4NCw2ICYjNDM7OTc0OCwxMiBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCWNsb3NlKG9iai0mZ3Q7anVtcHRhYmxlX21hcHNbaV0uZmQpOwogCXpmcmVlKCZhbXA7b2JqLSZndDtqdW1wdGFibGVfbWFwcyk7CiAKJiM0MzsJaWYgKG9iai0mZ3Q7YnRmX21vZHVsZV9hbGxvd2xpc3QpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBvYmotJmd0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudDsgaSYjNDM7JiM0MzspCiYjNDM7CQkJemZyZWUoJmFtcDtvYmotJmd0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0W2ldKTsKJiM0MzsJCXpmcmVlKCZhbXA7b2JqLSZndDtidGZfbW9kdWxlX2FsbG93bGlzdCk7CiYjNDM7CX0KJiM0MzsKIAlmcmVlKG9iaik7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oCmluZGV4IGI5NjVhZDU3MTU0MDMuLjg5NzY4MjQ0ZDVkOWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuaApAQCAtMjI0LDEwICYjNDM7MjI0LDI0IEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7CiAJICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuCiAJICovCiAJY29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7CiYjNDM7CS8qCiYjNDM7CSAqIE9wdGlvbmFsIGFsbG93bGlzdCBvZiBrZXJuZWwgbW9kdWxlIG5hbWVzIHdob3NlIEJURnMgbGliYnBmIGlzCiYjNDM7CSAqIGFsbG93ZWQgdG8gbG9hZC4gVGhlIGFsbG93bGlzdCBsaW1pdHMgd2hpY2gga2VybmVsIG1vZHVsZSBCVEZzIGxpYmJwZgomIzQzOwkgKiB3aWxsIGNvbnN1bHQgd2hlcmV2ZXIgbW9kdWxlIEJURiBtaWdodCBiZSBuZWVkZWQuCiYjNDM7CSAqCiYjNDM7CSAqIFdoZW4gdGhlIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZXhpc3RpbmcgYmVoYXZpb3IgcmVtYWlucwomIzQzOwkgKiB1bmNoYW5nZWQuIEFuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGVtcHR5IGxpc3QgcHJldmVudHMgbGliYnBmIGZyb20KJiM0MzsJICogY29uc3VsdGluZyBhbnkga2VybmVsIG1vZHVsZSBCVEZzLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgbGlzdCBtdXN0IGNvbnRhaW4gdmFsaWQsIG5vbi1lbXB0eSBtb2R1bGUgbmFtZXMgYW5kIG11c3Qgbm90CiYjNDM7CSAqIGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzIHJldHVybmVkLgomIzQzOwkgKi8KJiM0MzsJY29uc3QgY2hhciAqKmJ0Zl9tb2R1bGVfYWxsb3dsaXN0OwomIzQzOwlzaXplX3QgYnRmX21vZHVsZV9hbGxvd2xpc3RfY250OwogCiAJc2l6ZV90IDowOwogfTsKLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGgKJiM0MzsjZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudAogCiAvKioKICAqIEBicmllZiAqKmJwZl9vYmplY3RfX29wZW4oKSoqIGNyZWF0ZXMgYSBicGZfb2JqZWN0IGJ5IG9wZW5pbmcKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX2FsbG93bGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjMxODkxMzNlZTU4YjYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX2FsbG93bGlzdC5jCkBAIC0wLDAgJiM0MzsxLDE2MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2J0Zi5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnRmX21vZHVsZV9hbGxvd2xpc3Quc2tlbC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2xvYWRfd2l0aF9saXN0KGNvbnN0IGNoYXIgKipsaXN0LCBzaXplX3QgY291bnQsCiYjNDM7CQkJCWludCBleHBlY3RlZF9yZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmX21vZHVsZV9hbGxvd2xpc3QgKnNrZWw7CiYjNDM7CWludCByZXQ7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmJ0Zl9tb2R1bGVfYWxsb3dsaXN0ID0gbGlzdCwKJiM0MzsJCS5idGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgPSBjb3VudCwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7YnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW5fb3B0cyYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmV0ID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX2xvYWQoc2tlbCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIGV4cGVjdGVkX3JldCwgJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZCYjMzQ7KTsKJiM0MzsKJiM0MzsJYnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2RlZmF1bHQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBidGZfbW9kdWxlX2FsbG93bGlzdCAqc2tlbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZXQgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZChza2VsKTsKJiM0MzsJQVNTRVJUX09LKHJldCwgJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZCYjMzQ7KTsKJiM0MzsKJiM0MzsJYnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2FsbG93KHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICptb2RfbGlzdFtdID0geyAmIzM0O2JwZl90ZXN0bW9kJiMzNDsgfTsKJiM0MzsKJiM0MzsJdGVzdF9sb2FkX3dpdGhfbGlzdChtb2RfbGlzdCwgMSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBub24tTlVMTCBhbGxvd2xpc3Qgd2l0aCBhIGNvdW50IG9mIDAgZXhwbGljaXRseSBkaXNhYmxlcyBtb2R1bGUgQlRGcy4KJiM0MzsgKiBUaGUgcG9pbnRlciBtdXN0IGJlIG5vbi1OVUxMIHRvIGRpc3Rpbmd1aXNoIHRoaXMgZnJvbSBhbiB1bnNwZWNpZmllZAomIzQzOyAqIGFsbG93bGlzdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX2FsbG93bGlzdF9lbXB0eWxpc3Qodm9pZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKm1vZF9saXN0W10gPSB7IE5VTEwgfTsKJiM0MzsKJiM0MzsJdGVzdF9sb2FkX3dpdGhfbGlzdChtb2RfbGlzdCwgMCwgLUVTUkNIKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBicGZfdGVzdG1vZCBpcyBub3QgaW4gdGhlIGFsbG93bGlzdCwgc28gaXRzIEJURiBzaG91bGQgbm90IGJlIGxvYWRlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKm1vZF9saXN0W10gPSB7ICYjMzQ7bW9kdWxlX25vbmV4aXN0JiMzNDsgfTsKJiM0MzsJc3RydWN0IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0ICpza2VsOwomIzQzOwlpbnQgcmV0OwomIzQzOwlMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cywKJiM0MzsJCS5idGZfbW9kdWxlX2FsbG93bGlzdCA9IG1vZF9saXN0LAomIzQzOwkJLmJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9IDEsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzKCZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuX29wdHMmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9wcm9ncmFtX19zZXRfYXR0YWNoX3RhcmdldChza2VsLSZndDtwcm9ncy50ZXN0X2J0Zl9tb2R1bGVfYWxsb3dsaXN0LCAwLAomIzQzOwkJCQkJICAgICAmIzM0O2JwZl90ZXN0bW9kOmJwZl90ZXN0bW9kX2ZlbnRyeV90ZXN0MSYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgLUVTUkNILCAmIzM0O2JwZl9wcm9ncmFtX19zZXRfYXR0YWNoX3RhcmdldCYjMzQ7KTsKJiM0MzsJYnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9pbnB1dChjb25zdCBjaGFyICoqbGlzdCwgc2l6ZV90IGNvdW50LAomIzQzOwkJCSAgICAgICBjb25zdCBjaGFyICp0ZXN0X25hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmX21vZHVsZV9hbGxvd2xpc3QgKnNrZWw7CiYjNDM7CWNoYXIgYXNzZXJ0X25hbWVbNjRdOwomIzQzOwlpbnQgZXJyOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cywKJiM0MzsJCS5idGZfbW9kdWxlX2FsbG93bGlzdCA9IGxpc3QsCiYjNDM7CQkuYnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID0gY291bnQsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXNucHJpbnRmKGFzc2VydF9uYW1lLCBzaXplb2YoYXNzZXJ0X25hbWUpLCAmIzM0OyVzOiBvcGVuX29wdHMmIzM0OywgdGVzdF9uYW1lKTsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJZXJyID0gZXJybm87CiYjNDM7CWlmICghQVNTRVJUX05VTEwoc2tlbCwgYXNzZXJ0X25hbWUpKSB7CiYjNDM7CQlidGZfbW9kdWxlX2FsbG93bGlzdF9fZGVzdHJveShza2VsKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlzbnByaW50Zihhc3NlcnRfbmFtZSwgc2l6ZW9mKGFzc2VydF9uYW1lKSwgJiMzNDslczogb3Blbl9vcHRzIGVyciYjMzQ7LCB0ZXN0X25hbWUpOwomIzQzOwlBU1NFUlRfRVEoZXJyLCBFSU5WQUwsIGFzc2VydF9uYW1lKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9hbGxvd2xpc3RfaW52YWxpZGlucHV0KHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpuYW1lc1tdID0geyBOVUxMIH07CiYjNDM7CWNvbnN0IGNoYXIgKmVtcHR5X25hbWVzW10gPSB7ICYjMzQ7JiMzNDsgfTsKJiM0MzsJY29uc3QgY2hhciAqZHVwbGljYXRlX25hbWVzW10gPSB7ICYjMzQ7YnBmX3Rlc3Rtb2QmIzM0OywgJiMzNDticGZfdGVzdG1vZCYjMzQ7IH07CiYjNDM7CiYjNDM7CXRlc3RfaW52YWxpZF9pbnB1dChOVUxMLCAxLCAmIzM0O251bGxfbGlzdCYjMzQ7KTsKJiM0MzsJdGVzdF9pbnZhbGlkX2lucHV0KG5hbWVzLCAxLCAmIzM0O251bGxfbmFtZSYjMzQ7KTsKJiM0MzsJdGVzdF9pbnZhbGlkX2lucHV0KGVtcHR5X25hbWVzLCAxLCAmIzM0O2VtcHR5X25hbWUmIzM0Oyk7CiYjNDM7CXRlc3RfaW52YWxpZF9pbnB1dChkdXBsaWNhdGVfbmFtZXMsIDIsICYjMzQ7ZHVwbGljYXRlX25hbWUmIzM0Oyk7CiYjNDM7CXRlc3RfaW52YWxpZF9pbnB1dChuYW1lcywgKHNpemVfdClTU0laRV9NQVggJiM0MzsgMSwgJiMzNDtsYXJnZV9jb3VudCYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2J0Zl9tb2R1bGVfYWxsb3dsaXN0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmICp2bWxpbnV4X2J0ZiA9IE5VTEw7CiYjNDM7CXN0cnVjdCBidGYgKm1vZHVsZV9idGYgPSBOVUxMOwomIzQzOwomIzQzOwlpZiAoIWVudi5oYXNfdGVzdG1vZCkgewomIzQzOwkJcHJpbnRmKCYjMzQ7JXM6U0tJUDogYnBmX3Rlc3Rtb2QgaXMgbm90IGF2YWlsYWJsZVxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwl2bWxpbnV4X2J0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpOwomIzQzOwlpZiAoIXZtbGludXhfYnRmKSB7CiYjNDM7CQlwcmludGYoJiMzNDslczpTS0lQOiB2bWxpbnV4X2J0ZiBpcyBub3QgYXZhaWxhYmxlXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEVuc3VyZSBicGZfdGVzdG1vZCBCVEYgaXMgYXZhaWxhYmxlLiAqLwomIzQzOwltb2R1bGVfYnRmID0gYnRmX19sb2FkX21vZHVsZV9idGYoJiMzNDticGZfdGVzdG1vZCYjMzQ7LCB2bWxpbnV4X2J0Zik7CiYjNDM7CWlmICghbW9kdWxlX2J0ZikgewomIzQzOwkJcHJpbnRmKCYjMzQ7JXM6U0tJUDogYnBmX3Rlc3Rtb2QmIzM5O3MgQlRGIGlzIG5vdCBhdmFpbGFibGVcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQlidGZfX2ZyZWUodm1saW51eF9idGYpOwomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ0Zl9fZnJlZShtb2R1bGVfYnRmKTsKJiM0MzsJYnRmX19mcmVlKHZtbGludXhfYnRmKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9kZWZhdWx0JiMzNDspKQomIzQzOwkJYnRmX21vZHVsZV9hbGxvd2xpc3RfZGVmYXVsdCgpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X2FsbG93JiMzNDspKQomIzQzOwkJYnRmX21vZHVsZV9hbGxvd2xpc3RfYWxsb3coKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQmIzM0OykpCiYjNDM7CQlidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQoKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9lbXB0eWxpc3QmIzM0OykpCiYjNDM7CQlidGZfbW9kdWxlX2FsbG93bGlzdF9lbXB0eWxpc3QoKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9pbnZhbGlkaW5wdXQmIzM0OykpCiYjNDM7CQlidGZfbW9kdWxlX2FsbG93bGlzdF9pbnZhbGlkaW5wdXQoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9hbGxvd2xpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX2FsbG93bGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmJiM2MzOGJlZTc3ZDYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9hbGxvd2xpc3QuYwpAQCAtMCwwICYjNDM7MSwxMyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfdGVzdG1vZF9sb29wX3Rlc3QmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9idGZfbW9kdWxlX2FsbG93bGlzdCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTQ3CgkJCQkJCQlvdXRwdXQ6IDk0CgkJCQkJCQl0aG91Z2h0czogMTE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUHJvdmlkZWQgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggYSBwYXRjaCBzZXJpZXMgYXBwbGllZCBhcyBhIEhFQUQgY29tbWl0LCBhbmQgdGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzICYjMzQ7V29ydGhGdXp6aW5nLiYjMzQ7IExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgY2hhbmdlZC4gIFRoZSBmaWxlcyBtb2RpZmllZCBhcmU6IGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL2xpYi9icGYvbGliYnBmLmhgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9hbGxvd2xpc3QuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmNgLiBBbGwgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuCgpOb3csIGxldCBtZSByZWNhbGwgdGhlIGNydWNpYWwgZ3VpZGVsaW5lcyBmb3IgZGV0ZXJtaW5pbmcgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0Oy4gQWNjb3JkaW5nIHRvIHNlY3Rpb24gMiwgSSBuZWVkIHRvIGxvb2sgZm9yICpuZWdhdGl2ZSBjcml0ZXJpYSo6IGNoYW5nZXMgdGhhdCAqb25seSogZmFsbCBpbnRvIHNwZWNpZmljIGNhdGVnb3JpZXMuIE5hbWVseSwgY2hhbmdlcyB0aGF0IGFyZTogbm9uLWtlcm5lbCwgbm9uLWV4ZWN1dGFibGUsIG1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIHNwZWxsaW5nIGZpeGVzLCBvciB1c2VyLXNwYWNlIGRpcmVjdG9yaWVzIChzZWxmLXRlc3RzLCBzYW1wbGVzLCBzY3JpcHRzKSB0aGF0ICpkb24mIzM5O3QqIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlIChgdm1saW51eGApIG9yIGtlcm5lbCBtb2R1bGVzLgoKQSBxdWljayByZXZpZXcgb2YgdGhlIGRpZmYgY29uZmlybXMgdGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBhbGwgaW4gZWl0aGVyIGB0b29scy9saWIvYnBmL2Agb3IgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBub3cgaXMgdG8gdmVyaWZ5IHdoZXRoZXIgYW55ICpvdGhlciogZmlsZXMgd2VyZSB0b3VjaGVkIGluIHRoaXMgY29tbWl0LiBUaGFua2Z1bGx5LCB0aGUgZnVsbCBkaWZmIGlzIHByb3ZpZGVkLCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIHJlYWNoIGZvciBgZ2l0IHN0YXR1c2AsIGBnaXQgZGlmZmAsIG9yIGEgYGdyZXBwZXJgIGNhbGwgKHdoaWNoIGlzIHJlYWxseSBqdXN0IGEgYGdpdCBncmVwYCBhbnl3YXlzKS4gIFRoZSBwcm92aWRlZCBkaWZmIGNvbmZpcm1zIHRoZSBsaXN0IEkgc3RhcnRlZCB3aXRoIGlzIGV4aGF1c3RpdmUuIE5vIG90aGVyIGZpbGVzIGFyZSB0b3VjaGVkLgoKQWxyaWdodC4gQ29uc2lkZXJpbmcgdGhlIGNvbnRleHQsIGB0b29scy9saWIvYnBmYCBjb250YWlucyB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGZgIGFyZSB1c2VyLXNwYWNlIHNlbGYtdGVzdHMuICBNeSBhc3Nlc3NtZW50IGlzIHRoYXQgbm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBrZXJuZWwgb3IgdGhlIGtlcm5lbCBtb2R1bGVzLgoKSSBnbyBiYWNrIHRvIHRoZSBndWlkZWxpbmVzIG9uY2UgbW9yZSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFllcCwgdGhlIGNoYW5nZXMgc3RyaWN0bHkgZmFsbCB1bmRlciB0aGUgJiMzNDt1c2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLi4uIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcyYjMzQ7IGNhdGVnb3J5LiBQZXJmZWN0LiBUaGlzIGlzIGEgY2xlYXIgY2FzZSBmb3IgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byB1c2VyLXNwYWNlIHRvb2xzIGFuZCB0ZXN0cywgYW5kIHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIHdpdGgga2VybmVsIGNvZGUuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb25zIGFyZSB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLCBgRm9jdXNTeW1ib2xzPVtdYCwgYW5kIGBFbmFibGVDb25maWdzPVtdYC4gIE15IHJlYXNvbmluZyBpcyBjb25jaXNlbHkgZXhwbGFpbmVkOiBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byB1c2VyLXNwYWNlIGxpYmJwZiBhbmQgc2VsZi10ZXN0cyBsb2NhdGVkIHVuZGVyIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIGFuZCB0aGUgY2hhbmdlcyBkbyBub3QgYWZmZWN0IHRoZSBrZXJuZWwgY29kZS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgY29kZSB3aXRoaW4gdG9vbHMvbGliL2JwZiAobGliYnBmIGxpYnJhcnkpIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYgKHNlbGZ0ZXN0cykuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2Ugb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3QgYXBwbGljYWJsZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIHRvb2xzL2xpYi9icGYgKGxpYmJwZiBsaWJyYXJ5KSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmIChzZWxmdGVzdHMpLiBJdCBkb2VzIG5vdCBhbHRlciB0aGUgTGludXgga2VybmVsIGltYWdlIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgc28gaXQgaXMgbm90IGFwcGxpY2FibGUgZm9yIHN5emthbGxlciBrZXJuZWwgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjE2OjA1Ljc3NjI2MzIyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MDQ2MzAyNzQ5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgY29kZSB3aXRoaW4gdG9vbHMvbGliL2JwZiAobGliYnBmIGxpYnJhcnkpIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYgKHNlbGZ0ZXN0cykuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2Ugb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3QgYXBwbGljYWJsZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6MTY6MDUuNzc2MjY4NzAxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA4ODU2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxYzI2ZThjMTQyZjQ2ZmQ3MTA0MTllMGRiODgzMGRlOTJjZDI2YTk2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDE2OjE2OjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuaW5kZXggYzAzNmU4YTkxZWQ4OC4uYTc3MTE1ZTFiMTcxNSAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbkBAIC03NTEsNiArNzUxLDggQEAgc3RydWN0IGJwZl9vYmplY3Qge1xcbiBcXHRib29sIGJ0Zl9tb2R1bGVzX2xvYWRlZDtcXG4gXFx0c2l6ZV90IGJ0Zl9tb2R1bGVfY250O1xcbiBcXHRzaXplX3QgYnRmX21vZHVsZV9jYXA7XFxuK1xcdGNoYXIgKipidGZfbW9kdWxlX2FsbG93bGlzdDtcXG4rXFx0c3NpemVfdCBidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQ7XFxuIFxcbiBcXHQvKiBvcHRpb25hbCBsb2cgc2V0dGluZ3MgcGFzc2VkIHRvIEJQRl9CVEZfTE9BRCBhbmQgQlBGX1BST0dfTE9BRCBjb21tYW5kcyAqL1xcbiBcXHRjaGFyICpsb2dfYnVmO1xcbkBAIC01ODUxLDYgKzU4NTMsMjEgQEAgaW50IGJwZl9jb3JlX2FkZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY2FuZCAqbG9jYWxfY2FuZCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGlzX2J0Zl9tb2RfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdHNzaXplX3QgaTtcXG4rXFxuK1xcdGlmIChvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9iai1cXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RfY250OyBpKyspIHtcXG4rXFx0XFx0aWYgKHN0cmNtcChvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0W2ldLCBuYW1lKSA9PSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XFxuQEAgLTU4NzMsNiArNTg5MCw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRpZiAoIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfTU9EVUxFX0JURikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0aWYgKG9iai1cXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID09IDApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0d2hpbGUgKHRydWUpIHtcXG4gXFx0XFx0ZXJyID0gYnBmX2J0Zl9nZXRfbmV4dF9pZChpZCwgXFx1MDAyNmlkKTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTk9FTlQpXFxuQEAgLTU5MTUsNiArNTkzNSwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICghaXNfYnRmX21vZF9hbGxvd2VkKG9iaiwgbmFtZSkpIHtcXG4rXFx0XFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0YnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotXFx1MDAzZWJ0Zl92bWxpbnV4KTtcXG4gXFx0XFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuQEAgLTU5MzksNiArNTk2NCw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfY250Kys7XFxuK1xcbitcXHRcXHRpZiAob2JqLVxcdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgPT0gb2JqLVxcdTAwM2VidGZfbW9kdWxlX2NudClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChlcnIpIHtcXG5AQCAtODQ4MSw2ICs4NTA5LDggQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcXG4gXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMgKm9wdHMpXFxuIHtcXG4gXFx0Y29uc3QgY2hhciAqa2NvbmZpZywgKmJ0Zl90bXBfcGF0aCwgKnRva2VuX3BhdGg7XFxuK1xcdHNpemVfdCBtb2RfYWxsb3dfY250LCBpLCBqO1xcbitcXHRjb25zdCBjaGFyICoqbW9kX2FsbG93O1xcbiBcXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xcbiBcXHRpbnQgZXJyO1xcbiBcXHRjaGFyICpsb2dfYnVmO1xcbkBAIC04NTI1LDYgKzg1NTUsMjIgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcXG4gXFx0aWYgKHRva2VuX3BhdGggXFx1MDAyNlxcdTAwMjYgc3RybGVuKHRva2VuX3BhdGgpIFxcdTAwM2U9IFBBVEhfTUFYKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTtcXG4gXFxuK1xcdG1vZF9hbGxvdyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0LCBOVUxMKTtcXG4rXFx0bW9kX2FsbG93X2NudCA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCwgMCk7XFxuK1xcbitcXHRpZiAobW9kX2FsbG93X2NudCBcXHUwMDNlIFNTSVpFX01BWCB8fCAoIW1vZF9hbGxvdyBcXHUwMDI2XFx1MDAyNiBtb2RfYWxsb3dfY250IFxcdTAwM2UgMCkpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1vZF9hbGxvd19jbnQ7IGkrKykge1xcbitcXHRcXHRpZiAoIW1vZF9hbGxvd1tpXSB8fCAhbW9kX2FsbG93W2ldWzBdKVxcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4rXFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBpOyBqKyspIHtcXG4rXFx0XFx0XFx0aWYgKHN0cmNtcChtb2RfYWxsb3dbaV0sIG1vZF9hbGxvd1tqXSkgPT0gMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0b2JqID0gYnBmX29iamVjdF9fbmV3KHBhdGgsIG9ial9idWYsIG9ial9idWZfc3osIG9ial9uYW1lKTtcXG4gXFx0aWYgKElTX0VSUihvYmopKVxcbiBcXHRcXHRyZXR1cm4gb2JqO1xcbkBAIC04NTYzLDYgKzg2MDksMjQgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9IG1vZF9hbGxvdyA/IG1vZF9hbGxvd19jbnQgOiAtMTtcXG4rXFx0aWYgKG1vZF9hbGxvd19jbnQgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdG9iai1cXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3QgPVxcbitcXHRcXHRcXHRjYWxsb2MobW9kX2FsbG93X2NudCwgc2l6ZW9mKCpvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KSk7XFxuK1xcdFxcdGlmICghb2JqLVxcdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdCkge1xcbitcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1vZF9hbGxvd19jbnQ7IGkrKykge1xcbitcXHRcXHRcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0W2ldID0gc3RyZHVwKG1vZF9hbGxvd1tpXSk7XFxuK1xcdFxcdFxcdGlmICghb2JqLVxcdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdFtpXSkge1xcbitcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGVyciA9IGJwZl9vYmplY3RfX2VsZl9pbml0KG9iaik7XFxuIFxcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qob2JqKTtcXG4gXFx0ZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19jb2xsZWN0X2V4dGVybnMob2JqKTtcXG5AQCAtOTY4NCw2ICs5NzQ4LDEyIEBAIHZvaWQgYnBmX29iamVjdF9fY2xvc2Uoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0Y2xvc2Uob2JqLVxcdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XFxuIFxcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWp1bXB0YWJsZV9tYXBzKTtcXG4gXFxuK1xcdGlmIChvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudDsgaSsrKVxcbitcXHRcXHRcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdFtpXSk7XFxuK1xcdFxcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KTtcXG4rXFx0fVxcbitcXG4gXFx0ZnJlZShvYmopO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxcbmluZGV4IGI5NjVhZDU3MTU0MDMuLjg5NzY4MjQ0ZDVkOWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuaFxcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG5AQCAtMjI0LDEwICsyMjQsMjQgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcXG4gXFx0ICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuXFxuIFxcdCAqL1xcbiBcXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcXG4rXFx0LypcXG4rXFx0ICogT3B0aW9uYWwgYWxsb3dsaXN0IG9mIGtlcm5lbCBtb2R1bGUgbmFtZXMgd2hvc2UgQlRGcyBsaWJicGYgaXNcXG4rXFx0ICogYWxsb3dlZCB0byBsb2FkLiBUaGUgYWxsb3dsaXN0IGxpbWl0cyB3aGljaCBrZXJuZWwgbW9kdWxlIEJURnMgbGliYnBmXFxuK1xcdCAqIHdpbGwgY29uc3VsdCB3aGVyZXZlciBtb2R1bGUgQlRGIG1pZ2h0IGJlIG5lZWRlZC5cXG4rXFx0ICpcXG4rXFx0ICogV2hlbiB0aGUgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBleGlzdGluZyBiZWhhdmlvciByZW1haW5zXFxuK1xcdCAqIHVuY2hhbmdlZC4gQW4gZXhwbGljaXRseSBzcGVjaWZpZWQgZW1wdHkgbGlzdCBwcmV2ZW50cyBsaWJicGYgZnJvbVxcbitcXHQgKiBjb25zdWx0aW5nIGFueSBrZXJuZWwgbW9kdWxlIEJURnMuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBsaXN0IG11c3QgY29udGFpbiB2YWxpZCwgbm9uLWVtcHR5IG1vZHVsZSBuYW1lcyBhbmQgbXVzdCBub3RcXG4rXFx0ICogY29udGFpbiBkdXBsaWNhdGUgZW50cmllczsgb3RoZXJ3aXNlIC1FSU5WQUwgaXMgcmV0dXJuZWQuXFxuK1xcdCAqL1xcbitcXHRjb25zdCBjaGFyICoqYnRmX21vZHVsZV9hbGxvd2xpc3Q7XFxuK1xcdHNpemVfdCBidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQ7XFxuIFxcbiBcXHRzaXplX3QgOjA7XFxuIH07XFxuLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGhcXG4rI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBidGZfbW9kdWxlX2FsbG93bGlzdF9jbnRcXG4gXFxuIC8qKlxcbiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX2FsbG93bGlzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zMTg5MTMzZWU1OGI2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmNcXG5AQCAtMCwwICsxLDE2MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnRmX21vZHVsZV9hbGxvd2xpc3Quc2tlbC5oXFxcIlxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9sb2FkX3dpdGhfbGlzdChjb25zdCBjaGFyICoqbGlzdCwgc2l6ZV90IGNvdW50LFxcbitcXHRcXHRcXHRcXHRpbnQgZXhwZWN0ZWRfcmV0KVxcbit7XFxuK1xcdHN0cnVjdCBidGZfbW9kdWxlX2FsbG93bGlzdCAqc2tlbDtcXG4rXFx0aW50IHJldDtcXG4rXFx0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5idGZfbW9kdWxlX2FsbG93bGlzdCA9IGxpc3QsXFxuK1xcdFxcdC5idGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgPSBjb3VudCxcXG4rXFx0KTtcXG4rXFxuK1xcdHNrZWwgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJldCA9IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19sb2FkKHNrZWwpO1xcbitcXHRBU1NFUlRfRVEocmV0LCBleHBlY3RlZF9yZXQsIFxcXCJidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZFxcXCIpO1xcbitcXG4rXFx0YnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2RlZmF1bHQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnRmX21vZHVsZV9hbGxvd2xpc3QgKnNrZWw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW4oKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJidGZfbW9kdWxlX2FsbG93bGlzdF9fb3BlblxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyZXQgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZChza2VsKTtcXG4rXFx0QVNTRVJUX09LKHJldCwgXFxcImJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19sb2FkXFxcIik7XFxuK1xcbitcXHRidGZfbW9kdWxlX2FsbG93bGlzdF9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9hbGxvd2xpc3RfYWxsb3codm9pZClcXG4re1xcbitcXHRjb25zdCBjaGFyICptb2RfbGlzdFtdID0geyBcXFwiYnBmX3Rlc3Rtb2RcXFwiIH07XFxuK1xcbitcXHR0ZXN0X2xvYWRfd2l0aF9saXN0KG1vZF9saXN0LCAxLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogQSBub24tTlVMTCBhbGxvd2xpc3Qgd2l0aCBhIGNvdW50IG9mIDAgZXhwbGljaXRseSBkaXNhYmxlcyBtb2R1bGUgQlRGcy5cXG4rICogVGhlIHBvaW50ZXIgbXVzdCBiZSBub24tTlVMTCB0byBkaXN0aW5ndWlzaCB0aGlzIGZyb20gYW4gdW5zcGVjaWZpZWRcXG4rICogYWxsb3dsaXN0LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9hbGxvd2xpc3RfZW1wdHlsaXN0KHZvaWQpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqbW9kX2xpc3RbXSA9IHsgTlVMTCB9O1xcbitcXG4rXFx0dGVzdF9sb2FkX3dpdGhfbGlzdChtb2RfbGlzdCwgMCwgLUVTUkNIKTtcXG4rfVxcbitcXG4rLypcXG4rICogYnBmX3Rlc3Rtb2QgaXMgbm90IGluIHRoZSBhbGxvd2xpc3QsIHNvIGl0cyBCVEYgc2hvdWxkIG5vdCBiZSBsb2FkZWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQodm9pZClcXG4re1xcbitcXHRjb25zdCBjaGFyICptb2RfbGlzdFtdID0geyBcXFwibW9kdWxlX25vbmV4aXN0XFxcIiB9O1xcbitcXHRzdHJ1Y3QgYnRmX21vZHVsZV9hbGxvd2xpc3QgKnNrZWw7XFxuK1xcdGludCByZXQ7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxcbitcXHRcXHQuYnRmX21vZHVsZV9hbGxvd2xpc3QgPSBtb2RfbGlzdCxcXG4rXFx0XFx0LmJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9IDEsXFxuK1xcdCk7XFxuK1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW5fb3B0c1xcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyZXQgPSBicGZfcHJvZ3JhbV9fc2V0X2F0dGFjaF90YXJnZXQoc2tlbC1cXHUwMDNlcHJvZ3MudGVzdF9idGZfbW9kdWxlX2FsbG93bGlzdCwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiYnBmX3Rlc3Rtb2Q6YnBmX3Rlc3Rtb2RfZmVudHJ5X3Rlc3QxXFxcIik7XFxuK1xcdEFTU0VSVF9FUShyZXQsIC1FU1JDSCwgXFxcImJwZl9wcm9ncmFtX19zZXRfYXR0YWNoX3RhcmdldFxcXCIpO1xcbitcXHRidGZfbW9kdWxlX2FsbG93bGlzdF9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2lucHV0KGNvbnN0IGNoYXIgKipsaXN0LCBzaXplX3QgY291bnQsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICp0ZXN0X25hbWUpXFxuK3tcXG4rXFx0c3RydWN0IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0ICpza2VsO1xcbitcXHRjaGFyIGFzc2VydF9uYW1lWzY0XTtcXG4rXFx0aW50IGVycjtcXG4rXFx0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5idGZfbW9kdWxlX2FsbG93bGlzdCA9IGxpc3QsXFxuK1xcdFxcdC5idGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgPSBjb3VudCxcXG4rXFx0KTtcXG4rXFxuK1xcdHNucHJpbnRmKGFzc2VydF9uYW1lLCBzaXplb2YoYXNzZXJ0X25hbWUpLCBcXFwiJXM6IG9wZW5fb3B0c1xcXCIsIHRlc3RfbmFtZSk7XFxuK1xcdHNrZWwgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0ZXJyID0gZXJybm87XFxuK1xcdGlmICghQVNTRVJUX05VTEwoc2tlbCwgYXNzZXJ0X25hbWUpKSB7XFxuK1xcdFxcdGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19kZXN0cm95KHNrZWwpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0c25wcmludGYoYXNzZXJ0X25hbWUsIHNpemVvZihhc3NlcnRfbmFtZSksIFxcXCIlczogb3Blbl9vcHRzIGVyclxcXCIsIHRlc3RfbmFtZSk7XFxuK1xcdEFTU0VSVF9FUShlcnIsIEVJTlZBTCwgYXNzZXJ0X25hbWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX2FsbG93bGlzdF9pbnZhbGlkaW5wdXQodm9pZClcXG4re1xcbitcXHRjb25zdCBjaGFyICpuYW1lc1tdID0geyBOVUxMIH07XFxuK1xcdGNvbnN0IGNoYXIgKmVtcHR5X25hbWVzW10gPSB7IFxcXCJcXFwiIH07XFxuK1xcdGNvbnN0IGNoYXIgKmR1cGxpY2F0ZV9uYW1lc1tdID0geyBcXFwiYnBmX3Rlc3Rtb2RcXFwiLCBcXFwiYnBmX3Rlc3Rtb2RcXFwiIH07XFxuK1xcbitcXHR0ZXN0X2ludmFsaWRfaW5wdXQoTlVMTCwgMSwgXFxcIm51bGxfbGlzdFxcXCIpO1xcbitcXHR0ZXN0X2ludmFsaWRfaW5wdXQobmFtZXMsIDEsIFxcXCJudWxsX25hbWVcXFwiKTtcXG4rXFx0dGVzdF9pbnZhbGlkX2lucHV0KGVtcHR5X25hbWVzLCAxLCBcXFwiZW1wdHlfbmFtZVxcXCIpO1xcbitcXHR0ZXN0X2ludmFsaWRfaW5wdXQoZHVwbGljYXRlX25hbWVzLCAyLCBcXFwiZHVwbGljYXRlX25hbWVcXFwiKTtcXG4rXFx0dGVzdF9pbnZhbGlkX2lucHV0KG5hbWVzLCAoc2l6ZV90KVNTSVpFX01BWCArIDEsIFxcXCJsYXJnZV9jb3VudFxcXCIpO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfYnRmX21vZHVsZV9hbGxvd2xpc3Qodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnRmICp2bWxpbnV4X2J0ZiA9IE5VTEw7XFxuK1xcdHN0cnVjdCBidGYgKm1vZHVsZV9idGYgPSBOVUxMO1xcbitcXG4rXFx0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlczpTS0lQOiBicGZfdGVzdG1vZCBpcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHR2bWxpbnV4X2J0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xcbitcXHRpZiAoIXZtbGludXhfYnRmKSB7XFxuK1xcdFxcdHByaW50ZihcXFwiJXM6U0tJUDogdm1saW51eF9idGYgaXMgbm90IGF2YWlsYWJsZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LyogRW5zdXJlIGJwZl90ZXN0bW9kIEJURiBpcyBhdmFpbGFibGUuICovXFxuK1xcdG1vZHVsZV9idGYgPSBidGZfX2xvYWRfbW9kdWxlX2J0ZihcXFwiYnBmX3Rlc3Rtb2RcXFwiLCB2bWxpbnV4X2J0Zik7XFxuK1xcdGlmICghbW9kdWxlX2J0Zikge1xcbitcXHRcXHRwcmludGYoXFxcIiVzOlNLSVA6IGJwZl90ZXN0bW9kJ3MgQlRGIGlzIG5vdCBhdmFpbGFibGVcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0YnRmX19mcmVlKHZtbGludXhfYnRmKTtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGJ0Zl9fZnJlZShtb2R1bGVfYnRmKTtcXG4rXFx0YnRmX19mcmVlKHZtbGludXhfYnRmKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX2FsbG93bGlzdF9kZWZhdWx0XFxcIikpXFxuK1xcdFxcdGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2RlZmF1bHQoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX2FsbG93bGlzdF9hbGxvd1xcXCIpKVxcbitcXHRcXHRidGZfbW9kdWxlX2FsbG93bGlzdF9hbGxvdygpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImJ0Zl9tb2R1bGVfYWxsb3dsaXN0X3NraXB1bmxpc3RlZFxcXCIpKVxcbitcXHRcXHRidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX2FsbG93bGlzdF9lbXB0eWxpc3RcXFwiKSlcXG4rXFx0XFx0YnRmX21vZHVsZV9hbGxvd2xpc3RfZW1wdHlsaXN0KCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfaW52YWxpZGlucHV0XFxcIikpXFxuK1xcdFxcdGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2ludmFsaWRpbnB1dCgpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX2FsbG93bGlzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJiM2MzOGJlZTc3ZDZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmNcXG5AQCAtMCwwICsxLDEzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuK1NFQyhcXFwiZmVudHJ5L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2J0Zl9tb2R1bGVfYWxsb3dsaXN0KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6MTY6MDYuMjQ3OTE5OTUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODA0MTU4NjA1OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgY29kZSB3aXRoaW4gdG9vbHMvbGliL2JwZiAobGliYnBmIGxpYnJhcnkpIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYgKHNlbGZ0ZXN0cykuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2Ugb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3QgYXBwbGljYWJsZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxYzI2ZThjMTQyZjQ2ZmQ3MTA0MTllMGRiODgzMGRlOTJjZDI2YTk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTY6MTY6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggYzAzNmU4YTkxZWQ4OC4uYTc3MTE1ZTFiMTcxNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC03NTEsNiArNzUxLDggQEAgc3RydWN0IGJwZl9vYmplY3Qge1xuIFx0Ym9vbCBidGZfbW9kdWxlc19sb2FkZWQ7XG4gXHRzaXplX3QgYnRmX21vZHVsZV9jbnQ7XG4gXHRzaXplX3QgYnRmX21vZHVsZV9jYXA7XG4rXHRjaGFyICoqYnRmX21vZHVsZV9hbGxvd2xpc3Q7XG4rXHRzc2l6ZV90IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudDtcbiBcbiBcdC8qIG9wdGlvbmFsIGxvZyBzZXR0aW5ncyBwYXNzZWQgdG8gQlBGX0JURl9MT0FEIGFuZCBCUEZfUFJPR19MT0FEIGNvbW1hbmRzICovXG4gXHRjaGFyICpsb2dfYnVmO1xuQEAgLTU4NTEsNiArNTg1MywyMSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlzX2J0Zl9tb2RfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHNzaXplX3QgaTtcbitcbitcdGlmIChvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RfY250IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQ7IGkrKykge1xuK1x0XHRpZiAoc3RyY21wKG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdFtpXSwgbmFtZSkgPT0gMClcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4ge1xuIFx0c3RydWN0IGJwZl9idGZfaW5mbyBpbmZvO1xuQEAgLTU4NzMsNiArNTg5MCw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0aWYgKCFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX01PRFVMRV9CVEYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdGlmIChvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID09IDApXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0ZXJyID0gYnBmX2J0Zl9nZXRfbmV4dF9pZChpZCwgXHUwMDI2aWQpO1xuIFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTk9FTlQpXG5AQCAtNTkxNSw2ICs1OTM1LDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4rXHRcdGlmICghaXNfYnRmX21vZF9hbGxvd2VkKG9iaiwgbmFtZSkpIHtcbitcdFx0XHRjbG9zZShmZCk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0YnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuIFx0XHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XG4gXHRcdGlmIChlcnIpIHtcbkBAIC01OTM5LDYgKzU5NjQsOSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9jbnQrKztcbitcbitcdFx0aWYgKG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgPT0gb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250KVxuK1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKGVycikge1xuQEAgLTg0ODEsNiArODUwOSw4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmtjb25maWcsICpidGZfdG1wX3BhdGgsICp0b2tlbl9wYXRoO1xuK1x0c2l6ZV90IG1vZF9hbGxvd19jbnQsIGksIGo7XG4rXHRjb25zdCBjaGFyICoqbW9kX2FsbG93O1xuIFx0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbiBcdGludCBlcnI7XG4gXHRjaGFyICpsb2dfYnVmO1xuQEAgLTg1MjUsNiArODU1NSwyMiBAQCBzdGF0aWMgc3RydWN0IGJwZl9vYmplY3QgKmJwZl9vYmplY3Rfb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB2b2lkICpvYmpfYnVmLFxuIFx0aWYgKHRva2VuX3BhdGggXHUwMDI2XHUwMDI2IHN0cmxlbih0b2tlbl9wYXRoKSBcdTAwM2U9IFBBVEhfTUFYKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTtcbiBcbitcdG1vZF9hbGxvdyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0LCBOVUxMKTtcbitcdG1vZF9hbGxvd19jbnQgPSBPUFRTX0dFVChvcHRzLCBidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQsIDApO1xuK1xuK1x0aWYgKG1vZF9hbGxvd19jbnQgXHUwMDNlIFNTSVpFX01BWCB8fCAoIW1vZF9hbGxvdyBcdTAwMjZcdTAwMjYgbW9kX2FsbG93X2NudCBcdTAwM2UgMCkpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbW9kX2FsbG93X2NudDsgaSsrKSB7XG4rXHRcdGlmICghbW9kX2FsbG93W2ldIHx8ICFtb2RfYWxsb3dbaV1bMF0pXG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGk7IGorKykge1xuK1x0XHRcdGlmIChzdHJjbXAobW9kX2FsbG93W2ldLCBtb2RfYWxsb3dbal0pID09IDApXG4rXHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0b2JqID0gYnBmX29iamVjdF9fbmV3KHBhdGgsIG9ial9idWYsIG9ial9idWZfc3osIG9ial9uYW1lKTtcbiBcdGlmIChJU19FUlIob2JqKSlcbiBcdFx0cmV0dXJuIG9iajtcbkBAIC04NTYzLDYgKzg2MDksMjQgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9IG1vZF9hbGxvdyA/IG1vZF9hbGxvd19jbnQgOiAtMTtcbitcdGlmIChtb2RfYWxsb3dfY250IFx1MDAzZSAwKSB7XG4rXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdCA9XG4rXHRcdFx0Y2FsbG9jKG1vZF9hbGxvd19jbnQsIHNpemVvZigqb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KSk7XG4rXHRcdGlmICghb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KSB7XG4rXHRcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtb2RfYWxsb3dfY250OyBpKyspIHtcbitcdFx0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RbaV0gPSBzdHJkdXAobW9kX2FsbG93W2ldKTtcbitcdFx0XHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdFtpXSkge1xuK1x0XHRcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuIFx0ZXJyID0gYnBmX29iamVjdF9fZWxmX2luaXQob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9leHRlcm5zKG9iaik7XG5AQCAtOTY4NCw2ICs5NzQ4LDEyIEBAIHZvaWQgYnBmX29iamVjdF9fY2xvc2Uoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0Y2xvc2Uob2JqLVx1MDAzZWp1bXB0YWJsZV9tYXBzW2ldLmZkKTtcbiBcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VqdW1wdGFibGVfbWFwcyk7XG4gXG4rXHRpZiAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQ7IGkrKylcbitcdFx0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RbaV0pO1xuK1x0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3QpO1xuK1x0fVxuK1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uODk3NjgyNDRkNWQ5ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0yMjQsMTAgKzIyNCwyNCBAQCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMge1xuIFx0ICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuXG4gXHQgKi9cbiBcdGNvbnN0IGNoYXIgKmJwZl90b2tlbl9wYXRoO1xuK1x0LypcbitcdCAqIE9wdGlvbmFsIGFsbG93bGlzdCBvZiBrZXJuZWwgbW9kdWxlIG5hbWVzIHdob3NlIEJURnMgbGliYnBmIGlzXG4rXHQgKiBhbGxvd2VkIHRvIGxvYWQuIFRoZSBhbGxvd2xpc3QgbGltaXRzIHdoaWNoIGtlcm5lbCBtb2R1bGUgQlRGcyBsaWJicGZcbitcdCAqIHdpbGwgY29uc3VsdCB3aGVyZXZlciBtb2R1bGUgQlRGIG1pZ2h0IGJlIG5lZWRlZC5cbitcdCAqXG4rXHQgKiBXaGVuIHRoZSBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgdGhlIGV4aXN0aW5nIGJlaGF2aW9yIHJlbWFpbnNcbitcdCAqIHVuY2hhbmdlZC4gQW4gZXhwbGljaXRseSBzcGVjaWZpZWQgZW1wdHkgbGlzdCBwcmV2ZW50cyBsaWJicGYgZnJvbVxuK1x0ICogY29uc3VsdGluZyBhbnkga2VybmVsIG1vZHVsZSBCVEZzLlxuK1x0ICpcbitcdCAqIFRoZSBsaXN0IG11c3QgY29udGFpbiB2YWxpZCwgbm9uLWVtcHR5IG1vZHVsZSBuYW1lcyBhbmQgbXVzdCBub3RcbitcdCAqIGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzIHJldHVybmVkLlxuK1x0ICovXG4rXHRjb25zdCBjaGFyICoqYnRmX21vZHVsZV9hbGxvd2xpc3Q7XG4rXHRzaXplX3QgYnRmX21vZHVsZV9hbGxvd2xpc3RfY250O1xuIFxuIFx0c2l6ZV90IDowO1xuIH07XG4tI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aFxuKyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnRmX21vZHVsZV9hbGxvd2xpc3RfY250XG4gXG4gLyoqXG4gICogQGJyaWVmICoqYnBmX29iamVjdF9fb3BlbigpKiogY3JlYXRlcyBhIGJwZl9vYmplY3QgYnkgb3BlbmluZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX2FsbG93bGlzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzE4OTEzM2VlNThiNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9hbGxvd2xpc3QuY1xuQEAgLTAsMCArMSwxNjIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnRmX21vZHVsZV9hbGxvd2xpc3Quc2tlbC5oXCJcbitcbitzdGF0aWMgdm9pZCB0ZXN0X2xvYWRfd2l0aF9saXN0KGNvbnN0IGNoYXIgKipsaXN0LCBzaXplX3QgY291bnQsXG4rXHRcdFx0XHRpbnQgZXhwZWN0ZWRfcmV0KVxuK3tcbitcdHN0cnVjdCBidGZfbW9kdWxlX2FsbG93bGlzdCAqc2tlbDtcbitcdGludCByZXQ7XG4rXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbitcdFx0LmJ0Zl9tb2R1bGVfYWxsb3dsaXN0ID0gbGlzdCxcbitcdFx0LmJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9IGNvdW50LFxuK1x0KTtcbitcbitcdHNrZWwgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW5fb3B0c1wiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmV0ID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX2xvYWQoc2tlbCk7XG4rXHRBU1NFUlRfRVEocmV0LCBleHBlY3RlZF9yZXQsIFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfX2xvYWRcIik7XG4rXG4rXHRidGZfbW9kdWxlX2FsbG93bGlzdF9fZGVzdHJveShza2VsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9hbGxvd2xpc3RfZGVmYXVsdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBidGZfbW9kdWxlX2FsbG93bGlzdCAqc2tlbDtcbitcdGludCByZXQ7XG4rXG4rXHRza2VsID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW4oKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZChza2VsKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfX2xvYWRcIik7XG4rXG4rXHRidGZfbW9kdWxlX2FsbG93bGlzdF9fZGVzdHJveShza2VsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9hbGxvd2xpc3RfYWxsb3codm9pZClcbit7XG4rXHRjb25zdCBjaGFyICptb2RfbGlzdFtdID0geyBcImJwZl90ZXN0bW9kXCIgfTtcbitcbitcdHRlc3RfbG9hZF93aXRoX2xpc3QobW9kX2xpc3QsIDEsIDApO1xuK31cbitcbisvKlxuKyAqIEEgbm9uLU5VTEwgYWxsb3dsaXN0IHdpdGggYSBjb3VudCBvZiAwIGV4cGxpY2l0bHkgZGlzYWJsZXMgbW9kdWxlIEJURnMuXG4rICogVGhlIHBvaW50ZXIgbXVzdCBiZSBub24tTlVMTCB0byBkaXN0aW5ndWlzaCB0aGlzIGZyb20gYW4gdW5zcGVjaWZpZWRcbisgKiBhbGxvd2xpc3QuXG4rICovXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9hbGxvd2xpc3RfZW1wdHlsaXN0KHZvaWQpXG4re1xuK1x0Y29uc3QgY2hhciAqbW9kX2xpc3RbXSA9IHsgTlVMTCB9O1xuK1xuK1x0dGVzdF9sb2FkX3dpdGhfbGlzdChtb2RfbGlzdCwgMCwgLUVTUkNIKTtcbit9XG4rXG4rLypcbisgKiBicGZfdGVzdG1vZCBpcyBub3QgaW4gdGhlIGFsbG93bGlzdCwgc28gaXRzIEJURiBzaG91bGQgbm90IGJlIGxvYWRlZC5cbisgKi9cbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQodm9pZClcbit7XG4rXHRjb25zdCBjaGFyICptb2RfbGlzdFtdID0geyBcIm1vZHVsZV9ub25leGlzdFwiIH07XG4rXHRzdHJ1Y3QgYnRmX21vZHVsZV9hbGxvd2xpc3QgKnNrZWw7XG4rXHRpbnQgcmV0O1xuK1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4rXHRcdC5idGZfbW9kdWxlX2FsbG93bGlzdCA9IG1vZF9saXN0LFxuK1x0XHQuYnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID0gMSxcbitcdCk7XG4rXG4rXHRza2VsID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuX29wdHNcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHJldCA9IGJwZl9wcm9ncmFtX19zZXRfYXR0YWNoX3RhcmdldChza2VsLVx1MDAzZXByb2dzLnRlc3RfYnRmX21vZHVsZV9hbGxvd2xpc3QsIDAsXG4rXHRcdFx0XHRcdCAgICAgXCJicGZfdGVzdG1vZDpicGZfdGVzdG1vZF9mZW50cnlfdGVzdDFcIik7XG4rXHRBU1NFUlRfRVEocmV0LCAtRVNSQ0gsIFwiYnBmX3Byb2dyYW1fX3NldF9hdHRhY2hfdGFyZ2V0XCIpO1xuK1x0YnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9pbnB1dChjb25zdCBjaGFyICoqbGlzdCwgc2l6ZV90IGNvdW50LFxuK1x0XHRcdCAgICAgICBjb25zdCBjaGFyICp0ZXN0X25hbWUpXG4re1xuK1x0c3RydWN0IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0ICpza2VsO1xuK1x0Y2hhciBhc3NlcnRfbmFtZVs2NF07XG4rXHRpbnQgZXJyO1xuK1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4rXHRcdC5idGZfbW9kdWxlX2FsbG93bGlzdCA9IGxpc3QsXG4rXHRcdC5idGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgPSBjb3VudCxcbitcdCk7XG4rXG4rXHRzbnByaW50Zihhc3NlcnRfbmFtZSwgc2l6ZW9mKGFzc2VydF9uYW1lKSwgXCIlczogb3Blbl9vcHRzXCIsIHRlc3RfbmFtZSk7XG4rXHRza2VsID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGVyciA9IGVycm5vO1xuK1x0aWYgKCFBU1NFUlRfTlVMTChza2VsLCBhc3NlcnRfbmFtZSkpIHtcbitcdFx0YnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdHNucHJpbnRmKGFzc2VydF9uYW1lLCBzaXplb2YoYXNzZXJ0X25hbWUpLCBcIiVzOiBvcGVuX29wdHMgZXJyXCIsIHRlc3RfbmFtZSk7XG4rXHRBU1NFUlRfRVEoZXJyLCBFSU5WQUwsIGFzc2VydF9uYW1lKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9hbGxvd2xpc3RfaW52YWxpZGlucHV0KHZvaWQpXG4re1xuK1x0Y29uc3QgY2hhciAqbmFtZXNbXSA9IHsgTlVMTCB9O1xuK1x0Y29uc3QgY2hhciAqZW1wdHlfbmFtZXNbXSA9IHsgXCJcIiB9O1xuK1x0Y29uc3QgY2hhciAqZHVwbGljYXRlX25hbWVzW10gPSB7IFwiYnBmX3Rlc3Rtb2RcIiwgXCJicGZfdGVzdG1vZFwiIH07XG4rXG4rXHR0ZXN0X2ludmFsaWRfaW5wdXQoTlVMTCwgMSwgXCJudWxsX2xpc3RcIik7XG4rXHR0ZXN0X2ludmFsaWRfaW5wdXQobmFtZXMsIDEsIFwibnVsbF9uYW1lXCIpO1xuK1x0dGVzdF9pbnZhbGlkX2lucHV0KGVtcHR5X25hbWVzLCAxLCBcImVtcHR5X25hbWVcIik7XG4rXHR0ZXN0X2ludmFsaWRfaW5wdXQoZHVwbGljYXRlX25hbWVzLCAyLCBcImR1cGxpY2F0ZV9uYW1lXCIpO1xuK1x0dGVzdF9pbnZhbGlkX2lucHV0KG5hbWVzLCAoc2l6ZV90KVNTSVpFX01BWCArIDEsIFwibGFyZ2VfY291bnRcIik7XG4rfVxuK1xuK3ZvaWQgdGVzdF9idGZfbW9kdWxlX2FsbG93bGlzdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBidGYgKnZtbGludXhfYnRmID0gTlVMTDtcbitcdHN0cnVjdCBidGYgKm1vZHVsZV9idGYgPSBOVUxMO1xuK1xuK1x0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcbitcdFx0cHJpbnRmKFwiJXM6U0tJUDogYnBmX3Rlc3Rtb2QgaXMgbm90IGF2YWlsYWJsZVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0dm1saW51eF9idGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTtcbitcdGlmICghdm1saW51eF9idGYpIHtcbitcdFx0cHJpbnRmKFwiJXM6U0tJUDogdm1saW51eF9idGYgaXMgbm90IGF2YWlsYWJsZVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogRW5zdXJlIGJwZl90ZXN0bW9kIEJURiBpcyBhdmFpbGFibGUuICovXG4rXHRtb2R1bGVfYnRmID0gYnRmX19sb2FkX21vZHVsZV9idGYoXCJicGZfdGVzdG1vZFwiLCB2bWxpbnV4X2J0Zik7XG4rXHRpZiAoIW1vZHVsZV9idGYpIHtcbitcdFx0cHJpbnRmKFwiJXM6U0tJUDogYnBmX3Rlc3Rtb2QncyBCVEYgaXMgbm90IGF2YWlsYWJsZVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdGJ0Zl9fZnJlZSh2bWxpbnV4X2J0Zik7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0YnRmX19mcmVlKG1vZHVsZV9idGYpO1xuK1x0YnRmX19mcmVlKHZtbGludXhfYnRmKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfZGVmYXVsdFwiKSlcbitcdFx0YnRmX21vZHVsZV9hbGxvd2xpc3RfZGVmYXVsdCgpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJidGZfbW9kdWxlX2FsbG93bGlzdF9hbGxvd1wiKSlcbitcdFx0YnRmX21vZHVsZV9hbGxvd2xpc3RfYWxsb3coKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9hbGxvd2xpc3Rfc2tpcHVubGlzdGVkXCIpKVxuK1x0XHRidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfZW1wdHlsaXN0XCIpKVxuK1x0XHRidGZfbW9kdWxlX2FsbG93bGlzdF9lbXB0eWxpc3QoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfaW52YWxpZGlucHV0XCIpKVxuK1x0XHRidGZfbW9kdWxlX2FsbG93bGlzdF9pbnZhbGlkaW5wdXQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9hbGxvd2xpc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJiM2MzOGJlZTc3ZDZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX2FsbG93bGlzdC5jXG5AQCAtMCwwICsxLDEzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rXG4rU0VDKFwiZmVudHJ5L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2J0Zl9tb2R1bGVfYWxsb3dsaXN0KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoxNjowNi4yNDc5MjIzNzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODA0MTU4NTgwMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQcm92aWRlZCBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gcHJlc2VudGVkIHdpdGggYSBwYXRjaCBzZXJpZXMgYXBwbGllZCBhcyBhIEhFQUQgY29tbWl0LCBhbmQgdGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgXCJXb3J0aEZ1enppbmcuXCIgTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgY2hhbmdlZC4gIFRoZSBmaWxlcyBtb2RpZmllZCBhcmU6IGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL2xpYi9icGYvbGliYnBmLmhgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9hbGxvd2xpc3QuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmNgLiBBbGwgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuXG5cbk5vdywgbGV0IG1lIHJlY2FsbCB0aGUgY3J1Y2lhbCBndWlkZWxpbmVzIGZvciBkZXRlcm1pbmluZyBcIldvcnRoRnV6emluZz1mYWxzZVwiLiBBY2NvcmRpbmcgdG8gc2VjdGlvbiAyLCBJIG5lZWQgdG8gbG9vayBmb3IgKm5lZ2F0aXZlIGNyaXRlcmlhKjogY2hhbmdlcyB0aGF0ICpvbmx5KiBmYWxsIGludG8gc3BlY2lmaWMgY2F0ZWdvcmllcy4gTmFtZWx5LCBjaGFuZ2VzIHRoYXQgYXJlOiBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSwgbW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgc3BlbGxpbmcgZml4ZXMsIG9yIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMgKHNlbGYtdGVzdHMsIHNhbXBsZXMsIHNjcmlwdHMpIHRoYXQgKmRvbid0KiBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAoYHZtbGludXhgKSBvciBrZXJuZWwgbW9kdWxlcy5cblxuQSBxdWljayByZXZpZXcgb2YgdGhlIGRpZmYgY29uZmlybXMgdGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBhbGwgaW4gZWl0aGVyIGB0b29scy9saWIvYnBmL2Agb3IgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBub3cgaXMgdG8gdmVyaWZ5IHdoZXRoZXIgYW55ICpvdGhlciogZmlsZXMgd2VyZSB0b3VjaGVkIGluIHRoaXMgY29tbWl0LiBUaGFua2Z1bGx5LCB0aGUgZnVsbCBkaWZmIGlzIHByb3ZpZGVkLCBzbyBJIGRvbid0IG5lZWQgdG8gcmVhY2ggZm9yIGBnaXQgc3RhdHVzYCwgYGdpdCBkaWZmYCwgb3IgYSBgZ3JlcHBlcmAgY2FsbCAod2hpY2ggaXMgcmVhbGx5IGp1c3QgYSBgZ2l0IGdyZXBgIGFueXdheXMpLiAgVGhlIHByb3ZpZGVkIGRpZmYgY29uZmlybXMgdGhlIGxpc3QgSSBzdGFydGVkIHdpdGggaXMgZXhoYXVzdGl2ZS4gTm8gb3RoZXIgZmlsZXMgYXJlIHRvdWNoZWQuXG5cbkFscmlnaHQuIENvbnNpZGVyaW5nIHRoZSBjb250ZXh0LCBgdG9vbHMvbGliL2JwZmAgY29udGFpbnMgdGhlIHVzZXItc3BhY2UgbGliYnBmIGxpYnJhcnksIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmYCBhcmUgdXNlci1zcGFjZSBzZWxmLXRlc3RzLiAgTXkgYXNzZXNzbWVudCBpcyB0aGF0IG5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUga2VybmVsIG9yIHRoZSBrZXJuZWwgbW9kdWxlcy5cblxuSSBnbyBiYWNrIHRvIHRoZSBndWlkZWxpbmVzIG9uY2UgbW9yZSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFllcCwgdGhlIGNoYW5nZXMgc3RyaWN0bHkgZmFsbCB1bmRlciB0aGUgXCJ1c2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLi4uIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlc1wiIGNhdGVnb3J5LiBQZXJmZWN0LiBUaGlzIGlzIGEgY2xlYXIgY2FzZSBmb3IgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byB1c2VyLXNwYWNlIHRvb2xzIGFuZCB0ZXN0cywgYW5kIHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIHdpdGgga2VybmVsIGNvZGUuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbnMgYXJlIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAsIGBGb2N1c1N5bWJvbHM9W11gLCBhbmQgYEVuYWJsZUNvbmZpZ3M9W11gLiAgTXkgcmVhc29uaW5nIGlzIGNvbmNpc2VseSBleHBsYWluZWQ6IGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIHVzZXItc3BhY2UgbGliYnBmIGFuZCBzZWxmLXRlc3RzIGxvY2F0ZWQgdW5kZXIgdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgYW5kIHRoZSBjaGFuZ2VzIGRvIG5vdCBhZmZlY3QgdGhlIGtlcm5lbCBjb2RlLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE0NywiT3V0cHV0VG9rZW5zIjo5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzowMjo1MC40MDY1MDUyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIHRvb2xzL2xpYi9icGYgKGxpYmJwZiBsaWJyYXJ5KSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmIChzZWxmdGVzdHMpLiBJdCBkb2VzIG5vdCBhbHRlciB0aGUgTGludXgga2VybmVsIGltYWdlIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgc28gaXQgaXMgbm90IGFwcGxpY2FibGUgZm9yIHN5emthbGxlciBrZXJuZWwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSBjb2RlIHdpdGhpbiB0b29scy9saWIvYnBmIChsaWJicGYgbGlicmFyeSkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZiAoc2VsZnRlc3RzKS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSBvciBhbnkga2VybmVsIG1vZHVsZXMsIHNvIGl0IGlzIG5vdCBhcHBsaWNhYmxlIGZvciBzeXprYWxsZXIga2VybmVsIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzowMjo1MC40MDY1Mjc1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowwkhds[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 15:58:14 +0000 UTC FinishedAt: 2026-09-15 17:02:52 +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+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NDZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7JiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSBjb2RlIHdpdGhpbiB0b29scy9saWIvYnBmIChsaWJicGYgbGlicmFyeSkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZiAoc2VsZnRlc3RzKS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSBvciBhbnkga2VybmVsIG1vZHVsZXMsIHNvIGl0IGlzIG5vdCBhcHBsaWNhYmxlIGZvciBzeXprYWxsZXIga2VybmVsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWMyNmU4YzE0MmY0NmZkNzEwNDE5ZTBkYjg4MzBkZTkyY2QyNmE5NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDE2OjE2OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5pbmRleCBjMDM2ZThhOTFlZDg4Li5hNzcxMTVlMWIxNzE1IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuQEAgLTc1MSw2ICYjNDM7NzUxLDggQEAgc3RydWN0IGJwZl9vYmplY3Qge1xuIFx0Ym9vbCBidGZfbW9kdWxlc19sb2FkZWQ7XG4gXHRzaXplX3QgYnRmX21vZHVsZV9jbnQ7XG4gXHRzaXplX3QgYnRmX21vZHVsZV9jYXA7XG4mIzQzO1x0Y2hhciAqKmJ0Zl9tb2R1bGVfYWxsb3dsaXN0O1xuJiM0MztcdHNzaXplX3QgYnRmX21vZHVsZV9hbGxvd2xpc3RfY250O1xuIFxuIFx0Lyogb3B0aW9uYWwgbG9nIHNldHRpbmdzIHBhc3NlZCB0byBCUEZfQlRGX0xPQUQgYW5kIEJQRl9QUk9HX0xPQUQgY29tbWFuZHMgKi9cbiBcdGNoYXIgKmxvZ19idWY7XG5AQCAtNTg1MSw2ICYjNDM7NTg1MywyMSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBpc19idGZfbW9kX2FsbG93ZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHNzaXplX3QgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChzdHJjbXAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0W2ldLCBuYW1lKSA9PSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiB7XG4gXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XG5AQCAtNTg3Myw2ICYjNDM7NTg5MCw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0aWYgKCFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX01PRFVMRV9CVEYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRpZiAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0ZXJyID0gYnBmX2J0Zl9nZXRfbmV4dF9pZChpZCwgXHUwMDI2aWQpO1xuIFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTk9FTlQpXG5AQCAtNTkxNSw2ICYjNDM7NTkzNSwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKCFpc19idGZfbW9kX2FsbG93ZWQob2JqLCBuYW1lKSkge1xuJiM0MztcdFx0XHRjbG9zZShmZCk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0YnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuIFx0XHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XG4gXHRcdGlmIChlcnIpIHtcbkBAIC01OTM5LDYgJiM0Mzs1OTY0LDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRpZiAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9PSBvYmotXHUwMDNlYnRmX21vZHVsZV9jbnQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKGVycikge1xuQEAgLTg0ODEsNiAmIzQzOzg1MDksOCBAQCBzdGF0aWMgc3RydWN0IGJwZl9vYmplY3QgKmJwZl9vYmplY3Rfb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB2b2lkICpvYmpfYnVmLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyAqb3B0cylcbiB7XG4gXHRjb25zdCBjaGFyICprY29uZmlnLCAqYnRmX3RtcF9wYXRoLCAqdG9rZW5fcGF0aDtcbiYjNDM7XHRzaXplX3QgbW9kX2FsbG93X2NudCwgaSwgajtcbiYjNDM7XHRjb25zdCBjaGFyICoqbW9kX2FsbG93O1xuIFx0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbiBcdGludCBlcnI7XG4gXHRjaGFyICpsb2dfYnVmO1xuQEAgLTg1MjUsNiAmIzQzOzg1NTUsMjIgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcbiBcdGlmICh0b2tlbl9wYXRoIFx1MDAyNlx1MDAyNiBzdHJsZW4odG9rZW5fcGF0aCkgXHUwMDNlPSBQQVRIX01BWClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7XG4gXG4mIzQzO1x0bW9kX2FsbG93ID0gT1BUU19HRVQob3B0cywgYnRmX21vZHVsZV9hbGxvd2xpc3QsIE5VTEwpO1xuJiM0MztcdG1vZF9hbGxvd19jbnQgPSBPUFRTX0dFVChvcHRzLCBidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQsIDApO1xuJiM0MztcbiYjNDM7XHRpZiAobW9kX2FsbG93X2NudCBcdTAwM2UgU1NJWkVfTUFYIHx8ICghbW9kX2FsbG93IFx1MDAyNlx1MDAyNiBtb2RfYWxsb3dfY250IFx1MDAzZSAwKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtb2RfYWxsb3dfY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFtb2RfYWxsb3dbaV0gfHwgIW1vZF9hbGxvd1tpXVswXSlcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHN0cmNtcChtb2RfYWxsb3dbaV0sIG1vZF9hbGxvd1tqXSkgPT0gMClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0b2JqID0gYnBmX29iamVjdF9fbmV3KHBhdGgsIG9ial9idWYsIG9ial9idWZfc3osIG9ial9uYW1lKTtcbiBcdGlmIChJU19FUlIob2JqKSlcbiBcdFx0cmV0dXJuIG9iajtcbkBAIC04NTYzLDYgJiM0Mzs4NjA5LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID0gbW9kX2FsbG93ID8gbW9kX2FsbG93X2NudCA6IC0xO1xuJiM0MztcdGlmIChtb2RfYWxsb3dfY250IFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3QgPVxuJiM0MztcdFx0XHRjYWxsb2MobW9kX2FsbG93X2NudCwgc2l6ZW9mKCpvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3QpKTtcbiYjNDM7XHRcdGlmICghb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1vZF9hbGxvd19jbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdFtpXSA9IHN0cmR1cChtb2RfYWxsb3dbaV0pO1xuJiM0MztcdFx0XHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdFtpXSkge1xuJiM0MztcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZXJyID0gYnBmX29iamVjdF9fZWxmX2luaXQob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9leHRlcm5zKG9iaik7XG5AQCAtOTY4NCw2ICYjNDM7OTc0OCwxMiBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGNsb3NlKG9iai1cdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlanVtcHRhYmxlX21hcHMpO1xuIFxuJiM0MztcdGlmIChvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3QpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RbaV0pO1xuJiM0MztcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uODk3NjgyNDRkNWQ5ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0yMjQsMTAgJiM0MzsyMjQsMjQgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcbiBcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxuIFx0ICovXG4gXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9wdGlvbmFsIGFsbG93bGlzdCBvZiBrZXJuZWwgbW9kdWxlIG5hbWVzIHdob3NlIEJURnMgbGliYnBmIGlzXG4mIzQzO1x0ICogYWxsb3dlZCB0byBsb2FkLiBUaGUgYWxsb3dsaXN0IGxpbWl0cyB3aGljaCBrZXJuZWwgbW9kdWxlIEJURnMgbGliYnBmXG4mIzQzO1x0ICogd2lsbCBjb25zdWx0IHdoZXJldmVyIG1vZHVsZSBCVEYgbWlnaHQgYmUgbmVlZGVkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogV2hlbiB0aGUgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBleGlzdGluZyBiZWhhdmlvciByZW1haW5zXG4mIzQzO1x0ICogdW5jaGFuZ2VkLiBBbiBleHBsaWNpdGx5IHNwZWNpZmllZCBlbXB0eSBsaXN0IHByZXZlbnRzIGxpYmJwZiBmcm9tXG4mIzQzO1x0ICogY29uc3VsdGluZyBhbnkga2VybmVsIG1vZHVsZSBCVEZzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIGxpc3QgbXVzdCBjb250YWluIHZhbGlkLCBub24tZW1wdHkgbW9kdWxlIG5hbWVzIGFuZCBtdXN0IG5vdFxuJiM0MztcdCAqIGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzIHJldHVybmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGNvbnN0IGNoYXIgKipidGZfbW9kdWxlX2FsbG93bGlzdDtcbiYjNDM7XHRzaXplX3QgYnRmX21vZHVsZV9hbGxvd2xpc3RfY250O1xuIFxuIFx0c2l6ZV90IDowO1xuIH07XG4tI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aFxuJiM0MzsjZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudFxuIFxuIC8qKlxuICAqIEBicmllZiAqKmJwZl9vYmplY3RfX29wZW4oKSoqIGNyZWF0ZXMgYSBicGZfb2JqZWN0IGJ5IG9wZW5pbmdcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX2FsbG93bGlzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9hbGxvd2xpc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjMxODkxMzNlZTU4YjZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmNcbkBAIC0wLDAgJiM0MzsxLDE2MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2J0Zi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0LnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9sb2FkX3dpdGhfbGlzdChjb25zdCBjaGFyICoqbGlzdCwgc2l6ZV90IGNvdW50LFxuJiM0MztcdFx0XHRcdGludCBleHBlY3RlZF9yZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmX21vZHVsZV9hbGxvd2xpc3QgKnNrZWw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5idGZfbW9kdWxlX2FsbG93bGlzdCA9IGxpc3QsXG4mIzQzO1x0XHQuYnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID0gY291bnQsXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuX29wdHNcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZChza2VsKTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCBleHBlY3RlZF9yZXQsIFwmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X19sb2FkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2RlZmF1bHQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidGZfbW9kdWxlX2FsbG93bGlzdCAqc2tlbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRza2VsID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW4oKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7YnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW5cJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZChza2VsKTtcbiYjNDM7XHRBU1NFUlRfT0socmV0LCBcJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX2FsbG93bGlzdF9hbGxvdyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbW9kX2xpc3RbXSA9IHsgXCYjMzQ7YnBmX3Rlc3Rtb2RcJiMzNDsgfTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9sb2FkX3dpdGhfbGlzdChtb2RfbGlzdCwgMSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgbm9uLU5VTEwgYWxsb3dsaXN0IHdpdGggYSBjb3VudCBvZiAwIGV4cGxpY2l0bHkgZGlzYWJsZXMgbW9kdWxlIEJURnMuXG4mIzQzOyAqIFRoZSBwb2ludGVyIG11c3QgYmUgbm9uLU5VTEwgdG8gZGlzdGluZ3Vpc2ggdGhpcyBmcm9tIGFuIHVuc3BlY2lmaWVkXG4mIzQzOyAqIGFsbG93bGlzdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2VtcHR5bGlzdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbW9kX2xpc3RbXSA9IHsgTlVMTCB9O1xuJiM0MztcbiYjNDM7XHR0ZXN0X2xvYWRfd2l0aF9saXN0KG1vZF9saXN0LCAwLCAtRVNSQ0gpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBicGZfdGVzdG1vZCBpcyBub3QgaW4gdGhlIGFsbG93bGlzdCwgc28gaXRzIEJURiBzaG91bGQgbm90IGJlIGxvYWRlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X3NraXB1bmxpc3RlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbW9kX2xpc3RbXSA9IHsgXCYjMzQ7bW9kdWxlX25vbmV4aXN0XCYjMzQ7IH07XG4mIzQzO1x0c3RydWN0IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0ICpza2VsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4mIzQzO1x0XHQuYnRmX21vZHVsZV9hbGxvd2xpc3QgPSBtb2RfbGlzdCxcbiYjNDM7XHRcdC5idGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgPSAxLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dyYW1fX3NldF9hdHRhY2hfdGFyZ2V0KHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9idGZfbW9kdWxlX2FsbG93bGlzdCwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7YnBmX3Rlc3Rtb2Q6YnBmX3Rlc3Rtb2RfZmVudHJ5X3Rlc3QxXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAtRVNSQ0gsIFwmIzM0O2JwZl9wcm9ncmFtX19zZXRfYXR0YWNoX3RhcmdldFwmIzM0Oyk7XG4mIzQzO1x0YnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9pbnB1dChjb25zdCBjaGFyICoqbGlzdCwgc2l6ZV90IGNvdW50LFxuJiM0MztcdFx0XHQgICAgICAgY29uc3QgY2hhciAqdGVzdF9uYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0ICpza2VsO1xuJiM0MztcdGNoYXIgYXNzZXJ0X25hbWVbNjRdO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4mIzQzO1x0XHQuYnRmX21vZHVsZV9hbGxvd2xpc3QgPSBsaXN0LFxuJiM0MztcdFx0LmJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9IGNvdW50LFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGFzc2VydF9uYW1lLCBzaXplb2YoYXNzZXJ0X25hbWUpLCBcJiMzNDslczogb3Blbl9vcHRzXCYjMzQ7LCB0ZXN0X25hbWUpO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdGVyciA9IGVycm5vO1xuJiM0MztcdGlmICghQVNTRVJUX05VTEwoc2tlbCwgYXNzZXJ0X25hbWUpKSB7XG4mIzQzO1x0XHRidGZfbW9kdWxlX2FsbG93bGlzdF9fZGVzdHJveShza2VsKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0c25wcmludGYoYXNzZXJ0X25hbWUsIHNpemVvZihhc3NlcnRfbmFtZSksIFwmIzM0OyVzOiBvcGVuX29wdHMgZXJyXCYjMzQ7LCB0ZXN0X25hbWUpO1xuJiM0MztcdEFTU0VSVF9FUShlcnIsIEVJTlZBTCwgYXNzZXJ0X25hbWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX2FsbG93bGlzdF9pbnZhbGlkaW5wdXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWVzW10gPSB7IE5VTEwgfTtcbiYjNDM7XHRjb25zdCBjaGFyICplbXB0eV9uYW1lc1tdID0geyBcJiMzNDtcJiMzNDsgfTtcbiYjNDM7XHRjb25zdCBjaGFyICpkdXBsaWNhdGVfbmFtZXNbXSA9IHsgXCYjMzQ7YnBmX3Rlc3Rtb2RcJiMzNDssIFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7IH07XG4mIzQzO1xuJiM0MztcdHRlc3RfaW52YWxpZF9pbnB1dChOVUxMLCAxLCBcJiMzNDtudWxsX2xpc3RcJiMzNDspO1xuJiM0MztcdHRlc3RfaW52YWxpZF9pbnB1dChuYW1lcywgMSwgXCYjMzQ7bnVsbF9uYW1lXCYjMzQ7KTtcbiYjNDM7XHR0ZXN0X2ludmFsaWRfaW5wdXQoZW1wdHlfbmFtZXMsIDEsIFwmIzM0O2VtcHR5X25hbWVcJiMzNDspO1xuJiM0MztcdHRlc3RfaW52YWxpZF9pbnB1dChkdXBsaWNhdGVfbmFtZXMsIDIsIFwmIzM0O2R1cGxpY2F0ZV9uYW1lXCYjMzQ7KTtcbiYjNDM7XHR0ZXN0X2ludmFsaWRfaW5wdXQobmFtZXMsIChzaXplX3QpU1NJWkVfTUFYICYjNDM7IDEsIFwmIzM0O2xhcmdlX2NvdW50XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2J0Zl9tb2R1bGVfYWxsb3dsaXN0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmICp2bWxpbnV4X2J0ZiA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGJ0ZiAqbW9kdWxlX2J0ZiA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdGlmICghZW52Lmhhc190ZXN0bW9kKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDogYnBmX3Rlc3Rtb2QgaXMgbm90IGF2YWlsYWJsZVxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dm1saW51eF9idGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTtcbiYjNDM7XHRpZiAoIXZtbGludXhfYnRmKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDogdm1saW51eF9idGYgaXMgbm90IGF2YWlsYWJsZVxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRW5zdXJlIGJwZl90ZXN0bW9kIEJURiBpcyBhdmFpbGFibGUuICovXG4mIzQzO1x0bW9kdWxlX2J0ZiA9IGJ0Zl9fbG9hZF9tb2R1bGVfYnRmKFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7LCB2bWxpbnV4X2J0Zik7XG4mIzQzO1x0aWYgKCFtb2R1bGVfYnRmKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDogYnBmX3Rlc3Rtb2QmIzM5O3MgQlRGIGlzIG5vdCBhdmFpbGFibGVcXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRcdGJ0Zl9fZnJlZSh2bWxpbnV4X2J0Zik7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidGZfX2ZyZWUobW9kdWxlX2J0Zik7XG4mIzQzO1x0YnRmX19mcmVlKHZtbGludXhfYnRmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YnRmX21vZHVsZV9hbGxvd2xpc3RfZGVmYXVsdFwmIzM0OykpXG4mIzQzO1x0XHRidGZfbW9kdWxlX2FsbG93bGlzdF9kZWZhdWx0KCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X2FsbG93XCYjMzQ7KSlcbiYjNDM7XHRcdGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2FsbG93KCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X3NraXB1bmxpc3RlZFwmIzM0OykpXG4mIzQzO1x0XHRidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YnRmX21vZHVsZV9hbGxvd2xpc3RfZW1wdHlsaXN0XCYjMzQ7KSlcbiYjNDM7XHRcdGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2VtcHR5bGlzdCgpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9pbnZhbGlkaW5wdXRcJiMzNDspKVxuJiM0MztcdFx0YnRmX21vZHVsZV9hbGxvd2xpc3RfaW52YWxpZGlucHV0KCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9hbGxvd2xpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX2FsbG93bGlzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmIzYzM4YmVlNzdkNlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmNcbkBAIC0wLDAgJiM0MzsxLDEzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9idGZfbW9kdWxlX2FsbG93bGlzdClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjQ2bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgY29kZSB3aXRoaW4gdG9vbHMvbGliL2JwZiAobGliYnBmIGxpYnJhcnkpIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYgKHNlbGZ0ZXN0cykuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2Ugb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3QgYXBwbGljYWJsZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFjMjZlOGMxNDJmNDZmZDcxMDQxOWUwZGI4ODMwZGU5MmNkMjZhOTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAxNjoxNjowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCmluZGV4IGMwMzZlOGE5MWVkODguLmE3NzExNWUxYjE3MTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwpAQCAtNzUxLDYgJiM0Mzs3NTEsOCBAQCBzdHJ1Y3QgYnBmX29iamVjdCB7CiAJYm9vbCBidGZfbW9kdWxlc19sb2FkZWQ7CiAJc2l6ZV90IGJ0Zl9tb2R1bGVfY250OwogCXNpemVfdCBidGZfbW9kdWxlX2NhcDsKJiM0MzsJY2hhciAqKmJ0Zl9tb2R1bGVfYWxsb3dsaXN0OwomIzQzOwlzc2l6ZV90IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudDsKIAogCS8qIG9wdGlvbmFsIGxvZyBzZXR0aW5ncyBwYXNzZWQgdG8gQlBGX0JURl9MT0FEIGFuZCBCUEZfUFJPR19MT0FEIGNvbW1hbmRzICovCiAJY2hhciAqbG9nX2J1ZjsKQEAgLTU4NTEsNiAmIzQzOzU4NTMsMjEgQEAgaW50IGJwZl9jb3JlX2FkZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY2FuZCAqbG9jYWxfY2FuZCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBib29sIGlzX2J0Zl9tb2RfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJc3NpemVfdCBpOwomIzQzOwomIzQzOwlpZiAob2JqLSZndDtidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBvYmotJmd0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzdHJjbXAob2JqLSZndDtidGZfbW9kdWxlX2FsbG93bGlzdFtpXSwgbmFtZSkgPT0gMCkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IGJwZl9idGZfaW5mbyBpbmZvOwpAQCAtNTg3Myw2ICYjNDM7NTg5MCw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCWlmICgha2VybmVsX3N1cHBvcnRzKG9iaiwgRkVBVF9NT0RVTEVfQlRGKSkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJaWYgKG9iai0mZ3Q7YnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID09IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAl3aGlsZSAodHJ1ZSkgewogCQllcnIgPSBicGZfYnRmX2dldF9uZXh0X2lkKGlkLCAmYW1wO2lkKTsKIAkJaWYgKGVyciAmYW1wOyZhbXA7IGVycm5vID09IEVOT0VOVCkKQEAgLTU5MTUsNiAmIzQzOzU5MzUsMTEgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCQljb250aW51ZTsKIAkJfQogCiYjNDM7CQlpZiAoIWlzX2J0Zl9tb2RfYWxsb3dlZChvYmosIG5hbWUpKSB7CiYjNDM7CQkJY2xvc2UoZmQpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwogCQlidGYgPSBidGZfZ2V0X2Zyb21fZmQoZmQsIG9iai0mZ3Q7YnRmX3ZtbGludXgpOwogCQllcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7CiAJCWlmIChlcnIpIHsKQEAgLTU5MzksNiAmIzQzOzU5NjQsOSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJCWJyZWFrOwogCQl9CiAJCW9iai0mZ3Q7YnRmX21vZHVsZV9jbnQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJaWYgKG9iai0mZ3Q7YnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID09IG9iai0mZ3Q7YnRmX21vZHVsZV9jbnQpCiYjNDM7CQkJYnJlYWs7CiAJfQogCiAJaWYgKGVycikgewpAQCAtODQ4MSw2ICYjNDM7ODUwOSw4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsCiAJCQkJCSAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKQogewogCWNvbnN0IGNoYXIgKmtjb25maWcsICpidGZfdG1wX3BhdGgsICp0b2tlbl9wYXRoOwomIzQzOwlzaXplX3QgbW9kX2FsbG93X2NudCwgaSwgajsKJiM0MzsJY29uc3QgY2hhciAqKm1vZF9hbGxvdzsKIAlzdHJ1Y3QgYnBmX29iamVjdCAqb2JqOwogCWludCBlcnI7CiAJY2hhciAqbG9nX2J1ZjsKQEAgLTg1MjUsNiAmIzQzOzg1NTUsMjIgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZiwKIAlpZiAodG9rZW5fcGF0aCAmYW1wOyZhbXA7IHN0cmxlbih0b2tlbl9wYXRoKSAmZ3Q7PSBQQVRIX01BWCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CiAKJiM0MzsJbW9kX2FsbG93ID0gT1BUU19HRVQob3B0cywgYnRmX21vZHVsZV9hbGxvd2xpc3QsIE5VTEwpOwomIzQzOwltb2RfYWxsb3dfY250ID0gT1BUU19HRVQob3B0cywgYnRmX21vZHVsZV9hbGxvd2xpc3RfY250LCAwKTsKJiM0MzsKJiM0MzsJaWYgKG1vZF9hbGxvd19jbnQgJmd0OyBTU0laRV9NQVggfHwgKCFtb2RfYWxsb3cgJmFtcDsmYW1wOyBtb2RfYWxsb3dfY250ICZndDsgMCkpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1vZF9hbGxvd19jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoIW1vZF9hbGxvd1tpXSB8fCAhbW9kX2FsbG93W2ldWzBdKQomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IGk7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKHN0cmNtcChtb2RfYWxsb3dbaV0sIG1vZF9hbGxvd1tqXSkgPT0gMCkKJiM0MzsJCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlvYmogPSBicGZfb2JqZWN0X19uZXcocGF0aCwgb2JqX2J1Ziwgb2JqX2J1Zl9zeiwgb2JqX25hbWUpOwogCWlmIChJU19FUlIob2JqKSkKIAkJcmV0dXJuIG9iajsKQEAgLTg1NjMsNiAmIzQzOzg2MDksMjQgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZiwKIAkJfQogCX0KIAomIzQzOwlvYmotJmd0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9IG1vZF9hbGxvdyA/IG1vZF9hbGxvd19jbnQgOiAtMTsKJiM0MzsJaWYgKG1vZF9hbGxvd19jbnQgJmd0OyAwKSB7CiYjNDM7CQlvYmotJmd0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0ID0KJiM0MzsJCQljYWxsb2MobW9kX2FsbG93X2NudCwgc2l6ZW9mKCpvYmotJmd0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0KSk7CiYjNDM7CQlpZiAoIW9iai0mZ3Q7YnRmX21vZHVsZV9hbGxvd2xpc3QpIHsKJiM0MzsJCQllcnIgPSAtRU5PTUVNOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG1vZF9hbGxvd19jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJb2JqLSZndDtidGZfbW9kdWxlX2FsbG93bGlzdFtpXSA9IHN0cmR1cChtb2RfYWxsb3dbaV0pOwomIzQzOwkJCWlmICghb2JqLSZndDtidGZfbW9kdWxlX2FsbG93bGlzdFtpXSkgewomIzQzOwkJCQllcnIgPSAtRU5PTUVNOwomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBicGZfb2JqZWN0X19lbGZfaW5pdChvYmopOwogCWVyciA9IGVyciA/IDogYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qob2JqKTsKIAllcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2NvbGxlY3RfZXh0ZXJucyhvYmopOwpAQCAtOTY4NCw2ICYjNDM7OTc0OCwxMiBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCWNsb3NlKG9iai0mZ3Q7anVtcHRhYmxlX21hcHNbaV0uZmQpOwogCXpmcmVlKCZhbXA7b2JqLSZndDtqdW1wdGFibGVfbWFwcyk7CiAKJiM0MzsJaWYgKG9iai0mZ3Q7YnRmX21vZHVsZV9hbGxvd2xpc3QpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBvYmotJmd0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudDsgaSYjNDM7JiM0MzspCiYjNDM7CQkJemZyZWUoJmFtcDtvYmotJmd0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0W2ldKTsKJiM0MzsJCXpmcmVlKCZhbXA7b2JqLSZndDtidGZfbW9kdWxlX2FsbG93bGlzdCk7CiYjNDM7CX0KJiM0MzsKIAlmcmVlKG9iaik7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oCmluZGV4IGI5NjVhZDU3MTU0MDMuLjg5NzY4MjQ0ZDVkOWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuaApAQCAtMjI0LDEwICYjNDM7MjI0LDI0IEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7CiAJICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuCiAJICovCiAJY29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7CiYjNDM7CS8qCiYjNDM7CSAqIE9wdGlvbmFsIGFsbG93bGlzdCBvZiBrZXJuZWwgbW9kdWxlIG5hbWVzIHdob3NlIEJURnMgbGliYnBmIGlzCiYjNDM7CSAqIGFsbG93ZWQgdG8gbG9hZC4gVGhlIGFsbG93bGlzdCBsaW1pdHMgd2hpY2gga2VybmVsIG1vZHVsZSBCVEZzIGxpYmJwZgomIzQzOwkgKiB3aWxsIGNvbnN1bHQgd2hlcmV2ZXIgbW9kdWxlIEJURiBtaWdodCBiZSBuZWVkZWQuCiYjNDM7CSAqCiYjNDM7CSAqIFdoZW4gdGhlIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZXhpc3RpbmcgYmVoYXZpb3IgcmVtYWlucwomIzQzOwkgKiB1bmNoYW5nZWQuIEFuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGVtcHR5IGxpc3QgcHJldmVudHMgbGliYnBmIGZyb20KJiM0MzsJICogY29uc3VsdGluZyBhbnkga2VybmVsIG1vZHVsZSBCVEZzLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgbGlzdCBtdXN0IGNvbnRhaW4gdmFsaWQsIG5vbi1lbXB0eSBtb2R1bGUgbmFtZXMgYW5kIG11c3Qgbm90CiYjNDM7CSAqIGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzIHJldHVybmVkLgomIzQzOwkgKi8KJiM0MzsJY29uc3QgY2hhciAqKmJ0Zl9tb2R1bGVfYWxsb3dsaXN0OwomIzQzOwlzaXplX3QgYnRmX21vZHVsZV9hbGxvd2xpc3RfY250OwogCiAJc2l6ZV90IDowOwogfTsKLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGgKJiM0MzsjZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudAogCiAvKioKICAqIEBicmllZiAqKmJwZl9vYmplY3RfX29wZW4oKSoqIGNyZWF0ZXMgYSBicGZfb2JqZWN0IGJ5IG9wZW5pbmcKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX2FsbG93bGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjMxODkxMzNlZTU4YjYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX2FsbG93bGlzdC5jCkBAIC0wLDAgJiM0MzsxLDE2MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2J0Zi5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnRmX21vZHVsZV9hbGxvd2xpc3Quc2tlbC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2xvYWRfd2l0aF9saXN0KGNvbnN0IGNoYXIgKipsaXN0LCBzaXplX3QgY291bnQsCiYjNDM7CQkJCWludCBleHBlY3RlZF9yZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmX21vZHVsZV9hbGxvd2xpc3QgKnNrZWw7CiYjNDM7CWludCByZXQ7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmJ0Zl9tb2R1bGVfYWxsb3dsaXN0ID0gbGlzdCwKJiM0MzsJCS5idGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgPSBjb3VudCwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7YnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW5fb3B0cyYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmV0ID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX2xvYWQoc2tlbCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIGV4cGVjdGVkX3JldCwgJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZCYjMzQ7KTsKJiM0MzsKJiM0MzsJYnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2RlZmF1bHQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBidGZfbW9kdWxlX2FsbG93bGlzdCAqc2tlbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZXQgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZChza2VsKTsKJiM0MzsJQVNTRVJUX09LKHJldCwgJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZCYjMzQ7KTsKJiM0MzsKJiM0MzsJYnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2FsbG93KHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICptb2RfbGlzdFtdID0geyAmIzM0O2JwZl90ZXN0bW9kJiMzNDsgfTsKJiM0MzsKJiM0MzsJdGVzdF9sb2FkX3dpdGhfbGlzdChtb2RfbGlzdCwgMSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBub24tTlVMTCBhbGxvd2xpc3Qgd2l0aCBhIGNvdW50IG9mIDAgZXhwbGljaXRseSBkaXNhYmxlcyBtb2R1bGUgQlRGcy4KJiM0MzsgKiBUaGUgcG9pbnRlciBtdXN0IGJlIG5vbi1OVUxMIHRvIGRpc3Rpbmd1aXNoIHRoaXMgZnJvbSBhbiB1bnNwZWNpZmllZAomIzQzOyAqIGFsbG93bGlzdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX2FsbG93bGlzdF9lbXB0eWxpc3Qodm9pZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKm1vZF9saXN0W10gPSB7IE5VTEwgfTsKJiM0MzsKJiM0MzsJdGVzdF9sb2FkX3dpdGhfbGlzdChtb2RfbGlzdCwgMCwgLUVTUkNIKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBicGZfdGVzdG1vZCBpcyBub3QgaW4gdGhlIGFsbG93bGlzdCwgc28gaXRzIEJURiBzaG91bGQgbm90IGJlIGxvYWRlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKm1vZF9saXN0W10gPSB7ICYjMzQ7bW9kdWxlX25vbmV4aXN0JiMzNDsgfTsKJiM0MzsJc3RydWN0IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0ICpza2VsOwomIzQzOwlpbnQgcmV0OwomIzQzOwlMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cywKJiM0MzsJCS5idGZfbW9kdWxlX2FsbG93bGlzdCA9IG1vZF9saXN0LAomIzQzOwkJLmJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9IDEsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzKCZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuX29wdHMmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9wcm9ncmFtX19zZXRfYXR0YWNoX3RhcmdldChza2VsLSZndDtwcm9ncy50ZXN0X2J0Zl9tb2R1bGVfYWxsb3dsaXN0LCAwLAomIzQzOwkJCQkJICAgICAmIzM0O2JwZl90ZXN0bW9kOmJwZl90ZXN0bW9kX2ZlbnRyeV90ZXN0MSYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgLUVTUkNILCAmIzM0O2JwZl9wcm9ncmFtX19zZXRfYXR0YWNoX3RhcmdldCYjMzQ7KTsKJiM0MzsJYnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9pbnB1dChjb25zdCBjaGFyICoqbGlzdCwgc2l6ZV90IGNvdW50LAomIzQzOwkJCSAgICAgICBjb25zdCBjaGFyICp0ZXN0X25hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmX21vZHVsZV9hbGxvd2xpc3QgKnNrZWw7CiYjNDM7CWNoYXIgYXNzZXJ0X25hbWVbNjRdOwomIzQzOwlpbnQgZXJyOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cywKJiM0MzsJCS5idGZfbW9kdWxlX2FsbG93bGlzdCA9IGxpc3QsCiYjNDM7CQkuYnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID0gY291bnQsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXNucHJpbnRmKGFzc2VydF9uYW1lLCBzaXplb2YoYXNzZXJ0X25hbWUpLCAmIzM0OyVzOiBvcGVuX29wdHMmIzM0OywgdGVzdF9uYW1lKTsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJZXJyID0gZXJybm87CiYjNDM7CWlmICghQVNTRVJUX05VTEwoc2tlbCwgYXNzZXJ0X25hbWUpKSB7CiYjNDM7CQlidGZfbW9kdWxlX2FsbG93bGlzdF9fZGVzdHJveShza2VsKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlzbnByaW50Zihhc3NlcnRfbmFtZSwgc2l6ZW9mKGFzc2VydF9uYW1lKSwgJiMzNDslczogb3Blbl9vcHRzIGVyciYjMzQ7LCB0ZXN0X25hbWUpOwomIzQzOwlBU1NFUlRfRVEoZXJyLCBFSU5WQUwsIGFzc2VydF9uYW1lKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9hbGxvd2xpc3RfaW52YWxpZGlucHV0KHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpuYW1lc1tdID0geyBOVUxMIH07CiYjNDM7CWNvbnN0IGNoYXIgKmVtcHR5X25hbWVzW10gPSB7ICYjMzQ7JiMzNDsgfTsKJiM0MzsJY29uc3QgY2hhciAqZHVwbGljYXRlX25hbWVzW10gPSB7ICYjMzQ7YnBmX3Rlc3Rtb2QmIzM0OywgJiMzNDticGZfdGVzdG1vZCYjMzQ7IH07CiYjNDM7CiYjNDM7CXRlc3RfaW52YWxpZF9pbnB1dChOVUxMLCAxLCAmIzM0O251bGxfbGlzdCYjMzQ7KTsKJiM0MzsJdGVzdF9pbnZhbGlkX2lucHV0KG5hbWVzLCAxLCAmIzM0O251bGxfbmFtZSYjMzQ7KTsKJiM0MzsJdGVzdF9pbnZhbGlkX2lucHV0KGVtcHR5X25hbWVzLCAxLCAmIzM0O2VtcHR5X25hbWUmIzM0Oyk7CiYjNDM7CXRlc3RfaW52YWxpZF9pbnB1dChkdXBsaWNhdGVfbmFtZXMsIDIsICYjMzQ7ZHVwbGljYXRlX25hbWUmIzM0Oyk7CiYjNDM7CXRlc3RfaW52YWxpZF9pbnB1dChuYW1lcywgKHNpemVfdClTU0laRV9NQVggJiM0MzsgMSwgJiMzNDtsYXJnZV9jb3VudCYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2J0Zl9tb2R1bGVfYWxsb3dsaXN0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmICp2bWxpbnV4X2J0ZiA9IE5VTEw7CiYjNDM7CXN0cnVjdCBidGYgKm1vZHVsZV9idGYgPSBOVUxMOwomIzQzOwomIzQzOwlpZiAoIWVudi5oYXNfdGVzdG1vZCkgewomIzQzOwkJcHJpbnRmKCYjMzQ7JXM6U0tJUDogYnBmX3Rlc3Rtb2QgaXMgbm90IGF2YWlsYWJsZVxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwl2bWxpbnV4X2J0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpOwomIzQzOwlpZiAoIXZtbGludXhfYnRmKSB7CiYjNDM7CQlwcmludGYoJiMzNDslczpTS0lQOiB2bWxpbnV4X2J0ZiBpcyBub3QgYXZhaWxhYmxlXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEVuc3VyZSBicGZfdGVzdG1vZCBCVEYgaXMgYXZhaWxhYmxlLiAqLwomIzQzOwltb2R1bGVfYnRmID0gYnRmX19sb2FkX21vZHVsZV9idGYoJiMzNDticGZfdGVzdG1vZCYjMzQ7LCB2bWxpbnV4X2J0Zik7CiYjNDM7CWlmICghbW9kdWxlX2J0ZikgewomIzQzOwkJcHJpbnRmKCYjMzQ7JXM6U0tJUDogYnBmX3Rlc3Rtb2QmIzM5O3MgQlRGIGlzIG5vdCBhdmFpbGFibGVcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQlidGZfX2ZyZWUodm1saW51eF9idGYpOwomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ0Zl9fZnJlZShtb2R1bGVfYnRmKTsKJiM0MzsJYnRmX19mcmVlKHZtbGludXhfYnRmKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9kZWZhdWx0JiMzNDspKQomIzQzOwkJYnRmX21vZHVsZV9hbGxvd2xpc3RfZGVmYXVsdCgpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2J0Zl9tb2R1bGVfYWxsb3dsaXN0X2FsbG93JiMzNDspKQomIzQzOwkJYnRmX21vZHVsZV9hbGxvd2xpc3RfYWxsb3coKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQmIzM0OykpCiYjNDM7CQlidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQoKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9lbXB0eWxpc3QmIzM0OykpCiYjNDM7CQlidGZfbW9kdWxlX2FsbG93bGlzdF9lbXB0eWxpc3QoKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtidGZfbW9kdWxlX2FsbG93bGlzdF9pbnZhbGlkaW5wdXQmIzM0OykpCiYjNDM7CQlidGZfbW9kdWxlX2FsbG93bGlzdF9pbnZhbGlkaW5wdXQoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9hbGxvd2xpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX2FsbG93bGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmJiM2MzOGJlZTc3ZDYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9hbGxvd2xpc3QuYwpAQCAtMCwwICYjNDM7MSwxMyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfdGVzdG1vZF9sb29wX3Rlc3QmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9idGZfbW9kdWxlX2FsbG93bGlzdCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTQ3CgkJCQkJCQlvdXRwdXQ6IDk0CgkJCQkJCQl0aG91Z2h0czogMTE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUHJvdmlkZWQgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggYSBwYXRjaCBzZXJpZXMgYXBwbGllZCBhcyBhIEhFQUQgY29tbWl0LCBhbmQgdGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzICYjMzQ7V29ydGhGdXp6aW5nLiYjMzQ7IExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgY2hhbmdlZC4gIFRoZSBmaWxlcyBtb2RpZmllZCBhcmU6IGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL2xpYi9icGYvbGliYnBmLmhgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9hbGxvd2xpc3QuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmNgLiBBbGwgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuCgpOb3csIGxldCBtZSByZWNhbGwgdGhlIGNydWNpYWwgZ3VpZGVsaW5lcyBmb3IgZGV0ZXJtaW5pbmcgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0Oy4gQWNjb3JkaW5nIHRvIHNlY3Rpb24gMiwgSSBuZWVkIHRvIGxvb2sgZm9yICpuZWdhdGl2ZSBjcml0ZXJpYSo6IGNoYW5nZXMgdGhhdCAqb25seSogZmFsbCBpbnRvIHNwZWNpZmljIGNhdGVnb3JpZXMuIE5hbWVseSwgY2hhbmdlcyB0aGF0IGFyZTogbm9uLWtlcm5lbCwgbm9uLWV4ZWN1dGFibGUsIG1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIHNwZWxsaW5nIGZpeGVzLCBvciB1c2VyLXNwYWNlIGRpcmVjdG9yaWVzIChzZWxmLXRlc3RzLCBzYW1wbGVzLCBzY3JpcHRzKSB0aGF0ICpkb24mIzM5O3QqIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlIChgdm1saW51eGApIG9yIGtlcm5lbCBtb2R1bGVzLgoKQSBxdWljayByZXZpZXcgb2YgdGhlIGRpZmYgY29uZmlybXMgdGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBhbGwgaW4gZWl0aGVyIGB0b29scy9saWIvYnBmL2Agb3IgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBub3cgaXMgdG8gdmVyaWZ5IHdoZXRoZXIgYW55ICpvdGhlciogZmlsZXMgd2VyZSB0b3VjaGVkIGluIHRoaXMgY29tbWl0LiBUaGFua2Z1bGx5LCB0aGUgZnVsbCBkaWZmIGlzIHByb3ZpZGVkLCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIHJlYWNoIGZvciBgZ2l0IHN0YXR1c2AsIGBnaXQgZGlmZmAsIG9yIGEgYGdyZXBwZXJgIGNhbGwgKHdoaWNoIGlzIHJlYWxseSBqdXN0IGEgYGdpdCBncmVwYCBhbnl3YXlzKS4gIFRoZSBwcm92aWRlZCBkaWZmIGNvbmZpcm1zIHRoZSBsaXN0IEkgc3RhcnRlZCB3aXRoIGlzIGV4aGF1c3RpdmUuIE5vIG90aGVyIGZpbGVzIGFyZSB0b3VjaGVkLgoKQWxyaWdodC4gQ29uc2lkZXJpbmcgdGhlIGNvbnRleHQsIGB0b29scy9saWIvYnBmYCBjb250YWlucyB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGZgIGFyZSB1c2VyLXNwYWNlIHNlbGYtdGVzdHMuICBNeSBhc3Nlc3NtZW50IGlzIHRoYXQgbm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBrZXJuZWwgb3IgdGhlIGtlcm5lbCBtb2R1bGVzLgoKSSBnbyBiYWNrIHRvIHRoZSBndWlkZWxpbmVzIG9uY2UgbW9yZSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFllcCwgdGhlIGNoYW5nZXMgc3RyaWN0bHkgZmFsbCB1bmRlciB0aGUgJiMzNDt1c2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLi4uIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcyYjMzQ7IGNhdGVnb3J5LiBQZXJmZWN0LiBUaGlzIGlzIGEgY2xlYXIgY2FzZSBmb3IgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byB1c2VyLXNwYWNlIHRvb2xzIGFuZCB0ZXN0cywgYW5kIHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIHdpdGgga2VybmVsIGNvZGUuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb25zIGFyZSB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLCBgRm9jdXNTeW1ib2xzPVtdYCwgYW5kIGBFbmFibGVDb25maWdzPVtdYC4gIE15IHJlYXNvbmluZyBpcyBjb25jaXNlbHkgZXhwbGFpbmVkOiBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byB1c2VyLXNwYWNlIGxpYmJwZiBhbmQgc2VsZi10ZXN0cyBsb2NhdGVkIHVuZGVyIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIGFuZCB0aGUgY2hhbmdlcyBkbyBub3QgYWZmZWN0IHRoZSBrZXJuZWwgY29kZS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgY29kZSB3aXRoaW4gdG9vbHMvbGliL2JwZiAobGliYnBmIGxpYnJhcnkpIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYgKHNlbGZ0ZXN0cykuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2Ugb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3QgYXBwbGljYWJsZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIHRvb2xzL2xpYi9icGYgKGxpYmJwZiBsaWJyYXJ5KSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmIChzZWxmdGVzdHMpLiBJdCBkb2VzIG5vdCBhbHRlciB0aGUgTGludXgga2VybmVsIGltYWdlIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgc28gaXQgaXMgbm90IGFwcGxpY2FibGUgZm9yIHN5emthbGxlciBrZXJuZWwgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjE2OjA1Ljc3NjI2MzIyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MDQ2MzAyNzQ5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgY29kZSB3aXRoaW4gdG9vbHMvbGliL2JwZiAobGliYnBmIGxpYnJhcnkpIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYgKHNlbGZ0ZXN0cykuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2Ugb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3QgYXBwbGljYWJsZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6MTY6MDUuNzc2MjY4NzAxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA4ODU2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxYzI2ZThjMTQyZjQ2ZmQ3MTA0MTllMGRiODgzMGRlOTJjZDI2YTk2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDE2OjE2OjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuaW5kZXggYzAzNmU4YTkxZWQ4OC4uYTc3MTE1ZTFiMTcxNSAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbkBAIC03NTEsNiArNzUxLDggQEAgc3RydWN0IGJwZl9vYmplY3Qge1xcbiBcXHRib29sIGJ0Zl9tb2R1bGVzX2xvYWRlZDtcXG4gXFx0c2l6ZV90IGJ0Zl9tb2R1bGVfY250O1xcbiBcXHRzaXplX3QgYnRmX21vZHVsZV9jYXA7XFxuK1xcdGNoYXIgKipidGZfbW9kdWxlX2FsbG93bGlzdDtcXG4rXFx0c3NpemVfdCBidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQ7XFxuIFxcbiBcXHQvKiBvcHRpb25hbCBsb2cgc2V0dGluZ3MgcGFzc2VkIHRvIEJQRl9CVEZfTE9BRCBhbmQgQlBGX1BST0dfTE9BRCBjb21tYW5kcyAqL1xcbiBcXHRjaGFyICpsb2dfYnVmO1xcbkBAIC01ODUxLDYgKzU4NTMsMjEgQEAgaW50IGJwZl9jb3JlX2FkZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY2FuZCAqbG9jYWxfY2FuZCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGlzX2J0Zl9tb2RfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdHNzaXplX3QgaTtcXG4rXFxuK1xcdGlmIChvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9iai1cXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RfY250OyBpKyspIHtcXG4rXFx0XFx0aWYgKHN0cmNtcChvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0W2ldLCBuYW1lKSA9PSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XFxuQEAgLTU4NzMsNiArNTg5MCw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRpZiAoIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfTU9EVUxFX0JURikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0aWYgKG9iai1cXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID09IDApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0d2hpbGUgKHRydWUpIHtcXG4gXFx0XFx0ZXJyID0gYnBmX2J0Zl9nZXRfbmV4dF9pZChpZCwgXFx1MDAyNmlkKTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTk9FTlQpXFxuQEAgLTU5MTUsNiArNTkzNSwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICghaXNfYnRmX21vZF9hbGxvd2VkKG9iaiwgbmFtZSkpIHtcXG4rXFx0XFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0YnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotXFx1MDAzZWJ0Zl92bWxpbnV4KTtcXG4gXFx0XFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuQEAgLTU5MzksNiArNTk2NCw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfY250Kys7XFxuK1xcbitcXHRcXHRpZiAob2JqLVxcdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgPT0gb2JqLVxcdTAwM2VidGZfbW9kdWxlX2NudClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChlcnIpIHtcXG5AQCAtODQ4MSw2ICs4NTA5LDggQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcXG4gXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMgKm9wdHMpXFxuIHtcXG4gXFx0Y29uc3QgY2hhciAqa2NvbmZpZywgKmJ0Zl90bXBfcGF0aCwgKnRva2VuX3BhdGg7XFxuK1xcdHNpemVfdCBtb2RfYWxsb3dfY250LCBpLCBqO1xcbitcXHRjb25zdCBjaGFyICoqbW9kX2FsbG93O1xcbiBcXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xcbiBcXHRpbnQgZXJyO1xcbiBcXHRjaGFyICpsb2dfYnVmO1xcbkBAIC04NTI1LDYgKzg1NTUsMjIgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcXG4gXFx0aWYgKHRva2VuX3BhdGggXFx1MDAyNlxcdTAwMjYgc3RybGVuKHRva2VuX3BhdGgpIFxcdTAwM2U9IFBBVEhfTUFYKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTtcXG4gXFxuK1xcdG1vZF9hbGxvdyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0LCBOVUxMKTtcXG4rXFx0bW9kX2FsbG93X2NudCA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCwgMCk7XFxuK1xcbitcXHRpZiAobW9kX2FsbG93X2NudCBcXHUwMDNlIFNTSVpFX01BWCB8fCAoIW1vZF9hbGxvdyBcXHUwMDI2XFx1MDAyNiBtb2RfYWxsb3dfY250IFxcdTAwM2UgMCkpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1vZF9hbGxvd19jbnQ7IGkrKykge1xcbitcXHRcXHRpZiAoIW1vZF9hbGxvd1tpXSB8fCAhbW9kX2FsbG93W2ldWzBdKVxcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4rXFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBpOyBqKyspIHtcXG4rXFx0XFx0XFx0aWYgKHN0cmNtcChtb2RfYWxsb3dbaV0sIG1vZF9hbGxvd1tqXSkgPT0gMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0b2JqID0gYnBmX29iamVjdF9fbmV3KHBhdGgsIG9ial9idWYsIG9ial9idWZfc3osIG9ial9uYW1lKTtcXG4gXFx0aWYgKElTX0VSUihvYmopKVxcbiBcXHRcXHRyZXR1cm4gb2JqO1xcbkBAIC04NTYzLDYgKzg2MDksMjQgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9IG1vZF9hbGxvdyA/IG1vZF9hbGxvd19jbnQgOiAtMTtcXG4rXFx0aWYgKG1vZF9hbGxvd19jbnQgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdG9iai1cXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3QgPVxcbitcXHRcXHRcXHRjYWxsb2MobW9kX2FsbG93X2NudCwgc2l6ZW9mKCpvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KSk7XFxuK1xcdFxcdGlmICghb2JqLVxcdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdCkge1xcbitcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1vZF9hbGxvd19jbnQ7IGkrKykge1xcbitcXHRcXHRcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0W2ldID0gc3RyZHVwKG1vZF9hbGxvd1tpXSk7XFxuK1xcdFxcdFxcdGlmICghb2JqLVxcdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdFtpXSkge1xcbitcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGVyciA9IGJwZl9vYmplY3RfX2VsZl9pbml0KG9iaik7XFxuIFxcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qob2JqKTtcXG4gXFx0ZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19jb2xsZWN0X2V4dGVybnMob2JqKTtcXG5AQCAtOTY4NCw2ICs5NzQ4LDEyIEBAIHZvaWQgYnBmX29iamVjdF9fY2xvc2Uoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0Y2xvc2Uob2JqLVxcdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XFxuIFxcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWp1bXB0YWJsZV9tYXBzKTtcXG4gXFxuK1xcdGlmIChvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudDsgaSsrKVxcbitcXHRcXHRcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdFtpXSk7XFxuK1xcdFxcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KTtcXG4rXFx0fVxcbitcXG4gXFx0ZnJlZShvYmopO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxcbmluZGV4IGI5NjVhZDU3MTU0MDMuLjg5NzY4MjQ0ZDVkOWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuaFxcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG5AQCAtMjI0LDEwICsyMjQsMjQgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcXG4gXFx0ICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuXFxuIFxcdCAqL1xcbiBcXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcXG4rXFx0LypcXG4rXFx0ICogT3B0aW9uYWwgYWxsb3dsaXN0IG9mIGtlcm5lbCBtb2R1bGUgbmFtZXMgd2hvc2UgQlRGcyBsaWJicGYgaXNcXG4rXFx0ICogYWxsb3dlZCB0byBsb2FkLiBUaGUgYWxsb3dsaXN0IGxpbWl0cyB3aGljaCBrZXJuZWwgbW9kdWxlIEJURnMgbGliYnBmXFxuK1xcdCAqIHdpbGwgY29uc3VsdCB3aGVyZXZlciBtb2R1bGUgQlRGIG1pZ2h0IGJlIG5lZWRlZC5cXG4rXFx0ICpcXG4rXFx0ICogV2hlbiB0aGUgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBleGlzdGluZyBiZWhhdmlvciByZW1haW5zXFxuK1xcdCAqIHVuY2hhbmdlZC4gQW4gZXhwbGljaXRseSBzcGVjaWZpZWQgZW1wdHkgbGlzdCBwcmV2ZW50cyBsaWJicGYgZnJvbVxcbitcXHQgKiBjb25zdWx0aW5nIGFueSBrZXJuZWwgbW9kdWxlIEJURnMuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBsaXN0IG11c3QgY29udGFpbiB2YWxpZCwgbm9uLWVtcHR5IG1vZHVsZSBuYW1lcyBhbmQgbXVzdCBub3RcXG4rXFx0ICogY29udGFpbiBkdXBsaWNhdGUgZW50cmllczsgb3RoZXJ3aXNlIC1FSU5WQUwgaXMgcmV0dXJuZWQuXFxuK1xcdCAqL1xcbitcXHRjb25zdCBjaGFyICoqYnRmX21vZHVsZV9hbGxvd2xpc3Q7XFxuK1xcdHNpemVfdCBidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQ7XFxuIFxcbiBcXHRzaXplX3QgOjA7XFxuIH07XFxuLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGhcXG4rI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBidGZfbW9kdWxlX2FsbG93bGlzdF9jbnRcXG4gXFxuIC8qKlxcbiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX2FsbG93bGlzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zMTg5MTMzZWU1OGI2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmNcXG5AQCAtMCwwICsxLDE2MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnRmX21vZHVsZV9hbGxvd2xpc3Quc2tlbC5oXFxcIlxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9sb2FkX3dpdGhfbGlzdChjb25zdCBjaGFyICoqbGlzdCwgc2l6ZV90IGNvdW50LFxcbitcXHRcXHRcXHRcXHRpbnQgZXhwZWN0ZWRfcmV0KVxcbit7XFxuK1xcdHN0cnVjdCBidGZfbW9kdWxlX2FsbG93bGlzdCAqc2tlbDtcXG4rXFx0aW50IHJldDtcXG4rXFx0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5idGZfbW9kdWxlX2FsbG93bGlzdCA9IGxpc3QsXFxuK1xcdFxcdC5idGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgPSBjb3VudCxcXG4rXFx0KTtcXG4rXFxuK1xcdHNrZWwgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJldCA9IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19sb2FkKHNrZWwpO1xcbitcXHRBU1NFUlRfRVEocmV0LCBleHBlY3RlZF9yZXQsIFxcXCJidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZFxcXCIpO1xcbitcXG4rXFx0YnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2RlZmF1bHQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnRmX21vZHVsZV9hbGxvd2xpc3QgKnNrZWw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW4oKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJidGZfbW9kdWxlX2FsbG93bGlzdF9fb3BlblxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyZXQgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZChza2VsKTtcXG4rXFx0QVNTRVJUX09LKHJldCwgXFxcImJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19sb2FkXFxcIik7XFxuK1xcbitcXHRidGZfbW9kdWxlX2FsbG93bGlzdF9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9hbGxvd2xpc3RfYWxsb3codm9pZClcXG4re1xcbitcXHRjb25zdCBjaGFyICptb2RfbGlzdFtdID0geyBcXFwiYnBmX3Rlc3Rtb2RcXFwiIH07XFxuK1xcbitcXHR0ZXN0X2xvYWRfd2l0aF9saXN0KG1vZF9saXN0LCAxLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogQSBub24tTlVMTCBhbGxvd2xpc3Qgd2l0aCBhIGNvdW50IG9mIDAgZXhwbGljaXRseSBkaXNhYmxlcyBtb2R1bGUgQlRGcy5cXG4rICogVGhlIHBvaW50ZXIgbXVzdCBiZSBub24tTlVMTCB0byBkaXN0aW5ndWlzaCB0aGlzIGZyb20gYW4gdW5zcGVjaWZpZWRcXG4rICogYWxsb3dsaXN0LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9hbGxvd2xpc3RfZW1wdHlsaXN0KHZvaWQpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqbW9kX2xpc3RbXSA9IHsgTlVMTCB9O1xcbitcXG4rXFx0dGVzdF9sb2FkX3dpdGhfbGlzdChtb2RfbGlzdCwgMCwgLUVTUkNIKTtcXG4rfVxcbitcXG4rLypcXG4rICogYnBmX3Rlc3Rtb2QgaXMgbm90IGluIHRoZSBhbGxvd2xpc3QsIHNvIGl0cyBCVEYgc2hvdWxkIG5vdCBiZSBsb2FkZWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQodm9pZClcXG4re1xcbitcXHRjb25zdCBjaGFyICptb2RfbGlzdFtdID0geyBcXFwibW9kdWxlX25vbmV4aXN0XFxcIiB9O1xcbitcXHRzdHJ1Y3QgYnRmX21vZHVsZV9hbGxvd2xpc3QgKnNrZWw7XFxuK1xcdGludCByZXQ7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxcbitcXHRcXHQuYnRmX21vZHVsZV9hbGxvd2xpc3QgPSBtb2RfbGlzdCxcXG4rXFx0XFx0LmJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9IDEsXFxuK1xcdCk7XFxuK1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW5fb3B0c1xcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyZXQgPSBicGZfcHJvZ3JhbV9fc2V0X2F0dGFjaF90YXJnZXQoc2tlbC1cXHUwMDNlcHJvZ3MudGVzdF9idGZfbW9kdWxlX2FsbG93bGlzdCwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiYnBmX3Rlc3Rtb2Q6YnBmX3Rlc3Rtb2RfZmVudHJ5X3Rlc3QxXFxcIik7XFxuK1xcdEFTU0VSVF9FUShyZXQsIC1FU1JDSCwgXFxcImJwZl9wcm9ncmFtX19zZXRfYXR0YWNoX3RhcmdldFxcXCIpO1xcbitcXHRidGZfbW9kdWxlX2FsbG93bGlzdF9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2lucHV0KGNvbnN0IGNoYXIgKipsaXN0LCBzaXplX3QgY291bnQsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICp0ZXN0X25hbWUpXFxuK3tcXG4rXFx0c3RydWN0IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0ICpza2VsO1xcbitcXHRjaGFyIGFzc2VydF9uYW1lWzY0XTtcXG4rXFx0aW50IGVycjtcXG4rXFx0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5idGZfbW9kdWxlX2FsbG93bGlzdCA9IGxpc3QsXFxuK1xcdFxcdC5idGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgPSBjb3VudCxcXG4rXFx0KTtcXG4rXFxuK1xcdHNucHJpbnRmKGFzc2VydF9uYW1lLCBzaXplb2YoYXNzZXJ0X25hbWUpLCBcXFwiJXM6IG9wZW5fb3B0c1xcXCIsIHRlc3RfbmFtZSk7XFxuK1xcdHNrZWwgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0ZXJyID0gZXJybm87XFxuK1xcdGlmICghQVNTRVJUX05VTEwoc2tlbCwgYXNzZXJ0X25hbWUpKSB7XFxuK1xcdFxcdGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19kZXN0cm95KHNrZWwpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0c25wcmludGYoYXNzZXJ0X25hbWUsIHNpemVvZihhc3NlcnRfbmFtZSksIFxcXCIlczogb3Blbl9vcHRzIGVyclxcXCIsIHRlc3RfbmFtZSk7XFxuK1xcdEFTU0VSVF9FUShlcnIsIEVJTlZBTCwgYXNzZXJ0X25hbWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX2FsbG93bGlzdF9pbnZhbGlkaW5wdXQodm9pZClcXG4re1xcbitcXHRjb25zdCBjaGFyICpuYW1lc1tdID0geyBOVUxMIH07XFxuK1xcdGNvbnN0IGNoYXIgKmVtcHR5X25hbWVzW10gPSB7IFxcXCJcXFwiIH07XFxuK1xcdGNvbnN0IGNoYXIgKmR1cGxpY2F0ZV9uYW1lc1tdID0geyBcXFwiYnBmX3Rlc3Rtb2RcXFwiLCBcXFwiYnBmX3Rlc3Rtb2RcXFwiIH07XFxuK1xcbitcXHR0ZXN0X2ludmFsaWRfaW5wdXQoTlVMTCwgMSwgXFxcIm51bGxfbGlzdFxcXCIpO1xcbitcXHR0ZXN0X2ludmFsaWRfaW5wdXQobmFtZXMsIDEsIFxcXCJudWxsX25hbWVcXFwiKTtcXG4rXFx0dGVzdF9pbnZhbGlkX2lucHV0KGVtcHR5X25hbWVzLCAxLCBcXFwiZW1wdHlfbmFtZVxcXCIpO1xcbitcXHR0ZXN0X2ludmFsaWRfaW5wdXQoZHVwbGljYXRlX25hbWVzLCAyLCBcXFwiZHVwbGljYXRlX25hbWVcXFwiKTtcXG4rXFx0dGVzdF9pbnZhbGlkX2lucHV0KG5hbWVzLCAoc2l6ZV90KVNTSVpFX01BWCArIDEsIFxcXCJsYXJnZV9jb3VudFxcXCIpO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfYnRmX21vZHVsZV9hbGxvd2xpc3Qodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnRmICp2bWxpbnV4X2J0ZiA9IE5VTEw7XFxuK1xcdHN0cnVjdCBidGYgKm1vZHVsZV9idGYgPSBOVUxMO1xcbitcXG4rXFx0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlczpTS0lQOiBicGZfdGVzdG1vZCBpcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHR2bWxpbnV4X2J0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xcbitcXHRpZiAoIXZtbGludXhfYnRmKSB7XFxuK1xcdFxcdHByaW50ZihcXFwiJXM6U0tJUDogdm1saW51eF9idGYgaXMgbm90IGF2YWlsYWJsZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LyogRW5zdXJlIGJwZl90ZXN0bW9kIEJURiBpcyBhdmFpbGFibGUuICovXFxuK1xcdG1vZHVsZV9idGYgPSBidGZfX2xvYWRfbW9kdWxlX2J0ZihcXFwiYnBmX3Rlc3Rtb2RcXFwiLCB2bWxpbnV4X2J0Zik7XFxuK1xcdGlmICghbW9kdWxlX2J0Zikge1xcbitcXHRcXHRwcmludGYoXFxcIiVzOlNLSVA6IGJwZl90ZXN0bW9kJ3MgQlRGIGlzIG5vdCBhdmFpbGFibGVcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0YnRmX19mcmVlKHZtbGludXhfYnRmKTtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGJ0Zl9fZnJlZShtb2R1bGVfYnRmKTtcXG4rXFx0YnRmX19mcmVlKHZtbGludXhfYnRmKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX2FsbG93bGlzdF9kZWZhdWx0XFxcIikpXFxuK1xcdFxcdGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2RlZmF1bHQoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX2FsbG93bGlzdF9hbGxvd1xcXCIpKVxcbitcXHRcXHRidGZfbW9kdWxlX2FsbG93bGlzdF9hbGxvdygpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImJ0Zl9tb2R1bGVfYWxsb3dsaXN0X3NraXB1bmxpc3RlZFxcXCIpKVxcbitcXHRcXHRidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX2FsbG93bGlzdF9lbXB0eWxpc3RcXFwiKSlcXG4rXFx0XFx0YnRmX21vZHVsZV9hbGxvd2xpc3RfZW1wdHlsaXN0KCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfaW52YWxpZGlucHV0XFxcIikpXFxuK1xcdFxcdGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2ludmFsaWRpbnB1dCgpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX2FsbG93bGlzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJiM2MzOGJlZTc3ZDZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmNcXG5AQCAtMCwwICsxLDEzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuK1NFQyhcXFwiZmVudHJ5L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2J0Zl9tb2R1bGVfYWxsb3dsaXN0KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6MTY6MDYuMjQ3OTE5OTUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODA0MTU4NjA1OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgY29kZSB3aXRoaW4gdG9vbHMvbGliL2JwZiAobGliYnBmIGxpYnJhcnkpIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYgKHNlbGZ0ZXN0cykuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2Ugb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBzbyBpdCBpcyBub3QgYXBwbGljYWJsZSBmb3Igc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxYzI2ZThjMTQyZjQ2ZmQ3MTA0MTllMGRiODgzMGRlOTJjZDI2YTk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTY6MTY6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggYzAzNmU4YTkxZWQ4OC4uYTc3MTE1ZTFiMTcxNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC03NTEsNiArNzUxLDggQEAgc3RydWN0IGJwZl9vYmplY3Qge1xuIFx0Ym9vbCBidGZfbW9kdWxlc19sb2FkZWQ7XG4gXHRzaXplX3QgYnRmX21vZHVsZV9jbnQ7XG4gXHRzaXplX3QgYnRmX21vZHVsZV9jYXA7XG4rXHRjaGFyICoqYnRmX21vZHVsZV9hbGxvd2xpc3Q7XG4rXHRzc2l6ZV90IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudDtcbiBcbiBcdC8qIG9wdGlvbmFsIGxvZyBzZXR0aW5ncyBwYXNzZWQgdG8gQlBGX0JURl9MT0FEIGFuZCBCUEZfUFJPR19MT0FEIGNvbW1hbmRzICovXG4gXHRjaGFyICpsb2dfYnVmO1xuQEAgLTU4NTEsNiArNTg1MywyMSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlzX2J0Zl9tb2RfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHNzaXplX3QgaTtcbitcbitcdGlmIChvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RfY250IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQ7IGkrKykge1xuK1x0XHRpZiAoc3RyY21wKG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdFtpXSwgbmFtZSkgPT0gMClcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4ge1xuIFx0c3RydWN0IGJwZl9idGZfaW5mbyBpbmZvO1xuQEAgLTU4NzMsNiArNTg5MCw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0aWYgKCFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX01PRFVMRV9CVEYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdGlmIChvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID09IDApXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0ZXJyID0gYnBmX2J0Zl9nZXRfbmV4dF9pZChpZCwgXHUwMDI2aWQpO1xuIFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTk9FTlQpXG5AQCAtNTkxNSw2ICs1OTM1LDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4rXHRcdGlmICghaXNfYnRmX21vZF9hbGxvd2VkKG9iaiwgbmFtZSkpIHtcbitcdFx0XHRjbG9zZShmZCk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0YnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuIFx0XHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XG4gXHRcdGlmIChlcnIpIHtcbkBAIC01OTM5LDYgKzU5NjQsOSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9jbnQrKztcbitcbitcdFx0aWYgKG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgPT0gb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250KVxuK1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKGVycikge1xuQEAgLTg0ODEsNiArODUwOSw4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmtjb25maWcsICpidGZfdG1wX3BhdGgsICp0b2tlbl9wYXRoO1xuK1x0c2l6ZV90IG1vZF9hbGxvd19jbnQsIGksIGo7XG4rXHRjb25zdCBjaGFyICoqbW9kX2FsbG93O1xuIFx0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbiBcdGludCBlcnI7XG4gXHRjaGFyICpsb2dfYnVmO1xuQEAgLTg1MjUsNiArODU1NSwyMiBAQCBzdGF0aWMgc3RydWN0IGJwZl9vYmplY3QgKmJwZl9vYmplY3Rfb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB2b2lkICpvYmpfYnVmLFxuIFx0aWYgKHRva2VuX3BhdGggXHUwMDI2XHUwMDI2IHN0cmxlbih0b2tlbl9wYXRoKSBcdTAwM2U9IFBBVEhfTUFYKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTtcbiBcbitcdG1vZF9hbGxvdyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfYWxsb3dsaXN0LCBOVUxMKTtcbitcdG1vZF9hbGxvd19jbnQgPSBPUFRTX0dFVChvcHRzLCBidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQsIDApO1xuK1xuK1x0aWYgKG1vZF9hbGxvd19jbnQgXHUwMDNlIFNTSVpFX01BWCB8fCAoIW1vZF9hbGxvdyBcdTAwMjZcdTAwMjYgbW9kX2FsbG93X2NudCBcdTAwM2UgMCkpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbW9kX2FsbG93X2NudDsgaSsrKSB7XG4rXHRcdGlmICghbW9kX2FsbG93W2ldIHx8ICFtb2RfYWxsb3dbaV1bMF0pXG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGk7IGorKykge1xuK1x0XHRcdGlmIChzdHJjbXAobW9kX2FsbG93W2ldLCBtb2RfYWxsb3dbal0pID09IDApXG4rXHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0b2JqID0gYnBmX29iamVjdF9fbmV3KHBhdGgsIG9ial9idWYsIG9ial9idWZfc3osIG9ial9uYW1lKTtcbiBcdGlmIChJU19FUlIob2JqKSlcbiBcdFx0cmV0dXJuIG9iajtcbkBAIC04NTYzLDYgKzg2MDksMjQgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9IG1vZF9hbGxvdyA/IG1vZF9hbGxvd19jbnQgOiAtMTtcbitcdGlmIChtb2RfYWxsb3dfY250IFx1MDAzZSAwKSB7XG4rXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdCA9XG4rXHRcdFx0Y2FsbG9jKG1vZF9hbGxvd19jbnQsIHNpemVvZigqb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KSk7XG4rXHRcdGlmICghb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KSB7XG4rXHRcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtb2RfYWxsb3dfY250OyBpKyspIHtcbitcdFx0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RbaV0gPSBzdHJkdXAobW9kX2FsbG93W2ldKTtcbitcdFx0XHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdFtpXSkge1xuK1x0XHRcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuIFx0ZXJyID0gYnBmX29iamVjdF9fZWxmX2luaXQob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9leHRlcm5zKG9iaik7XG5AQCAtOTY4NCw2ICs5NzQ4LDEyIEBAIHZvaWQgYnBmX29iamVjdF9fY2xvc2Uoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0Y2xvc2Uob2JqLVx1MDAzZWp1bXB0YWJsZV9tYXBzW2ldLmZkKTtcbiBcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VqdW1wdGFibGVfbWFwcyk7XG4gXG4rXHRpZiAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfYWxsb3dsaXN0KSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2VidGZfbW9kdWxlX2FsbG93bGlzdF9jbnQ7IGkrKylcbitcdFx0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3RbaV0pO1xuK1x0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9hbGxvd2xpc3QpO1xuK1x0fVxuK1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uODk3NjgyNDRkNWQ5ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0yMjQsMTAgKzIyNCwyNCBAQCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMge1xuIFx0ICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuXG4gXHQgKi9cbiBcdGNvbnN0IGNoYXIgKmJwZl90b2tlbl9wYXRoO1xuK1x0LypcbitcdCAqIE9wdGlvbmFsIGFsbG93bGlzdCBvZiBrZXJuZWwgbW9kdWxlIG5hbWVzIHdob3NlIEJURnMgbGliYnBmIGlzXG4rXHQgKiBhbGxvd2VkIHRvIGxvYWQuIFRoZSBhbGxvd2xpc3QgbGltaXRzIHdoaWNoIGtlcm5lbCBtb2R1bGUgQlRGcyBsaWJicGZcbitcdCAqIHdpbGwgY29uc3VsdCB3aGVyZXZlciBtb2R1bGUgQlRGIG1pZ2h0IGJlIG5lZWRlZC5cbitcdCAqXG4rXHQgKiBXaGVuIHRoZSBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgdGhlIGV4aXN0aW5nIGJlaGF2aW9yIHJlbWFpbnNcbitcdCAqIHVuY2hhbmdlZC4gQW4gZXhwbGljaXRseSBzcGVjaWZpZWQgZW1wdHkgbGlzdCBwcmV2ZW50cyBsaWJicGYgZnJvbVxuK1x0ICogY29uc3VsdGluZyBhbnkga2VybmVsIG1vZHVsZSBCVEZzLlxuK1x0ICpcbitcdCAqIFRoZSBsaXN0IG11c3QgY29udGFpbiB2YWxpZCwgbm9uLWVtcHR5IG1vZHVsZSBuYW1lcyBhbmQgbXVzdCBub3RcbitcdCAqIGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzIHJldHVybmVkLlxuK1x0ICovXG4rXHRjb25zdCBjaGFyICoqYnRmX21vZHVsZV9hbGxvd2xpc3Q7XG4rXHRzaXplX3QgYnRmX21vZHVsZV9hbGxvd2xpc3RfY250O1xuIFxuIFx0c2l6ZV90IDowO1xuIH07XG4tI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aFxuKyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnRmX21vZHVsZV9hbGxvd2xpc3RfY250XG4gXG4gLyoqXG4gICogQGJyaWVmICoqYnBmX29iamVjdF9fb3BlbigpKiogY3JlYXRlcyBhIGJwZl9vYmplY3QgYnkgb3BlbmluZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX2FsbG93bGlzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzE4OTEzM2VlNThiNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9hbGxvd2xpc3QuY1xuQEAgLTAsMCArMSwxNjIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnRmX21vZHVsZV9hbGxvd2xpc3Quc2tlbC5oXCJcbitcbitzdGF0aWMgdm9pZCB0ZXN0X2xvYWRfd2l0aF9saXN0KGNvbnN0IGNoYXIgKipsaXN0LCBzaXplX3QgY291bnQsXG4rXHRcdFx0XHRpbnQgZXhwZWN0ZWRfcmV0KVxuK3tcbitcdHN0cnVjdCBidGZfbW9kdWxlX2FsbG93bGlzdCAqc2tlbDtcbitcdGludCByZXQ7XG4rXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbitcdFx0LmJ0Zl9tb2R1bGVfYWxsb3dsaXN0ID0gbGlzdCxcbitcdFx0LmJ0Zl9tb2R1bGVfYWxsb3dsaXN0X2NudCA9IGNvdW50LFxuK1x0KTtcbitcbitcdHNrZWwgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW5fb3B0c1wiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmV0ID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX2xvYWQoc2tlbCk7XG4rXHRBU1NFUlRfRVEocmV0LCBleHBlY3RlZF9yZXQsIFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfX2xvYWRcIik7XG4rXG4rXHRidGZfbW9kdWxlX2FsbG93bGlzdF9fZGVzdHJveShza2VsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9hbGxvd2xpc3RfZGVmYXVsdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBidGZfbW9kdWxlX2FsbG93bGlzdCAqc2tlbDtcbitcdGludCByZXQ7XG4rXG4rXHRza2VsID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW4oKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX2FsbG93bGlzdF9fbG9hZChza2VsKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfX2xvYWRcIik7XG4rXG4rXHRidGZfbW9kdWxlX2FsbG93bGlzdF9fZGVzdHJveShza2VsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9hbGxvd2xpc3RfYWxsb3codm9pZClcbit7XG4rXHRjb25zdCBjaGFyICptb2RfbGlzdFtdID0geyBcImJwZl90ZXN0bW9kXCIgfTtcbitcbitcdHRlc3RfbG9hZF93aXRoX2xpc3QobW9kX2xpc3QsIDEsIDApO1xuK31cbitcbisvKlxuKyAqIEEgbm9uLU5VTEwgYWxsb3dsaXN0IHdpdGggYSBjb3VudCBvZiAwIGV4cGxpY2l0bHkgZGlzYWJsZXMgbW9kdWxlIEJURnMuXG4rICogVGhlIHBvaW50ZXIgbXVzdCBiZSBub24tTlVMTCB0byBkaXN0aW5ndWlzaCB0aGlzIGZyb20gYW4gdW5zcGVjaWZpZWRcbisgKiBhbGxvd2xpc3QuXG4rICovXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9hbGxvd2xpc3RfZW1wdHlsaXN0KHZvaWQpXG4re1xuK1x0Y29uc3QgY2hhciAqbW9kX2xpc3RbXSA9IHsgTlVMTCB9O1xuK1xuK1x0dGVzdF9sb2FkX3dpdGhfbGlzdChtb2RfbGlzdCwgMCwgLUVTUkNIKTtcbit9XG4rXG4rLypcbisgKiBicGZfdGVzdG1vZCBpcyBub3QgaW4gdGhlIGFsbG93bGlzdCwgc28gaXRzIEJURiBzaG91bGQgbm90IGJlIGxvYWRlZC5cbisgKi9cbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQodm9pZClcbit7XG4rXHRjb25zdCBjaGFyICptb2RfbGlzdFtdID0geyBcIm1vZHVsZV9ub25leGlzdFwiIH07XG4rXHRzdHJ1Y3QgYnRmX21vZHVsZV9hbGxvd2xpc3QgKnNrZWw7XG4rXHRpbnQgcmV0O1xuK1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4rXHRcdC5idGZfbW9kdWxlX2FsbG93bGlzdCA9IG1vZF9saXN0LFxuK1x0XHQuYnRmX21vZHVsZV9hbGxvd2xpc3RfY250ID0gMSxcbitcdCk7XG4rXG4rXHRza2VsID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfYWxsb3dsaXN0X19vcGVuX29wdHNcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHJldCA9IGJwZl9wcm9ncmFtX19zZXRfYXR0YWNoX3RhcmdldChza2VsLVx1MDAzZXByb2dzLnRlc3RfYnRmX21vZHVsZV9hbGxvd2xpc3QsIDAsXG4rXHRcdFx0XHRcdCAgICAgXCJicGZfdGVzdG1vZDpicGZfdGVzdG1vZF9mZW50cnlfdGVzdDFcIik7XG4rXHRBU1NFUlRfRVEocmV0LCAtRVNSQ0gsIFwiYnBmX3Byb2dyYW1fX3NldF9hdHRhY2hfdGFyZ2V0XCIpO1xuK1x0YnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9pbnB1dChjb25zdCBjaGFyICoqbGlzdCwgc2l6ZV90IGNvdW50LFxuK1x0XHRcdCAgICAgICBjb25zdCBjaGFyICp0ZXN0X25hbWUpXG4re1xuK1x0c3RydWN0IGJ0Zl9tb2R1bGVfYWxsb3dsaXN0ICpza2VsO1xuK1x0Y2hhciBhc3NlcnRfbmFtZVs2NF07XG4rXHRpbnQgZXJyO1xuK1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4rXHRcdC5idGZfbW9kdWxlX2FsbG93bGlzdCA9IGxpc3QsXG4rXHRcdC5idGZfbW9kdWxlX2FsbG93bGlzdF9jbnQgPSBjb3VudCxcbitcdCk7XG4rXG4rXHRzbnByaW50Zihhc3NlcnRfbmFtZSwgc2l6ZW9mKGFzc2VydF9uYW1lKSwgXCIlczogb3Blbl9vcHRzXCIsIHRlc3RfbmFtZSk7XG4rXHRza2VsID0gYnRmX21vZHVsZV9hbGxvd2xpc3RfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGVyciA9IGVycm5vO1xuK1x0aWYgKCFBU1NFUlRfTlVMTChza2VsLCBhc3NlcnRfbmFtZSkpIHtcbitcdFx0YnRmX21vZHVsZV9hbGxvd2xpc3RfX2Rlc3Ryb3koc2tlbCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdHNucHJpbnRmKGFzc2VydF9uYW1lLCBzaXplb2YoYXNzZXJ0X25hbWUpLCBcIiVzOiBvcGVuX29wdHMgZXJyXCIsIHRlc3RfbmFtZSk7XG4rXHRBU1NFUlRfRVEoZXJyLCBFSU5WQUwsIGFzc2VydF9uYW1lKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9hbGxvd2xpc3RfaW52YWxpZGlucHV0KHZvaWQpXG4re1xuK1x0Y29uc3QgY2hhciAqbmFtZXNbXSA9IHsgTlVMTCB9O1xuK1x0Y29uc3QgY2hhciAqZW1wdHlfbmFtZXNbXSA9IHsgXCJcIiB9O1xuK1x0Y29uc3QgY2hhciAqZHVwbGljYXRlX25hbWVzW10gPSB7IFwiYnBmX3Rlc3Rtb2RcIiwgXCJicGZfdGVzdG1vZFwiIH07XG4rXG4rXHR0ZXN0X2ludmFsaWRfaW5wdXQoTlVMTCwgMSwgXCJudWxsX2xpc3RcIik7XG4rXHR0ZXN0X2ludmFsaWRfaW5wdXQobmFtZXMsIDEsIFwibnVsbF9uYW1lXCIpO1xuK1x0dGVzdF9pbnZhbGlkX2lucHV0KGVtcHR5X25hbWVzLCAxLCBcImVtcHR5X25hbWVcIik7XG4rXHR0ZXN0X2ludmFsaWRfaW5wdXQoZHVwbGljYXRlX25hbWVzLCAyLCBcImR1cGxpY2F0ZV9uYW1lXCIpO1xuK1x0dGVzdF9pbnZhbGlkX2lucHV0KG5hbWVzLCAoc2l6ZV90KVNTSVpFX01BWCArIDEsIFwibGFyZ2VfY291bnRcIik7XG4rfVxuK1xuK3ZvaWQgdGVzdF9idGZfbW9kdWxlX2FsbG93bGlzdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBidGYgKnZtbGludXhfYnRmID0gTlVMTDtcbitcdHN0cnVjdCBidGYgKm1vZHVsZV9idGYgPSBOVUxMO1xuK1xuK1x0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcbitcdFx0cHJpbnRmKFwiJXM6U0tJUDogYnBmX3Rlc3Rtb2QgaXMgbm90IGF2YWlsYWJsZVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0dm1saW51eF9idGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTtcbitcdGlmICghdm1saW51eF9idGYpIHtcbitcdFx0cHJpbnRmKFwiJXM6U0tJUDogdm1saW51eF9idGYgaXMgbm90IGF2YWlsYWJsZVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogRW5zdXJlIGJwZl90ZXN0bW9kIEJURiBpcyBhdmFpbGFibGUuICovXG4rXHRtb2R1bGVfYnRmID0gYnRmX19sb2FkX21vZHVsZV9idGYoXCJicGZfdGVzdG1vZFwiLCB2bWxpbnV4X2J0Zik7XG4rXHRpZiAoIW1vZHVsZV9idGYpIHtcbitcdFx0cHJpbnRmKFwiJXM6U0tJUDogYnBmX3Rlc3Rtb2QncyBCVEYgaXMgbm90IGF2YWlsYWJsZVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdGJ0Zl9fZnJlZSh2bWxpbnV4X2J0Zik7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0YnRmX19mcmVlKG1vZHVsZV9idGYpO1xuK1x0YnRmX19mcmVlKHZtbGludXhfYnRmKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfZGVmYXVsdFwiKSlcbitcdFx0YnRmX21vZHVsZV9hbGxvd2xpc3RfZGVmYXVsdCgpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJidGZfbW9kdWxlX2FsbG93bGlzdF9hbGxvd1wiKSlcbitcdFx0YnRmX21vZHVsZV9hbGxvd2xpc3RfYWxsb3coKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9hbGxvd2xpc3Rfc2tpcHVubGlzdGVkXCIpKVxuK1x0XHRidGZfbW9kdWxlX2FsbG93bGlzdF9za2lwdW5saXN0ZWQoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfZW1wdHlsaXN0XCIpKVxuK1x0XHRidGZfbW9kdWxlX2FsbG93bGlzdF9lbXB0eWxpc3QoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9hbGxvd2xpc3RfaW52YWxpZGlucHV0XCIpKVxuK1x0XHRidGZfbW9kdWxlX2FsbG93bGlzdF9pbnZhbGlkaW5wdXQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9hbGxvd2xpc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJiM2MzOGJlZTc3ZDZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX2FsbG93bGlzdC5jXG5AQCAtMCwwICsxLDEzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rXG4rU0VDKFwiZmVudHJ5L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2J0Zl9tb2R1bGVfYWxsb3dsaXN0KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjoxNjowNi4yNDc5MjIzNzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODA0MTU4NTgwMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQcm92aWRlZCBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gcHJlc2VudGVkIHdpdGggYSBwYXRjaCBzZXJpZXMgYXBwbGllZCBhcyBhIEhFQUQgY29tbWl0LCBhbmQgdGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgXCJXb3J0aEZ1enppbmcuXCIgTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgY2hhbmdlZC4gIFRoZSBmaWxlcyBtb2RpZmllZCBhcmU6IGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL2xpYi9icGYvbGliYnBmLmhgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9hbGxvd2xpc3QuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfYWxsb3dsaXN0LmNgLiBBbGwgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuXG5cbk5vdywgbGV0IG1lIHJlY2FsbCB0aGUgY3J1Y2lhbCBndWlkZWxpbmVzIGZvciBkZXRlcm1pbmluZyBcIldvcnRoRnV6emluZz1mYWxzZVwiLiBBY2NvcmRpbmcgdG8gc2VjdGlvbiAyLCBJIG5lZWQgdG8gbG9vayBmb3IgKm5lZ2F0aXZlIGNyaXRlcmlhKjogY2hhbmdlcyB0aGF0ICpvbmx5KiBmYWxsIGludG8gc3BlY2lmaWMgY2F0ZWdvcmllcy4gTmFtZWx5LCBjaGFuZ2VzIHRoYXQgYXJlOiBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSwgbW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgc3BlbGxpbmcgZml4ZXMsIG9yIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMgKHNlbGYtdGVzdHMsIHNhbXBsZXMsIHNjcmlwdHMpIHRoYXQgKmRvbid0KiBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAoYHZtbGludXhgKSBvciBrZXJuZWwgbW9kdWxlcy5cblxuQSBxdWljayByZXZpZXcgb2YgdGhlIGRpZmYgY29uZmlybXMgdGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBhbGwgaW4gZWl0aGVyIGB0b29scy9saWIvYnBmL2Agb3IgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBub3cgaXMgdG8gdmVyaWZ5IHdoZXRoZXIgYW55ICpvdGhlciogZmlsZXMgd2VyZSB0b3VjaGVkIGluIHRoaXMgY29tbWl0LiBUaGFua2Z1bGx5LCB0aGUgZnVsbCBkaWZmIGlzIHByb3ZpZGVkLCBzbyBJIGRvbid0IG5lZWQgdG8gcmVhY2ggZm9yIGBnaXQgc3RhdHVzYCwgYGdpdCBkaWZmYCwgb3IgYSBgZ3JlcHBlcmAgY2FsbCAod2hpY2ggaXMgcmVhbGx5IGp1c3QgYSBgZ2l0IGdyZXBgIGFueXdheXMpLiAgVGhlIHByb3ZpZGVkIGRpZmYgY29uZmlybXMgdGhlIGxpc3QgSSBzdGFydGVkIHdpdGggaXMgZXhoYXVzdGl2ZS4gTm8gb3RoZXIgZmlsZXMgYXJlIHRvdWNoZWQuXG5cbkFscmlnaHQuIENvbnNpZGVyaW5nIHRoZSBjb250ZXh0LCBgdG9vbHMvbGliL2JwZmAgY29udGFpbnMgdGhlIHVzZXItc3BhY2UgbGliYnBmIGxpYnJhcnksIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmYCBhcmUgdXNlci1zcGFjZSBzZWxmLXRlc3RzLiAgTXkgYXNzZXNzbWVudCBpcyB0aGF0IG5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUga2VybmVsIG9yIHRoZSBrZXJuZWwgbW9kdWxlcy5cblxuSSBnbyBiYWNrIHRvIHRoZSBndWlkZWxpbmVzIG9uY2UgbW9yZSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFllcCwgdGhlIGNoYW5nZXMgc3RyaWN0bHkgZmFsbCB1bmRlciB0aGUgXCJ1c2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLi4uIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlc1wiIGNhdGVnb3J5LiBQZXJmZWN0LiBUaGlzIGlzIGEgY2xlYXIgY2FzZSBmb3IgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byB1c2VyLXNwYWNlIHRvb2xzIGFuZCB0ZXN0cywgYW5kIHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIHdpdGgga2VybmVsIGNvZGUuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbnMgYXJlIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAsIGBGb2N1c1N5bWJvbHM9W11gLCBhbmQgYEVuYWJsZUNvbmZpZ3M9W11gLiAgTXkgcmVhc29uaW5nIGlzIGNvbmNpc2VseSBleHBsYWluZWQ6IGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIHVzZXItc3BhY2UgbGliYnBmIGFuZCBzZWxmLXRlc3RzIGxvY2F0ZWQgdW5kZXIgdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgYW5kIHRoZSBjaGFuZ2VzIGRvIG5vdCBhZmZlY3QgdGhlIGtlcm5lbCBjb2RlLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE0NywiT3V0cHV0VG9rZW5zIjo5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzowMjo1MC40MDY1MDUyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIHRvb2xzL2xpYi9icGYgKGxpYmJwZiBsaWJyYXJ5KSBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmIChzZWxmdGVzdHMpLiBJdCBkb2VzIG5vdCBhbHRlciB0aGUgTGludXgga2VybmVsIGltYWdlIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgc28gaXQgaXMgbm90IGFwcGxpY2FibGUgZm9yIHN5emthbGxlciBrZXJuZWwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSBjb2RlIHdpdGhpbiB0b29scy9saWIvYnBmIChsaWJicGYgbGlicmFyeSkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZiAoc2VsZnRlc3RzKS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSBvciBhbnkga2VybmVsIG1vZHVsZXMsIHNvIGl0IGlzIG5vdCBhcHBsaWNhYmxlIGZvciBzeXprYWxsZXIga2VybmVsIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzowMjo1MC40MDY1Mjc1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowwkhds[1] Phase: Running StartedAt: 2026-09-15 17:03:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkhds[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-15 17:03:01 +0000 UTC FinishedAt: 2026-09-15 17:03:06 +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,}