Name: series-workflowh5shx Phase: Failed StartedAt: 2026-06-25 08:18:41 +0000 UTC FinishedAt: 2026-06-25 08:27:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh5shx[0] Phase: Succeeded StartedAt: 2026-06-25 08:18:41 +0000 UTC FinishedAt: 2026-06-25 08:26:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh5shx[0].run-triage Phase: Succeeded StartedAt: 2026-06-25 08:18:41 +0000 UTC FinishedAt: 2026-06-25 08:26:41 +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+CgkJCTx0ZD4yMDI2LzA2LzI1IDA4OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVhcmx5IGJvb3QgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljIChmdW5jdGlvbnMgbWFya2VkIHdpdGggX19pbml0IG9yIF9fbWVtaW5pdCwgYW5kIHBhdGhzIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIE1FTUlOSVRfRUFSTFkpLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdCBhbmQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBvciBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiwgbWFraW5nIGl0IHVuc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA4OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTY2MjNjMjFlZjI1OTAxZDYzYzFiZDRhYzc3NTM5M2UxY2NkNmFmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDA4OjI1OjAwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggZjlmOGUxYWY5MjFjZGEuLjZmMGE3MWNjY2EzMGUxIDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmNcbkBAIC03ODMsMjggJiM0Mzs3ODMsNiBAQCB2b2lkIF9fbWVtaW5pdCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXG4gXHRfX2luaXRfZGVmZXJyZWRfcGFnZShwZm4sIG5pZCk7XG4gfVxuIFxuLS8qIElmIHpvbmUgaXMgWk9ORV9NT1ZBQkxFIGJ1dCBtZW1vcnkgaXMgbWlycm9yZWQsIGl0IGlzIGFuIG92ZXJsYXBwZWQgaW5pdCAqL1xuLXN0YXRpYyBib29sIF9fbWVtaW5pdFxuLW92ZXJsYXBfbWVtbWFwX2luaXQodW5zaWduZWQgbG9uZyB6b25lLCB1bnNpZ25lZCBsb25nICpwZm4pXG4te1xuLVx0c3RhdGljIHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnIgX19tZW1pbml0ZGF0YTtcbi1cbi1cdGlmIChtaXJyb3JlZF9rZXJuZWxjb3JlIFx1MDAyNlx1MDAyNiB6b25lID09IFpPTkVfTU9WQUJMRSkge1xuLVx0XHRpZiAoIXIgfHwgKnBmbiBcdTAwM2U9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSkge1xuLVx0XHRcdGZvcl9lYWNoX21lbV9yZWdpb24ocikge1xuLVx0XHRcdFx0aWYgKCpwZm4gXHUwMDNjIG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSlcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdGlmICgqcGZuIFx1MDAzZT0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9iYXNlX3BmbihyKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1lbWJsb2NrX2lzX21pcnJvcihyKSkge1xuLVx0XHRcdCpwZm4gPSBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2VuZF9wZm4ocik7XG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdH1cbi1cdH1cbi1cdHJldHVybiBmYWxzZTtcbi19XG4tXG4gLypcbiAgKiBPbmx5IHN0cnVjdCBwYWdlcyB0aGF0IGNvcnJlc3BvbmQgdG8gcmFuZ2VzIGRlZmluZWQgYnkgbWVtYmxvY2subWVtb3J5XG4gICogYXJlIHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgZ29pbmcgdGhyb3VnaCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBkdXJpbmdcbkBAIC04OTEsOCAmIzQzOzg2OSw2IEBAIHZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lXG4gXHRcdCAqIGZ1bmN0aW9uLiAgVGhleSBkbyBub3QgZXhpc3Qgb24gaG90cGx1Z2dlZCBtZW1vcnkuXG4gXHRcdCAqL1xuIFx0XHRpZiAoY29udGV4dCA9PSBNRU1JTklUX0VBUkxZKSB7XG4tXHRcdFx0aWYgKG92ZXJsYXBfbWVtbWFwX2luaXQoem9uZSwgXHUwMDI2cGZuKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdGlmIChkZWZlcl9pbml0KG5pZCwgcGZuLCB6b25lX2VuZF9wZm4pKSB7XG4gXHRcdFx0XHRkZWZlcnJlZF9zdHJ1Y3RfcGFnZXMgPSB0cnVlO1xuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMTE1OSw5ICYjNDM7MTEzNSw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlKGludCBuaWQsXG4gXHRcdFx0XHRhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7XG4gXG4gXHRcdC8qIEFkanVzdCBmb3IgWk9ORV9NT1ZBQkxFIHN0YXJ0aW5nIHdpdGhpbiB0aGlzIHJhbmdlICovXG4tXHRcdH0gZWxzZSBpZiAoIW1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KnpvbmVfc3RhcnRfcGZuIFx1MDAzYyB6b25lX21vdmFibGVfcGZuW25pZF0gXHUwMDI2XHUwMDI2XG4tXHRcdFx0KnpvbmVfZW5kX3BmbiBcdTAwM2Ugem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCp6b25lX3N0YXJ0X3BmbiBcdTAwM2Mgem9uZV9tb3ZhYmxlX3BmbltuaWRdIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAqem9uZV9lbmRfcGZuIFx1MDAzZSB6b25lX21vdmFibGVfcGZuW25pZF0pIHtcbiBcdFx0XHQqem9uZV9lbmRfcGZuID0gem9uZV9tb3ZhYmxlX3BmbltuaWRdO1xuIFxuIFx0XHQvKiBDaGVjayBpZiB0aGlzIHdob2xlIHJhbmdlIGlzIHdpdGhpbiBaT05FX01PVkFCTEUgKi9cbkBAIC0xMjA5LDQwICYjNDM7MTE4NCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIHpvbmVfZW5kX3BmbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5yX2Fic2VudDtcbi1cbiBcdC8qIHpvbmUgaXMgZW1wdHksIHdlIGRvbiYjMzk7dCBoYXZlIGFueSBhYnNlbnQgcGFnZXMgKi9cbiBcdGlmICh6b25lX3N0YXJ0X3BmbiA9PSB6b25lX2VuZF9wZm4pXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0bnJfYWJzZW50ID0gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UobmlkLCB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cbi1cdC8qXG4tXHQgKiBaT05FX01PVkFCTEUgaGFuZGxpbmcuXG4tXHQgKiBUcmVhdCBwYWdlcyB0byBiZSBaT05FX01PVkFCTEUgaW4gWk9ORV9OT1JNQUwgYXMgYWJzZW50IHBhZ2VzXG4tXHQgKiBhbmQgdmljZSB2ZXJzYS5cbi1cdCAqL1xuLVx0aWYgKG1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2IHpvbmVfbW92YWJsZV9wZm5bbmlkXSkge1xuLVx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3Bmbjtcbi1cdFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcjtcbi1cbi1cdFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XG4tXHRcdFx0c3RhcnRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9iYXNlX3BmbihyKSxcbi1cdFx0XHRcdFx0ICB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cdFx0XHRlbmRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpLFxuLVx0XHRcdFx0XHR6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cbi1cdFx0XHRpZiAoem9uZV90eXBlID09IFpPTkVfTU9WQUJMRSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgbWVtYmxvY2tfaXNfbWlycm9yKHIpKVxuLVx0XHRcdFx0bnJfYWJzZW50ICYjNDM7PSBlbmRfcGZuIC0gc3RhcnRfcGZuO1xuLVxuLVx0XHRcdGlmICh6b25lX3R5cGUgPT0gWk9ORV9OT1JNQUwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFtZW1ibG9ja19pc19taXJyb3IocikpXG4tXHRcdFx0XHRucl9hYnNlbnQgJiM0Mzs9IGVuZF9wZm4gLSBzdGFydF9wZm47XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHJldHVybiBucl9hYnNlbnQ7XG4mIzQzO1x0cmV0dXJuIF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XG4gfVxuIFxuIC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDg6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZWFybHkgYm9vdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMgKGZ1bmN0aW9ucyBtYXJrZWQgd2l0aCBfX2luaXQgb3IgX19tZW1pbml0LCBhbmQgcGF0aHMgZXhwbGljaXRseSBjaGVja2luZyBmb3IgTUVNSU5JVF9FQVJMWSkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBvbmx5IG9uY2UgZHVyaW5nIGtlcm5lbCBib290IGFuZCBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIG9yIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLCBtYWtpbmcgaXQgdW5zdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE2NjIzYzIxZWYyNTkwMWQ2M2MxYmQ0YWM3NzUzOTNlMWNjZDZhZjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1biAyNSAwODoyNTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuYwppbmRleCBmOWY4ZTFhZjkyMWNkYS4uNmYwYTcxY2NjYTMwZTEgMTAwNjQ0Ci0tLSBhL21tL21tX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmMKQEAgLTc4MywyOCAmIzQzOzc4Myw2IEBAIHZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZCkKIAlfX2luaXRfZGVmZXJyZWRfcGFnZShwZm4sIG5pZCk7CiB9CiAKLS8qIElmIHpvbmUgaXMgWk9ORV9NT1ZBQkxFIGJ1dCBtZW1vcnkgaXMgbWlycm9yZWQsIGl0IGlzIGFuIG92ZXJsYXBwZWQgaW5pdCAqLwotc3RhdGljIGJvb2wgX19tZW1pbml0Ci1vdmVybGFwX21lbW1hcF9pbml0KHVuc2lnbmVkIGxvbmcgem9uZSwgdW5zaWduZWQgbG9uZyAqcGZuKQotewotCXN0YXRpYyBzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyIF9fbWVtaW5pdGRhdGE7Ci0KLQlpZiAobWlycm9yZWRfa2VybmVsY29yZSAmYW1wOyZhbXA7IHpvbmUgPT0gWk9ORV9NT1ZBQkxFKSB7Ci0JCWlmICghciB8fCAqcGZuICZndDs9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSkgewotCQkJZm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7Ci0JCQkJaWYgKCpwZm4gJmx0OyBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2VuZF9wZm4ocikpCi0JCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICgqcGZuICZndDs9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfYmFzZV9wZm4ocikgJmFtcDsmYW1wOwotCQkgICAgbWVtYmxvY2tfaXNfbWlycm9yKHIpKSB7Ci0JCQkqcGZuID0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCiAvKgogICogT25seSBzdHJ1Y3QgcGFnZXMgdGhhdCBjb3JyZXNwb25kIHRvIHJhbmdlcyBkZWZpbmVkIGJ5IG1lbWJsb2NrLm1lbW9yeQogICogYXJlIHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgZ29pbmcgdGhyb3VnaCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBkdXJpbmcKQEAgLTg5MSw4ICYjNDM7ODY5LDYgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmUKIAkJICogZnVuY3Rpb24uICBUaGV5IGRvIG5vdCBleGlzdCBvbiBob3RwbHVnZ2VkIG1lbW9yeS4KIAkJICovCiAJCWlmIChjb250ZXh0ID09IE1FTUlOSVRfRUFSTFkpIHsKLQkJCWlmIChvdmVybGFwX21lbW1hcF9pbml0KHpvbmUsICZhbXA7cGZuKSkKLQkJCQljb250aW51ZTsKIAkJCWlmIChkZWZlcl9pbml0KG5pZCwgcGZuLCB6b25lX2VuZF9wZm4pKSB7CiAJCQkJZGVmZXJyZWRfc3RydWN0X3BhZ2VzID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTExNTksOSAmIzQzOzExMzUsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZShpbnQgbmlkLAogCQkJCWFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3Bmblttb3ZhYmxlX3pvbmVdKTsKIAogCQkvKiBBZGp1c3QgZm9yIFpPTkVfTU9WQUJMRSBzdGFydGluZyB3aXRoaW4gdGhpcyByYW5nZSAqLwotCQl9IGVsc2UgaWYgKCFtaXJyb3JlZF9rZXJuZWxjb3JlICZhbXA7JmFtcDsKLQkJCSp6b25lX3N0YXJ0X3BmbiAmbHQ7IHpvbmVfbW92YWJsZV9wZm5bbmlkXSAmYW1wOyZhbXA7Ci0JCQkqem9uZV9lbmRfcGZuICZndDsgem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7CiYjNDM7CQl9IGVsc2UgaWYgKCp6b25lX3N0YXJ0X3BmbiAmbHQ7IHpvbmVfbW92YWJsZV9wZm5bbmlkXSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgKnpvbmVfZW5kX3BmbiAmZ3Q7IHpvbmVfbW92YWJsZV9wZm5bbmlkXSkgewogCQkJKnpvbmVfZW5kX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTsKIAogCQkvKiBDaGVjayBpZiB0aGlzIHdob2xlIHJhbmdlIGlzIHdpdGhpbiBaT05FX01PVkFCTEUgKi8KQEAgLTEyMDksNDAgJiM0MzsxMTg0LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgem9uZV9zdGFydF9wZm4sCiAJCQkJCXVuc2lnbmVkIGxvbmcgem9uZV9lbmRfcGZuKQogewotCXVuc2lnbmVkIGxvbmcgbnJfYWJzZW50OwotCiAJLyogem9uZSBpcyBlbXB0eSwgd2UgZG9uJiMzOTt0IGhhdmUgYW55IGFic2VudCBwYWdlcyAqLwogCWlmICh6b25lX3N0YXJ0X3BmbiA9PSB6b25lX2VuZF9wZm4pCiAJCXJldHVybiAwOwogCi0JbnJfYWJzZW50ID0gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UobmlkLCB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTsKLQotCS8qCi0JICogWk9ORV9NT1ZBQkxFIGhhbmRsaW5nLgotCSAqIFRyZWF0IHBhZ2VzIHRvIGJlIFpPTkVfTU9WQUJMRSBpbiBaT05FX05PUk1BTCBhcyBhYnNlbnQgcGFnZXMKLQkgKiBhbmQgdmljZSB2ZXJzYS4KLQkgKi8KLQlpZiAobWlycm9yZWRfa2VybmVsY29yZSAmYW1wOyZhbXA7IHpvbmVfbW92YWJsZV9wZm5bbmlkXSkgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKLQkJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcjsKLQotCQlmb3JfZWFjaF9tZW1fcmVnaW9uKHIpIHsKLQkJCXN0YXJ0X3BmbiA9IGNsYW1wKG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfYmFzZV9wZm4ociksCi0JCQkJCSAgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7Ci0JCQllbmRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpLAotCQkJCQl6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTsKLQotCQkJaWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUgJmFtcDsmYW1wOwotCQkJICAgIG1lbWJsb2NrX2lzX21pcnJvcihyKSkKLQkJCQlucl9hYnNlbnQgJiM0Mzs9IGVuZF9wZm4gLSBzdGFydF9wZm47Ci0KLQkJCWlmICh6b25lX3R5cGUgPT0gWk9ORV9OT1JNQUwgJmFtcDsmYW1wOwotCQkJICAgICFtZW1ibG9ja19pc19taXJyb3IocikpCi0JCQkJbnJfYWJzZW50ICYjNDM7PSBlbmRfcGZuIC0gc3RhcnRfcGZuOwotCQl9Ci0JfQotCi0JcmV0dXJuIG5yX2Fic2VudDsKJiM0MzsJcmV0dXJuIF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7CiB9CiAKIC8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA4OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBJbml0aWFsaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9tbV9pbml0LmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhcyB0aGlzIGZpbGUgZGVhbHMgd2l0aCBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXNlcyBvbiB0aGUgZWFybHkgYm9vdCBwcm9jZXNzLiBJIHNlZSB0aGF0IGl0IHJlbW92ZXMgYG92ZXJsYXBfbWVtbWFwX2luaXRgIGFuZCBpdHMgY2FsbCB3aXRoaW4gYG1lbW1hcF9pbml0X3JhbmdlYC4gSXQgYWxzbyBzZWVtcyB0byBiZSBtb2RpZnlpbmcgZnVuY3Rpb25zIGxpa2UgYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgIGFuZCBgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZWAuIFRoZSBrZXl3b3JkcyBoZXJlIGFyZSBgbWlycm9yZWRfa2VybmVsY29yZWAgYW5kIGBaT05FX01PVkFCTEVgLCB3aGljaCBib3RoIGRlZmluaXRlbHkgcG9pbnQgdG93YXJkcyBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGdpdmVuIHRoZSBjb250ZXh0LCBpbml0aWFsIG1lbW9yeSBzZXR1cC4KClRoZXNlIGFyZSBhbm5vdGF0ZWQgYXMgYF9fbWVtaW5pdGAgYW5kIGBfX2luaXRgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGV5JiMzOTtyZSBydW5uaW5nIGluIHRoZSBlYXJseSBib290IHNlcXVlbmNlLiBUaGF0IHVzdWFsbHkgbWVhbnMgdGhhdCBmdXp6aW5nIHRoaXMgYXJlYSB3aXRoIHN5emthbGxlciBpcyBub3QgdGhlIG5vcm1hbCBhcHByb2FjaC4gSXQmIzM5O3Mgb2Z0ZW4gZGlmZmljdWx0IGZvciBzeXprYWxsZXIgdG8gZHluYW1pY2FsbHkgY2hhbmdlIGJvb3QgcGFyYW1ldGVycyBvciBtZW1vcnkgbGF5b3V0cyBiZXR3ZWVuIHRlc3QgY2FzZXMsIGFzIGl0IHVzdWFsbHkgcmVxdWlyZXMgYSByZWJvb3Qgb2YgdGhlIFZNLgoKV2FpdCwgaG9sZCBvbiwgc3l6a2FsbGVyICpkb2VzKiB0b3VjaCBzb21lIGVhcmx5IGJvb3Qgc3R1ZmYsIHNvIG1heWJlIHRoaXMgaXMgcmVsZXZhbnQuIEJ1dCBpcyBgbWVtbWFwX2luaXRfcmFuZ2VgIHNvbWV0aGluZyByZWFjaGFibGUgbGF0ZXI/IEl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgYm9vdCwgdGhhdCYjMzk7cyBjZXJ0YWluLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgc2VlIGlmIGBtZW1tYXBfaW5pdF9yYW5nZWAgY291bGQgYmUgcmVhY2hlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucz8gSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBtZW1tYXBfaW5pdF9yYW5nZWAgaXMgY2FsbGVkIGZyb20uIEkgdGhpbmsgaXQgaXMgY2FsbGVkIGZyb20gYG1lbW1hcF9pbml0X3pvbmVgIG9yIGBtZW1tYXBfaW5pdGAuIE9rLCB0aW1lIHRvIGdyZXAgZm9yIGBtZW1tYXBfaW5pdF9yYW5nZWAgYW5kIHNlZSBpZiBhbnkgb3RoZXIgY29kZSBwYXRocyBjYWxsIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA4OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW1hcF9pbml0X3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9OTUzPWV4dGVybiB2b2lkICptZW1tYXBfYWxsb2MocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXG4tLVxubW0vaW50ZXJuYWwuaC05NTYtXG5tbS9pbnRlcm5hbC5oOjk1Nzp2b2lkIG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcsIGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyxcbm1tL2ludGVybmFsLmgtOTU4LVx0XHR1bnNpZ25lZCBsb25nLCBlbnVtIG1lbWluaXRfY29udGV4dCwgc3RydWN0IHZtZW1fYWx0bWFwICosIGludCxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTc0MD12b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtNzczLVx0ICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjc3NDpcdG1lbW1hcF9pbml0X3JhbmdlKG5yX3BhZ2VzLCBuaWQsIHpvbmVfaWR4KHpvbmUpLCBzdGFydF9wZm4sIDAsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTc3NS1cdFx0XHQgTUVNSU5JVF9IT1RQTFVHLCBhbHRtYXAsIG1pZ3JhdGV0eXBlLFxuLS1cbm1tL21tX2luaXQuYz04MDk9c3RhdGljIHZvaWQgX19pbml0IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzcGZuLFxuLS1cbm1tL21tX2luaXQuYy04MzUtICovXG5tbS9tbV9pbml0LmM6ODM2OnZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLFxubW0vbW1faW5pdC5jLTgzNy1cdFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9lbmRfcGZuLFxuLS1cbm1tL21tX2luaXQuYz05MDM9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbW1faW5pdC5jLTkxNy1cbm1tL21tX2luaXQuYzo5MTg6XHRtZW1tYXBfaW5pdF9yYW5nZShlbmRfcGZuIC0gc3RhcnRfcGZuLCBuaWQsIHpvbmVfaWQsIHN0YXJ0X3Bmbixcbm1tL21tX2luaXQuYy05MTktXHRcdFx0ICB6b25lX2VuZF9wZm4sIE1FTUlOSVRfRUFSTFksIE5VTEwsIE1JR1JBVEVfTU9WQUJMRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTg1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBNZW1vcnkgSG90cGx1ZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGZvY3VzIGdvZXMgdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIGBtZW1tYXBfaW5pdF9yYW5nZWAuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbCwgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAgd2l0aGluIGBtbS9tZW1vcnlfaG90cGx1Zy5jYC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhbHRlciB0aGUgYE1FTUlOSVRfRUFSTFlgIHBhdGggd2l0aGluIGBtZW1tYXBfaW5pdF9yYW5nZWAuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0aGUgcGF0Y2ggaXMgcmVtb3Zpbmcgc29tZSBvdmVybGFwcGluZyBtZW1vcnkgbWFwIGluaXRpYWxpemF0aW9uIChgb3ZlcmxhcF9tZW1tYXBfaW5pdGApIGFuZCwgaW5zdGVhZCwgY29uZGl0aW9uYWxseSBjYWxsaW5nIGBkZWZlcl9pbml0YC4gVGhpcyBkaXJlY3QgbW9kaWZpY2F0aW9uIHN1Z2dlc3RzIHRoZSBwcmltYXJ5IGltcGFjdCBpcyBjb25maW5lZCB0byB0aGUgZWFybHkgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBoYXNlLiBJIG5lZWQgdG8ga2VlcCB0aGlzIG5hcnJvd2VkIHNjb3BlIG9mIGluZmx1ZW5jZSBpbiBtaW5kLgoKSG93ZXZlciwgdGhlIHBhdGNoIGlzbiYjMzk7dCAqb25seSogaW4gYG1lbW1hcF9pbml0X3JhbmdlYC4gVGhlcmUgYXJlIGFsc28gY2hhbmdlcyB0byBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAgYW5kIGB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlYC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mICp0aG9zZSogY2hhbmdlcyB0b28sIGJlY2F1c2UgdGhlc2UgYXJlIG5vdCBzaW1wbGUsIGxvY2FsIG1vZGlmaWNhdGlvbnMuIFdoZXJlIGFyZSAqdGhlc2UqIGZ1bmN0aW9ucyBjYWxsZWQ/IFRoYXQmIzM5O3MgdGhlIG5leHQgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSBuZWVkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgZXh0ZW50IG9mIHRoaXMgcGF0Y2gmIzM5O3MgaW5mbHVlbmNlIG9uIHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQsIG5vdCBqdXN0IGR1cmluZyBlYXJseSBpbml0aWFsaXphdGlvbiwgYnV0IGFsc28gZHluYW1pY2FsbHksIGFzIG1lbW9yeSBpcyBhZGRlZCBhbmQgcmVtb3ZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYz0xMDcwPXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbW1faW5pdC5jLTExMjItICovXG5tbS9tbV9pbml0LmM6MTEyMzpzdGF0aWMgdm9pZCBfX2luaXQgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZShpbnQgbmlkLFxubW0vbW1faW5pdC5jLTExMjQtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgem9uZV90eXBlLFxuLS1cbm1tL21tX2luaXQuYz0xMTk4PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxuLS1cbm1tL21tX2luaXQuYy0xMjEwLVx0KnpvbmVfZW5kX3BmbiA9IGNsYW1wKG5vZGVfZW5kX3Bmbiwgem9uZV9sb3csIHpvbmVfaGlnaCk7XG5tbS9tbV9pbml0LmM6MTIxMTpcdGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUobmlkLCB6b25lX3R5cGUsIG5vZGVfZW5kX3Bmbixcbm1tL21tX2luaXQuYy0xMjEyLVx0XHRcdFx0XHQgICB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzY1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1GYWxzZTogSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgaXQgc2VlbXMgbGlrZSBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAgYW5kIGB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlYCBhcmUgYm90aCBpbnZvbHZlZCBpbiB0aGUgYF9faW5pdGAgc3RhZ2UuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gRGlnZ2luZyBkZWVwZXIsIGl0IHNlZW1zICphbGwqIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGVpdGhlciBwYXJ0IG9mIHRoZSBgX19pbml0YCBwcm9jZXNzIGl0c2VsZiwgb3IsIHRoZWlyIGNvZGUgcGF0aHMgZmFsbCB1bmRlciBgTUVNSU5JVF9FQVJMWWAuIEFuZCB3ZSBrbm93IGBNRU1JTklUX0VBUkxZYCBpcyBleGNsdXNpdmVseSB1c2VkIGR1cmluZyB0aGF0IGNydWNpYWwsIGVhcmx5IGJvb3Qgc2VxdWVuY2UuCgpDcnVjaWFsbHksIFN5emthbGxlciwgd2l0aCBpdHMgZm9jdXMgb24gdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBhbmQgcnVudGltZSBiZWhhdmlvciwgKmRvZXNuJiMzOTt0KiB0b3VjaCBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbi4gSXQmIzM5O3MgZGVzaWduZWQgdG8gcHJvYmUgdGhlIGtlcm5lbCBhZnRlciBpdCYjMzk7cyBmdWxseSBib290ZWQgYW5kIHJ1bm5pbmcgaW4gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzLCByZXNpZGluZyBmaXJtbHkgaW4gdGhlIGVhcmx5IGJvb3Qgc3BhY2UsIGFyZSBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBieSBmdXp6aW5nLgoKSSYjMzk7bSB0aGlua2luZyB0aGlzIG1lYW5zLCBjb25maWRlbnRseSwgSSBzaG91bGQgYmUgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBIb3dldmVyLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYW5kIHJ1biB0aHJvdWdoIGB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYz0xMTc1PXVuc2lnbmVkIGxvbmcgX19pbml0IGFic2VudF9wYWdlc19pbl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi0tXG5tbS9tbV9pbml0LmMtMTE4MS0vKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlIGZyYW1lcyBpbiBob2xlcyBpbiBhIHpvbmUgb24gYSBub2RlICovXG5tbS9tbV9pbml0LmM6MTE4MjpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxubW0vbW1faW5pdC5jLTExODMtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgem9uZV90eXBlLFxuLS1cbm1tL21tX2luaXQuYy0xMTk1LSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGEgem9uZSBzcGFucyBpbiBhIG5vZGUsIGluY2x1ZGluZyBob2xlc1xubW0vbW1faW5pdC5jOjExOTY6ICogcHJlc2VudF9wYWdlcyA9IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKCkgLSB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKClcbm1tL21tX2luaXQuYy0xMTk3LSAqL1xuLS1cbm1tL21tX2luaXQuYz0xMjY4PXN0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vbW1faW5pdC5jLTEyODUtXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZ6b25lX2VuZF9wZm4pO1xubW0vbW1faW5pdC5jOjEyODY6XHRcdGFic2VudCA9IHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUocGdkYXQtXHUwMDNlbm9kZV9pZCwgaSxcbm1tL21tX2luaXQuYy0xMjg3LVx0XHRcdFx0XHRcdCAgIHpvbmVfc3RhcnRfcGZuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA4OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MDgKCQkJCQkJCW91dHB1dDogODkKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29kZSBSZWFjaGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlYCBpcyBkZWZpbmVkIHdpdGhpbiBgX19pbml0YCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlc2AsIHdoaWNoIGlzICphbHNvKiBkZWZpbmVkIGluIGBfX2luaXRgLiBGcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgY3JpdGljYWwuIEJvdGggZnVuY3Rpb25zIGFyZSBwYXJ0IG9mIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZS4gU2luY2UgdGhlIGNvZGUgaXMgbm90IGNhbGxhYmxlIGZyb20gdXNlcnNwYWNlIGFmdGVyIGJvb3QsIHRoZXJlIGlzIG5vIG5lZWQgdG8gbWFrZSB0aGUgY29kZSBmdXp6YWJsZSwgb3IgZXhwb3NlIGl0IHRvIHVzZXJzcGFjZSBkaXJlY3RseS4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gTm8gcG9pbnQgaW4gZXhwZW5kaW5nIHJlc291cmNlcyBmdXp6aW5nIHNvbWV0aGluZyB0aGF0JiMzOTtzIG9ubHkgYWN0aXZlIGR1cmluZyBzeXN0ZW0gc3RhcnR1cC4gVGhlIGZvY3VzIHNob3VsZCBiZSBvbiBjb2RlIGFjY2Vzc2libGUgdG8gdXNlcnNwYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVhcmx5IGJvb3QgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljIChmdW5jdGlvbnMgbWFya2VkIHdpdGggX19pbml0IG9yIF9fbWVtaW5pdCwgYW5kIHBhdGhzIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIE1FTUlOSVRfRUFSTFkpLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdCBhbmQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBvciBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiwgbWFraW5nIGl0IHVuc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYyAoZnVuY3Rpb25zIG1hcmtlZCB3aXRoIF9faW5pdCBvciBfX21lbWluaXQsIGFuZCBwYXRocyBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBNRU1JTklUX0VBUkxZKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIGlzIG5vdCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugb3IgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24sIG1ha2luZyBpdCB1bnN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA4OjI1OjAxLjM5MzM0MjYwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTkwNDM0MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYyAoZnVuY3Rpb25zIG1hcmtlZCB3aXRoIF9faW5pdCBvciBfX21lbWluaXQsIGFuZCBwYXRocyBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBNRU1JTklUX0VBUkxZKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIGlzIG5vdCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugb3IgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24sIG1ha2luZyBpdCB1bnN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDg6MjU6MDEuMzkzMzQ4ODQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM2MjEzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNjYyM2MyMWVmMjU5MDFkNjNjMWJkNGFjNzc1MzkzZTFjY2Q2YWYzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVuIDI1IDA4OjI1OjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xcbmluZGV4IGY5ZjhlMWFmOTIxY2RhLi42ZjBhNzFjY2NhMzBlMSAxMDA2NDRcXG4tLS0gYS9tbS9tbV9pbml0LmNcXG4rKysgYi9tbS9tbV9pbml0LmNcXG5AQCAtNzgzLDI4ICs3ODMsNiBAQCB2b2lkIF9fbWVtaW5pdCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXFxuIFxcdF9faW5pdF9kZWZlcnJlZF9wYWdlKHBmbiwgbmlkKTtcXG4gfVxcbiBcXG4tLyogSWYgem9uZSBpcyBaT05FX01PVkFCTEUgYnV0IG1lbW9yeSBpcyBtaXJyb3JlZCwgaXQgaXMgYW4gb3ZlcmxhcHBlZCBpbml0ICovXFxuLXN0YXRpYyBib29sIF9fbWVtaW5pdFxcbi1vdmVybGFwX21lbW1hcF9pbml0KHVuc2lnbmVkIGxvbmcgem9uZSwgdW5zaWduZWQgbG9uZyAqcGZuKVxcbi17XFxuLVxcdHN0YXRpYyBzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyIF9fbWVtaW5pdGRhdGE7XFxuLVxcbi1cXHRpZiAobWlycm9yZWRfa2VybmVsY29yZSBcXHUwMDI2XFx1MDAyNiB6b25lID09IFpPTkVfTU9WQUJMRSkge1xcbi1cXHRcXHRpZiAoIXIgfHwgKnBmbiBcXHUwMDNlPSBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2VuZF9wZm4ocikpIHtcXG4tXFx0XFx0XFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XFxuLVxcdFxcdFxcdFxcdGlmICgqcGZuIFxcdTAwM2MgbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpKVxcbi1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcdFxcdGlmICgqcGZuIFxcdTAwM2U9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfYmFzZV9wZm4ocikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIG1lbWJsb2NrX2lzX21pcnJvcihyKSkge1xcbi1cXHRcXHRcXHQqcGZuID0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcdHJldHVybiBmYWxzZTtcXG4tfVxcbi1cXG4gLypcXG4gICogT25seSBzdHJ1Y3QgcGFnZXMgdGhhdCBjb3JyZXNwb25kIHRvIHJhbmdlcyBkZWZpbmVkIGJ5IG1lbWJsb2NrLm1lbW9yeVxcbiAgKiBhcmUgemVyb2VkIGFuZCBpbml0aWFsaXplZCBieSBnb2luZyB0aHJvdWdoIF9faW5pdF9zaW5nbGVfcGFnZSgpIGR1cmluZ1xcbkBAIC04OTEsOCArODY5LDYgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmVcXG4gXFx0XFx0ICogZnVuY3Rpb24uICBUaGV5IGRvIG5vdCBleGlzdCBvbiBob3RwbHVnZ2VkIG1lbW9yeS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChjb250ZXh0ID09IE1FTUlOSVRfRUFSTFkpIHtcXG4tXFx0XFx0XFx0aWYgKG92ZXJsYXBfbWVtbWFwX2luaXQoem9uZSwgXFx1MDAyNnBmbikpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHRpZiAoZGVmZXJfaW5pdChuaWQsIHBmbiwgem9uZV9lbmRfcGZuKSkge1xcbiBcXHRcXHRcXHRcXHRkZWZlcnJlZF9zdHJ1Y3RfcGFnZXMgPSB0cnVlO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG5AQCAtMTE1OSw5ICsxMTM1LDggQEAgc3RhdGljIHZvaWQgX19pbml0IGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUoaW50IG5pZCxcXG4gXFx0XFx0XFx0XFx0YXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW21vdmFibGVfem9uZV0pO1xcbiBcXG4gXFx0XFx0LyogQWRqdXN0IGZvciBaT05FX01PVkFCTEUgc3RhcnRpbmcgd2l0aGluIHRoaXMgcmFuZ2UgKi9cXG4tXFx0XFx0fSBlbHNlIGlmICghbWlycm9yZWRfa2VybmVsY29yZSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQqem9uZV9zdGFydF9wZm4gXFx1MDAzYyB6b25lX21vdmFibGVfcGZuW25pZF0gXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0KnpvbmVfZW5kX3BmbiBcXHUwMDNlIHpvbmVfbW92YWJsZV9wZm5bbmlkXSkge1xcbitcXHRcXHR9IGVsc2UgaWYgKCp6b25lX3N0YXJ0X3BmbiBcXHUwMDNjIHpvbmVfbW92YWJsZV9wZm5bbmlkXSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAqem9uZV9lbmRfcGZuIFxcdTAwM2Ugem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XFxuIFxcdFxcdFxcdCp6b25lX2VuZF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07XFxuIFxcbiBcXHRcXHQvKiBDaGVjayBpZiB0aGlzIHdob2xlIHJhbmdlIGlzIHdpdGhpbiBaT05FX01PVkFCTEUgKi9cXG5AQCAtMTIwOSw0MCArMTE4NCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuLFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHpvbmVfZW5kX3BmbilcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5yX2Fic2VudDtcXG4tXFxuIFxcdC8qIHpvbmUgaXMgZW1wdHksIHdlIGRvbid0IGhhdmUgYW55IGFic2VudCBwYWdlcyAqL1xcbiBcXHRpZiAoem9uZV9zdGFydF9wZm4gPT0gem9uZV9lbmRfcGZuKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdG5yX2Fic2VudCA9IF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBaT05FX01PVkFCTEUgaGFuZGxpbmcuXFxuLVxcdCAqIFRyZWF0IHBhZ2VzIHRvIGJlIFpPTkVfTU9WQUJMRSBpbiBaT05FX05PUk1BTCBhcyBhYnNlbnQgcGFnZXNcXG4tXFx0ICogYW5kIHZpY2UgdmVyc2EuXFxuLVxcdCAqL1xcbi1cXHRpZiAobWlycm9yZWRfa2VybmVsY29yZSBcXHUwMDI2XFx1MDAyNiB6b25lX21vdmFibGVfcGZuW25pZF0pIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47XFxuLVxcdFxcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnI7XFxuLVxcbi1cXHRcXHRmb3JfZWFjaF9tZW1fcmVnaW9uKHIpIHtcXG4tXFx0XFx0XFx0c3RhcnRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9iYXNlX3BmbihyKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcXG4tXFx0XFx0XFx0ZW5kX3BmbiA9IGNsYW1wKG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSxcXG4tXFx0XFx0XFx0XFx0XFx0em9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XFxuLVxcbi1cXHRcXHRcXHRpZiAoem9uZV90eXBlID09IFpPTkVfTU9WQUJMRSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgbWVtYmxvY2tfaXNfbWlycm9yKHIpKVxcbi1cXHRcXHRcXHRcXHRucl9hYnNlbnQgKz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcXG4tXFxuLVxcdFxcdFxcdGlmICh6b25lX3R5cGUgPT0gWk9ORV9OT1JNQUwgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgICFtZW1ibG9ja19pc19taXJyb3IocikpXFxuLVxcdFxcdFxcdFxcdG5yX2Fic2VudCArPSBlbmRfcGZuIC0gc3RhcnRfcGZuO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBucl9hYnNlbnQ7XFxuK1xcdHJldHVybiBfX2Fic2VudF9wYWdlc19pbl9yYW5nZShuaWQsIHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm4pO1xcbiB9XFxuIFxcbiAvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwODoyNTowMS44NTc4MDQ3MDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NTI1OTY1Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYyAoZnVuY3Rpb25zIG1hcmtlZCB3aXRoIF9faW5pdCBvciBfX21lbWluaXQsIGFuZCBwYXRocyBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBNRU1JTklUX0VBUkxZKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIGlzIG5vdCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugb3IgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24sIG1ha2luZyBpdCB1bnN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNjYyM2MyMWVmMjU5MDFkNjNjMWJkNGFjNzc1MzkzZTFjY2Q2YWYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdW4gMjUgMDg6MjU6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IGY5ZjhlMWFmOTIxY2RhLi42ZjBhNzFjY2NhMzBlMSAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuKysrIGIvbW0vbW1faW5pdC5jXG5AQCAtNzgzLDI4ICs3ODMsNiBAQCB2b2lkIF9fbWVtaW5pdCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXG4gXHRfX2luaXRfZGVmZXJyZWRfcGFnZShwZm4sIG5pZCk7XG4gfVxuIFxuLS8qIElmIHpvbmUgaXMgWk9ORV9NT1ZBQkxFIGJ1dCBtZW1vcnkgaXMgbWlycm9yZWQsIGl0IGlzIGFuIG92ZXJsYXBwZWQgaW5pdCAqL1xuLXN0YXRpYyBib29sIF9fbWVtaW5pdFxuLW92ZXJsYXBfbWVtbWFwX2luaXQodW5zaWduZWQgbG9uZyB6b25lLCB1bnNpZ25lZCBsb25nICpwZm4pXG4te1xuLVx0c3RhdGljIHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnIgX19tZW1pbml0ZGF0YTtcbi1cbi1cdGlmIChtaXJyb3JlZF9rZXJuZWxjb3JlIFx1MDAyNlx1MDAyNiB6b25lID09IFpPTkVfTU9WQUJMRSkge1xuLVx0XHRpZiAoIXIgfHwgKnBmbiBcdTAwM2U9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSkge1xuLVx0XHRcdGZvcl9lYWNoX21lbV9yZWdpb24ocikge1xuLVx0XHRcdFx0aWYgKCpwZm4gXHUwMDNjIG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSlcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdGlmICgqcGZuIFx1MDAzZT0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9iYXNlX3BmbihyKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1lbWJsb2NrX2lzX21pcnJvcihyKSkge1xuLVx0XHRcdCpwZm4gPSBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2VuZF9wZm4ocik7XG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdH1cbi1cdH1cbi1cdHJldHVybiBmYWxzZTtcbi19XG4tXG4gLypcbiAgKiBPbmx5IHN0cnVjdCBwYWdlcyB0aGF0IGNvcnJlc3BvbmQgdG8gcmFuZ2VzIGRlZmluZWQgYnkgbWVtYmxvY2subWVtb3J5XG4gICogYXJlIHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgZ29pbmcgdGhyb3VnaCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBkdXJpbmdcbkBAIC04OTEsOCArODY5LDYgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmVcbiBcdFx0ICogZnVuY3Rpb24uICBUaGV5IGRvIG5vdCBleGlzdCBvbiBob3RwbHVnZ2VkIG1lbW9yeS5cbiBcdFx0ICovXG4gXHRcdGlmIChjb250ZXh0ID09IE1FTUlOSVRfRUFSTFkpIHtcbi1cdFx0XHRpZiAob3ZlcmxhcF9tZW1tYXBfaW5pdCh6b25lLCBcdTAwMjZwZm4pKVxuLVx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKGRlZmVyX2luaXQobmlkLCBwZm4sIHpvbmVfZW5kX3BmbikpIHtcbiBcdFx0XHRcdGRlZmVycmVkX3N0cnVjdF9wYWdlcyA9IHRydWU7XG4gXHRcdFx0XHRicmVhaztcbkBAIC0xMTU5LDkgKzExMzUsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZShpbnQgbmlkLFxuIFx0XHRcdFx0YXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW21vdmFibGVfem9uZV0pO1xuIFxuIFx0XHQvKiBBZGp1c3QgZm9yIFpPTkVfTU9WQUJMRSBzdGFydGluZyB3aXRoaW4gdGhpcyByYW5nZSAqL1xuLVx0XHR9IGVsc2UgaWYgKCFtaXJyb3JlZF9rZXJuZWxjb3JlIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCp6b25lX3N0YXJ0X3BmbiBcdTAwM2Mgem9uZV9tb3ZhYmxlX3BmbltuaWRdIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCp6b25lX2VuZF9wZm4gXHUwMDNlIHpvbmVfbW92YWJsZV9wZm5bbmlkXSkge1xuK1x0XHR9IGVsc2UgaWYgKCp6b25lX3N0YXJ0X3BmbiBcdTAwM2Mgem9uZV9tb3ZhYmxlX3BmbltuaWRdIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICp6b25lX2VuZF9wZm4gXHUwMDNlIHpvbmVfbW92YWJsZV9wZm5bbmlkXSkge1xuIFx0XHRcdCp6b25lX2VuZF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07XG4gXG4gXHRcdC8qIENoZWNrIGlmIHRoaXMgd2hvbGUgcmFuZ2UgaXMgd2l0aGluIFpPTkVfTU9WQUJMRSAqL1xuQEAgLTEyMDksNDAgKzExODQsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoaW50IG5pZCxcbiBcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3BmbixcbiBcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyB6b25lX2VuZF9wZm4pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBucl9hYnNlbnQ7XG4tXG4gXHQvKiB6b25lIGlzIGVtcHR5LCB3ZSBkb24ndCBoYXZlIGFueSBhYnNlbnQgcGFnZXMgKi9cbiBcdGlmICh6b25lX3N0YXJ0X3BmbiA9PSB6b25lX2VuZF9wZm4pXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0bnJfYWJzZW50ID0gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UobmlkLCB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cbi1cdC8qXG4tXHQgKiBaT05FX01PVkFCTEUgaGFuZGxpbmcuXG4tXHQgKiBUcmVhdCBwYWdlcyB0byBiZSBaT05FX01PVkFCTEUgaW4gWk9ORV9OT1JNQUwgYXMgYWJzZW50IHBhZ2VzXG4tXHQgKiBhbmQgdmljZSB2ZXJzYS5cbi1cdCAqL1xuLVx0aWYgKG1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2IHpvbmVfbW92YWJsZV9wZm5bbmlkXSkge1xuLVx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3Bmbjtcbi1cdFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcjtcbi1cbi1cdFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XG4tXHRcdFx0c3RhcnRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9iYXNlX3BmbihyKSxcbi1cdFx0XHRcdFx0ICB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cdFx0XHRlbmRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpLFxuLVx0XHRcdFx0XHR6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cbi1cdFx0XHRpZiAoem9uZV90eXBlID09IFpPTkVfTU9WQUJMRSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgbWVtYmxvY2tfaXNfbWlycm9yKHIpKVxuLVx0XHRcdFx0bnJfYWJzZW50ICs9IGVuZF9wZm4gLSBzdGFydF9wZm47XG4tXG4tXHRcdFx0aWYgKHpvbmVfdHlwZSA9PSBaT05FX05PUk1BTCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgIW1lbWJsb2NrX2lzX21pcnJvcihyKSlcbi1cdFx0XHRcdG5yX2Fic2VudCArPSBlbmRfcGZuIC0gc3RhcnRfcGZuO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRyZXR1cm4gbnJfYWJzZW50O1xuK1x0cmV0dXJuIF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XG4gfVxuIFxuIC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwODoyNTowMS44NTc4MDYzNTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDgwMTMzMjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgSW5pdGlhbGl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9tbV9pbml0LmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFzIHRoaXMgZmlsZSBkZWFscyB3aXRoIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYW5kIHNwZWNpZmljYWxseSBmb2N1c2VzIG9uIHRoZSBlYXJseSBib290IHByb2Nlc3MuIEkgc2VlIHRoYXQgaXQgcmVtb3ZlcyBgb3ZlcmxhcF9tZW1tYXBfaW5pdGAgYW5kIGl0cyBjYWxsIHdpdGhpbiBgbWVtbWFwX2luaXRfcmFuZ2VgLiBJdCBhbHNvIHNlZW1zIHRvIGJlIG1vZGlmeWluZyBmdW5jdGlvbnMgbGlrZSBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAgYW5kIGB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlYC4gVGhlIGtleXdvcmRzIGhlcmUgYXJlIGBtaXJyb3JlZF9rZXJuZWxjb3JlYCBhbmQgYFpPTkVfTU9WQUJMRWAsIHdoaWNoIGJvdGggZGVmaW5pdGVseSBwb2ludCB0b3dhcmRzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgZ2l2ZW4gdGhlIGNvbnRleHQsIGluaXRpYWwgbWVtb3J5IHNldHVwLlxuXG5UaGVzZSBhcmUgYW5ub3RhdGVkIGFzIGBfX21lbWluaXRgIGFuZCBgX19pbml0YCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhleSdyZSBydW5uaW5nIGluIHRoZSBlYXJseSBib290IHNlcXVlbmNlLiBUaGF0IHVzdWFsbHkgbWVhbnMgdGhhdCBmdXp6aW5nIHRoaXMgYXJlYSB3aXRoIHN5emthbGxlciBpcyBub3QgdGhlIG5vcm1hbCBhcHByb2FjaC4gSXQncyBvZnRlbiBkaWZmaWN1bHQgZm9yIHN5emthbGxlciB0byBkeW5hbWljYWxseSBjaGFuZ2UgYm9vdCBwYXJhbWV0ZXJzIG9yIG1lbW9yeSBsYXlvdXRzIGJldHdlZW4gdGVzdCBjYXNlcywgYXMgaXQgdXN1YWxseSByZXF1aXJlcyBhIHJlYm9vdCBvZiB0aGUgVk0uXG5cbldhaXQsIGhvbGQgb24sIHN5emthbGxlciAqZG9lcyogdG91Y2ggc29tZSBlYXJseSBib290IHN0dWZmLCBzbyBtYXliZSB0aGlzIGlzIHJlbGV2YW50LiBCdXQgaXMgYG1lbW1hcF9pbml0X3JhbmdlYCBzb21ldGhpbmcgcmVhY2hhYmxlIGxhdGVyPyBJdCdzIGNhbGxlZCBkdXJpbmcgYm9vdCwgdGhhdCdzIGNlcnRhaW4uIExldCdzIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiBgbWVtbWFwX2luaXRfcmFuZ2VgIGNvdWxkIGJlIHJlYWNoZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnM/IEkgbmVlZCB0byBjaGVjayB3aGVyZSBgbWVtbWFwX2luaXRfcmFuZ2VgIGlzIGNhbGxlZCBmcm9tLiBJIHRoaW5rIGl0IGlzIGNhbGxlZCBmcm9tIGBtZW1tYXBfaW5pdF96b25lYCBvciBgbWVtbWFwX2luaXRgLiBPaywgdGltZSB0byBncmVwIGZvciBgbWVtbWFwX2luaXRfcmFuZ2VgIGFuZCBzZWUgaWYgYW55IG90aGVyIGNvZGUgcGF0aHMgY2FsbCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4MCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA4OjI1OjA3LjkzNzk0MTk2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE1NzY5OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW1hcF9pbml0X3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9OTUzPWV4dGVybiB2b2lkICptZW1tYXBfYWxsb2MocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTk1Ni1cXG5tbS9pbnRlcm5hbC5oOjk1Nzp2b2lkIG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcsIGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyxcXG5tbS9pbnRlcm5hbC5oLTk1OC1cXHRcXHR1bnNpZ25lZCBsb25nLCBlbnVtIG1lbWluaXRfY29udGV4dCwgc3RydWN0IHZtZW1fYWx0bWFwICosIGludCxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9NzQwPXZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTc3My1cXHQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjc3NDpcXHRtZW1tYXBfaW5pdF9yYW5nZShucl9wYWdlcywgbmlkLCB6b25lX2lkeCh6b25lKSwgc3RhcnRfcGZuLCAwLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzc1LVxcdFxcdFxcdCBNRU1JTklUX0hPVFBMVUcsIGFsdG1hcCwgbWlncmF0ZXR5cGUsXFxuLS1cXG5tbS9tbV9pbml0LmM9ODA5PXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3VuYXZhaWxhYmxlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3BmbixcXG4tLVxcbm1tL21tX2luaXQuYy04MzUtICovXFxubW0vbW1faW5pdC5jOjgzNjp2b2lkIF9fbWVtaW5pdCBtZW1tYXBfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZSxcXG5tbS9tbV9pbml0LmMtODM3LVxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIHpvbmVfZW5kX3BmbixcXG4tLVxcbm1tL21tX2luaXQuYz05MDM9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tbV9pbml0LmMtOTE3LVxcbm1tL21tX2luaXQuYzo5MTg6XFx0bWVtbWFwX2luaXRfcmFuZ2UoZW5kX3BmbiAtIHN0YXJ0X3BmbiwgbmlkLCB6b25lX2lkLCBzdGFydF9wZm4sXFxubW0vbW1faW5pdC5jLTkxOS1cXHRcXHRcXHQgIHpvbmVfZW5kX3BmbiwgTUVNSU5JVF9FQVJMWSwgTlVMTCwgTUlHUkFURV9NT1ZBQkxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwODoyNToxMC43NTM3MTg0NjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzE4ODg1MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBNZW1vcnkgSG90cGx1ZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBmb2N1cyBnb2VzIHRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgbWVtbWFwX2luaXRfcmFuZ2VgLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwsIGVzcGVjaWFsbHkgc2luY2UgaXQncyBjYWxsZWQgZnJvbSBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAgd2l0aGluIGBtbS9tZW1vcnlfaG90cGx1Zy5jYC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhbHRlciB0aGUgYE1FTUlOSVRfRUFSTFlgIHBhdGggd2l0aGluIGBtZW1tYXBfaW5pdF9yYW5nZWAuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0aGUgcGF0Y2ggaXMgcmVtb3Zpbmcgc29tZSBvdmVybGFwcGluZyBtZW1vcnkgbWFwIGluaXRpYWxpemF0aW9uIChgb3ZlcmxhcF9tZW1tYXBfaW5pdGApIGFuZCwgaW5zdGVhZCwgY29uZGl0aW9uYWxseSBjYWxsaW5nIGBkZWZlcl9pbml0YC4gVGhpcyBkaXJlY3QgbW9kaWZpY2F0aW9uIHN1Z2dlc3RzIHRoZSBwcmltYXJ5IGltcGFjdCBpcyBjb25maW5lZCB0byB0aGUgZWFybHkgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBoYXNlLiBJIG5lZWQgdG8ga2VlcCB0aGlzIG5hcnJvd2VkIHNjb3BlIG9mIGluZmx1ZW5jZSBpbiBtaW5kLlxuXG5Ib3dldmVyLCB0aGUgcGF0Y2ggaXNuJ3QgKm9ubHkqIGluIGBtZW1tYXBfaW5pdF9yYW5nZWAuIFRoZXJlIGFyZSBhbHNvIGNoYW5nZXMgdG8gYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgIGFuZCBgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZWAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiAqdGhvc2UqIGNoYW5nZXMgdG9vLCBiZWNhdXNlIHRoZXNlIGFyZSBub3Qgc2ltcGxlLCBsb2NhbCBtb2RpZmljYXRpb25zLiBXaGVyZSBhcmUgKnRoZXNlKiBmdW5jdGlvbnMgY2FsbGVkPyBUaGF0J3MgdGhlIG5leHQgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSBuZWVkLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBleHRlbnQgb2YgdGhpcyBwYXRjaCdzIGluZmx1ZW5jZSBvbiB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQsIG5vdCBqdXN0IGR1cmluZyBlYXJseSBpbml0aWFsaXphdGlvbiwgYnV0IGFsc28gZHluYW1pY2FsbHksIGFzIG1lbW9yeSBpcyBhZGRlZCBhbmQgcmVtb3ZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk4NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwODoyNToxNS40NzI2MDY0NTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3ODY5NTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21tX2luaXQuYz0xMDcwPXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTEyMi0gKi9cXG5tbS9tbV9pbml0LmM6MTEyMzpzdGF0aWMgdm9pZCBfX2luaXQgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZShpbnQgbmlkLFxcbm1tL21tX2luaXQuYy0xMTI0LVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgem9uZV90eXBlLFxcbi0tXFxubW0vbW1faW5pdC5jPTExOTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKGludCBuaWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTIxMC1cXHQqem9uZV9lbmRfcGZuID0gY2xhbXAobm9kZV9lbmRfcGZuLCB6b25lX2xvdywgem9uZV9oaWdoKTtcXG5tbS9tbV9pbml0LmM6MTIxMTpcXHRhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlKG5pZCwgem9uZV90eXBlLCBub2RlX2VuZF9wZm4sXFxubW0vbW1faW5pdC5jLTEyMTItXFx0XFx0XFx0XFx0XFx0ICAgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA4OjI1OjE3LjY1MTMxNDU3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAzNTc3NzIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9RmFsc2U6IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgaXQgc2VlbXMgbGlrZSBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAgYW5kIGB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlYCBhcmUgYm90aCBpbnZvbHZlZCBpbiB0aGUgYF9faW5pdGAgc3RhZ2UuIFRoYXQncyBhIHJlZCBmbGFnLiBEaWdnaW5nIGRlZXBlciwgaXQgc2VlbXMgKmFsbCogdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgZWl0aGVyIHBhcnQgb2YgdGhlIGBfX2luaXRgIHByb2Nlc3MgaXRzZWxmLCBvciwgdGhlaXIgY29kZSBwYXRocyBmYWxsIHVuZGVyIGBNRU1JTklUX0VBUkxZYC4gQW5kIHdlIGtub3cgYE1FTUlOSVRfRUFSTFlgIGlzIGV4Y2x1c2l2ZWx5IHVzZWQgZHVyaW5nIHRoYXQgY3J1Y2lhbCwgZWFybHkgYm9vdCBzZXF1ZW5jZS5cblxuQ3J1Y2lhbGx5LCBTeXprYWxsZXIsIHdpdGggaXRzIGZvY3VzIG9uIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gYW5kIHJ1bnRpbWUgYmVoYXZpb3IsICpkb2Vzbid0KiB0b3VjaCBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbi4gSXQncyBkZXNpZ25lZCB0byBwcm9iZSB0aGUga2VybmVsIGFmdGVyIGl0J3MgZnVsbHkgYm9vdGVkIGFuZCBydW5uaW5nIGluIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcywgcmVzaWRpbmcgZmlybWx5IGluIHRoZSBlYXJseSBib290IHNwYWNlLCBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgYnkgZnV6emluZy5cblxuSSdtIHRoaW5raW5nIHRoaXMgbWVhbnMsIGNvbmZpZGVudGx5LCBJIHNob3VsZCBiZSByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIEhvd2V2ZXIsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBhbmQgcnVuIHRocm91Z2ggYHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzY1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA4OjI1OjIyLjY4NzExMzUwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUxMjI0MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbW1faW5pdC5jPTExNzU9dW5zaWduZWQgbG9uZyBfX2luaXQgYWJzZW50X3BhZ2VzX2luX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxubW0vbW1faW5pdC5jLTExODEtLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZSBmcmFtZXMgaW4gaG9sZXMgaW4gYSB6b25lIG9uIGEgbm9kZSAqL1xcbm1tL21tX2luaXQuYzoxMTgyOnN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsXFxubW0vbW1faW5pdC5jLTExODMtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB6b25lX3R5cGUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTE5NS0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBhIHpvbmUgc3BhbnMgaW4gYSBub2RlLCBpbmNsdWRpbmcgaG9sZXNcXG5tbS9tbV9pbml0LmM6MTE5NjogKiBwcmVzZW50X3BhZ2VzID0gem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoKSAtIHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoKVxcbm1tL21tX2luaXQuYy0xMTk3LSAqL1xcbi0tXFxubW0vbW1faW5pdC5jPTEyNjg9c3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL21tX2luaXQuYy0xMjg1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnpvbmVfZW5kX3Bmbik7XFxubW0vbW1faW5pdC5jOjEyODY6XFx0XFx0YWJzZW50ID0gem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgaSxcXG5tbS9tbV9pbml0LmMtMTI4Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICB6b25lX3N0YXJ0X3BmbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDg6MjU6MjQuODM4MzQ0MDk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NTM5MzYyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29kZSBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZWAgaXMgZGVmaW5lZCB3aXRoaW4gYF9faW5pdGAsIGFuZCBpdCdzIGNhbGxlZCBieSBgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlc2AsIHdoaWNoIGlzICphbHNvKiBkZWZpbmVkIGluIGBfX2luaXRgLiBGcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB0aGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHNvbWV0aGluZyBjcml0aWNhbC4gQm90aCBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlLiBTaW5jZSB0aGUgY29kZSBpcyBub3QgY2FsbGFibGUgZnJvbSB1c2Vyc3BhY2UgYWZ0ZXIgYm9vdCwgdGhlcmUgaXMgbm8gbmVlZCB0byBtYWtlIHRoZSBjb2RlIGZ1enphYmxlLCBvciBleHBvc2UgaXQgdG8gdXNlcnNwYWNlIGRpcmVjdGx5LiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIE5vIHBvaW50IGluIGV4cGVuZGluZyByZXNvdXJjZXMgZnV6emluZyBzb21ldGhpbmcgdGhhdCdzIG9ubHkgYWN0aXZlIGR1cmluZyBzeXN0ZW0gc3RhcnR1cC4gVGhlIGZvY3VzIHNob3VsZCBiZSBvbiBjb2RlIGFjY2Vzc2libGUgdG8gdXNlcnNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTA4LCJPdXRwdXRUb2tlbnMiOjg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDg6MjU6MjguMzgzNzQxMDA3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZWFybHkgYm9vdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMgKGZ1bmN0aW9ucyBtYXJrZWQgd2l0aCBfX2luaXQgb3IgX19tZW1pbml0LCBhbmQgcGF0aHMgZXhwbGljaXRseSBjaGVja2luZyBmb3IgTUVNSU5JVF9FQVJMWSkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBvbmx5IG9uY2UgZHVyaW5nIGtlcm5lbCBib290IGFuZCBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIG9yIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLCBtYWtpbmcgaXQgdW5zdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVhcmx5IGJvb3QgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljIChmdW5jdGlvbnMgbWFya2VkIHdpdGggX19pbml0IG9yIF9fbWVtaW5pdCwgYW5kIHBhdGhzIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIE1FTUlOSVRfRUFSTFkpLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdCBhbmQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBvciBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiwgbWFraW5nIGl0IHVuc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowh5shx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-25 08:18:41 +0000 UTC FinishedAt: 2026-06-25 08:25:30 +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+CgkJCTx0ZD4yMDI2LzA2LzI1IDA4OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVhcmx5IGJvb3QgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljIChmdW5jdGlvbnMgbWFya2VkIHdpdGggX19pbml0IG9yIF9fbWVtaW5pdCwgYW5kIHBhdGhzIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIE1FTUlOSVRfRUFSTFkpLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdCBhbmQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBvciBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiwgbWFraW5nIGl0IHVuc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA4OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTY2MjNjMjFlZjI1OTAxZDYzYzFiZDRhYzc3NTM5M2UxY2NkNmFmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDA4OjI1OjAwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggZjlmOGUxYWY5MjFjZGEuLjZmMGE3MWNjY2EzMGUxIDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmNcbkBAIC03ODMsMjggJiM0Mzs3ODMsNiBAQCB2b2lkIF9fbWVtaW5pdCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXG4gXHRfX2luaXRfZGVmZXJyZWRfcGFnZShwZm4sIG5pZCk7XG4gfVxuIFxuLS8qIElmIHpvbmUgaXMgWk9ORV9NT1ZBQkxFIGJ1dCBtZW1vcnkgaXMgbWlycm9yZWQsIGl0IGlzIGFuIG92ZXJsYXBwZWQgaW5pdCAqL1xuLXN0YXRpYyBib29sIF9fbWVtaW5pdFxuLW92ZXJsYXBfbWVtbWFwX2luaXQodW5zaWduZWQgbG9uZyB6b25lLCB1bnNpZ25lZCBsb25nICpwZm4pXG4te1xuLVx0c3RhdGljIHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnIgX19tZW1pbml0ZGF0YTtcbi1cbi1cdGlmIChtaXJyb3JlZF9rZXJuZWxjb3JlIFx1MDAyNlx1MDAyNiB6b25lID09IFpPTkVfTU9WQUJMRSkge1xuLVx0XHRpZiAoIXIgfHwgKnBmbiBcdTAwM2U9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSkge1xuLVx0XHRcdGZvcl9lYWNoX21lbV9yZWdpb24ocikge1xuLVx0XHRcdFx0aWYgKCpwZm4gXHUwMDNjIG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSlcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdGlmICgqcGZuIFx1MDAzZT0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9iYXNlX3BmbihyKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1lbWJsb2NrX2lzX21pcnJvcihyKSkge1xuLVx0XHRcdCpwZm4gPSBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2VuZF9wZm4ocik7XG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdH1cbi1cdH1cbi1cdHJldHVybiBmYWxzZTtcbi19XG4tXG4gLypcbiAgKiBPbmx5IHN0cnVjdCBwYWdlcyB0aGF0IGNvcnJlc3BvbmQgdG8gcmFuZ2VzIGRlZmluZWQgYnkgbWVtYmxvY2subWVtb3J5XG4gICogYXJlIHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgZ29pbmcgdGhyb3VnaCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBkdXJpbmdcbkBAIC04OTEsOCAmIzQzOzg2OSw2IEBAIHZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lXG4gXHRcdCAqIGZ1bmN0aW9uLiAgVGhleSBkbyBub3QgZXhpc3Qgb24gaG90cGx1Z2dlZCBtZW1vcnkuXG4gXHRcdCAqL1xuIFx0XHRpZiAoY29udGV4dCA9PSBNRU1JTklUX0VBUkxZKSB7XG4tXHRcdFx0aWYgKG92ZXJsYXBfbWVtbWFwX2luaXQoem9uZSwgXHUwMDI2cGZuKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdGlmIChkZWZlcl9pbml0KG5pZCwgcGZuLCB6b25lX2VuZF9wZm4pKSB7XG4gXHRcdFx0XHRkZWZlcnJlZF9zdHJ1Y3RfcGFnZXMgPSB0cnVlO1xuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMTE1OSw5ICYjNDM7MTEzNSw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlKGludCBuaWQsXG4gXHRcdFx0XHRhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7XG4gXG4gXHRcdC8qIEFkanVzdCBmb3IgWk9ORV9NT1ZBQkxFIHN0YXJ0aW5nIHdpdGhpbiB0aGlzIHJhbmdlICovXG4tXHRcdH0gZWxzZSBpZiAoIW1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KnpvbmVfc3RhcnRfcGZuIFx1MDAzYyB6b25lX21vdmFibGVfcGZuW25pZF0gXHUwMDI2XHUwMDI2XG4tXHRcdFx0KnpvbmVfZW5kX3BmbiBcdTAwM2Ugem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCp6b25lX3N0YXJ0X3BmbiBcdTAwM2Mgem9uZV9tb3ZhYmxlX3BmbltuaWRdIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAqem9uZV9lbmRfcGZuIFx1MDAzZSB6b25lX21vdmFibGVfcGZuW25pZF0pIHtcbiBcdFx0XHQqem9uZV9lbmRfcGZuID0gem9uZV9tb3ZhYmxlX3BmbltuaWRdO1xuIFxuIFx0XHQvKiBDaGVjayBpZiB0aGlzIHdob2xlIHJhbmdlIGlzIHdpdGhpbiBaT05FX01PVkFCTEUgKi9cbkBAIC0xMjA5LDQwICYjNDM7MTE4NCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIHpvbmVfZW5kX3BmbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5yX2Fic2VudDtcbi1cbiBcdC8qIHpvbmUgaXMgZW1wdHksIHdlIGRvbiYjMzk7dCBoYXZlIGFueSBhYnNlbnQgcGFnZXMgKi9cbiBcdGlmICh6b25lX3N0YXJ0X3BmbiA9PSB6b25lX2VuZF9wZm4pXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0bnJfYWJzZW50ID0gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UobmlkLCB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cbi1cdC8qXG4tXHQgKiBaT05FX01PVkFCTEUgaGFuZGxpbmcuXG4tXHQgKiBUcmVhdCBwYWdlcyB0byBiZSBaT05FX01PVkFCTEUgaW4gWk9ORV9OT1JNQUwgYXMgYWJzZW50IHBhZ2VzXG4tXHQgKiBhbmQgdmljZSB2ZXJzYS5cbi1cdCAqL1xuLVx0aWYgKG1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2IHpvbmVfbW92YWJsZV9wZm5bbmlkXSkge1xuLVx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3Bmbjtcbi1cdFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcjtcbi1cbi1cdFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XG4tXHRcdFx0c3RhcnRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9iYXNlX3BmbihyKSxcbi1cdFx0XHRcdFx0ICB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cdFx0XHRlbmRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpLFxuLVx0XHRcdFx0XHR6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cbi1cdFx0XHRpZiAoem9uZV90eXBlID09IFpPTkVfTU9WQUJMRSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgbWVtYmxvY2tfaXNfbWlycm9yKHIpKVxuLVx0XHRcdFx0bnJfYWJzZW50ICYjNDM7PSBlbmRfcGZuIC0gc3RhcnRfcGZuO1xuLVxuLVx0XHRcdGlmICh6b25lX3R5cGUgPT0gWk9ORV9OT1JNQUwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFtZW1ibG9ja19pc19taXJyb3IocikpXG4tXHRcdFx0XHRucl9hYnNlbnQgJiM0Mzs9IGVuZF9wZm4gLSBzdGFydF9wZm47XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHJldHVybiBucl9hYnNlbnQ7XG4mIzQzO1x0cmV0dXJuIF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XG4gfVxuIFxuIC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDg6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZWFybHkgYm9vdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMgKGZ1bmN0aW9ucyBtYXJrZWQgd2l0aCBfX2luaXQgb3IgX19tZW1pbml0LCBhbmQgcGF0aHMgZXhwbGljaXRseSBjaGVja2luZyBmb3IgTUVNSU5JVF9FQVJMWSkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBvbmx5IG9uY2UgZHVyaW5nIGtlcm5lbCBib290IGFuZCBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIG9yIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLCBtYWtpbmcgaXQgdW5zdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE2NjIzYzIxZWYyNTkwMWQ2M2MxYmQ0YWM3NzUzOTNlMWNjZDZhZjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1biAyNSAwODoyNTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuYwppbmRleCBmOWY4ZTFhZjkyMWNkYS4uNmYwYTcxY2NjYTMwZTEgMTAwNjQ0Ci0tLSBhL21tL21tX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmMKQEAgLTc4MywyOCAmIzQzOzc4Myw2IEBAIHZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZCkKIAlfX2luaXRfZGVmZXJyZWRfcGFnZShwZm4sIG5pZCk7CiB9CiAKLS8qIElmIHpvbmUgaXMgWk9ORV9NT1ZBQkxFIGJ1dCBtZW1vcnkgaXMgbWlycm9yZWQsIGl0IGlzIGFuIG92ZXJsYXBwZWQgaW5pdCAqLwotc3RhdGljIGJvb2wgX19tZW1pbml0Ci1vdmVybGFwX21lbW1hcF9pbml0KHVuc2lnbmVkIGxvbmcgem9uZSwgdW5zaWduZWQgbG9uZyAqcGZuKQotewotCXN0YXRpYyBzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyIF9fbWVtaW5pdGRhdGE7Ci0KLQlpZiAobWlycm9yZWRfa2VybmVsY29yZSAmYW1wOyZhbXA7IHpvbmUgPT0gWk9ORV9NT1ZBQkxFKSB7Ci0JCWlmICghciB8fCAqcGZuICZndDs9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSkgewotCQkJZm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7Ci0JCQkJaWYgKCpwZm4gJmx0OyBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2VuZF9wZm4ocikpCi0JCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICgqcGZuICZndDs9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfYmFzZV9wZm4ocikgJmFtcDsmYW1wOwotCQkgICAgbWVtYmxvY2tfaXNfbWlycm9yKHIpKSB7Ci0JCQkqcGZuID0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCiAvKgogICogT25seSBzdHJ1Y3QgcGFnZXMgdGhhdCBjb3JyZXNwb25kIHRvIHJhbmdlcyBkZWZpbmVkIGJ5IG1lbWJsb2NrLm1lbW9yeQogICogYXJlIHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgZ29pbmcgdGhyb3VnaCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBkdXJpbmcKQEAgLTg5MSw4ICYjNDM7ODY5LDYgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmUKIAkJICogZnVuY3Rpb24uICBUaGV5IGRvIG5vdCBleGlzdCBvbiBob3RwbHVnZ2VkIG1lbW9yeS4KIAkJICovCiAJCWlmIChjb250ZXh0ID09IE1FTUlOSVRfRUFSTFkpIHsKLQkJCWlmIChvdmVybGFwX21lbW1hcF9pbml0KHpvbmUsICZhbXA7cGZuKSkKLQkJCQljb250aW51ZTsKIAkJCWlmIChkZWZlcl9pbml0KG5pZCwgcGZuLCB6b25lX2VuZF9wZm4pKSB7CiAJCQkJZGVmZXJyZWRfc3RydWN0X3BhZ2VzID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTExNTksOSAmIzQzOzExMzUsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZShpbnQgbmlkLAogCQkJCWFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3Bmblttb3ZhYmxlX3pvbmVdKTsKIAogCQkvKiBBZGp1c3QgZm9yIFpPTkVfTU9WQUJMRSBzdGFydGluZyB3aXRoaW4gdGhpcyByYW5nZSAqLwotCQl9IGVsc2UgaWYgKCFtaXJyb3JlZF9rZXJuZWxjb3JlICZhbXA7JmFtcDsKLQkJCSp6b25lX3N0YXJ0X3BmbiAmbHQ7IHpvbmVfbW92YWJsZV9wZm5bbmlkXSAmYW1wOyZhbXA7Ci0JCQkqem9uZV9lbmRfcGZuICZndDsgem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7CiYjNDM7CQl9IGVsc2UgaWYgKCp6b25lX3N0YXJ0X3BmbiAmbHQ7IHpvbmVfbW92YWJsZV9wZm5bbmlkXSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgKnpvbmVfZW5kX3BmbiAmZ3Q7IHpvbmVfbW92YWJsZV9wZm5bbmlkXSkgewogCQkJKnpvbmVfZW5kX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTsKIAogCQkvKiBDaGVjayBpZiB0aGlzIHdob2xlIHJhbmdlIGlzIHdpdGhpbiBaT05FX01PVkFCTEUgKi8KQEAgLTEyMDksNDAgJiM0MzsxMTg0LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgem9uZV9zdGFydF9wZm4sCiAJCQkJCXVuc2lnbmVkIGxvbmcgem9uZV9lbmRfcGZuKQogewotCXVuc2lnbmVkIGxvbmcgbnJfYWJzZW50OwotCiAJLyogem9uZSBpcyBlbXB0eSwgd2UgZG9uJiMzOTt0IGhhdmUgYW55IGFic2VudCBwYWdlcyAqLwogCWlmICh6b25lX3N0YXJ0X3BmbiA9PSB6b25lX2VuZF9wZm4pCiAJCXJldHVybiAwOwogCi0JbnJfYWJzZW50ID0gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UobmlkLCB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTsKLQotCS8qCi0JICogWk9ORV9NT1ZBQkxFIGhhbmRsaW5nLgotCSAqIFRyZWF0IHBhZ2VzIHRvIGJlIFpPTkVfTU9WQUJMRSBpbiBaT05FX05PUk1BTCBhcyBhYnNlbnQgcGFnZXMKLQkgKiBhbmQgdmljZSB2ZXJzYS4KLQkgKi8KLQlpZiAobWlycm9yZWRfa2VybmVsY29yZSAmYW1wOyZhbXA7IHpvbmVfbW92YWJsZV9wZm5bbmlkXSkgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKLQkJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcjsKLQotCQlmb3JfZWFjaF9tZW1fcmVnaW9uKHIpIHsKLQkJCXN0YXJ0X3BmbiA9IGNsYW1wKG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfYmFzZV9wZm4ociksCi0JCQkJCSAgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7Ci0JCQllbmRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpLAotCQkJCQl6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTsKLQotCQkJaWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUgJmFtcDsmYW1wOwotCQkJICAgIG1lbWJsb2NrX2lzX21pcnJvcihyKSkKLQkJCQlucl9hYnNlbnQgJiM0Mzs9IGVuZF9wZm4gLSBzdGFydF9wZm47Ci0KLQkJCWlmICh6b25lX3R5cGUgPT0gWk9ORV9OT1JNQUwgJmFtcDsmYW1wOwotCQkJICAgICFtZW1ibG9ja19pc19taXJyb3IocikpCi0JCQkJbnJfYWJzZW50ICYjNDM7PSBlbmRfcGZuIC0gc3RhcnRfcGZuOwotCQl9Ci0JfQotCi0JcmV0dXJuIG5yX2Fic2VudDsKJiM0MzsJcmV0dXJuIF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7CiB9CiAKIC8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA4OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBJbml0aWFsaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9tbV9pbml0LmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhcyB0aGlzIGZpbGUgZGVhbHMgd2l0aCBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXNlcyBvbiB0aGUgZWFybHkgYm9vdCBwcm9jZXNzLiBJIHNlZSB0aGF0IGl0IHJlbW92ZXMgYG92ZXJsYXBfbWVtbWFwX2luaXRgIGFuZCBpdHMgY2FsbCB3aXRoaW4gYG1lbW1hcF9pbml0X3JhbmdlYC4gSXQgYWxzbyBzZWVtcyB0byBiZSBtb2RpZnlpbmcgZnVuY3Rpb25zIGxpa2UgYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgIGFuZCBgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZWAuIFRoZSBrZXl3b3JkcyBoZXJlIGFyZSBgbWlycm9yZWRfa2VybmVsY29yZWAgYW5kIGBaT05FX01PVkFCTEVgLCB3aGljaCBib3RoIGRlZmluaXRlbHkgcG9pbnQgdG93YXJkcyBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGdpdmVuIHRoZSBjb250ZXh0LCBpbml0aWFsIG1lbW9yeSBzZXR1cC4KClRoZXNlIGFyZSBhbm5vdGF0ZWQgYXMgYF9fbWVtaW5pdGAgYW5kIGBfX2luaXRgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGV5JiMzOTtyZSBydW5uaW5nIGluIHRoZSBlYXJseSBib290IHNlcXVlbmNlLiBUaGF0IHVzdWFsbHkgbWVhbnMgdGhhdCBmdXp6aW5nIHRoaXMgYXJlYSB3aXRoIHN5emthbGxlciBpcyBub3QgdGhlIG5vcm1hbCBhcHByb2FjaC4gSXQmIzM5O3Mgb2Z0ZW4gZGlmZmljdWx0IGZvciBzeXprYWxsZXIgdG8gZHluYW1pY2FsbHkgY2hhbmdlIGJvb3QgcGFyYW1ldGVycyBvciBtZW1vcnkgbGF5b3V0cyBiZXR3ZWVuIHRlc3QgY2FzZXMsIGFzIGl0IHVzdWFsbHkgcmVxdWlyZXMgYSByZWJvb3Qgb2YgdGhlIFZNLgoKV2FpdCwgaG9sZCBvbiwgc3l6a2FsbGVyICpkb2VzKiB0b3VjaCBzb21lIGVhcmx5IGJvb3Qgc3R1ZmYsIHNvIG1heWJlIHRoaXMgaXMgcmVsZXZhbnQuIEJ1dCBpcyBgbWVtbWFwX2luaXRfcmFuZ2VgIHNvbWV0aGluZyByZWFjaGFibGUgbGF0ZXI/IEl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgYm9vdCwgdGhhdCYjMzk7cyBjZXJ0YWluLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgc2VlIGlmIGBtZW1tYXBfaW5pdF9yYW5nZWAgY291bGQgYmUgcmVhY2hlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucz8gSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBtZW1tYXBfaW5pdF9yYW5nZWAgaXMgY2FsbGVkIGZyb20uIEkgdGhpbmsgaXQgaXMgY2FsbGVkIGZyb20gYG1lbW1hcF9pbml0X3pvbmVgIG9yIGBtZW1tYXBfaW5pdGAuIE9rLCB0aW1lIHRvIGdyZXAgZm9yIGBtZW1tYXBfaW5pdF9yYW5nZWAgYW5kIHNlZSBpZiBhbnkgb3RoZXIgY29kZSBwYXRocyBjYWxsIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA4OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW1hcF9pbml0X3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9OTUzPWV4dGVybiB2b2lkICptZW1tYXBfYWxsb2MocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXG4tLVxubW0vaW50ZXJuYWwuaC05NTYtXG5tbS9pbnRlcm5hbC5oOjk1Nzp2b2lkIG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcsIGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyxcbm1tL2ludGVybmFsLmgtOTU4LVx0XHR1bnNpZ25lZCBsb25nLCBlbnVtIG1lbWluaXRfY29udGV4dCwgc3RydWN0IHZtZW1fYWx0bWFwICosIGludCxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTc0MD12b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtNzczLVx0ICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjc3NDpcdG1lbW1hcF9pbml0X3JhbmdlKG5yX3BhZ2VzLCBuaWQsIHpvbmVfaWR4KHpvbmUpLCBzdGFydF9wZm4sIDAsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTc3NS1cdFx0XHQgTUVNSU5JVF9IT1RQTFVHLCBhbHRtYXAsIG1pZ3JhdGV0eXBlLFxuLS1cbm1tL21tX2luaXQuYz04MDk9c3RhdGljIHZvaWQgX19pbml0IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzcGZuLFxuLS1cbm1tL21tX2luaXQuYy04MzUtICovXG5tbS9tbV9pbml0LmM6ODM2OnZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLFxubW0vbW1faW5pdC5jLTgzNy1cdFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9lbmRfcGZuLFxuLS1cbm1tL21tX2luaXQuYz05MDM9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbW1faW5pdC5jLTkxNy1cbm1tL21tX2luaXQuYzo5MTg6XHRtZW1tYXBfaW5pdF9yYW5nZShlbmRfcGZuIC0gc3RhcnRfcGZuLCBuaWQsIHpvbmVfaWQsIHN0YXJ0X3Bmbixcbm1tL21tX2luaXQuYy05MTktXHRcdFx0ICB6b25lX2VuZF9wZm4sIE1FTUlOSVRfRUFSTFksIE5VTEwsIE1JR1JBVEVfTU9WQUJMRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTg1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBNZW1vcnkgSG90cGx1ZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGZvY3VzIGdvZXMgdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIGBtZW1tYXBfaW5pdF9yYW5nZWAuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbCwgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAgd2l0aGluIGBtbS9tZW1vcnlfaG90cGx1Zy5jYC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhbHRlciB0aGUgYE1FTUlOSVRfRUFSTFlgIHBhdGggd2l0aGluIGBtZW1tYXBfaW5pdF9yYW5nZWAuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0aGUgcGF0Y2ggaXMgcmVtb3Zpbmcgc29tZSBvdmVybGFwcGluZyBtZW1vcnkgbWFwIGluaXRpYWxpemF0aW9uIChgb3ZlcmxhcF9tZW1tYXBfaW5pdGApIGFuZCwgaW5zdGVhZCwgY29uZGl0aW9uYWxseSBjYWxsaW5nIGBkZWZlcl9pbml0YC4gVGhpcyBkaXJlY3QgbW9kaWZpY2F0aW9uIHN1Z2dlc3RzIHRoZSBwcmltYXJ5IGltcGFjdCBpcyBjb25maW5lZCB0byB0aGUgZWFybHkgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBoYXNlLiBJIG5lZWQgdG8ga2VlcCB0aGlzIG5hcnJvd2VkIHNjb3BlIG9mIGluZmx1ZW5jZSBpbiBtaW5kLgoKSG93ZXZlciwgdGhlIHBhdGNoIGlzbiYjMzk7dCAqb25seSogaW4gYG1lbW1hcF9pbml0X3JhbmdlYC4gVGhlcmUgYXJlIGFsc28gY2hhbmdlcyB0byBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAgYW5kIGB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlYC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mICp0aG9zZSogY2hhbmdlcyB0b28sIGJlY2F1c2UgdGhlc2UgYXJlIG5vdCBzaW1wbGUsIGxvY2FsIG1vZGlmaWNhdGlvbnMuIFdoZXJlIGFyZSAqdGhlc2UqIGZ1bmN0aW9ucyBjYWxsZWQ/IFRoYXQmIzM5O3MgdGhlIG5leHQgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSBuZWVkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgZXh0ZW50IG9mIHRoaXMgcGF0Y2gmIzM5O3MgaW5mbHVlbmNlIG9uIHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQsIG5vdCBqdXN0IGR1cmluZyBlYXJseSBpbml0aWFsaXphdGlvbiwgYnV0IGFsc28gZHluYW1pY2FsbHksIGFzIG1lbW9yeSBpcyBhZGRlZCBhbmQgcmVtb3ZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYz0xMDcwPXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbW1faW5pdC5jLTExMjItICovXG5tbS9tbV9pbml0LmM6MTEyMzpzdGF0aWMgdm9pZCBfX2luaXQgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZShpbnQgbmlkLFxubW0vbW1faW5pdC5jLTExMjQtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgem9uZV90eXBlLFxuLS1cbm1tL21tX2luaXQuYz0xMTk4PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxuLS1cbm1tL21tX2luaXQuYy0xMjEwLVx0KnpvbmVfZW5kX3BmbiA9IGNsYW1wKG5vZGVfZW5kX3Bmbiwgem9uZV9sb3csIHpvbmVfaGlnaCk7XG5tbS9tbV9pbml0LmM6MTIxMTpcdGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUobmlkLCB6b25lX3R5cGUsIG5vZGVfZW5kX3Bmbixcbm1tL21tX2luaXQuYy0xMjEyLVx0XHRcdFx0XHQgICB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzY1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1GYWxzZTogSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgaXQgc2VlbXMgbGlrZSBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAgYW5kIGB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlYCBhcmUgYm90aCBpbnZvbHZlZCBpbiB0aGUgYF9faW5pdGAgc3RhZ2UuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gRGlnZ2luZyBkZWVwZXIsIGl0IHNlZW1zICphbGwqIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGVpdGhlciBwYXJ0IG9mIHRoZSBgX19pbml0YCBwcm9jZXNzIGl0c2VsZiwgb3IsIHRoZWlyIGNvZGUgcGF0aHMgZmFsbCB1bmRlciBgTUVNSU5JVF9FQVJMWWAuIEFuZCB3ZSBrbm93IGBNRU1JTklUX0VBUkxZYCBpcyBleGNsdXNpdmVseSB1c2VkIGR1cmluZyB0aGF0IGNydWNpYWwsIGVhcmx5IGJvb3Qgc2VxdWVuY2UuCgpDcnVjaWFsbHksIFN5emthbGxlciwgd2l0aCBpdHMgZm9jdXMgb24gdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBhbmQgcnVudGltZSBiZWhhdmlvciwgKmRvZXNuJiMzOTt0KiB0b3VjaCBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbi4gSXQmIzM5O3MgZGVzaWduZWQgdG8gcHJvYmUgdGhlIGtlcm5lbCBhZnRlciBpdCYjMzk7cyBmdWxseSBib290ZWQgYW5kIHJ1bm5pbmcgaW4gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzLCByZXNpZGluZyBmaXJtbHkgaW4gdGhlIGVhcmx5IGJvb3Qgc3BhY2UsIGFyZSBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBieSBmdXp6aW5nLgoKSSYjMzk7bSB0aGlua2luZyB0aGlzIG1lYW5zLCBjb25maWRlbnRseSwgSSBzaG91bGQgYmUgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBIb3dldmVyLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYW5kIHJ1biB0aHJvdWdoIGB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYz0xMTc1PXVuc2lnbmVkIGxvbmcgX19pbml0IGFic2VudF9wYWdlc19pbl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi0tXG5tbS9tbV9pbml0LmMtMTE4MS0vKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlIGZyYW1lcyBpbiBob2xlcyBpbiBhIHpvbmUgb24gYSBub2RlICovXG5tbS9tbV9pbml0LmM6MTE4MjpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxubW0vbW1faW5pdC5jLTExODMtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgem9uZV90eXBlLFxuLS1cbm1tL21tX2luaXQuYy0xMTk1LSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGEgem9uZSBzcGFucyBpbiBhIG5vZGUsIGluY2x1ZGluZyBob2xlc1xubW0vbW1faW5pdC5jOjExOTY6ICogcHJlc2VudF9wYWdlcyA9IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKCkgLSB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKClcbm1tL21tX2luaXQuYy0xMTk3LSAqL1xuLS1cbm1tL21tX2luaXQuYz0xMjY4PXN0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vbW1faW5pdC5jLTEyODUtXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZ6b25lX2VuZF9wZm4pO1xubW0vbW1faW5pdC5jOjEyODY6XHRcdGFic2VudCA9IHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUocGdkYXQtXHUwMDNlbm9kZV9pZCwgaSxcbm1tL21tX2luaXQuYy0xMjg3LVx0XHRcdFx0XHRcdCAgIHpvbmVfc3RhcnRfcGZuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA4OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MDgKCQkJCQkJCW91dHB1dDogODkKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29kZSBSZWFjaGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlYCBpcyBkZWZpbmVkIHdpdGhpbiBgX19pbml0YCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlc2AsIHdoaWNoIGlzICphbHNvKiBkZWZpbmVkIGluIGBfX2luaXRgLiBGcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgY3JpdGljYWwuIEJvdGggZnVuY3Rpb25zIGFyZSBwYXJ0IG9mIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZS4gU2luY2UgdGhlIGNvZGUgaXMgbm90IGNhbGxhYmxlIGZyb20gdXNlcnNwYWNlIGFmdGVyIGJvb3QsIHRoZXJlIGlzIG5vIG5lZWQgdG8gbWFrZSB0aGUgY29kZSBmdXp6YWJsZSwgb3IgZXhwb3NlIGl0IHRvIHVzZXJzcGFjZSBkaXJlY3RseS4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gTm8gcG9pbnQgaW4gZXhwZW5kaW5nIHJlc291cmNlcyBmdXp6aW5nIHNvbWV0aGluZyB0aGF0JiMzOTtzIG9ubHkgYWN0aXZlIGR1cmluZyBzeXN0ZW0gc3RhcnR1cC4gVGhlIGZvY3VzIHNob3VsZCBiZSBvbiBjb2RlIGFjY2Vzc2libGUgdG8gdXNlcnNwYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVhcmx5IGJvb3QgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljIChmdW5jdGlvbnMgbWFya2VkIHdpdGggX19pbml0IG9yIF9fbWVtaW5pdCwgYW5kIHBhdGhzIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIE1FTUlOSVRfRUFSTFkpLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdCBhbmQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBvciBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiwgbWFraW5nIGl0IHVuc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYyAoZnVuY3Rpb25zIG1hcmtlZCB3aXRoIF9faW5pdCBvciBfX21lbWluaXQsIGFuZCBwYXRocyBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBNRU1JTklUX0VBUkxZKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIGlzIG5vdCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugb3IgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24sIG1ha2luZyBpdCB1bnN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA4OjI1OjAxLjM5MzM0MjYwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTkwNDM0MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYyAoZnVuY3Rpb25zIG1hcmtlZCB3aXRoIF9faW5pdCBvciBfX21lbWluaXQsIGFuZCBwYXRocyBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBNRU1JTklUX0VBUkxZKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIGlzIG5vdCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugb3IgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24sIG1ha2luZyBpdCB1bnN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDg6MjU6MDEuMzkzMzQ4ODQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM2MjEzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNjYyM2MyMWVmMjU5MDFkNjNjMWJkNGFjNzc1MzkzZTFjY2Q2YWYzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVuIDI1IDA4OjI1OjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xcbmluZGV4IGY5ZjhlMWFmOTIxY2RhLi42ZjBhNzFjY2NhMzBlMSAxMDA2NDRcXG4tLS0gYS9tbS9tbV9pbml0LmNcXG4rKysgYi9tbS9tbV9pbml0LmNcXG5AQCAtNzgzLDI4ICs3ODMsNiBAQCB2b2lkIF9fbWVtaW5pdCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXFxuIFxcdF9faW5pdF9kZWZlcnJlZF9wYWdlKHBmbiwgbmlkKTtcXG4gfVxcbiBcXG4tLyogSWYgem9uZSBpcyBaT05FX01PVkFCTEUgYnV0IG1lbW9yeSBpcyBtaXJyb3JlZCwgaXQgaXMgYW4gb3ZlcmxhcHBlZCBpbml0ICovXFxuLXN0YXRpYyBib29sIF9fbWVtaW5pdFxcbi1vdmVybGFwX21lbW1hcF9pbml0KHVuc2lnbmVkIGxvbmcgem9uZSwgdW5zaWduZWQgbG9uZyAqcGZuKVxcbi17XFxuLVxcdHN0YXRpYyBzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyIF9fbWVtaW5pdGRhdGE7XFxuLVxcbi1cXHRpZiAobWlycm9yZWRfa2VybmVsY29yZSBcXHUwMDI2XFx1MDAyNiB6b25lID09IFpPTkVfTU9WQUJMRSkge1xcbi1cXHRcXHRpZiAoIXIgfHwgKnBmbiBcXHUwMDNlPSBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2VuZF9wZm4ocikpIHtcXG4tXFx0XFx0XFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XFxuLVxcdFxcdFxcdFxcdGlmICgqcGZuIFxcdTAwM2MgbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpKVxcbi1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcdFxcdGlmICgqcGZuIFxcdTAwM2U9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfYmFzZV9wZm4ocikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIG1lbWJsb2NrX2lzX21pcnJvcihyKSkge1xcbi1cXHRcXHRcXHQqcGZuID0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcdHJldHVybiBmYWxzZTtcXG4tfVxcbi1cXG4gLypcXG4gICogT25seSBzdHJ1Y3QgcGFnZXMgdGhhdCBjb3JyZXNwb25kIHRvIHJhbmdlcyBkZWZpbmVkIGJ5IG1lbWJsb2NrLm1lbW9yeVxcbiAgKiBhcmUgemVyb2VkIGFuZCBpbml0aWFsaXplZCBieSBnb2luZyB0aHJvdWdoIF9faW5pdF9zaW5nbGVfcGFnZSgpIGR1cmluZ1xcbkBAIC04OTEsOCArODY5LDYgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmVcXG4gXFx0XFx0ICogZnVuY3Rpb24uICBUaGV5IGRvIG5vdCBleGlzdCBvbiBob3RwbHVnZ2VkIG1lbW9yeS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChjb250ZXh0ID09IE1FTUlOSVRfRUFSTFkpIHtcXG4tXFx0XFx0XFx0aWYgKG92ZXJsYXBfbWVtbWFwX2luaXQoem9uZSwgXFx1MDAyNnBmbikpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHRpZiAoZGVmZXJfaW5pdChuaWQsIHBmbiwgem9uZV9lbmRfcGZuKSkge1xcbiBcXHRcXHRcXHRcXHRkZWZlcnJlZF9zdHJ1Y3RfcGFnZXMgPSB0cnVlO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG5AQCAtMTE1OSw5ICsxMTM1LDggQEAgc3RhdGljIHZvaWQgX19pbml0IGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUoaW50IG5pZCxcXG4gXFx0XFx0XFx0XFx0YXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW21vdmFibGVfem9uZV0pO1xcbiBcXG4gXFx0XFx0LyogQWRqdXN0IGZvciBaT05FX01PVkFCTEUgc3RhcnRpbmcgd2l0aGluIHRoaXMgcmFuZ2UgKi9cXG4tXFx0XFx0fSBlbHNlIGlmICghbWlycm9yZWRfa2VybmVsY29yZSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQqem9uZV9zdGFydF9wZm4gXFx1MDAzYyB6b25lX21vdmFibGVfcGZuW25pZF0gXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0KnpvbmVfZW5kX3BmbiBcXHUwMDNlIHpvbmVfbW92YWJsZV9wZm5bbmlkXSkge1xcbitcXHRcXHR9IGVsc2UgaWYgKCp6b25lX3N0YXJ0X3BmbiBcXHUwMDNjIHpvbmVfbW92YWJsZV9wZm5bbmlkXSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAqem9uZV9lbmRfcGZuIFxcdTAwM2Ugem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XFxuIFxcdFxcdFxcdCp6b25lX2VuZF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07XFxuIFxcbiBcXHRcXHQvKiBDaGVjayBpZiB0aGlzIHdob2xlIHJhbmdlIGlzIHdpdGhpbiBaT05FX01PVkFCTEUgKi9cXG5AQCAtMTIwOSw0MCArMTE4NCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuLFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHpvbmVfZW5kX3BmbilcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5yX2Fic2VudDtcXG4tXFxuIFxcdC8qIHpvbmUgaXMgZW1wdHksIHdlIGRvbid0IGhhdmUgYW55IGFic2VudCBwYWdlcyAqL1xcbiBcXHRpZiAoem9uZV9zdGFydF9wZm4gPT0gem9uZV9lbmRfcGZuKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdG5yX2Fic2VudCA9IF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBaT05FX01PVkFCTEUgaGFuZGxpbmcuXFxuLVxcdCAqIFRyZWF0IHBhZ2VzIHRvIGJlIFpPTkVfTU9WQUJMRSBpbiBaT05FX05PUk1BTCBhcyBhYnNlbnQgcGFnZXNcXG4tXFx0ICogYW5kIHZpY2UgdmVyc2EuXFxuLVxcdCAqL1xcbi1cXHRpZiAobWlycm9yZWRfa2VybmVsY29yZSBcXHUwMDI2XFx1MDAyNiB6b25lX21vdmFibGVfcGZuW25pZF0pIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47XFxuLVxcdFxcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnI7XFxuLVxcbi1cXHRcXHRmb3JfZWFjaF9tZW1fcmVnaW9uKHIpIHtcXG4tXFx0XFx0XFx0c3RhcnRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9iYXNlX3BmbihyKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcXG4tXFx0XFx0XFx0ZW5kX3BmbiA9IGNsYW1wKG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSxcXG4tXFx0XFx0XFx0XFx0XFx0em9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XFxuLVxcbi1cXHRcXHRcXHRpZiAoem9uZV90eXBlID09IFpPTkVfTU9WQUJMRSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgbWVtYmxvY2tfaXNfbWlycm9yKHIpKVxcbi1cXHRcXHRcXHRcXHRucl9hYnNlbnQgKz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcXG4tXFxuLVxcdFxcdFxcdGlmICh6b25lX3R5cGUgPT0gWk9ORV9OT1JNQUwgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgICFtZW1ibG9ja19pc19taXJyb3IocikpXFxuLVxcdFxcdFxcdFxcdG5yX2Fic2VudCArPSBlbmRfcGZuIC0gc3RhcnRfcGZuO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBucl9hYnNlbnQ7XFxuK1xcdHJldHVybiBfX2Fic2VudF9wYWdlc19pbl9yYW5nZShuaWQsIHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm4pO1xcbiB9XFxuIFxcbiAvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwODoyNTowMS44NTc4MDQ3MDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NTI1OTY1Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYyAoZnVuY3Rpb25zIG1hcmtlZCB3aXRoIF9faW5pdCBvciBfX21lbWluaXQsIGFuZCBwYXRocyBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBNRU1JTklUX0VBUkxZKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIGlzIG5vdCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugb3IgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24sIG1ha2luZyBpdCB1bnN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNjYyM2MyMWVmMjU5MDFkNjNjMWJkNGFjNzc1MzkzZTFjY2Q2YWYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdW4gMjUgMDg6MjU6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IGY5ZjhlMWFmOTIxY2RhLi42ZjBhNzFjY2NhMzBlMSAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuKysrIGIvbW0vbW1faW5pdC5jXG5AQCAtNzgzLDI4ICs3ODMsNiBAQCB2b2lkIF9fbWVtaW5pdCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXG4gXHRfX2luaXRfZGVmZXJyZWRfcGFnZShwZm4sIG5pZCk7XG4gfVxuIFxuLS8qIElmIHpvbmUgaXMgWk9ORV9NT1ZBQkxFIGJ1dCBtZW1vcnkgaXMgbWlycm9yZWQsIGl0IGlzIGFuIG92ZXJsYXBwZWQgaW5pdCAqL1xuLXN0YXRpYyBib29sIF9fbWVtaW5pdFxuLW92ZXJsYXBfbWVtbWFwX2luaXQodW5zaWduZWQgbG9uZyB6b25lLCB1bnNpZ25lZCBsb25nICpwZm4pXG4te1xuLVx0c3RhdGljIHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnIgX19tZW1pbml0ZGF0YTtcbi1cbi1cdGlmIChtaXJyb3JlZF9rZXJuZWxjb3JlIFx1MDAyNlx1MDAyNiB6b25lID09IFpPTkVfTU9WQUJMRSkge1xuLVx0XHRpZiAoIXIgfHwgKnBmbiBcdTAwM2U9IG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSkge1xuLVx0XHRcdGZvcl9lYWNoX21lbV9yZWdpb24ocikge1xuLVx0XHRcdFx0aWYgKCpwZm4gXHUwMDNjIG1lbWJsb2NrX3JlZ2lvbl9tZW1vcnlfZW5kX3BmbihyKSlcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdGlmICgqcGZuIFx1MDAzZT0gbWVtYmxvY2tfcmVnaW9uX21lbW9yeV9iYXNlX3BmbihyKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1lbWJsb2NrX2lzX21pcnJvcihyKSkge1xuLVx0XHRcdCpwZm4gPSBtZW1ibG9ja19yZWdpb25fbWVtb3J5X2VuZF9wZm4ocik7XG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdH1cbi1cdH1cbi1cdHJldHVybiBmYWxzZTtcbi19XG4tXG4gLypcbiAgKiBPbmx5IHN0cnVjdCBwYWdlcyB0aGF0IGNvcnJlc3BvbmQgdG8gcmFuZ2VzIGRlZmluZWQgYnkgbWVtYmxvY2subWVtb3J5XG4gICogYXJlIHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgZ29pbmcgdGhyb3VnaCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBkdXJpbmdcbkBAIC04OTEsOCArODY5LDYgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmVcbiBcdFx0ICogZnVuY3Rpb24uICBUaGV5IGRvIG5vdCBleGlzdCBvbiBob3RwbHVnZ2VkIG1lbW9yeS5cbiBcdFx0ICovXG4gXHRcdGlmIChjb250ZXh0ID09IE1FTUlOSVRfRUFSTFkpIHtcbi1cdFx0XHRpZiAob3ZlcmxhcF9tZW1tYXBfaW5pdCh6b25lLCBcdTAwMjZwZm4pKVxuLVx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKGRlZmVyX2luaXQobmlkLCBwZm4sIHpvbmVfZW5kX3BmbikpIHtcbiBcdFx0XHRcdGRlZmVycmVkX3N0cnVjdF9wYWdlcyA9IHRydWU7XG4gXHRcdFx0XHRicmVhaztcbkBAIC0xMTU5LDkgKzExMzUsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZShpbnQgbmlkLFxuIFx0XHRcdFx0YXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW21vdmFibGVfem9uZV0pO1xuIFxuIFx0XHQvKiBBZGp1c3QgZm9yIFpPTkVfTU9WQUJMRSBzdGFydGluZyB3aXRoaW4gdGhpcyByYW5nZSAqL1xuLVx0XHR9IGVsc2UgaWYgKCFtaXJyb3JlZF9rZXJuZWxjb3JlIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCp6b25lX3N0YXJ0X3BmbiBcdTAwM2Mgem9uZV9tb3ZhYmxlX3BmbltuaWRdIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCp6b25lX2VuZF9wZm4gXHUwMDNlIHpvbmVfbW92YWJsZV9wZm5bbmlkXSkge1xuK1x0XHR9IGVsc2UgaWYgKCp6b25lX3N0YXJ0X3BmbiBcdTAwM2Mgem9uZV9tb3ZhYmxlX3BmbltuaWRdIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICp6b25lX2VuZF9wZm4gXHUwMDNlIHpvbmVfbW92YWJsZV9wZm5bbmlkXSkge1xuIFx0XHRcdCp6b25lX2VuZF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07XG4gXG4gXHRcdC8qIENoZWNrIGlmIHRoaXMgd2hvbGUgcmFuZ2UgaXMgd2l0aGluIFpPTkVfTU9WQUJMRSAqL1xuQEAgLTEyMDksNDAgKzExODQsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoaW50IG5pZCxcbiBcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3BmbixcbiBcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyB6b25lX2VuZF9wZm4pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBucl9hYnNlbnQ7XG4tXG4gXHQvKiB6b25lIGlzIGVtcHR5LCB3ZSBkb24ndCBoYXZlIGFueSBhYnNlbnQgcGFnZXMgKi9cbiBcdGlmICh6b25lX3N0YXJ0X3BmbiA9PSB6b25lX2VuZF9wZm4pXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0bnJfYWJzZW50ID0gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UobmlkLCB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cbi1cdC8qXG4tXHQgKiBaT05FX01PVkFCTEUgaGFuZGxpbmcuXG4tXHQgKiBUcmVhdCBwYWdlcyB0byBiZSBaT05FX01PVkFCTEUgaW4gWk9ORV9OT1JNQUwgYXMgYWJzZW50IHBhZ2VzXG4tXHQgKiBhbmQgdmljZSB2ZXJzYS5cbi1cdCAqL1xuLVx0aWYgKG1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2IHpvbmVfbW92YWJsZV9wZm5bbmlkXSkge1xuLVx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3Bmbjtcbi1cdFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcjtcbi1cbi1cdFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XG4tXHRcdFx0c3RhcnRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9iYXNlX3BmbihyKSxcbi1cdFx0XHRcdFx0ICB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cdFx0XHRlbmRfcGZuID0gY2xhbXAobWVtYmxvY2tfcmVnaW9uX21lbW9yeV9lbmRfcGZuKHIpLFxuLVx0XHRcdFx0XHR6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcbi1cbi1cdFx0XHRpZiAoem9uZV90eXBlID09IFpPTkVfTU9WQUJMRSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgbWVtYmxvY2tfaXNfbWlycm9yKHIpKVxuLVx0XHRcdFx0bnJfYWJzZW50ICs9IGVuZF9wZm4gLSBzdGFydF9wZm47XG4tXG4tXHRcdFx0aWYgKHpvbmVfdHlwZSA9PSBaT05FX05PUk1BTCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgIW1lbWJsb2NrX2lzX21pcnJvcihyKSlcbi1cdFx0XHRcdG5yX2Fic2VudCArPSBlbmRfcGZuIC0gc3RhcnRfcGZuO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRyZXR1cm4gbnJfYWJzZW50O1xuK1x0cmV0dXJuIF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XG4gfVxuIFxuIC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwODoyNTowMS44NTc4MDYzNTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDgwMTMzMjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgSW5pdGlhbGl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9tbV9pbml0LmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFzIHRoaXMgZmlsZSBkZWFscyB3aXRoIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYW5kIHNwZWNpZmljYWxseSBmb2N1c2VzIG9uIHRoZSBlYXJseSBib290IHByb2Nlc3MuIEkgc2VlIHRoYXQgaXQgcmVtb3ZlcyBgb3ZlcmxhcF9tZW1tYXBfaW5pdGAgYW5kIGl0cyBjYWxsIHdpdGhpbiBgbWVtbWFwX2luaXRfcmFuZ2VgLiBJdCBhbHNvIHNlZW1zIHRvIGJlIG1vZGlmeWluZyBmdW5jdGlvbnMgbGlrZSBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAgYW5kIGB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlYC4gVGhlIGtleXdvcmRzIGhlcmUgYXJlIGBtaXJyb3JlZF9rZXJuZWxjb3JlYCBhbmQgYFpPTkVfTU9WQUJMRWAsIHdoaWNoIGJvdGggZGVmaW5pdGVseSBwb2ludCB0b3dhcmRzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgZ2l2ZW4gdGhlIGNvbnRleHQsIGluaXRpYWwgbWVtb3J5IHNldHVwLlxuXG5UaGVzZSBhcmUgYW5ub3RhdGVkIGFzIGBfX21lbWluaXRgIGFuZCBgX19pbml0YCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhleSdyZSBydW5uaW5nIGluIHRoZSBlYXJseSBib290IHNlcXVlbmNlLiBUaGF0IHVzdWFsbHkgbWVhbnMgdGhhdCBmdXp6aW5nIHRoaXMgYXJlYSB3aXRoIHN5emthbGxlciBpcyBub3QgdGhlIG5vcm1hbCBhcHByb2FjaC4gSXQncyBvZnRlbiBkaWZmaWN1bHQgZm9yIHN5emthbGxlciB0byBkeW5hbWljYWxseSBjaGFuZ2UgYm9vdCBwYXJhbWV0ZXJzIG9yIG1lbW9yeSBsYXlvdXRzIGJldHdlZW4gdGVzdCBjYXNlcywgYXMgaXQgdXN1YWxseSByZXF1aXJlcyBhIHJlYm9vdCBvZiB0aGUgVk0uXG5cbldhaXQsIGhvbGQgb24sIHN5emthbGxlciAqZG9lcyogdG91Y2ggc29tZSBlYXJseSBib290IHN0dWZmLCBzbyBtYXliZSB0aGlzIGlzIHJlbGV2YW50LiBCdXQgaXMgYG1lbW1hcF9pbml0X3JhbmdlYCBzb21ldGhpbmcgcmVhY2hhYmxlIGxhdGVyPyBJdCdzIGNhbGxlZCBkdXJpbmcgYm9vdCwgdGhhdCdzIGNlcnRhaW4uIExldCdzIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiBgbWVtbWFwX2luaXRfcmFuZ2VgIGNvdWxkIGJlIHJlYWNoZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnM/IEkgbmVlZCB0byBjaGVjayB3aGVyZSBgbWVtbWFwX2luaXRfcmFuZ2VgIGlzIGNhbGxlZCBmcm9tLiBJIHRoaW5rIGl0IGlzIGNhbGxlZCBmcm9tIGBtZW1tYXBfaW5pdF96b25lYCBvciBgbWVtbWFwX2luaXRgLiBPaywgdGltZSB0byBncmVwIGZvciBgbWVtbWFwX2luaXRfcmFuZ2VgIGFuZCBzZWUgaWYgYW55IG90aGVyIGNvZGUgcGF0aHMgY2FsbCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4MCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA4OjI1OjA3LjkzNzk0MTk2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE1NzY5OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW1hcF9pbml0X3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9OTUzPWV4dGVybiB2b2lkICptZW1tYXBfYWxsb2MocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTk1Ni1cXG5tbS9pbnRlcm5hbC5oOjk1Nzp2b2lkIG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcsIGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyxcXG5tbS9pbnRlcm5hbC5oLTk1OC1cXHRcXHR1bnNpZ25lZCBsb25nLCBlbnVtIG1lbWluaXRfY29udGV4dCwgc3RydWN0IHZtZW1fYWx0bWFwICosIGludCxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9NzQwPXZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTc3My1cXHQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjc3NDpcXHRtZW1tYXBfaW5pdF9yYW5nZShucl9wYWdlcywgbmlkLCB6b25lX2lkeCh6b25lKSwgc3RhcnRfcGZuLCAwLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzc1LVxcdFxcdFxcdCBNRU1JTklUX0hPVFBMVUcsIGFsdG1hcCwgbWlncmF0ZXR5cGUsXFxuLS1cXG5tbS9tbV9pbml0LmM9ODA5PXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3VuYXZhaWxhYmxlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3BmbixcXG4tLVxcbm1tL21tX2luaXQuYy04MzUtICovXFxubW0vbW1faW5pdC5jOjgzNjp2b2lkIF9fbWVtaW5pdCBtZW1tYXBfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZSxcXG5tbS9tbV9pbml0LmMtODM3LVxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIHpvbmVfZW5kX3BmbixcXG4tLVxcbm1tL21tX2luaXQuYz05MDM9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tbV9pbml0LmMtOTE3LVxcbm1tL21tX2luaXQuYzo5MTg6XFx0bWVtbWFwX2luaXRfcmFuZ2UoZW5kX3BmbiAtIHN0YXJ0X3BmbiwgbmlkLCB6b25lX2lkLCBzdGFydF9wZm4sXFxubW0vbW1faW5pdC5jLTkxOS1cXHRcXHRcXHQgIHpvbmVfZW5kX3BmbiwgTUVNSU5JVF9FQVJMWSwgTlVMTCwgTUlHUkFURV9NT1ZBQkxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwODoyNToxMC43NTM3MTg0NjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzE4ODg1MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBNZW1vcnkgSG90cGx1ZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBmb2N1cyBnb2VzIHRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgbWVtbWFwX2luaXRfcmFuZ2VgLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwsIGVzcGVjaWFsbHkgc2luY2UgaXQncyBjYWxsZWQgZnJvbSBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAgd2l0aGluIGBtbS9tZW1vcnlfaG90cGx1Zy5jYC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhbHRlciB0aGUgYE1FTUlOSVRfRUFSTFlgIHBhdGggd2l0aGluIGBtZW1tYXBfaW5pdF9yYW5nZWAuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0aGUgcGF0Y2ggaXMgcmVtb3Zpbmcgc29tZSBvdmVybGFwcGluZyBtZW1vcnkgbWFwIGluaXRpYWxpemF0aW9uIChgb3ZlcmxhcF9tZW1tYXBfaW5pdGApIGFuZCwgaW5zdGVhZCwgY29uZGl0aW9uYWxseSBjYWxsaW5nIGBkZWZlcl9pbml0YC4gVGhpcyBkaXJlY3QgbW9kaWZpY2F0aW9uIHN1Z2dlc3RzIHRoZSBwcmltYXJ5IGltcGFjdCBpcyBjb25maW5lZCB0byB0aGUgZWFybHkgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBoYXNlLiBJIG5lZWQgdG8ga2VlcCB0aGlzIG5hcnJvd2VkIHNjb3BlIG9mIGluZmx1ZW5jZSBpbiBtaW5kLlxuXG5Ib3dldmVyLCB0aGUgcGF0Y2ggaXNuJ3QgKm9ubHkqIGluIGBtZW1tYXBfaW5pdF9yYW5nZWAuIFRoZXJlIGFyZSBhbHNvIGNoYW5nZXMgdG8gYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgIGFuZCBgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZWAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiAqdGhvc2UqIGNoYW5nZXMgdG9vLCBiZWNhdXNlIHRoZXNlIGFyZSBub3Qgc2ltcGxlLCBsb2NhbCBtb2RpZmljYXRpb25zLiBXaGVyZSBhcmUgKnRoZXNlKiBmdW5jdGlvbnMgY2FsbGVkPyBUaGF0J3MgdGhlIG5leHQgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSBuZWVkLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBleHRlbnQgb2YgdGhpcyBwYXRjaCdzIGluZmx1ZW5jZSBvbiB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQsIG5vdCBqdXN0IGR1cmluZyBlYXJseSBpbml0aWFsaXphdGlvbiwgYnV0IGFsc28gZHluYW1pY2FsbHksIGFzIG1lbW9yeSBpcyBhZGRlZCBhbmQgcmVtb3ZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk4NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwODoyNToxNS40NzI2MDY0NTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3ODY5NTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21tX2luaXQuYz0xMDcwPXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTEyMi0gKi9cXG5tbS9tbV9pbml0LmM6MTEyMzpzdGF0aWMgdm9pZCBfX2luaXQgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZShpbnQgbmlkLFxcbm1tL21tX2luaXQuYy0xMTI0LVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgem9uZV90eXBlLFxcbi0tXFxubW0vbW1faW5pdC5jPTExOTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKGludCBuaWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTIxMC1cXHQqem9uZV9lbmRfcGZuID0gY2xhbXAobm9kZV9lbmRfcGZuLCB6b25lX2xvdywgem9uZV9oaWdoKTtcXG5tbS9tbV9pbml0LmM6MTIxMTpcXHRhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlKG5pZCwgem9uZV90eXBlLCBub2RlX2VuZF9wZm4sXFxubW0vbW1faW5pdC5jLTEyMTItXFx0XFx0XFx0XFx0XFx0ICAgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA4OjI1OjE3LjY1MTMxNDU3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAzNTc3NzIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9RmFsc2U6IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgaXQgc2VlbXMgbGlrZSBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAgYW5kIGB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlYCBhcmUgYm90aCBpbnZvbHZlZCBpbiB0aGUgYF9faW5pdGAgc3RhZ2UuIFRoYXQncyBhIHJlZCBmbGFnLiBEaWdnaW5nIGRlZXBlciwgaXQgc2VlbXMgKmFsbCogdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgZWl0aGVyIHBhcnQgb2YgdGhlIGBfX2luaXRgIHByb2Nlc3MgaXRzZWxmLCBvciwgdGhlaXIgY29kZSBwYXRocyBmYWxsIHVuZGVyIGBNRU1JTklUX0VBUkxZYC4gQW5kIHdlIGtub3cgYE1FTUlOSVRfRUFSTFlgIGlzIGV4Y2x1c2l2ZWx5IHVzZWQgZHVyaW5nIHRoYXQgY3J1Y2lhbCwgZWFybHkgYm9vdCBzZXF1ZW5jZS5cblxuQ3J1Y2lhbGx5LCBTeXprYWxsZXIsIHdpdGggaXRzIGZvY3VzIG9uIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gYW5kIHJ1bnRpbWUgYmVoYXZpb3IsICpkb2Vzbid0KiB0b3VjaCBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbi4gSXQncyBkZXNpZ25lZCB0byBwcm9iZSB0aGUga2VybmVsIGFmdGVyIGl0J3MgZnVsbHkgYm9vdGVkIGFuZCBydW5uaW5nIGluIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcywgcmVzaWRpbmcgZmlybWx5IGluIHRoZSBlYXJseSBib290IHNwYWNlLCBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgYnkgZnV6emluZy5cblxuSSdtIHRoaW5raW5nIHRoaXMgbWVhbnMsIGNvbmZpZGVudGx5LCBJIHNob3VsZCBiZSByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIEhvd2V2ZXIsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBhbmQgcnVuIHRocm91Z2ggYHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzY1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA4OjI1OjIyLjY4NzExMzUwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUxMjI0MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbW1faW5pdC5jPTExNzU9dW5zaWduZWQgbG9uZyBfX2luaXQgYWJzZW50X3BhZ2VzX2luX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxubW0vbW1faW5pdC5jLTExODEtLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZSBmcmFtZXMgaW4gaG9sZXMgaW4gYSB6b25lIG9uIGEgbm9kZSAqL1xcbm1tL21tX2luaXQuYzoxMTgyOnN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsXFxubW0vbW1faW5pdC5jLTExODMtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB6b25lX3R5cGUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTE5NS0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBhIHpvbmUgc3BhbnMgaW4gYSBub2RlLCBpbmNsdWRpbmcgaG9sZXNcXG5tbS9tbV9pbml0LmM6MTE5NjogKiBwcmVzZW50X3BhZ2VzID0gem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoKSAtIHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoKVxcbm1tL21tX2luaXQuYy0xMTk3LSAqL1xcbi0tXFxubW0vbW1faW5pdC5jPTEyNjg9c3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL21tX2luaXQuYy0xMjg1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnpvbmVfZW5kX3Bmbik7XFxubW0vbW1faW5pdC5jOjEyODY6XFx0XFx0YWJzZW50ID0gem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgaSxcXG5tbS9tbV9pbml0LmMtMTI4Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICB6b25lX3N0YXJ0X3BmbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDg6MjU6MjQuODM4MzQ0MDk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NTM5MzYyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29kZSBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZWAgaXMgZGVmaW5lZCB3aXRoaW4gYF9faW5pdGAsIGFuZCBpdCdzIGNhbGxlZCBieSBgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlc2AsIHdoaWNoIGlzICphbHNvKiBkZWZpbmVkIGluIGBfX2luaXRgLiBGcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB0aGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHNvbWV0aGluZyBjcml0aWNhbC4gQm90aCBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlLiBTaW5jZSB0aGUgY29kZSBpcyBub3QgY2FsbGFibGUgZnJvbSB1c2Vyc3BhY2UgYWZ0ZXIgYm9vdCwgdGhlcmUgaXMgbm8gbmVlZCB0byBtYWtlIHRoZSBjb2RlIGZ1enphYmxlLCBvciBleHBvc2UgaXQgdG8gdXNlcnNwYWNlIGRpcmVjdGx5LiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIE5vIHBvaW50IGluIGV4cGVuZGluZyByZXNvdXJjZXMgZnV6emluZyBzb21ldGhpbmcgdGhhdCdzIG9ubHkgYWN0aXZlIGR1cmluZyBzeXN0ZW0gc3RhcnR1cC4gVGhlIGZvY3VzIHNob3VsZCBiZSBvbiBjb2RlIGFjY2Vzc2libGUgdG8gdXNlcnNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTA4LCJPdXRwdXRUb2tlbnMiOjg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDg6MjU6MjguMzgzNzQxMDA3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZWFybHkgYm9vdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMgKGZ1bmN0aW9ucyBtYXJrZWQgd2l0aCBfX2luaXQgb3IgX19tZW1pbml0LCBhbmQgcGF0aHMgZXhwbGljaXRseSBjaGVja2luZyBmb3IgTUVNSU5JVF9FQVJMWSkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBvbmx5IG9uY2UgZHVyaW5nIGtlcm5lbCBib290IGFuZCBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIG9yIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLCBtYWtpbmcgaXQgdW5zdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVhcmx5IGJvb3QgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljIChmdW5jdGlvbnMgbWFya2VkIHdpdGggX19pbml0IG9yIF9fbWVtaW5pdCwgYW5kIHBhdGhzIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIE1FTUlOSVRfRUFSTFkpLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgb25seSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdCBhbmQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBvciBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiwgbWFraW5nIGl0IHVuc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowh5shx[1] Phase: Running StartedAt: 2026-06-25 08:26:41 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh5shx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-25 08:26:41 +0000 UTC FinishedAt: 2026-06-25 08:26:47 +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,}