Name: series-workflownqt58 Phase: Failed StartedAt: 2026-08-04 03:08:30 +0000 UTC FinishedAt: 2026-08-04 03:29:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqt58[0] Phase: Succeeded StartedAt: 2026-08-04 03:08:30 +0000 UTC FinishedAt: 2026-08-04 03:29:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqt58[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 03:08:30 +0000 UTC FinishedAt: 2026-08-04 03:29:40 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLykgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM4OThlNjllNzgzYmQ5Zjc2MTZkYTg0ZWI1ZWMzZWEwOWQyMDM5OWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDAzOjI5OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxuaW5kZXggY2VlOTVlMjUyYmVlNS4uNGMzZGUzYTI3ODA3YyAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoXG5AQCAtOCw3ICYjNDM7OCw4IEBAXG4gc2V0IC1lXG4gXG4gZWNobyBcJiMzNDtURVNUIG1hbmFnZW1lbnRcJiMzNDtcbi0uL2luX25ldG5zLnNoIC4vaXB2Nl9mbG93bGFiZWxfbWdyXG4mIzQzOy4vaW5fbmV0bnMuc2ggXFxcbiYjNDM7ICBzaCAtYyAmIzM5O3N5c2N0bCAtcSAtdyBuZXQuaXB2Ni5mbG93bGFiZWxfY29uc2lzdGVuY3k9MCBcdTAwMjZcdTAwMjYgLi9pcHY2X2Zsb3dsYWJlbF9tZ3ImIzM5O1xuIFxuIGVjaG8gXCYjMzQ7VEVTVCBkYXRhcGF0aFwmIzM0O1xuIC4vaW5fbmV0bnMuc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcbmluZGV4IGFmOTViNDhhY2VhOTAuLjQ4MjkyMWY3ZWUxMTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xuQEAgLTYsNiAmIzQzOzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJyb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbkBAIC0xOSwzMSAmIzQzOzIwLDE5IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuIFxuIC8qIHVhcGkvZ2xpYmMgd2VpcmRuZXNzIG1heSBsZWF2ZSB0aGlzIHVuZGVmaW5lZCAqL1xuICNpZm5kZWYgSVBWNl9GTE9XTEFCRUxfTUdSXG4gI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1JcdDMyXG4gI2VuZGlmXG4mIzQzOyNpZm5kZWYgSVBWNl9GTE9XSU5GT19TRU5EXG4mIzQzOyNkZWZpbmUgSVBWNl9GTE9XSU5GT19TRU5EXHQzM1xuJiM0MzsjZW5kaWZcbiBcbiAvKiBmcm9tIG5ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyAqL1xuICNkZWZpbmUgRkxfTUlOX0xJTkdFUlx0XHQ2XG4tXG4tI2RlZmluZSBleHBsYWluKHgpXHRcdFx0XHRcdFx0XHRcXFxuLVx0ZG8geyBpZiAoY2ZnX3ZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCBcJiMzNDsgICAgICAgXCYjMzQ7IHggXCYjMzQ7XFxuXCYjMzQ7KTsgfSB3aGlsZSAoMClcbi1cbi0jZGVmaW5lIF9fZXhwZWN0KHgpXHRcdFx0XHRcdFx0XHRcXFxuLVx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRpZiAoISh4KSlcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtbT0tdICAgXCYjMzQ7ICN4IFwmIzM0O1xcblwmIzM0Oyk7XHRcdFxcXG4tXHRcdGVsc2VcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7W0VSUl0gIFwmIzM0OyAjeCBcJiMzNDsgKGxpbmUgJWQpXCYjMzQ7LCBfX0xJTkVfXyk7IFxcXG4tXHR9IHdoaWxlICgwKVxuLVxuLSNkZWZpbmUgZXhwZWN0X3Bhc3MoeClcdF9fZXhwZWN0KHgpXG4tI2RlZmluZSBleHBlY3RfZmFpbCh4KVx0X19leHBlY3QoISh4KSlcbi1cbi1zdGF0aWMgYm9vbCBjZmdfbG9uZ19ydW5uaW5nO1xuLXN0YXRpYyBib29sIGNmZ192ZXJib3NlO1xuJiM0MzsjZGVmaW5lIEZMX01BWF9MSU5HRVJcdDE1MFxuIFxuIHN0YXRpYyBpbnQgZmxvd2xhYmVsX2dldChpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50OF90IHNoYXJlLCB1aW50MTZfdCBmbGFncylcbiB7XG5AQCAtNzEsMTI5ICYjNDM7NjAsNDA2IEBAIHN0YXRpYyBpbnQgZmxvd2xhYmVsX3B1dChpbnQgZmQsIHVpbnQzMl90IGxhYmVsKVxuIFx0cmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydW5fdGVzdHMoaW50IGZkKVxuJiM0MztzdGF0aWMgaW50IGZsb3dsYWJlbF9yZW5ldyhpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50MTZfdCBsaW5nZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVxID0ge1xuJiM0MztcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsXG4mIzQzO1x0XHQuZmxyX2xhYmVsID0gaHRvbmwobGFiZWwpLFxuJiM0MztcdFx0LmZscl9saW5nZXIgPSBsaW5nZXIsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luNiBsb29wYmFja19hZGRyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSB7XG4mIzQzO1x0XHQuc2luNl9mYW1pbHlcdD0gQUZfSU5FVDYsXG4mIzQzO1x0XHQuc2luNl9hZGRyXHQ9IElONkFERFJfTE9PUEJBQ0tfSU5JVCxcbiYjNDM7XHRcdC5zaW42X3BvcnRcdD0gaHRvbnMoODg4OCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFkZHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdGNwX2xpc3Rlbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0gbG9vcGJhY2tfYWRkcigpO1xuJiM0MztcdGNvbnN0IGludCBvbmUgPSAxO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTtcbiYjNDM7XHRpZiAoZmQgPT0gLTEpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7c29ja2V0IGxpc3RlbmVyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzZXRzb2Nrb3B0IFNPX1JFVVNFQUREUlwmIzM0Oyk7XG4mIzQzO1x0aWYgKGJpbmQoZmQsICh2b2lkICopXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtiaW5kXCYjMzQ7KTtcbiYjNDM7XHRpZiAobGlzdGVuKGZkLCAxKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtsaXN0ZW5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRjcF9jb25uZWN0KGludCBsaXN0ZW5lciwgdWludDMyX3QgZmxvd2xhYmVsLCBpbnQgKmNsaWVudCwgaW50ICphY2NlcHRlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkciA9IGxvb3BiYWNrX2FkZHIoKTtcbiYjNDM7XHRjb25zdCBpbnQgb25lID0gMTtcbiYjNDM7XHRpbnQgY2ZkLCBhZmQ7XG4mIzQzO1xuJiM0MztcdGNmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApO1xuJiM0MztcdGlmIChjZmQgPT0gLTEpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7c29ja2V0IGNsaWVudFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChmbG93bGFiZWxfZ2V0KGNmZCwgZmxvd2xhYmVsLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7Zmxvd2xhYmVsX2dldFwmIzM0Oyk7XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoY2ZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XSU5GT19TRU5ELCBcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzZXRzb2Nrb3B0IGZsb3dpbmZvX3NlbmRcJiMzNDspO1xuJiM0MztcdGFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7XG4mIzQzO1xuJiM0MztcdGlmIChjb25uZWN0KGNmZCwgKHZvaWQgKilcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2Nvbm5lY3RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRhZmQgPSBhY2NlcHQobGlzdGVuZXIsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmIChhZmQgPT0gLTEpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7YWNjZXB0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZsb3dsYWJlbF9wdXQoY2ZkLCBmbG93bGFiZWwpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2Zsb3dsYWJlbF9wdXRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQqY2xpZW50ID0gY2ZkO1xuJiM0MztcdCphY2NlcHRlZCA9IGFmZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChjYW5ub3RfZ2V0X25vbl9leGlzdGVudF9sYWJlbClcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDksIElQVjZfRkxfU19BTlksIDApO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIGdldCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoRU5PRU5ULCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVOT0VOVCwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMTApO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIHB1dCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFwmIzM0OywgZXJybm8pO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChjYW5ub3RfY3JlYXRlX2xhYmVsX2dyZWF0ZXJfdGhhbl8yMF9iaXRzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMHgxRkZGRkYsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIGxhYmVsIFx1MDAzZSAyMCBiaXRzIHRvIGJlIHJlamVjdGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVJTlZBTCwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGNhbl9jcmVhdGVfYW5kX2dldF9hbmRfcHV0X2xhYmVscylcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIChGTF9GX0NSRUFURSlcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCB0aGUgbGFiZWwgd2l0aG91dCBGTF9GX0NSRUFURVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gZ2V0IGl0IGFnYWluIHdpdGggY3JlYXRlIGZsYWcgc2V0LCB0b29cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEZMX0ZfRVhDTCB0byByZWplY3QgYW4gYWxyZWFkeS1leGlzdGluZyBsYWJlbFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKEVFWElTVCwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFRVhJU1QsIGdvdCAlZFwmIzM0OywgZXJybm8pO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCBmaXJzdCByZWZlcmVuY2VcJiMzNDspO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcHV0IHNlY29uZCByZWZlcmVuY2VcJiMzNDspO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcHV0IHRoaXJkIHJlZmVyZW5jZVwmIzM0Oyk7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgZm91cnRoIHB1dCB0byBmYWlsLCBubyByZWZlcmVuY2VzIGxlZnRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFU1JDSCwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGV4Y2x1c2l2ZV9sYWJlbF9zaGFyZSlcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTClcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCByZXVzZSBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVQRVJNLCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJldXNlIGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwgdG9vXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFwmIzM0OywgZXJybm8pO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAyKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgZXhjbHVzaXZlIGxhYmVsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgZHVlIHRvIGxpbmdlclwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVQRVJNLCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCByZXVzZSB0byBzdWNjZWVkIGFmdGVyIGxpbmdlclwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKHVzZXJfcHJpdmF0ZV9sYWJlbF9zaGFyZSlcbiB7XG4tXHRpbnQgd3N0YXR1cztcbiYjNDM7XHRpbnQgZmQsIGVyciwgd3N0YXR1cztcbiBcdHBpZF90IHBpZDtcbiBcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBub24tZXhpc3RlbnQgbGFiZWxcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCkpO1xuLVxuLVx0ZXhwbGFpbihcJiMzNDtjYW5ub3QgcHV0IG5vbi1leGlzdGVudCBsYWJlbFwmIzM0Oyk7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfcHV0KGZkLCAxKSk7XG4tXG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBjcmVhdGUgbGFiZWwgZ3JlYXRlciB0aGFuIDIwIGJpdHNcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMHgxRkZGRkYsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cbi1cdGV4cGxhaW4oXCYjMzQ7Y3JlYXRlIGEgbmV3IGxhYmVsIChGTF9GX0NSRUFURSlcJiMzNDspO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gZ2V0IHRoZSBsYWJlbCAod2l0aG91dCBGTF9GX0NSRUFURSlcJiMzNDspO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gZ2V0IGl0IGFnYWluIHdpdGggY3JlYXRlIGZsYWcgc2V0LCB0b29cJiMzNDspO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW5ub3QgZ2V0IGl0IGFnYWluIHdpdGggdGhlIGV4Y2x1c2l2ZSAoRkxfRkxfRVhDTCkgZmxhZ1wmIzM0Oyk7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLFxuLVx0XHRcdFx0XHQgSVBWNl9GTF9GX0NSRUFURSB8IElQVjZfRkxfRl9FWENMKSk7XG4tXHRleHBsYWluKFwmIzM0O2NhbiBub3cgcHV0IGV4YWN0bHkgdGhyZWUgcmVmZXJlbmNlc1wmIzM0Oyk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfcHV0KGZkLCAxKSk7XG4tXG4tXHRleHBsYWluKFwmIzM0O2NyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTClcJiMzNDspO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiBpbiBub24tZXhjbHVzaXZlIG1vZGVcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiBpbiBleGNsdXNpdmUgbW9kZSBlaXRoZXJcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDIpKTtcbi1cbi1cdGlmIChjZmdfbG9uZ19ydW5uaW5nKSB7XG4tXHRcdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IHJldXNlIHRoZSBsYWJlbCwgZHVlIHRvIGxpbmdlclwmIzM0Oyk7XG4tXHRcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHRcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0XHRleHBsYWluKFwmIzM0O2FmdGVyIHNsZWVwLCBjYW4gcmV1c2VcJiMzNDspO1xuLVx0XHRzbGVlcChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKTtcbi1cdFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHR9XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgZ2V0IGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFwmIzM0OywgZXJybm8pO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfRVhDTCwgMCk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgZ2V0IGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGVcJiMzNDspO1xuIFxuLVx0ZXhwbGFpbihcJiMzNDtjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiBpbiBleGNsdXNpdmUgbW9kZVwmIzM0Oyk7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfRVhDTCwgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVwmIzM0Oyk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjaGlsZCBwcm9jZXNzIGNhbiBnZXQgaXQgdG9vLCBidXQgbm90IGFmdGVyIHNldHVpZChub2JvZHkpXCYjMzQ7KTtcbiBcdHBpZCA9IGZvcmsoKTtcbi1cdGlmIChwaWQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtmb3JrXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFwmIzM0O2ZvcmsgZmFpbGVkXCYjMzQ7KTtcbiBcdGlmICghcGlkKSB7XG4tXHRcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XG4tXHRcdGlmIChzZXR1aWQoVVNIUlRfTUFYKSlcbiYjNDM7XHRcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbiYjNDM7XHRcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtjaGlsZCBmYWlsZWQgdG8gZ2V0IHRoZSB1c2VyLXByaXZhdGUgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzZXR1aWQoVVNIUlRfTUFYKSkge1xuIFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtbSU5GT10gc2tpcCBzZXR1aWQgY2hpbGQgdGVzdFxcblwmIzM0Oyk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xuJiM0MztcdFx0XHRleGl0KDApO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbiYjNDM7XHRcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2NoaWxkIHVuZXhwZWN0ZWRseSBnb3QgdGhlIGxhYmVsIGFmdGVyIHNldHVpZChub2JvZHkpXCYjMzQ7KTtcbiYjNDM7XHRcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4gXHRcdGV4aXQoMCk7XG4gXHR9XG4tXHRpZiAod2FpdChcdTAwMjZ3c3RhdHVzKSA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3dhaXRcJiMzNDspO1xuLVx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3dhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XCYjMzQ7KTtcbi1cbi1cdGV4cGxhaW4oXCYjMzQ7Y3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKVwmIzM0Oyk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gZ2V0IGl0IGFnYWluXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XG4tXHRleHBsYWluKFwmIzM0O2NoaWxkIHByb2Nlc3MgY2Fubm90IGNhbiBnZXQgaXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShwaWQsIHdhaXQoXHUwMDI2d3N0YXR1cykpIFRIX0xPRyhcJiMzNDt3YWl0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coXCYjMzQ7Y2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpIFRIX0xPRyhcJiMzNDtjaGlsZCByZXBvcnRlZCB1bmV4cGVjdGVkIHJlc3VsdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKHByb2Nlc3NfcHJpdmF0ZV9sYWJlbF9zaGFyZSlcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyLCB3c3RhdHVzO1xuJiM0MztcdHBpZF90IHBpZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgcHJvY2Vzcy1wcml2YXRlIGxhYmVsIChGTF9TX1BST0NFU1MpXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gZ2V0IGl0IGFnYWluXCYjMzQ7KTtcbiYjNDM7XG4gXHRwaWQgPSBmb3JrKCk7XG4tXHRpZiAocGlkID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7Zm9ya1wmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX05FKC0xLCBwaWQpIFRIX0xPRyhcJiMzNDtmb3JrIGZhaWxlZFwmIzM0Oyk7XG4gXHRpZiAoIXBpZCkge1xuLVx0XHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCkpO1xuJiM0MztcdFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApO1xuJiM0MztcdFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7Y2hpbGQgdW5leHBlY3RlZGx5IGdvdCB0aGUgcHJvY2Vzcy1wcml2YXRlIGxhYmVsXCYjMzQ7KTtcbiYjNDM7XHRcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4gXHRcdGV4aXQoMCk7XG4gXHR9XG4tXHRpZiAod2FpdChcdTAwMjZ3c3RhdHVzKSA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3dhaXRcJiMzNDspO1xuLVx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3dhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XCYjMzQ7KTtcbi19XG4tXG4tc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4te1xuLVx0aW50IGM7XG4tXG4tXHR3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgXCYjMzQ7bHZcJiMzNDspKSAhPSAtMSkge1xuLVx0XHRzd2l0Y2ggKGMpIHtcbi1cdFx0Y2FzZSAmIzM5O2wmIzM5Ozpcbi1cdFx0XHRjZmdfbG9uZ19ydW5uaW5nID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O3YmIzM5Ozpcbi1cdFx0XHRjZmdfdmVyYm9zZSA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7JXM6IHBhcnNlIGVycm9yXCYjMzQ7LCBhcmd2WzBdKTtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdEFTU0VSVF9FUShwaWQsIHdhaXQoXHUwMDI2d3N0YXR1cykpIFRIX0xPRyhcJiMzNDt3YWl0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coXCYjMzQ7Y2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpIFRIX0xPRyhcJiMzNDtjaGlsZCByZXBvcnRlZCB1bmV4cGVjdGVkIHJlc3VsdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuIH1cbiBcbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4mIzQzO1RFU1QoY2Fubm90X3JlbmV3X25vbl9leGlzdGVudF9sYWJlbClcbiB7XG4tXHRpbnQgZmQ7XG4mIzQzO1x0aW50IGZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA1LCAyICogKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpKTtcbiYjNDM7XHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCByZW5ldyBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFwmIzM0OywgZXJybm8pO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChjYW5fcmVuZXdfZXhpc3RpbmdfbGFiZWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA1LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgZm9yIHJlbmV3IHZhbGlkYXRpb25cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDUsIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSkpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcmVuZXcgYW4gZXhpc3RpbmcgdmFsaWQgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA1KTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWxcJiMzNDspO1xuIFxuLVx0cGFyc2Vfb3B0cyhhcmdjLCBhcmd2KTtcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChyZW5ld19sYWJlbF9saW5nZXIpXG4mIzQzO3tcbiYjNDM7XHQvKiBSRU5FVyBtdXN0IGV4dGVuZCBhIGxhYmVsJiMzOTtzIGxpbmdlciBwZXJpb2Q6IHB1dHRpbmcgYSByZW5ld2VkXG4mIzQzO1x0ICogbGFiZWwgYW5kIHdhaXRpbmcgb3V0IGl0cyBvcmlnaW5hbCBsaW5nZXIgdGltZSBtdXN0IG5vdCBiZVxuJiM0MztcdCAqIGVub3VnaCB0byBhbGxvdyB0aGUgbGFiZWwgdG8gYmUgcmVjcmVhdGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGludCBmZCwgZXJyO1xuIFxuIFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA2LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgd2l0aCBGTF9NSU5fTElOR0VSIGxpbmdlciB0aW1lXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA2LCAyICogKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHJlbmV3IHRoZSBsYWJlbCB0byBpbmNyZWFzZSBpdHMgbGluZ2VyIHRpbWVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA2KTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzbGVlcChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgbmV3IGxpbmdlciB0aW1lIG5vdCBvdmVyIHlldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVQRVJNLCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QocmVtb3RlX2ZsYWcpXG4mIzQzO3tcbiYjNDM7XHQvKiBUaGUgUkVNT1RFIGZsYWcsIHVzZWQgZm9yIGdldHNvY2tvcHQsIGlzIGV4cGVjdGVkIHRvIHJldHJpZXZlIHRoZVxuJiM0MztcdCAqIGxhYmVsIGZyb20gdGhlIGxhdGVzdCByZWNlaXZlZCBoZWFkZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIGZyZXEgPSB7XG4mIzQzO1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4mIzQzO1x0XHQuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFTU9URSxcbiYjNDM7XHR9O1xuJiM0MztcdHNvY2tsZW5fdCBmcmVxX2xlbiA9IHNpemVvZihmcmVxKTtcbiYjNDM7XHRpbnQgbGlzdGVuZXIsIGNmZCwgYWZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xuJiM0MztcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA3LCBcdTAwMjZjZmQsIFx1MDAyNmFmZCk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZmcmVxLCBcdTAwMjZmcmVxX2xlbik7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2dldHNvY2tvcHQgd2l0aCBJUFY2X0ZMX0ZfUkVNT1RFIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKDcsIG50b2hsKGZyZXEuZmxyX2xhYmVsKSkgVEhfTE9HKFwmIzM0O3VuZXhwZWN0ZWQgcmVtb3RlIGZsb3cgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoYWZkKSk7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGNsb3NlKGNmZCkpO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBmbG93bGFiZWxfY29uc2lzdGVuY3lfZW5hYmxlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMl0gPSB7fTtcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYvZmxvd2xhYmVsX2NvbnNpc3RlbmN5XCYjMzQ7LCBPX1JET05MWSk7XG4gXHRpZiAoZmQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzb2NrZXRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRydW5fdGVzdHMoZmQpO1xuJiM0MztcdGlmIChyZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSkgXHUwMDNjIDApXG4mIzQzO1x0XHRidWZbMF0gPSAmIzM5OzEmIzM5OztcbiYjNDM7XHRjbG9zZShmZCk7XG4gXG4tXHRpZiAoY2xvc2UoZmQpKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7Y2xvc2VcJiMzNDspO1xuJiM0MztcdHJldHVybiBidWZbMF0gIT0gJiMzOTswJiMzOTs7XG4mIzQzO31cbiBcbi1cdHJldHVybiAwO1xuJiM0MztURVNUKHJlZmxlY3RfZmxhZylcbiYjNDM7e1xuJiM0MztcdC8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1dcbiYjNDM7XHQgKiBpcyB0cmlnZ2VyZWQgZm9yIGEgc29ja2V0LCBpdCBhZG9wdHMgdGhlIGxhYmVsIHJlY2VpdmVkIGZyb20gdGhlXG4mIzQzO1x0ICogY29ubmVjdGVkIHNvY2tldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vbiA9IHtcbiYjNDM7XHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcbiYjNDM7XHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X3F1ZXJ5ID0ge1xuJiM0MztcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb2ZmID0ge1xuJiM0MztcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUFVULFxuJiM0MztcdFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxuJiM0MztcdH07XG4mIzQzO1x0c29ja2xlbl90IHJlZmxlY3RfcXVlcnlfbGVuID0gc2l6ZW9mKHJlZmxlY3RfcXVlcnkpO1xuJiM0MztcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGZsb3dsYWJlbF9jb25zaXN0ZW5jeV9lbmFibGVkKCkpXG4mIzQzO1x0XHRTS0lQKHJldHVybixcbiYjNDM7XHRcdCAgICAgXCYjMzQ7bmV0LmlwdjYuZmxvd2xhYmVsX2NvbnNpc3RlbmN5IG11c3QgYmUgMCAocnVuIHZpYSBpcHY2X2Zsb3dsYWJlbC5zaClcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRsaXN0ZW5lciA9IHRjcF9saXN0ZW4oKTtcbiYjNDM7XHRlcnIgPSBzZXRzb2Nrb3B0KGxpc3RlbmVyLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZWZsZWN0X29uLCBzaXplb2YocmVmbGVjdF9vbikpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIFJFRkxFQ1Qgb24gdGhlIGxpc3RlbmVyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0dGNwX2Nvbm5lY3QobGlzdGVuZXIsIDgsIFx1MDAyNmNmZCwgXHUwMDI2YWZkKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZ2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlZmxlY3RfcXVlcnksIFx1MDAyNnJlZmxlY3RfcXVlcnlfbGVuKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHF1ZXJ5IHRoZSBhY2NlcHRlZCBzb2NrZXQmIzM5O3Mgb3V0Z29pbmcgbGFiZWxcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUSg4LCBudG9obChyZWZsZWN0X3F1ZXJ5LmZscl9sYWJlbCkpXG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7YWNjZXB0ZWQgc29ja2V0IGRpZCBub3QgcmVmbGVjdCBjbGllbnQmIzM5O3MgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXHUwMDI2cmVmbGVjdF9vZmYsIHNpemVvZihyZWZsZWN0X29mZikpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBSRUZMRUNUIG9uIHRoZSBhY2NlcHRlZCBzb2NrZXRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXHUwMDI2cmVmbGVjdF9vZmYsIHNpemVvZihyZWZsZWN0X29mZikpO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIGRpc2FibGluZyBSRUZMRUNUIHR3aWNlIHRvIGZhaWxcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFU1JDSCwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShhZmQpKTtcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoY2ZkKSk7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGNsb3NlKGxpc3RlbmVyKSk7XG4gfVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzg5OGU2OWU3ODNiZDlmNzYxNmRhODRlYjVlYzNlYTA5ZDIwMzk5ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDM6Mjk6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2gKaW5kZXggY2VlOTVlMjUyYmVlNS4uNGMzZGUzYTI3ODA3YyAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaApAQCAtOCw3ICYjNDM7OCw4IEBACiBzZXQgLWUKIAogZWNobyAmIzM0O1RFU1QgbWFuYWdlbWVudCYjMzQ7Ci0uL2luX25ldG5zLnNoIC4vaXB2Nl9mbG93bGFiZWxfbWdyCiYjNDM7Li9pbl9uZXRucy5zaCBcCiYjNDM7ICBzaCAtYyAmIzM5O3N5c2N0bCAtcSAtdyBuZXQuaXB2Ni5mbG93bGFiZWxfY29uc2lzdGVuY3k9MCAmYW1wOyZhbXA7IC4vaXB2Nl9mbG93bGFiZWxfbWdyJiMzOTsKIAogZWNobyAmIzM0O1RFU1QgZGF0YXBhdGgmIzM0OwogLi9pbl9uZXRucy5zaCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMKaW5kZXggYWY5NWI0OGFjZWE5MC4uNDgyOTIxZjdlZTExOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYwpAQCAtNiw2ICYjNDM7Niw3IEBACiAjaW5jbHVkZSAmbHQ7YXJwYS9pbmV0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7ZXJyb3IuaCZndDsKICNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2luNi5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKQEAgLTE5LDMxICYjNDM7MjAsMTkgQEAKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiAKIC8qIHVhcGkvZ2xpYmMgd2VpcmRuZXNzIG1heSBsZWF2ZSB0aGlzIHVuZGVmaW5lZCAqLwogI2lmbmRlZiBJUFY2X0ZMT1dMQUJFTF9NR1IKICNkZWZpbmUgSVBWNl9GTE9XTEFCRUxfTUdSCTMyCiAjZW5kaWYKJiM0MzsjaWZuZGVmIElQVjZfRkxPV0lORk9fU0VORAomIzQzOyNkZWZpbmUgSVBWNl9GTE9XSU5GT19TRU5ECTMzCiYjNDM7I2VuZGlmCiAKIC8qIGZyb20gbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jICovCiAjZGVmaW5lIEZMX01JTl9MSU5HRVIJCTYKLQotI2RlZmluZSBleHBsYWluKHgpCQkJCQkJCVwKLQlkbyB7IGlmIChjZmdfdmVyYm9zZSkgZnByaW50ZihzdGRlcnIsICYjMzQ7ICAgICAgICYjMzQ7IHggJiMzNDtcbiYjMzQ7KTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfX2V4cGVjdCh4KQkJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAoISh4KSkJCQkJCQlcCi0JCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtbT0tdICAgJiMzNDsgI3ggJiMzNDtcbiYjMzQ7KTsJCVwKLQkJZWxzZQkJCQkJCQlcCi0JCQllcnJvcigxLCAwLCAmIzM0O1tFUlJdICAmIzM0OyAjeCAmIzM0OyAobGluZSAlZCkmIzM0OywgX19MSU5FX18pOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBleHBlY3RfcGFzcyh4KQlfX2V4cGVjdCh4KQotI2RlZmluZSBleHBlY3RfZmFpbCh4KQlfX2V4cGVjdCghKHgpKQotCi1zdGF0aWMgYm9vbCBjZmdfbG9uZ19ydW5uaW5nOwotc3RhdGljIGJvb2wgY2ZnX3ZlcmJvc2U7CiYjNDM7I2RlZmluZSBGTF9NQVhfTElOR0VSCTE1MAogCiBzdGF0aWMgaW50IGZsb3dsYWJlbF9nZXQoaW50IGZkLCB1aW50MzJfdCBsYWJlbCwgdWludDhfdCBzaGFyZSwgdWludDE2X3QgZmxhZ3MpCiB7CkBAIC03MSwxMjkgJiM0Mzs2MCw0MDYgQEAgc3RhdGljIGludCBmbG93bGFiZWxfcHV0KGludCBmZCwgdWludDMyX3QgbGFiZWwpCiAJcmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsICZhbXA7cmVxLCBzaXplb2YocmVxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ1bl90ZXN0cyhpbnQgZmQpCiYjNDM7c3RhdGljIGludCBmbG93bGFiZWxfcmVuZXcoaW50IGZkLCB1aW50MzJfdCBsYWJlbCwgdWludDE2X3QgbGluZ2VyKQomIzQzO3sKJiM0MzsJc3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHsKJiM0MzsJCS5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1JFTkVXLAomIzQzOwkJLmZscl9sYWJlbCA9IGh0b25sKGxhYmVsKSwKJiM0MzsJCS5mbHJfbGluZ2VyID0gbGluZ2VyLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gc2V0c29ja29wdChmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgJmFtcDtyZXEsIHNpemVvZihyZXEpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbjYgbG9vcGJhY2tfYWRkcih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0gewomIzQzOwkJLnNpbjZfZmFtaWx5CT0gQUZfSU5FVDYsCiYjNDM7CQkuc2luNl9hZGRyCT0gSU42QUREUl9MT09QQkFDS19JTklULAomIzQzOwkJLnNpbjZfcG9ydAk9IGh0b25zKDg4ODgpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gYWRkcjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0Y3BfbGlzdGVuKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSBsb29wYmFja19hZGRyKCk7CiYjNDM7CWNvbnN0IGludCBvbmUgPSAxOwomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7CiYjNDM7CWlmIChmZCA9PSAtMSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O3NvY2tldCBsaXN0ZW5lciYjMzQ7KTsKJiM0MzsJaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJmFtcDtvbmUsIHNpemVvZihvbmUpKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O3NldHNvY2tvcHQgU09fUkVVU0VBRERSJiMzNDspOwomIzQzOwlpZiAoYmluZChmZCwgKHZvaWQgKikmYW1wO2FkZHIsIHNpemVvZihhZGRyKSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtiaW5kJiMzNDspOwomIzQzOwlpZiAobGlzdGVuKGZkLCAxKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O2xpc3RlbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0Y3BfY29ubmVjdChpbnQgbGlzdGVuZXIsIHVpbnQzMl90IGZsb3dsYWJlbCwgaW50ICpjbGllbnQsIGludCAqYWNjZXB0ZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSBsb29wYmFja19hZGRyKCk7CiYjNDM7CWNvbnN0IGludCBvbmUgPSAxOwomIzQzOwlpbnQgY2ZkLCBhZmQ7CiYjNDM7CiYjNDM7CWNmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApOwomIzQzOwlpZiAoY2ZkID09IC0xKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7c29ja2V0IGNsaWVudCYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKGZsb3dsYWJlbF9nZXQoY2ZkLCBmbG93bGFiZWwsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O2Zsb3dsYWJlbF9nZXQmIzM0Oyk7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGNmZCwgU09MX0lQVjYsIElQVjZfRkxPV0lORk9fU0VORCwgJmFtcDtvbmUsIHNpemVvZihvbmUpKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O3NldHNvY2tvcHQgZmxvd2luZm9fc2VuZCYjMzQ7KTsKJiM0MzsJYWRkci5zaW42X2Zsb3dpbmZvID0gaHRvbmwoZmxvd2xhYmVsKTsKJiM0MzsKJiM0MzsJaWYgKGNvbm5lY3QoY2ZkLCAodm9pZCAqKSZhbXA7YWRkciwgc2l6ZW9mKGFkZHIpKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O2Nvbm5lY3QmIzM0Oyk7CiYjNDM7CiYjNDM7CWFmZCA9IGFjY2VwdChsaXN0ZW5lciwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmIChhZmQgPT0gLTEpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDthY2NlcHQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChmbG93bGFiZWxfcHV0KGNmZCwgZmxvd2xhYmVsKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O2Zsb3dsYWJlbF9wdXQmIzM0Oyk7CiYjNDM7CiYjNDM7CSpjbGllbnQgPSBjZmQ7CiYjNDM7CSphY2NlcHRlZCA9IGFmZDsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChjYW5ub3RfZ2V0X25vbl9leGlzdGVudF9sYWJlbCkKJiM0Mzt7CiYjNDM7CWludCBmZCwgZXJyOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgOSwgSVBWNl9GTF9TX0FOWSwgMCk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgZ2V0IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShFTk9FTlQsIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFTk9FTlQsIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShmZCkpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxMCk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcHV0IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVTUkNILCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChjYW5ub3RfY3JlYXRlX2xhYmVsX2dyZWF0ZXJfdGhhbl8yMF9iaXRzKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgbGFiZWwgJmd0OyAyMCBiaXRzIHRvIGJlIHJlamVjdGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoRUlOVkFMLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRUlOVkFMLCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChjYW5fY3JlYXRlX2FuZF9nZXRfYW5kX3B1dF9sYWJlbHMpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVycjsKJiM0MzsKJiM0MzsJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIChGTF9GX0NSRUFURSkmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gZ2V0IHRoZSBsYWJlbCB3aXRob3V0IEZMX0ZfQ1JFQVRFJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIEZMX0ZfRVhDTCB0byByZWplY3QgYW4gYWxyZWFkeS1leGlzdGluZyBsYWJlbCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKEVFWElTVCwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVFWElTVCwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBwdXQgZmlyc3QgcmVmZXJlbmNlJiMzNDspOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCBzZWNvbmQgcmVmZXJlbmNlJiMzNDspOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGlyZCByZWZlcmVuY2UmIzM0Oyk7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIGZvdXJ0aCBwdXQgdG8gZmFpbCwgbm8gcmVmZXJlbmNlcyBsZWZ0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFU1JDSCwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1QoZXhjbHVzaXZlX2xhYmVsX3NoYXJlKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJQVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCByZXVzZSBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJQVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCByZXVzZSBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsIHRvbyYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDIpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gcHV0IHRoZSBleGNsdXNpdmUgbGFiZWwmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIHJldXNlIHRvIGZhaWwsIGR1ZSB0byBsaW5nZXImIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVQRVJNLCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwlzbGVlcChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIHJldXNlIHRvIHN1Y2NlZWQgYWZ0ZXIgbGluZ2VyJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVCh1c2VyX3ByaXZhdGVfbGFiZWxfc2hhcmUpCiB7Ci0JaW50IHdzdGF0dXM7CiYjNDM7CWludCBmZCwgZXJyLCB3c3RhdHVzOwogCXBpZF90IHBpZDsKIAotCWV4cGxhaW4oJiMzNDtjYW5ub3QgZ2V0IG5vbi1leGlzdGVudCBsYWJlbCYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7Ci0KLQlleHBsYWluKCYjMzQ7Y2Fubm90IHB1dCBub24tZXhpc3RlbnQgbGFiZWwmIzM0Oyk7Ci0JZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpOwotCi0JZXhwbGFpbigmIzM0O2Nhbm5vdCBjcmVhdGUgbGFiZWwgZ3JlYXRlciB0aGFuIDIwIGJpdHMmIzM0Oyk7Ci0JZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMHgxRkZGRkYsIElQVjZfRkxfU19BTlksCi0JCQkJICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0KLQlleHBsYWluKCYjMzQ7Y3JlYXRlIGEgbmV3IGxhYmVsIChGTF9GX0NSRUFURSkmIzM0Oyk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGxhaW4oJiMzNDtjYW4gZ2V0IHRoZSBsYWJlbCAod2l0aG91dCBGTF9GX0NSRUFURSkmIzM0Oyk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCkpOwotCWV4cGxhaW4oJiMzNDtjYW4gZ2V0IGl0IGFnYWluIHdpdGggY3JlYXRlIGZsYWcgc2V0LCB0b28mIzM0Oyk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGxhaW4oJiMzNDtjYW5ub3QgZ2V0IGl0IGFnYWluIHdpdGggdGhlIGV4Y2x1c2l2ZSAoRkxfRkxfRVhDTCkgZmxhZyYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLAotCQkJCQkgSVBWNl9GTF9GX0NSRUFURSB8IElQVjZfRkxfRl9FWENMKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBub3cgcHV0IGV4YWN0bHkgdGhyZWUgcmVmZXJlbmNlcyYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfcHV0KGZkLCAxKSk7Ci0KLQlleHBsYWluKCYjMzQ7Y3JlYXRlIGEgbmV3IGV4Y2x1c2l2ZSBsYWJlbCAoRkxfU19FWENMKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGxhaW4oJiMzNDtjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZSYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCAgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGxhaW4oJiMzNDtjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlIGVpdGhlciYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDIpKTsKLQotCWlmIChjZmdfbG9uZ19ydW5uaW5nKSB7Ci0JCWV4cGxhaW4oJiMzNDtjYW5ub3QgcmV1c2UgdGhlIGxhYmVsLCBkdWUgdG8gbGluZ2VyJiMzNDspOwotCQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLAotCQkJCQkgIElQVjZfRkxfRl9DUkVBVEUpKTsKLQkJZXhwbGFpbigmIzM0O2FmdGVyIHNsZWVwLCBjYW4gcmV1c2UmIzM0Oyk7Ci0JCXNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpOwotCQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLAotCQkJCQkgIElQVjZfRkxfRl9DUkVBVEUpKTsKLQl9CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfQU5ZLCAwKTsKJiM0MzsJQVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCBnZXQgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVQRVJNLCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfRVhDTCwgMCk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgZ2V0IGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVQRVJNLCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlJiMzNDspOwogCi0JZXhwbGFpbigmIzM0O2NyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUikmIzM0Oyk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpKTsKLQlleHBsYWluKCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiBpbiBub24tZXhjbHVzaXZlIG1vZGUmIzM0Oyk7Ci0JZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCkpOwotCWV4cGxhaW4oJiMzNDtjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NoaWxkIHByb2Nlc3MgY2FuIGdldCBpdCB0b28sIGJ1dCBub3QgYWZ0ZXIgc2V0dWlkKG5vYm9keSkmIzM0Oyk7CiAJcGlkID0gZm9yaygpOwotCWlmIChwaWQgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O2ZvcmsmIzM0Oyk7CiYjNDM7CUFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coJiMzNDtmb3JrIGZhaWxlZCYjMzQ7KTsKIAlpZiAoIXBpZCkgewotCQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpOwotCQlpZiAoc2V0dWlkKFVTSFJUX01BWCkpCiYjNDM7CQllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7CiYjNDM7CQlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtjaGlsZCBmYWlsZWQgdG8gZ2V0IHRoZSB1c2VyLXByaXZhdGUgbGFiZWwmIzM0Oyk7CiYjNDM7CiYjNDM7CQlpZiAoc2V0dWlkKFVTSFJUX01BWCkpIHsKIAkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1tJTkZPXSBza2lwIHNldHVpZCBjaGlsZCB0ZXN0XG4mIzM0Oyk7Ci0JCWVsc2UKLQkJCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7CiYjNDM7CQkJZXhpdCgwKTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTsKJiM0MzsJCUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7Y2hpbGQgdW5leHBlY3RlZGx5IGdvdCB0aGUgbGFiZWwgYWZ0ZXIgc2V0dWlkKG5vYm9keSkmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkJiMzNDssIGVycm5vKTsKIAkJZXhpdCgwKTsKIAl9Ci0JaWYgKHdhaXQoJmFtcDt3c3RhdHVzKSA9PSAtMSkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7d2FpdCYjMzQ7KTsKLQlpZiAoIVdJRkVYSVRFRCh3c3RhdHVzKSB8fCBXRVhJVFNUQVRVUyh3c3RhdHVzKSAhPSAwKQotCQllcnJvcigxLCBlcnJubywgJiMzNDt3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdCYjMzQ7KTsKLQotCWV4cGxhaW4oJiMzNDtjcmVhdGUgYSBuZXcgcHJvY2Vzcy1wcml2YXRlIGxhYmVsIChGTF9TX1BST0NFU1MpJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBnZXQgaXQgYWdhaW4mIzM0Oyk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKTsKLQlleHBsYWluKCYjMzQ7Y2hpbGQgcHJvY2VzcyBjYW5ub3QgY2FuIGdldCBpdCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHBpZCwgd2FpdCgmYW1wO3dzdGF0dXMpKSBUSF9MT0coJiMzNDt3YWl0IGZhaWxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coJiMzNDtjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHkmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUSgwLCBXRVhJVFNUQVRVUyh3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7Y2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHQmIzM0Oyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShmZCkpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKHByb2Nlc3NfcHJpdmF0ZV9sYWJlbF9zaGFyZSkKJiM0Mzt7CiYjNDM7CWludCBmZCwgZXJyLCB3c3RhdHVzOwomIzQzOwlwaWRfdCBwaWQ7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgcHJvY2Vzcy1wcml2YXRlIGxhYmVsIChGTF9TX1BST0NFU1MpJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBnZXQgaXQgYWdhaW4mIzM0Oyk7CiYjNDM7CiAJcGlkID0gZm9yaygpOwotCWlmIChwaWQgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O2ZvcmsmIzM0Oyk7CiYjNDM7CUFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coJiMzNDtmb3JrIGZhaWxlZCYjMzQ7KTsKIAlpZiAoIXBpZCkgewotCQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCkpOwomIzQzOwkJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApOwomIzQzOwkJQVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtjaGlsZCB1bmV4cGVjdGVkbHkgZ290IHRoZSBwcm9jZXNzLXByaXZhdGUgbGFiZWwmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkJiMzNDssIGVycm5vKTsKIAkJZXhpdCgwKTsKIAl9Ci0JaWYgKHdhaXQoJmFtcDt3c3RhdHVzKSA9PSAtMSkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7d2FpdCYjMzQ7KTsKLQlpZiAoIVdJRkVYSVRFRCh3c3RhdHVzKSB8fCBXRVhJVFNUQVRVUyh3c3RhdHVzKSAhPSAwKQotCQllcnJvcigxLCBlcnJubywgJiMzNDt3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdCYjMzQ7KTsKLX0KLQotc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0JaW50IGM7Ci0KLQl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDtsdiYjMzQ7KSkgIT0gLTEpIHsKLQkJc3dpdGNoIChjKSB7Ci0JCWNhc2UgJiMzOTtsJiMzOTs6Ci0JCQljZmdfbG9uZ19ydW5uaW5nID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7diYjMzk7OgotCQkJY2ZnX3ZlcmJvc2UgPSB0cnVlOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnJvcigxLCAwLCAmIzM0OyVzOiBwYXJzZSBlcnJvciYjMzQ7LCBhcmd2WzBdKTsKLQkJfQotCX0KJiM0MzsJQVNTRVJUX0VRKHBpZCwgd2FpdCgmYW1wO3dzdGF0dXMpKSBUSF9MT0coJiMzNDt3YWl0IGZhaWxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coJiMzNDtjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHkmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUSgwLCBXRVhJVFNUQVRVUyh3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7Y2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHQmIzM0Oyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShmZCkpOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiYjNDM7VEVTVChjYW5ub3RfcmVuZXdfbm9uX2V4aXN0ZW50X2xhYmVsKQogewotCWludCBmZDsKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDUsIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSkpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIHJlbmV3IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVTUkNILCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChjYW5fcmVuZXdfZXhpc3RpbmdfbGFiZWwpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVycjsKJiM0MzsKJiM0MzsJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDUsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBsYWJlbCBmb3IgcmVuZXcgdmFsaWRhdGlvbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA1LCAyICogKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHJlbmV3IGFuIGV4aXN0aW5nIHZhbGlkIGxhYmVsJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA1KTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWwmIzM0Oyk7CiAKLQlwYXJzZV9vcHRzKGFyZ2MsIGFyZ3YpOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChyZW5ld19sYWJlbF9saW5nZXIpCiYjNDM7ewomIzQzOwkvKiBSRU5FVyBtdXN0IGV4dGVuZCBhIGxhYmVsJiMzOTtzIGxpbmdlciBwZXJpb2Q6IHB1dHRpbmcgYSByZW5ld2VkCiYjNDM7CSAqIGxhYmVsIGFuZCB3YWl0aW5nIG91dCBpdHMgb3JpZ2luYWwgbGluZ2VyIHRpbWUgbXVzdCBub3QgYmUKJiM0MzsJICogZW5vdWdoIHRvIGFsbG93IHRoZSBsYWJlbCB0byBiZSByZWNyZWF0ZWQuCiYjNDM7CSAqLwomIzQzOwlpbnQgZmQsIGVycjsKIAogCWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA2LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgd2l0aCBGTF9NSU5fTElOR0VSIGxpbmdlciB0aW1lJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDYsIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSkpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gcmVuZXcgdGhlIGxhYmVsIHRvIGluY3JlYXNlIGl0cyBsaW5nZXIgdGltZSYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgNik7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBwdXQgdGhlIGxhYmVsJiMzNDspOwomIzQzOwomIzQzOwlzbGVlcChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgbmV3IGxpbmdlciB0aW1lIG5vdCBvdmVyIHlldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShmZCkpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKHJlbW90ZV9mbGFnKQomIzQzO3sKJiM0MzsJLyogVGhlIFJFTU9URSBmbGFnLCB1c2VkIGZvciBnZXRzb2Nrb3B0LCBpcyBleHBlY3RlZCB0byByZXRyaWV2ZSB0aGUKJiM0MzsJICogbGFiZWwgZnJvbSB0aGUgbGF0ZXN0IHJlY2VpdmVkIGhlYWRlci4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSBmcmVxID0gewomIzQzOwkJLmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULAomIzQzOwkJLmZscl9mbGFncyA9IElQVjZfRkxfRl9SRU1PVEUsCiYjNDM7CX07CiYjNDM7CXNvY2tsZW5fdCBmcmVxX2xlbiA9IHNpemVvZihmcmVxKTsKJiM0MzsJaW50IGxpc3RlbmVyLCBjZmQsIGFmZCwgZXJyOwomIzQzOwomIzQzOwlsaXN0ZW5lciA9IHRjcF9saXN0ZW4oKTsKJiM0MzsJdGNwX2Nvbm5lY3QobGlzdGVuZXIsIDcsICZhbXA7Y2ZkLCAmYW1wO2FmZCk7CiYjNDM7CiYjNDM7CWVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCAmYW1wO2ZyZXEsICZhbXA7ZnJlcV9sZW4pOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtnZXRzb2Nrb3B0IHdpdGggSVBWNl9GTF9GX1JFTU9URSBmYWlsZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUSg3LCBudG9obChmcmVxLmZscl9sYWJlbCkpIFRIX0xPRygmIzM0O3VuZXhwZWN0ZWQgcmVtb3RlIGZsb3cgbGFiZWwmIzM0Oyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShhZmQpKTsKJiM0MzsJQVNTRVJUX0VRKDAsIGNsb3NlKGNmZCkpOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UobGlzdGVuZXIpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZmxvd2xhYmVsX2NvbnNpc3RlbmN5X2VuYWJsZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzJdID0ge307CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSYjMzQ7LCBPX1JET05MWSk7CiAJaWYgKGZkID09IC0xKQotCQllcnJvcigxLCBlcnJubywgJiMzNDtzb2NrZXQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAotCXJ1bl90ZXN0cyhmZCk7CiYjNDM7CWlmIChyZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSkgJmx0OyAwKQomIzQzOwkJYnVmWzBdID0gJiMzOTsxJiMzOTs7CiYjNDM7CWNsb3NlKGZkKTsKIAotCWlmIChjbG9zZShmZCkpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O2Nsb3NlJiMzNDspOwomIzQzOwlyZXR1cm4gYnVmWzBdICE9ICYjMzk7MCYjMzk7OwomIzQzO30KIAotCXJldHVybiAwOwomIzQzO1RFU1QocmVmbGVjdF9mbGFnKQomIzQzO3sKJiM0MzsJLyogVGhlIFJFRkxFQ1QgZmxhZyBhY3RzIGFzIGEgdHJpZ2dlciB0byB0aGUgUkVQRkxPVyBiaXQuIFdoZW4gUkVQRkxPVwomIzQzOwkgKiBpcyB0cmlnZ2VyZWQgZm9yIGEgc29ja2V0LCBpdCBhZG9wdHMgdGhlIGxhYmVsIHJlY2VpdmVkIGZyb20gdGhlCiYjNDM7CSAqIGNvbm5lY3RlZCBzb2NrZXQuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vbiA9IHsKJiM0MzsJCS5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCwKJiM0MzsJCS5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3RfcXVlcnkgPSB7CiYjNDM7CQkuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X29mZiA9IHsKJiM0MzsJCS5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1BVVCwKJiM0MzsJCS5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCwKJiM0MzsJfTsKJiM0MzsJc29ja2xlbl90IHJlZmxlY3RfcXVlcnlfbGVuID0gc2l6ZW9mKHJlZmxlY3RfcXVlcnkpOwomIzQzOwlpbnQgbGlzdGVuZXIsIGNmZCwgYWZkLCBlcnI7CiYjNDM7CiYjNDM7CWlmIChmbG93bGFiZWxfY29uc2lzdGVuY3lfZW5hYmxlZCgpKQomIzQzOwkJU0tJUChyZXR1cm4sCiYjNDM7CQkgICAgICYjMzQ7bmV0LmlwdjYuZmxvd2xhYmVsX2NvbnNpc3RlbmN5IG11c3QgYmUgMCAocnVuIHZpYSBpcHY2X2Zsb3dsYWJlbC5zaCkmIzM0Oyk7CiYjNDM7CiYjNDM7CWxpc3RlbmVyID0gdGNwX2xpc3RlbigpOwomIzQzOwllcnIgPSBzZXRzb2Nrb3B0KGxpc3RlbmVyLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCAmYW1wO3JlZmxlY3Rfb24sIHNpemVvZihyZWZsZWN0X29uKSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBlbmFibGUgUkVGTEVDVCBvbiB0aGUgbGlzdGVuZXImIzM0Oyk7CiYjNDM7CiYjNDM7CXRjcF9jb25uZWN0KGxpc3RlbmVyLCA4LCAmYW1wO2NmZCwgJmFtcDthZmQpOwomIzQzOwomIzQzOwllcnIgPSBnZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgJmFtcDtyZWZsZWN0X3F1ZXJ5LCAmYW1wO3JlZmxlY3RfcXVlcnlfbGVuKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHF1ZXJ5IHRoZSBhY2NlcHRlZCBzb2NrZXQmIzM5O3Mgb3V0Z29pbmcgbGFiZWwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUSg4LCBudG9obChyZWZsZWN0X3F1ZXJ5LmZscl9sYWJlbCkpCiYjNDM7CQlUSF9MT0coJiMzNDthY2NlcHRlZCBzb2NrZXQgZGlkIG5vdCByZWZsZWN0IGNsaWVudCYjMzk7cyBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsICZhbXA7cmVmbGVjdF9vZmYsIHNpemVvZihyZWZsZWN0X29mZikpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBSRUZMRUNUIG9uIHRoZSBhY2NlcHRlZCBzb2NrZXQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IHNldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCAmYW1wO3JlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTsKJiM0MzsJQVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCBkaXNhYmxpbmcgUkVGTEVDVCB0d2ljZSB0byBmYWlsJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFU1JDSCwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGNsb3NlKGFmZCkpOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoY2ZkKSk7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpOwogfQomIzQzOwomIzQzO1RFU1RfSEFSTkVTU19NQUlOCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NTUKCQkJCQkJCW91dHB1dDogNjMKCQkJCQkJCXRob3VnaHRzOiA1NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBBbmFseXppbmcgYSBTZWxmdGVzdCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2hgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7aG1tbSwgdGhhdCYjMzk7cyBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgc2VsZnRlc3RzIGRpcmVjdG9yeSwgdGhhdCYjMzk7cyBub3Qga2VybmVsIGV4ZWN1dGlvbi4mIzM0OyBMZXQgbWUganVzdCBkb3VibGUgY2hlY2ssIHRob3VnaCwgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guIFJpZ2h0LCB0aGUgZGlmZiBqdXN0IGNvbmZpcm1zIHRoZSB0d28gZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLgoKU2luY2UgdGhpcyBtb2RpZmllcyAqb25seSogc2VsZnRlc3RzLCB3aGljaCBhcmUgdXNlci1zcGFjZSBwcm9ncmFtcyBkZXNpZ25lZCBmb3IgdGVzdGluZywgbm90IHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgd29uJiMzOTt0IHRyaWdnZXIgYW55IG1lYW5pbmdmdWwgZnV6emluZyBvZiB0aGUga2VybmVsIGl0c2VsZi4gTm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgaW5zdHJ1Y3Rpb25zLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5IHNjZW5hcmlvcyB3aGVyZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQgbGlzdHMgdGhpbmdzIGxpa2UgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBjb21tZW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBwYXRocywgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzLiBJIGRvbiYjMzk7dCBzZWUgc2VsZnRlc3RzIGV4cGxpY2l0bHkgbGlzdGVkLCBidXQgaXQmIzM5O3MgY2xlYXIgdGhlc2UgYXJlIHVzZWQgdG8gdGVzdCBrZXJuZWwgZmVhdHVyZXMsIG5vdCB0byBleGVjdXRlIGNvZGUsIGFuZCB0aGVyZWZvcmUgaXQgZmFsbHMgd2l0aGluIHRoZSBzYW1lIHNwaXJpdCBvZiB0aGUgZ3VpZGVsaW5lcy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgbm8sIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBvbmx5IHRvdWNoZXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaGAgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNgLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQuIFRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZXNlIHVzZXItc3BhY2Ugc2VsZnRlc3RzLCByZXNpZGluZyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCwgYW5kIGl0IGlzbiYjMzk7dCBjaGFuZ2luZyBhbnkga2VybmVsIGNvZGUuIFRoaXMgZG9lc24mIzM5O3QgbmVjZXNzaXRhdGUgZnV6emluZyB0aGUga2VybmVsLgoKU28sIHRoZSBjb25jbHVzaW9uIGlzICoqV29ydGhGdXp6aW5nPWZhbHNlKiouIFdlIGNhbiBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMzoyOToyMC40MzA3ODEyMzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzI4NDEyNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjI5OjIwLjQzMDc4NjM4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA0NDY4MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzg5OGU2OWU3ODNiZDlmNzYxNmRhODRlYjVlYzNlYTA5ZDIwMzk5ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDAzOjI5OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxcbmluZGV4IGNlZTk1ZTI1MmJlZTUuLjRjM2RlM2EyNzgwN2MgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoXFxuQEAgLTgsNyArOCw4IEBAXFxuIHNldCAtZVxcbiBcXG4gZWNobyBcXFwiVEVTVCBtYW5hZ2VtZW50XFxcIlxcbi0uL2luX25ldG5zLnNoIC4vaXB2Nl9mbG93bGFiZWxfbWdyXFxuKy4vaW5fbmV0bnMuc2ggXFxcXFxcbisgIHNoIC1jICdzeXNjdGwgLXEgLXcgbmV0LmlwdjYuZmxvd2xhYmVsX2NvbnNpc3RlbmN5PTAgXFx1MDAyNlxcdTAwMjYgLi9pcHY2X2Zsb3dsYWJlbF9tZ3InXFxuIFxcbiBlY2hvIFxcXCJURVNUIGRhdGFwYXRoXFxcIlxcbiAuL2luX25ldG5zLnNoIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXFxuaW5kZXggYWY5NWI0OGFjZWE5MC4uNDgyOTIxZjdlZTExOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FycGEvaW5ldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZXJyb3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGltaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbjYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG5AQCAtMTksMzEgKzIwLDE5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuIFxcbiAvKiB1YXBpL2dsaWJjIHdlaXJkbmVzcyBtYXkgbGVhdmUgdGhpcyB1bmRlZmluZWQgKi9cXG4gI2lmbmRlZiBJUFY2X0ZMT1dMQUJFTF9NR1JcXG4gI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1JcXHQzMlxcbiAjZW5kaWZcXG4rI2lmbmRlZiBJUFY2X0ZMT1dJTkZPX1NFTkRcXG4rI2RlZmluZSBJUFY2X0ZMT1dJTkZPX1NFTkRcXHQzM1xcbisjZW5kaWZcXG4gXFxuIC8qIGZyb20gbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jICovXFxuICNkZWZpbmUgRkxfTUlOX0xJTkdFUlxcdFxcdDZcXG4tXFxuLSNkZWZpbmUgZXhwbGFpbih4KVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0ZG8geyBpZiAoY2ZnX3ZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCBcXFwiICAgICAgIFxcXCIgeCBcXFwiXFxcXG5cXFwiKTsgfSB3aGlsZSAoMClcXG4tXFxuLSNkZWZpbmUgX19leHBlY3QoeClcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdGlmICghKHgpKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJbT0tdICAgXFxcIiAjeCBcXFwiXFxcXG5cXFwiKTtcXHRcXHRcXFxcXFxuLVxcdFxcdGVsc2VcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCJbRVJSXSAgXFxcIiAjeCBcXFwiIChsaW5lICVkKVxcXCIsIF9fTElORV9fKTsgXFxcXFxcbi1cXHR9IHdoaWxlICgwKVxcbi1cXG4tI2RlZmluZSBleHBlY3RfcGFzcyh4KVxcdF9fZXhwZWN0KHgpXFxuLSNkZWZpbmUgZXhwZWN0X2ZhaWwoeClcXHRfX2V4cGVjdCghKHgpKVxcbi1cXG4tc3RhdGljIGJvb2wgY2ZnX2xvbmdfcnVubmluZztcXG4tc3RhdGljIGJvb2wgY2ZnX3ZlcmJvc2U7XFxuKyNkZWZpbmUgRkxfTUFYX0xJTkdFUlxcdDE1MFxcbiBcXG4gc3RhdGljIGludCBmbG93bGFiZWxfZ2V0KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsIHVpbnQxNl90IGZsYWdzKVxcbiB7XFxuQEAgLTcxLDEyOSArNjAsNDA2IEBAIHN0YXRpYyBpbnQgZmxvd2xhYmVsX3B1dChpbnQgZmQsIHVpbnQzMl90IGxhYmVsKVxcbiBcXHRyZXR1cm4gc2V0c29ja29wdChmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBydW5fdGVzdHMoaW50IGZkKVxcbitzdGF0aWMgaW50IGZsb3dsYWJlbF9yZW5ldyhpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50MTZfdCBsaW5nZXIpXFxuK3tcXG4rXFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHtcXG4rXFx0XFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsXFxuK1xcdFxcdC5mbHJfbGFiZWwgPSBodG9ubChsYWJlbCksXFxuK1xcdFxcdC5mbHJfbGluZ2VyID0gbGluZ2VyLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFxcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbjYgbG9vcGJhY2tfYWRkcih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkciA9IHtcXG4rXFx0XFx0LnNpbjZfZmFtaWx5XFx0PSBBRl9JTkVUNixcXG4rXFx0XFx0LnNpbjZfYWRkclxcdD0gSU42QUREUl9MT09QQkFDS19JTklULFxcbitcXHRcXHQuc2luNl9wb3J0XFx0PSBodG9ucyg4ODg4KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBhZGRyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHRjcF9saXN0ZW4odm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSBsb29wYmFja19hZGRyKCk7XFxuK1xcdGNvbnN0IGludCBvbmUgPSAxO1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApO1xcbitcXHRpZiAoZmQgPT0gLTEpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwic29ja2V0IGxpc3RlbmVyXFxcIik7XFxuK1xcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFxcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJzZXRzb2Nrb3B0IFNPX1JFVVNFQUREUlxcXCIpO1xcbitcXHRpZiAoYmluZChmZCwgKHZvaWQgKilcXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJiaW5kXFxcIik7XFxuK1xcdGlmIChsaXN0ZW4oZmQsIDEpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImxpc3RlblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIGZkO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0Y3BfY29ubmVjdChpbnQgbGlzdGVuZXIsIHVpbnQzMl90IGZsb3dsYWJlbCwgaW50ICpjbGllbnQsIGludCAqYWNjZXB0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0gbG9vcGJhY2tfYWRkcigpO1xcbitcXHRjb25zdCBpbnQgb25lID0gMTtcXG4rXFx0aW50IGNmZCwgYWZkO1xcbitcXG4rXFx0Y2ZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7XFxuK1xcdGlmIChjZmQgPT0gLTEpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwic29ja2V0IGNsaWVudFxcXCIpO1xcbitcXG4rXFx0aWYgKGZsb3dsYWJlbF9nZXQoY2ZkLCBmbG93bGFiZWwsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJmbG93bGFiZWxfZ2V0XFxcIik7XFxuK1xcdGlmIChzZXRzb2Nrb3B0KGNmZCwgU09MX0lQVjYsIElQVjZfRkxPV0lORk9fU0VORCwgXFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInNldHNvY2tvcHQgZmxvd2luZm9fc2VuZFxcXCIpO1xcbitcXHRhZGRyLnNpbjZfZmxvd2luZm8gPSBodG9ubChmbG93bGFiZWwpO1xcbitcXG4rXFx0aWYgKGNvbm5lY3QoY2ZkLCAodm9pZCAqKVxcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImNvbm5lY3RcXFwiKTtcXG4rXFxuK1xcdGFmZCA9IGFjY2VwdChsaXN0ZW5lciwgTlVMTCwgTlVMTCk7XFxuK1xcdGlmIChhZmQgPT0gLTEpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwiYWNjZXB0XFxcIik7XFxuK1xcbitcXHRpZiAoZmxvd2xhYmVsX3B1dChjZmQsIGZsb3dsYWJlbCkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwiZmxvd2xhYmVsX3B1dFxcXCIpO1xcbitcXG4rXFx0KmNsaWVudCA9IGNmZDtcXG4rXFx0KmFjY2VwdGVkID0gYWZkO1xcbit9XFxuK1xcbitURVNUKGNhbm5vdF9nZXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgOSwgSVBWNl9GTF9TX0FOWSwgMCk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCBnZXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoRU5PRU5ULCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFTk9FTlQsIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xcbit9XFxuK1xcbitURVNUKGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMTApO1xcbitcXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgcHV0IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWxcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFU1JDSCwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QoY2Fubm90X2NyZWF0ZV9sYWJlbF9ncmVhdGVyX3RoYW5fMjBfYml0cylcXG4re1xcbitcXHRpbnQgZmQsIGVycjtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDB4MUZGRkZGLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGxhYmVsIFxcdTAwM2UgMjAgYml0cyB0byBiZSByZWplY3RlZFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFSU5WQUwsIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xcbit9XFxuK1xcbitURVNUKGNhbl9jcmVhdGVfYW5kX2dldF9hbmRfcHV0X2xhYmVscylcXG4re1xcbitcXHRpbnQgZmQsIGVycjtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgbGFiZWwgKEZMX0ZfQ1JFQVRFKVxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGdldCB0aGUgbGFiZWwgd2l0aG91dCBGTF9GX0NSRUFURVxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpO1xcbitcXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRkxfRl9FWENMIHRvIHJlamVjdCBhbiBhbHJlYWR5LWV4aXN0aW5nIGxhYmVsXFxcIik7XFxuK1xcdEFTU0VSVF9FUShFRVhJU1QsIGVycm5vKSBUSF9MT0coXFxcImV4cGVjdGVkIEVFWElTVCwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIHB1dCBmaXJzdCByZWZlcmVuY2VcXFwiKTtcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIHB1dCBzZWNvbmQgcmVmZXJlbmNlXFxcIik7XFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBwdXQgdGhpcmQgcmVmZXJlbmNlXFxcIik7XFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xcbitcXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgZm91cnRoIHB1dCB0byBmYWlsLCBubyByZWZlcmVuY2VzIGxlZnRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFU1JDSCwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QoZXhjbHVzaXZlX2xhYmVsX3NoYXJlKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIHJldXNlIGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsXFxcIik7XFxuK1xcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIHJldXNlIGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwgdG9vXFxcIik7XFxuK1xcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDIpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBwdXQgdGhlIGV4Y2x1c2l2ZSBsYWJlbFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCByZXVzZSB0byBmYWlsLCBkdWUgdG8gbGluZ2VyXFxcIik7XFxuK1xcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdHNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICsgMSk7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJleHBlY3RlZCByZXVzZSB0byBzdWNjZWVkIGFmdGVyIGxpbmdlclxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QodXNlcl9wcml2YXRlX2xhYmVsX3NoYXJlKVxcbiB7XFxuLVxcdGludCB3c3RhdHVzO1xcbitcXHRpbnQgZmQsIGVyciwgd3N0YXR1cztcXG4gXFx0cGlkX3QgcGlkO1xcbiBcXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IGdldCBub24tZXhpc3RlbnQgbGFiZWxcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCkpO1xcbi1cXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IHB1dCBub24tZXhpc3RlbnQgbGFiZWxcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xcbi1cXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IGNyZWF0ZSBsYWJlbCBncmVhdGVyIHRoYW4gMjAgYml0c1xcXCIpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSxcXG4tXFx0XFx0XFx0XFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcbi1cXHRleHBsYWluKFxcXCJjcmVhdGUgYSBuZXcgbGFiZWwgKEZMX0ZfQ1JFQVRFKVxcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbiBnZXQgdGhlIGxhYmVsICh3aXRob3V0IEZMX0ZfQ1JFQVRFKVxcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbiBnZXQgaXQgYWdhaW4gd2l0aCBjcmVhdGUgZmxhZyBzZXQsIHRvb1xcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbm5vdCBnZXQgaXQgYWdhaW4gd2l0aCB0aGUgZXhjbHVzaXZlIChGTF9GTF9FWENMKSBmbGFnXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksXFxuLVxcdFxcdFxcdFxcdFxcdCBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2FuIG5vdyBwdXQgZXhhY3RseSB0aHJlZSByZWZlcmVuY2VzXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcXG4tXFxuLVxcdGV4cGxhaW4oXFxcImNyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTClcXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IGdldCBpdCBhZ2FpbiBpbiBub24tZXhjbHVzaXZlIG1vZGVcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IGdldCBpdCBhZ2FpbiBpbiBleGNsdXNpdmUgbW9kZSBlaXRoZXJcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMikpO1xcbi1cXG4tXFx0aWYgKGNmZ19sb25nX3J1bm5pbmcpIHtcXG4tXFx0XFx0ZXhwbGFpbihcXFwiY2Fubm90IHJldXNlIHRoZSBsYWJlbCwgZHVlIHRvIGxpbmdlclxcXCIpO1xcbi1cXHRcXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLFxcbi1cXHRcXHRcXHRcXHRcXHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0XFx0ZXhwbGFpbihcXFwiYWZ0ZXIgc2xlZXAsIGNhbiByZXVzZVxcXCIpO1xcbi1cXHRcXHRzbGVlcChGTF9NSU5fTElOR0VSICogMiArIDEpO1xcbi1cXHRcXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLFxcbi1cXHRcXHRcXHRcXHRcXHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0fVxcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFxcXCJzb2NrZXQgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUilcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApO1xcbitcXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgZ2V0IGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsXFxcIik7XFxuK1xcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGdldCBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsXFxcIik7XFxuK1xcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVxcXCIpO1xcbiBcXG4tXFx0ZXhwbGFpbihcXFwiY3JlYXRlIGEgbmV3IHVzZXItcHJpdmF0ZSBsYWJlbCAoRkxfU19VU0VSKVxcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZVxcXCIpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGVcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0VYQ0wsIDApKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2FuIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGVcXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2hpbGQgcHJvY2VzcyBjYW4gZ2V0IGl0IHRvbywgYnV0IG5vdCBhZnRlciBzZXR1aWQobm9ib2R5KVxcXCIpO1xcbiBcXHRwaWQgPSBmb3JrKCk7XFxuLVxcdGlmIChwaWQgPT0gLTEpXFxuLVxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwiZm9ya1xcXCIpO1xcbitcXHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFxcXCJmb3JrIGZhaWxlZFxcXCIpO1xcbiBcXHRpZiAoIXBpZCkge1xcbi1cXHRcXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xcbi1cXHRcXHRpZiAoc2V0dWlkKFVTSFJUX01BWCkpXFxuK1xcdFxcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcXG4rXFx0XFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJjaGlsZCBmYWlsZWQgdG8gZ2V0IHRoZSB1c2VyLXByaXZhdGUgbGFiZWxcXFwiKTtcXG4rXFxuK1xcdFxcdGlmIChzZXR1aWQoVVNIUlRfTUFYKSkge1xcbiBcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIltJTkZPXSBza2lwIHNldHVpZCBjaGlsZCB0ZXN0XFxcXG5cXFwiKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xcbitcXHRcXHRcXHRleGl0KDApO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7XFxuK1xcdFxcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJjaGlsZCB1bmV4cGVjdGVkbHkgZ290IHRoZSBsYWJlbCBhZnRlciBzZXR1aWQobm9ib2R5KVxcXCIpO1xcbitcXHRcXHRBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXFxcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcXFwiLCBlcnJubyk7XFxuIFxcdFxcdGV4aXQoMCk7XFxuIFxcdH1cXG4tXFx0aWYgKHdhaXQoXFx1MDAyNndzdGF0dXMpID09IC0xKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcIndhaXRcXFwiKTtcXG4tXFx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcXG4tXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJ3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdFxcXCIpO1xcbi1cXG4tXFx0ZXhwbGFpbihcXFwiY3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKVxcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW4gZ2V0IGl0IGFnYWluXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNoaWxkIHByb2Nlc3MgY2Fubm90IGNhbiBnZXQgaXRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHBpZCwgd2FpdChcXHUwMDI2d3N0YXR1cykpIFRIX0xPRyhcXFwid2FpdCBmYWlsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coXFxcImNoaWxkIGRpZCBub3QgZXhpdCBub3JtYWxseVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpIFRIX0xPRyhcXFwiY2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHRcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xcbit9XFxuK1xcbitURVNUKHByb2Nlc3NfcHJpdmF0ZV9sYWJlbF9zaGFyZSlcXG4re1xcbitcXHRpbnQgZmQsIGVyciwgd3N0YXR1cztcXG4rXFx0cGlkX3QgcGlkO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgcHJvY2Vzcy1wcml2YXRlIGxhYmVsIChGTF9TX1BST0NFU1MpXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpblxcXCIpO1xcbitcXG4gXFx0cGlkID0gZm9yaygpO1xcbi1cXHRpZiAocGlkID09IC0xKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImZvcmtcXFwiKTtcXG4rXFx0QVNTRVJUX05FKC0xLCBwaWQpIFRIX0xPRyhcXFwiZm9yayBmYWlsZWRcXFwiKTtcXG4gXFx0aWYgKCFwaWQpIHtcXG4tXFx0XFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKTtcXG4rXFx0XFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApO1xcbitcXHRcXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcXFwiY2hpbGQgdW5leHBlY3RlZGx5IGdvdCB0aGUgcHJvY2Vzcy1wcml2YXRlIGxhYmVsXFxcIik7XFxuK1xcdFxcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4gXFx0XFx0ZXhpdCgwKTtcXG4gXFx0fVxcbi1cXHRpZiAod2FpdChcXHUwMDI2d3N0YXR1cykgPT0gLTEpXFxuLVxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwid2FpdFxcXCIpO1xcbi1cXHRpZiAoIVdJRkVYSVRFRCh3c3RhdHVzKSB8fCBXRVhJVFNUQVRVUyh3c3RhdHVzKSAhPSAwKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcIndhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XFxcIik7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbi17XFxuLVxcdGludCBjO1xcbi1cXG4tXFx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFxcXCJsdlxcXCIpKSAhPSAtMSkge1xcbi1cXHRcXHRzd2l0Y2ggKGMpIHtcXG4tXFx0XFx0Y2FzZSAnbCc6XFxuLVxcdFxcdFxcdGNmZ19sb25nX3J1bm5pbmcgPSB0cnVlO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAndic6XFxuLVxcdFxcdFxcdGNmZ192ZXJib3NlID0gdHJ1ZTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCIlczogcGFyc2UgZXJyb3JcXFwiLCBhcmd2WzBdKTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdEFTU0VSVF9FUShwaWQsIHdhaXQoXFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXFxcIndhaXQgZmFpbGVkXFxcIik7XFxuK1xcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFxcXCJjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHlcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKSBUSF9MT0coXFxcImNoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0XFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcXG4gfVxcbiBcXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbitURVNUKGNhbm5vdF9yZW5ld19ub25fZXhpc3RlbnRfbGFiZWwpXFxuIHtcXG4tXFx0aW50IGZkO1xcbitcXHRpbnQgZmQsIGVycjtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgMiAqIChGTF9NSU5fTElOR0VSICogMiArIDEpKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIHJlbmV3IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWxcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFU1JDSCwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QoY2FuX3JlbmV3X2V4aXN0aW5nX2xhYmVsKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgZm9yIHJlbmV3IHZhbGlkYXRpb25cXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgMiAqIChGTF9NSU5fTElOR0VSICogMiArIDEpKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcmVuZXcgYW4gZXhpc3RpbmcgdmFsaWQgbGFiZWxcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDUpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBwdXQgdGhlIGxhYmVsXFxcIik7XFxuIFxcbi1cXHRwYXJzZV9vcHRzKGFyZ2MsIGFyZ3YpO1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcXG4rfVxcbitcXG4rVEVTVChyZW5ld19sYWJlbF9saW5nZXIpXFxuK3tcXG4rXFx0LyogUkVORVcgbXVzdCBleHRlbmQgYSBsYWJlbCdzIGxpbmdlciBwZXJpb2Q6IHB1dHRpbmcgYSByZW5ld2VkXFxuK1xcdCAqIGxhYmVsIGFuZCB3YWl0aW5nIG91dCBpdHMgb3JpZ2luYWwgbGluZ2VyIHRpbWUgbXVzdCBub3QgYmVcXG4rXFx0ICogZW5vdWdoIHRvIGFsbG93IHRoZSBsYWJlbCB0byBiZSByZWNyZWF0ZWQuXFxuK1xcdCAqL1xcbitcXHRpbnQgZmQsIGVycjtcXG4gXFxuIFxcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDYsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGxhYmVsIHdpdGggRkxfTUlOX0xJTkdFUiBsaW5nZXIgdGltZVxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA2LCAyICogKEZMX01JTl9MSU5HRVIgKiAyICsgMSkpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byByZW5ldyB0aGUgbGFiZWwgdG8gaW5jcmVhc2UgaXRzIGxpbmdlciB0aW1lXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA2KTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcHV0IHRoZSBsYWJlbFxcXCIpO1xcbitcXG4rXFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDYsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgbmV3IGxpbmdlciB0aW1lIG5vdCBvdmVyIHlldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXFxcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcXFwiLCBlcnJubyk7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcXG4rfVxcbitcXG4rVEVTVChyZW1vdGVfZmxhZylcXG4re1xcbitcXHQvKiBUaGUgUkVNT1RFIGZsYWcsIHVzZWQgZm9yIGdldHNvY2tvcHQsIGlzIGV4cGVjdGVkIHRvIHJldHJpZXZlIHRoZVxcbitcXHQgKiBsYWJlbCBmcm9tIHRoZSBsYXRlc3QgcmVjZWl2ZWQgaGVhZGVyLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIGZyZXEgPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRU1PVEUsXFxuK1xcdH07XFxuK1xcdHNvY2tsZW5fdCBmcmVxX2xlbiA9IHNpemVvZihmcmVxKTtcXG4rXFx0aW50IGxpc3RlbmVyLCBjZmQsIGFmZCwgZXJyO1xcbitcXG4rXFx0bGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7XFxuK1xcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA3LCBcXHUwMDI2Y2ZkLCBcXHUwMDI2YWZkKTtcXG4rXFxuK1xcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcXHUwMDI2ZnJlcSwgXFx1MDAyNmZyZXFfbGVuKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJnZXRzb2Nrb3B0IHdpdGggSVBWNl9GTF9GX1JFTU9URSBmYWlsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKDcsIG50b2hsKGZyZXEuZmxyX2xhYmVsKSkgVEhfTE9HKFxcXCJ1bmV4cGVjdGVkIHJlbW90ZSBmbG93IGxhYmVsXFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoYWZkKSk7XFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShjZmQpKTtcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGxpc3RlbmVyKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGZsb3dsYWJlbF9jb25zaXN0ZW5jeV9lbmFibGVkKHZvaWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbMl0gPSB7fTtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0ZmQgPSBvcGVuKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjYvZmxvd2xhYmVsX2NvbnNpc3RlbmN5XFxcIiwgT19SRE9OTFkpO1xcbiBcXHRpZiAoZmQgPT0gLTEpXFxuLVxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwic29ja2V0XFxcIik7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0cnVuX3Rlc3RzKGZkKTtcXG4rXFx0aWYgKHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKSBcXHUwMDNjIDApXFxuK1xcdFxcdGJ1ZlswXSA9ICcxJztcXG4rXFx0Y2xvc2UoZmQpO1xcbiBcXG4tXFx0aWYgKGNsb3NlKGZkKSlcXG4tXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJjbG9zZVxcXCIpO1xcbitcXHRyZXR1cm4gYnVmWzBdICE9ICcwJztcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1RFU1QocmVmbGVjdF9mbGFnKVxcbit7XFxuK1xcdC8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1dcXG4rXFx0ICogaXMgdHJpZ2dlcmVkIGZvciBhIHNvY2tldCwgaXQgYWRvcHRzIHRoZSBsYWJlbCByZWNlaXZlZCBmcm9tIHRoZVxcbitcXHQgKiBjb25uZWN0ZWQgc29ja2V0LlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb24gPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9xdWVyeSA9IHtcXG4rXFx0XFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vZmYgPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1BVVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxcbitcXHR9O1xcbitcXHRzb2NrbGVuX3QgcmVmbGVjdF9xdWVyeV9sZW4gPSBzaXplb2YocmVmbGVjdF9xdWVyeSk7XFxuK1xcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcXG4rXFxuK1xcdGlmIChmbG93bGFiZWxfY29uc2lzdGVuY3lfZW5hYmxlZCgpKVxcbitcXHRcXHRTS0lQKHJldHVybixcXG4rXFx0XFx0ICAgICBcXFwibmV0LmlwdjYuZmxvd2xhYmVsX2NvbnNpc3RlbmN5IG11c3QgYmUgMCAocnVuIHZpYSBpcHY2X2Zsb3dsYWJlbC5zaClcXFwiKTtcXG4rXFxuK1xcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xcbitcXHRlcnIgPSBzZXRzb2Nrb3B0KGxpc3RlbmVyLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcXHUwMDI2cmVmbGVjdF9vbiwgc2l6ZW9mKHJlZmxlY3Rfb24pKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZW5hYmxlIFJFRkxFQ1Qgb24gdGhlIGxpc3RlbmVyXFxcIik7XFxuK1xcbitcXHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgOCwgXFx1MDAyNmNmZCwgXFx1MDAyNmFmZCk7XFxuK1xcbitcXHRlcnIgPSBnZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXFx1MDAyNnJlZmxlY3RfcXVlcnksIFxcdTAwMjZyZWZsZWN0X3F1ZXJ5X2xlbik7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIHF1ZXJ5IHRoZSBhY2NlcHRlZCBzb2NrZXQncyBvdXRnb2luZyBsYWJlbFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoOCwgbnRvaGwocmVmbGVjdF9xdWVyeS5mbHJfbGFiZWwpKVxcbitcXHRcXHRUSF9MT0coXFxcImFjY2VwdGVkIHNvY2tldCBkaWQgbm90IHJlZmxlY3QgY2xpZW50J3MgbGFiZWxcXFwiKTtcXG4rXFxuK1xcdGVyciA9IHNldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcXHUwMDI2cmVmbGVjdF9vZmYsIHNpemVvZihyZWZsZWN0X29mZikpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBkaXNhYmxlIFJFRkxFQ1Qgb24gdGhlIGFjY2VwdGVkIHNvY2tldFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFxcdTAwMjZyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCBkaXNhYmxpbmcgUkVGTEVDVCB0d2ljZSB0byBmYWlsXFxcIik7XFxuK1xcdEFTU0VSVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShhZmQpKTtcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGNmZCkpO1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UobGlzdGVuZXIpKTtcXG4gfVxcbitcXG4rVEVTVF9IQVJORVNTX01BSU5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6Mjk6MjAuODM2ODE0MTM3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODkyMjM2OTg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjODk4ZTY5ZTc4M2JkOWY3NjE2ZGE4NGViNWVjM2VhMDlkMjAzOTlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAwMzoyOToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxuaW5kZXggY2VlOTVlMjUyYmVlNS4uNGMzZGUzYTI3ODA3YyAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoXG5AQCAtOCw3ICs4LDggQEBcbiBzZXQgLWVcbiBcbiBlY2hvIFwiVEVTVCBtYW5hZ2VtZW50XCJcbi0uL2luX25ldG5zLnNoIC4vaXB2Nl9mbG93bGFiZWxfbWdyXG4rLi9pbl9uZXRucy5zaCBcXFxuKyAgc2ggLWMgJ3N5c2N0bCAtcSAtdyBuZXQuaXB2Ni5mbG93bGFiZWxfY29uc2lzdGVuY3k9MCBcdTAwMjZcdTAwMjYgLi9pcHY2X2Zsb3dsYWJlbF9tZ3InXG4gXG4gZWNobyBcIlRFU1QgZGF0YXBhdGhcIlxuIC4vaW5fbmV0bnMuc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcbmluZGV4IGFmOTViNDhhY2VhOTAuLjQ4MjkyMWY3ZWUxMTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xuQEAgLTYsNiArNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXJwYS9pbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NlcnJvci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luNi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG5AQCAtMTksMzEgKzIwLDE5IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuIFxuIC8qIHVhcGkvZ2xpYmMgd2VpcmRuZXNzIG1heSBsZWF2ZSB0aGlzIHVuZGVmaW5lZCAqL1xuICNpZm5kZWYgSVBWNl9GTE9XTEFCRUxfTUdSXG4gI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1JcdDMyXG4gI2VuZGlmXG4rI2lmbmRlZiBJUFY2X0ZMT1dJTkZPX1NFTkRcbisjZGVmaW5lIElQVjZfRkxPV0lORk9fU0VORFx0MzNcbisjZW5kaWZcbiBcbiAvKiBmcm9tIG5ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyAqL1xuICNkZWZpbmUgRkxfTUlOX0xJTkdFUlx0XHQ2XG4tXG4tI2RlZmluZSBleHBsYWluKHgpXHRcdFx0XHRcdFx0XHRcXFxuLVx0ZG8geyBpZiAoY2ZnX3ZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCBcIiAgICAgICBcIiB4IFwiXFxuXCIpOyB9IHdoaWxlICgwKVxuLVxuLSNkZWZpbmUgX19leHBlY3QoeClcdFx0XHRcdFx0XHRcdFxcXG4tXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdGlmICghKHgpKVx0XHRcdFx0XHRcdFxcXG4tXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiW09LXSAgIFwiICN4IFwiXFxuXCIpO1x0XHRcXFxuLVx0XHRlbHNlXHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdGVycm9yKDEsIDAsIFwiW0VSUl0gIFwiICN4IFwiIChsaW5lICVkKVwiLCBfX0xJTkVfXyk7IFxcXG4tXHR9IHdoaWxlICgwKVxuLVxuLSNkZWZpbmUgZXhwZWN0X3Bhc3MoeClcdF9fZXhwZWN0KHgpXG4tI2RlZmluZSBleHBlY3RfZmFpbCh4KVx0X19leHBlY3QoISh4KSlcbi1cbi1zdGF0aWMgYm9vbCBjZmdfbG9uZ19ydW5uaW5nO1xuLXN0YXRpYyBib29sIGNmZ192ZXJib3NlO1xuKyNkZWZpbmUgRkxfTUFYX0xJTkdFUlx0MTUwXG4gXG4gc3RhdGljIGludCBmbG93bGFiZWxfZ2V0KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsIHVpbnQxNl90IGZsYWdzKVxuIHtcbkBAIC03MSwxMjkgKzYwLDQwNiBAQCBzdGF0aWMgaW50IGZsb3dsYWJlbF9wdXQoaW50IGZkLCB1aW50MzJfdCBsYWJlbClcbiBcdHJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnVuX3Rlc3RzKGludCBmZClcbitzdGF0aWMgaW50IGZsb3dsYWJlbF9yZW5ldyhpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50MTZfdCBsaW5nZXIpXG4re1xuK1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHtcbitcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsXG4rXHRcdC5mbHJfbGFiZWwgPSBodG9ubChsYWJlbCksXG4rXHRcdC5mbHJfbGluZ2VyID0gbGluZ2VyLFxuK1x0fTtcbitcbitcdHJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbjYgbG9vcGJhY2tfYWRkcih2b2lkKVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkciA9IHtcbitcdFx0LnNpbjZfZmFtaWx5XHQ9IEFGX0lORVQ2LFxuK1x0XHQuc2luNl9hZGRyXHQ9IElONkFERFJfTE9PUEJBQ0tfSU5JVCxcbitcdFx0LnNpbjZfcG9ydFx0PSBodG9ucyg4ODg4KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gYWRkcjtcbit9XG4rXG4rc3RhdGljIGludCB0Y3BfbGlzdGVuKHZvaWQpXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0gbG9vcGJhY2tfYWRkcigpO1xuK1x0Y29uc3QgaW50IG9uZSA9IDE7XG4rXHRpbnQgZmQ7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApO1xuK1x0aWYgKGZkID09IC0xKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJzb2NrZXQgbGlzdGVuZXJcIik7XG4rXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwic2V0c29ja29wdCBTT19SRVVTRUFERFJcIik7XG4rXHRpZiAoYmluZChmZCwgKHZvaWQgKilcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJiaW5kXCIpO1xuK1x0aWYgKGxpc3RlbihmZCwgMSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcImxpc3RlblwiKTtcbitcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGNwX2Nvbm5lY3QoaW50IGxpc3RlbmVyLCB1aW50MzJfdCBmbG93bGFiZWwsIGludCAqY2xpZW50LCBpbnQgKmFjY2VwdGVkKVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkciA9IGxvb3BiYWNrX2FkZHIoKTtcbitcdGNvbnN0IGludCBvbmUgPSAxO1xuK1x0aW50IGNmZCwgYWZkO1xuK1xuK1x0Y2ZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7XG4rXHRpZiAoY2ZkID09IC0xKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJzb2NrZXQgY2xpZW50XCIpO1xuK1xuK1x0aWYgKGZsb3dsYWJlbF9nZXQoY2ZkLCBmbG93bGFiZWwsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwiZmxvd2xhYmVsX2dldFwiKTtcbitcdGlmIChzZXRzb2Nrb3B0KGNmZCwgU09MX0lQVjYsIElQVjZfRkxPV0lORk9fU0VORCwgXHUwMDI2b25lLCBzaXplb2Yob25lKSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcInNldHNvY2tvcHQgZmxvd2luZm9fc2VuZFwiKTtcbitcdGFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7XG4rXG4rXHRpZiAoY29ubmVjdChjZmQsICh2b2lkICopXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwiY29ubmVjdFwiKTtcbitcbitcdGFmZCA9IGFjY2VwdChsaXN0ZW5lciwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoYWZkID09IC0xKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJhY2NlcHRcIik7XG4rXG4rXHRpZiAoZmxvd2xhYmVsX3B1dChjZmQsIGZsb3dsYWJlbCkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcImZsb3dsYWJlbF9wdXRcIik7XG4rXG4rXHQqY2xpZW50ID0gY2ZkO1xuK1x0KmFjY2VwdGVkID0gYWZkO1xuK31cbitcbitURVNUKGNhbm5vdF9nZXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgOSwgSVBWNl9GTF9TX0FOWSwgMCk7XG4rXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIGdldCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCIpO1xuK1x0QVNTRVJUX0VRKEVOT0VOVCwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVOT0VOVCwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuK31cbitcbitURVNUKGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMTApO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCBwdXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFwiKTtcbitcdEFTU0VSVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVTUkNILCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1QoY2Fubm90X2NyZWF0ZV9sYWJlbF9ncmVhdGVyX3RoYW5fMjBfYml0cylcbit7XG4rXHRpbnQgZmQsIGVycjtcbitcbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwic29ja2V0IGZhaWxlZFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDB4MUZGRkZGLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgbGFiZWwgXHUwMDNlIDIwIGJpdHMgdG8gYmUgcmVqZWN0ZWRcIik7XG4rXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubykgVEhfTE9HKFwiZXhwZWN0ZWQgRUlOVkFMLCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1QoY2FuX2NyZWF0ZV9hbmRfZ2V0X2FuZF9wdXRfbGFiZWxzKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIChGTF9GX0NSRUFURSlcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBnZXQgdGhlIGxhYmVsIHdpdGhvdXQgRkxfRl9DUkVBVEVcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBnZXQgaXQgYWdhaW4gd2l0aCBjcmVhdGUgZmxhZyBzZXQsIHRvb1wiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCk7XG4rXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIEZMX0ZfRVhDTCB0byByZWplY3QgYW4gYWxyZWFkeS1leGlzdGluZyBsYWJlbFwiKTtcbitcdEFTU0VSVF9FUShFRVhJU1QsIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFRVhJU1QsIGdvdCAlZFwiLCBlcnJubyk7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBwdXQgZmlyc3QgcmVmZXJlbmNlXCIpO1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHNlY29uZCByZWZlcmVuY2VcIik7XG4rXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBwdXQgdGhpcmQgcmVmZXJlbmNlXCIpO1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4rXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIGZvdXJ0aCBwdXQgdG8gZmFpbCwgbm8gcmVmZXJlbmNlcyBsZWZ0XCIpO1xuK1x0QVNTRVJUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFwiZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFwiLCBlcnJubyk7XG4rXG4rXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVChleGNsdXNpdmVfbGFiZWxfc2hhcmUpXG4re1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGV4Y2x1c2l2ZSBsYWJlbCAoRkxfU19FWENMKVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCByZXVzZSBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbFwiKTtcbitcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCByZXVzZSBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsIHRvb1wiKTtcbitcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHRoZSBleGNsdXNpdmUgbGFiZWxcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgZHVlIHRvIGxpbmdlclwiKTtcbitcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZXhwZWN0ZWQgcmV1c2UgdG8gc3VjY2VlZCBhZnRlciBsaW5nZXJcIik7XG4rXG4rXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVCh1c2VyX3ByaXZhdGVfbGFiZWxfc2hhcmUpXG4ge1xuLVx0aW50IHdzdGF0dXM7XG4rXHRpbnQgZmQsIGVyciwgd3N0YXR1cztcbiBcdHBpZF90IHBpZDtcbiBcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IG5vbi1leGlzdGVudCBsYWJlbFwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcbi1cbi1cdGV4cGxhaW4oXCJjYW5ub3QgcHV0IG5vbi1leGlzdGVudCBsYWJlbFwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cbi1cdGV4cGxhaW4oXCJjYW5ub3QgY3JlYXRlIGxhYmVsIGdyZWF0ZXIgdGhhbiAyMCBiaXRzXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMHgxRkZGRkYsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cbi1cdGV4cGxhaW4oXCJjcmVhdGUgYSBuZXcgbGFiZWwgKEZMX0ZfQ1JFQVRFKVwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCJjYW4gZ2V0IHRoZSBsYWJlbCAod2l0aG91dCBGTF9GX0NSRUFURSlcIik7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7XG4tXHRleHBsYWluKFwiY2FuIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcImNhbm5vdCBnZXQgaXQgYWdhaW4gd2l0aCB0aGUgZXhjbHVzaXZlIChGTF9GTF9FWENMKSBmbGFnXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0IElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCkpO1xuLVx0ZXhwbGFpbihcImNhbiBub3cgcHV0IGV4YWN0bHkgdGhyZWUgcmVmZXJlbmNlc1wiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cbi1cdGV4cGxhaW4oXCJjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZVwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwiY2Fubm90IGdldCBpdCBhZ2FpbiBpbiBleGNsdXNpdmUgbW9kZSBlaXRoZXJcIik7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMikpO1xuLVxuLVx0aWYgKGNmZ19sb25nX3J1bm5pbmcpIHtcbi1cdFx0ZXhwbGFpbihcImNhbm5vdCByZXVzZSB0aGUgbGFiZWwsIGR1ZSB0byBsaW5nZXJcIik7XG4tXHRcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHRcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0XHRleHBsYWluKFwiYWZ0ZXIgc2xlZXAsIGNhbiByZXVzZVwiKTtcbi1cdFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcbi1cdFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHR9XG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IHVzZXItcHJpdmF0ZSBsYWJlbCAoRkxfU19VU0VSKVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCBnZXQgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcIik7XG4rXHRBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgZ2V0IGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcIik7XG4rXHRBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlXCIpO1xuIFxuLVx0ZXhwbGFpbihcImNyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUilcIik7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcImNhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCkpO1xuLVx0ZXhwbGFpbihcImNhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGVcIik7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfRVhDTCwgMCkpO1xuLVx0ZXhwbGFpbihcImNhbiBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcbi1cdGV4cGxhaW4oXCJjaGlsZCBwcm9jZXNzIGNhbiBnZXQgaXQgdG9vLCBidXQgbm90IGFmdGVyIHNldHVpZChub2JvZHkpXCIpO1xuIFx0cGlkID0gZm9yaygpO1xuLVx0aWYgKHBpZCA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwiZm9ya1wiKTtcbitcdEFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coXCJmb3JrIGZhaWxlZFwiKTtcbiBcdGlmICghcGlkKSB7XG4tXHRcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XG4tXHRcdGlmIChzZXR1aWQoVVNIUlRfTUFYKSlcbitcdFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApO1xuK1x0XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJjaGlsZCBmYWlsZWQgdG8gZ2V0IHRoZSB1c2VyLXByaXZhdGUgbGFiZWxcIik7XG4rXG4rXHRcdGlmIChzZXR1aWQoVVNIUlRfTUFYKSkge1xuIFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIltJTkZPXSBza2lwIHNldHVpZCBjaGlsZCB0ZXN0XFxuXCIpO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcbitcdFx0XHRleGl0KDApO1xuK1x0XHR9XG4rXG4rXHRcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbitcdFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJjaGlsZCB1bmV4cGVjdGVkbHkgZ290IHRoZSBsYWJlbCBhZnRlciBzZXR1aWQobm9ib2R5KVwiKTtcbitcdFx0QVNTRVJUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFwiLCBlcnJubyk7XG4gXHRcdGV4aXQoMCk7XG4gXHR9XG4tXHRpZiAod2FpdChcdTAwMjZ3c3RhdHVzKSA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwid2FpdFwiKTtcbi1cdGlmICghV0lGRVhJVEVEKHdzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHdzdGF0dXMpICE9IDApXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcIndhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XCIpO1xuLVxuLVx0ZXhwbGFpbihcImNyZWF0ZSBhIG5ldyBwcm9jZXNzLXByaXZhdGUgbGFiZWwgKEZMX1NfUFJPQ0VTUylcIik7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcImNhbiBnZXQgaXQgYWdhaW5cIik7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCkpO1xuLVx0ZXhwbGFpbihcImNoaWxkIHByb2Nlc3MgY2Fubm90IGNhbiBnZXQgaXRcIik7XG4rXHRBU1NFUlRfRVEocGlkLCB3YWl0KFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXCJ3YWl0IGZhaWxlZFwiKTtcbitcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFwiY2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5XCIpO1xuK1x0QVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKSBUSF9MT0coXCJjaGlsZCByZXBvcnRlZCB1bmV4cGVjdGVkIHJlc3VsdFwiKTtcbitcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuK31cbitcbitURVNUKHByb2Nlc3NfcHJpdmF0ZV9sYWJlbF9zaGFyZSlcbit7XG4rXHRpbnQgZmQsIGVyciwgd3N0YXR1cztcbitcdHBpZF90IHBpZDtcbitcbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwic29ja2V0IGZhaWxlZFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgcHJvY2Vzcy1wcml2YXRlIGxhYmVsIChGTF9TX1BST0NFU1MpXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpblwiKTtcbitcbiBcdHBpZCA9IGZvcmsoKTtcbi1cdGlmIChwaWQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcImZvcmtcIik7XG4rXHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFwiZm9yayBmYWlsZWRcIik7XG4gXHRpZiAoIXBpZCkge1xuLVx0XHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCkpO1xuK1x0XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7XG4rXHRcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiY2hpbGQgdW5leHBlY3RlZGx5IGdvdCB0aGUgcHJvY2Vzcy1wcml2YXRlIGxhYmVsXCIpO1xuK1x0XHRBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbiBcdFx0ZXhpdCgwKTtcbiBcdH1cbi1cdGlmICh3YWl0KFx1MDAyNndzdGF0dXMpID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCJ3YWl0XCIpO1xuLVx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwid2FpdDogdW5leHBlY3RlZCBjaGlsZCByZXN1bHRcIik7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuLXtcbi1cdGludCBjO1xuLVxuLVx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwibHZcIikpICE9IC0xKSB7XG4tXHRcdHN3aXRjaCAoYykge1xuLVx0XHRjYXNlICdsJzpcbi1cdFx0XHRjZmdfbG9uZ19ydW5uaW5nID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAndic6XG4tXHRcdFx0Y2ZnX3ZlcmJvc2UgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdGVycm9yKDEsIDAsIFwiJXM6IHBhcnNlIGVycm9yXCIsIGFyZ3ZbMF0pO1xuLVx0XHR9XG4tXHR9XG4rXHRBU1NFUlRfRVEocGlkLCB3YWl0KFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXCJ3YWl0IGZhaWxlZFwiKTtcbitcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFwiY2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5XCIpO1xuK1x0QVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKSBUSF9MT0coXCJjaGlsZCByZXBvcnRlZCB1bmV4cGVjdGVkIHJlc3VsdFwiKTtcbitcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuIH1cbiBcbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4rVEVTVChjYW5ub3RfcmVuZXdfbm9uX2V4aXN0ZW50X2xhYmVsKVxuIHtcbi1cdGludCBmZDtcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA1LCAyICogKEZMX01JTl9MSU5HRVIgKiAyICsgMSkpO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCByZW5ldyBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCIpO1xuK1x0QVNTRVJUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFwiZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFwiLCBlcnJubyk7XG4rXG4rXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVChjYW5fcmVuZXdfZXhpc3RpbmdfbGFiZWwpXG4re1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA1LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGxhYmVsIGZvciByZW5ldyB2YWxpZGF0aW9uXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA1LCAyICogKEZMX01JTl9MSU5HRVIgKiAyICsgMSkpO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIHJlbmV3IGFuIGV4aXN0aW5nIHZhbGlkIGxhYmVsXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgNSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHRoZSBsYWJlbFwiKTtcbiBcbi1cdHBhcnNlX29wdHMoYXJnYywgYXJndik7XG4rXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVChyZW5ld19sYWJlbF9saW5nZXIpXG4re1xuK1x0LyogUkVORVcgbXVzdCBleHRlbmQgYSBsYWJlbCdzIGxpbmdlciBwZXJpb2Q6IHB1dHRpbmcgYSByZW5ld2VkXG4rXHQgKiBsYWJlbCBhbmQgd2FpdGluZyBvdXQgaXRzIG9yaWdpbmFsIGxpbmdlciB0aW1lIG11c3Qgbm90IGJlXG4rXHQgKiBlbm91Z2ggdG8gYWxsb3cgdGhlIGxhYmVsIHRvIGJlIHJlY3JlYXRlZC5cbitcdCAqL1xuK1x0aW50IGZkLCBlcnI7XG4gXG4gXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA2LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGxhYmVsIHdpdGggRkxfTUlOX0xJTkdFUiBsaW5nZXIgdGltZVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNiwgMiAqIChGTF9NSU5fTElOR0VSICogMiArIDEpKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byByZW5ldyB0aGUgbGFiZWwgdG8gaW5jcmVhc2UgaXRzIGxpbmdlciB0aW1lXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgNik7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHRoZSBsYWJlbFwiKTtcbitcbitcdHNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICsgMSk7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA2LCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgbmV3IGxpbmdlciB0aW1lIG5vdCBvdmVyIHlldFwiKTtcbitcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1QocmVtb3RlX2ZsYWcpXG4re1xuK1x0LyogVGhlIFJFTU9URSBmbGFnLCB1c2VkIGZvciBnZXRzb2Nrb3B0LCBpcyBleHBlY3RlZCB0byByZXRyaWV2ZSB0aGVcbitcdCAqIGxhYmVsIGZyb20gdGhlIGxhdGVzdCByZWNlaXZlZCBoZWFkZXIuXG4rXHQgKi9cbitcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSBmcmVxID0ge1xuK1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4rXHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVNT1RFLFxuK1x0fTtcbitcdHNvY2tsZW5fdCBmcmVxX2xlbiA9IHNpemVvZihmcmVxKTtcbitcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcbitcbitcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xuK1x0dGNwX2Nvbm5lY3QobGlzdGVuZXIsIDcsIFx1MDAyNmNmZCwgXHUwMDI2YWZkKTtcbitcbitcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZmcmVxLCBcdTAwMjZmcmVxX2xlbik7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJnZXRzb2Nrb3B0IHdpdGggSVBWNl9GTF9GX1JFTU9URSBmYWlsZWRcIik7XG4rXHRBU1NFUlRfRVEoNywgbnRvaGwoZnJlcS5mbHJfbGFiZWwpKSBUSF9MT0coXCJ1bmV4cGVjdGVkIHJlbW90ZSBmbG93IGxhYmVsXCIpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGFmZCkpO1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGNmZCkpO1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGxpc3RlbmVyKSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGZsb3dsYWJlbF9jb25zaXN0ZW5jeV9lbmFibGVkKHZvaWQpXG4re1xuK1x0Y2hhciBidWZbMl0gPSB7fTtcbitcdGludCBmZDtcbitcbitcdGZkID0gb3BlbihcIi9wcm9jL3N5cy9uZXQvaXB2Ni9mbG93bGFiZWxfY29uc2lzdGVuY3lcIiwgT19SRE9OTFkpO1xuIFx0aWYgKGZkID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCJzb2NrZXRcIik7XG4rXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0cnVuX3Rlc3RzKGZkKTtcbitcdGlmIChyZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSkgXHUwMDNjIDApXG4rXHRcdGJ1ZlswXSA9ICcxJztcbitcdGNsb3NlKGZkKTtcbiBcbi1cdGlmIChjbG9zZShmZCkpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcImNsb3NlXCIpO1xuK1x0cmV0dXJuIGJ1ZlswXSAhPSAnMCc7XG4rfVxuIFxuLVx0cmV0dXJuIDA7XG4rVEVTVChyZWZsZWN0X2ZsYWcpXG4re1xuK1x0LyogVGhlIFJFRkxFQ1QgZmxhZyBhY3RzIGFzIGEgdHJpZ2dlciB0byB0aGUgUkVQRkxPVyBiaXQuIFdoZW4gUkVQRkxPV1xuK1x0ICogaXMgdHJpZ2dlcmVkIGZvciBhIHNvY2tldCwgaXQgYWRvcHRzIHRoZSBsYWJlbCByZWNlaXZlZCBmcm9tIHRoZVxuK1x0ICogY29ubmVjdGVkIHNvY2tldC5cbitcdCAqL1xuK1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb24gPSB7XG4rXHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcbitcdFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxuK1x0fTtcbitcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X3F1ZXJ5ID0ge1xuK1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4rXHR9O1xuK1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb2ZmID0ge1xuK1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9QVVQsXG4rXHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCxcbitcdH07XG4rXHRzb2NrbGVuX3QgcmVmbGVjdF9xdWVyeV9sZW4gPSBzaXplb2YocmVmbGVjdF9xdWVyeSk7XG4rXHRpbnQgbGlzdGVuZXIsIGNmZCwgYWZkLCBlcnI7XG4rXG4rXHRpZiAoZmxvd2xhYmVsX2NvbnNpc3RlbmN5X2VuYWJsZWQoKSlcbitcdFx0U0tJUChyZXR1cm4sXG4rXHRcdCAgICAgXCJuZXQuaXB2Ni5mbG93bGFiZWxfY29uc2lzdGVuY3kgbXVzdCBiZSAwIChydW4gdmlhIGlwdjZfZmxvd2xhYmVsLnNoKVwiKTtcbitcbitcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xuK1x0ZXJyID0gc2V0c29ja29wdChsaXN0ZW5lciwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXHUwMDI2cmVmbGVjdF9vbiwgc2l6ZW9mKHJlZmxlY3Rfb24pKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBlbmFibGUgUkVGTEVDVCBvbiB0aGUgbGlzdGVuZXJcIik7XG4rXG4rXHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgOCwgXHUwMDI2Y2ZkLCBcdTAwMjZhZmQpO1xuK1xuK1x0ZXJyID0gZ2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlZmxlY3RfcXVlcnksIFx1MDAyNnJlZmxlY3RfcXVlcnlfbGVuKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBxdWVyeSB0aGUgYWNjZXB0ZWQgc29ja2V0J3Mgb3V0Z29pbmcgbGFiZWxcIik7XG4rXHRBU1NFUlRfRVEoOCwgbnRvaGwocmVmbGVjdF9xdWVyeS5mbHJfbGFiZWwpKVxuK1x0XHRUSF9MT0coXCJhY2NlcHRlZCBzb2NrZXQgZGlkIG5vdCByZWZsZWN0IGNsaWVudCdzIGxhYmVsXCIpO1xuK1xuK1x0ZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBkaXNhYmxlIFJFRkxFQ1Qgb24gdGhlIGFjY2VwdGVkIHNvY2tldFwiKTtcbitcbitcdGVyciA9IHNldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7XG4rXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIGRpc2FibGluZyBSRUZMRUNUIHR3aWNlIHRvIGZhaWxcIik7XG4rXHRBU1NFUlRfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFU1JDSCwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShhZmQpKTtcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShjZmQpKTtcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpO1xuIH1cbitcbitURVNUX0hBUk5FU1NfTUFJTlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6Mjk6MjAuODM2ODE1NzM3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkyMjM0NzY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IEFuYWx5emluZyBhIFNlbGZ0ZXN0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaGAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJobW1tLCB0aGF0J3MgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHNlbGZ0ZXN0cyBkaXJlY3RvcnksIHRoYXQncyBub3Qga2VybmVsIGV4ZWN1dGlvbi5cIiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2ssIHRob3VnaCwgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guIFJpZ2h0LCB0aGUgZGlmZiBqdXN0IGNvbmZpcm1zIHRoZSB0d28gZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLlxuXG5TaW5jZSB0aGlzIG1vZGlmaWVzICpvbmx5KiBzZWxmdGVzdHMsIHdoaWNoIGFyZSB1c2VyLXNwYWNlIHByb2dyYW1zIGRlc2lnbmVkIGZvciB0ZXN0aW5nLCBub3QgdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIHdvbid0IHRyaWdnZXIgYW55IG1lYW5pbmdmdWwgZnV6emluZyBvZiB0aGUga2VybmVsIGl0c2VsZi4gTm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRoZXJlLlxuXG5Ob3csIGxldCdzIGdvIGJhY2sgYW5kIGxvb2sgYXQgdGhlIGluc3RydWN0aW9ucywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmeSBzY2VuYXJpb3Mgd2hlcmUgYFdvcnRoRnV6emluZz1mYWxzZWAuIEl0IGxpc3RzIHRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24gY2hhbmdlcywgY29tbWVudHMsIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMsIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHJlcXVpcmluZyBzcGVjaWZpYyBoYXJkd2FyZSwgYW5kIHRlYXJkb3duIGNhbGxiYWNrcy4gSSBkb24ndCBzZWUgc2VsZnRlc3RzIGV4cGxpY2l0bHkgbGlzdGVkLCBidXQgaXQncyBjbGVhciB0aGVzZSBhcmUgdXNlZCB0byB0ZXN0IGtlcm5lbCBmZWF0dXJlcywgbm90IHRvIGV4ZWN1dGUgY29kZSwgYW5kIHRoZXJlZm9yZSBpdCBmYWxscyB3aXRoaW4gdGhlIHNhbWUgc3Bpcml0IG9mIHRoZSBndWlkZWxpbmVzLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIG5vLCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBvbmx5IHRvdWNoZXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaGAgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNgLlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50LiBUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGVzZSB1c2VyLXNwYWNlIHNlbGZ0ZXN0cywgcmVzaWRpbmcgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AsIGFuZCBpdCBpc24ndCBjaGFuZ2luZyBhbnkga2VybmVsIGNvZGUuIFRoaXMgZG9lc24ndCBuZWNlc3NpdGF0ZSBmdXp6aW5nIHRoZSBrZXJuZWwuXG5cblNvLCB0aGUgY29uY2x1c2lvbiBpcyAqKldvcnRoRnV6emluZz1mYWxzZSoqLiBXZSBjYW4gbm93IGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY1NSwiT3V0cHV0VG9rZW5zIjo2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjI5OjI5Ljc1OTE2NjM0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownqt58[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 03:08:30 +0000 UTC FinishedAt: 2026-08-04 03:29: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+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLykgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM4OThlNjllNzgzYmQ5Zjc2MTZkYTg0ZWI1ZWMzZWEwOWQyMDM5OWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDAzOjI5OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxuaW5kZXggY2VlOTVlMjUyYmVlNS4uNGMzZGUzYTI3ODA3YyAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoXG5AQCAtOCw3ICYjNDM7OCw4IEBAXG4gc2V0IC1lXG4gXG4gZWNobyBcJiMzNDtURVNUIG1hbmFnZW1lbnRcJiMzNDtcbi0uL2luX25ldG5zLnNoIC4vaXB2Nl9mbG93bGFiZWxfbWdyXG4mIzQzOy4vaW5fbmV0bnMuc2ggXFxcbiYjNDM7ICBzaCAtYyAmIzM5O3N5c2N0bCAtcSAtdyBuZXQuaXB2Ni5mbG93bGFiZWxfY29uc2lzdGVuY3k9MCBcdTAwMjZcdTAwMjYgLi9pcHY2X2Zsb3dsYWJlbF9tZ3ImIzM5O1xuIFxuIGVjaG8gXCYjMzQ7VEVTVCBkYXRhcGF0aFwmIzM0O1xuIC4vaW5fbmV0bnMuc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcbmluZGV4IGFmOTViNDhhY2VhOTAuLjQ4MjkyMWY3ZWUxMTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xuQEAgLTYsNiAmIzQzOzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJyb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbkBAIC0xOSwzMSAmIzQzOzIwLDE5IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuIFxuIC8qIHVhcGkvZ2xpYmMgd2VpcmRuZXNzIG1heSBsZWF2ZSB0aGlzIHVuZGVmaW5lZCAqL1xuICNpZm5kZWYgSVBWNl9GTE9XTEFCRUxfTUdSXG4gI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1JcdDMyXG4gI2VuZGlmXG4mIzQzOyNpZm5kZWYgSVBWNl9GTE9XSU5GT19TRU5EXG4mIzQzOyNkZWZpbmUgSVBWNl9GTE9XSU5GT19TRU5EXHQzM1xuJiM0MzsjZW5kaWZcbiBcbiAvKiBmcm9tIG5ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyAqL1xuICNkZWZpbmUgRkxfTUlOX0xJTkdFUlx0XHQ2XG4tXG4tI2RlZmluZSBleHBsYWluKHgpXHRcdFx0XHRcdFx0XHRcXFxuLVx0ZG8geyBpZiAoY2ZnX3ZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCBcJiMzNDsgICAgICAgXCYjMzQ7IHggXCYjMzQ7XFxuXCYjMzQ7KTsgfSB3aGlsZSAoMClcbi1cbi0jZGVmaW5lIF9fZXhwZWN0KHgpXHRcdFx0XHRcdFx0XHRcXFxuLVx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRpZiAoISh4KSlcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtbT0tdICAgXCYjMzQ7ICN4IFwmIzM0O1xcblwmIzM0Oyk7XHRcdFxcXG4tXHRcdGVsc2VcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7W0VSUl0gIFwmIzM0OyAjeCBcJiMzNDsgKGxpbmUgJWQpXCYjMzQ7LCBfX0xJTkVfXyk7IFxcXG4tXHR9IHdoaWxlICgwKVxuLVxuLSNkZWZpbmUgZXhwZWN0X3Bhc3MoeClcdF9fZXhwZWN0KHgpXG4tI2RlZmluZSBleHBlY3RfZmFpbCh4KVx0X19leHBlY3QoISh4KSlcbi1cbi1zdGF0aWMgYm9vbCBjZmdfbG9uZ19ydW5uaW5nO1xuLXN0YXRpYyBib29sIGNmZ192ZXJib3NlO1xuJiM0MzsjZGVmaW5lIEZMX01BWF9MSU5HRVJcdDE1MFxuIFxuIHN0YXRpYyBpbnQgZmxvd2xhYmVsX2dldChpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50OF90IHNoYXJlLCB1aW50MTZfdCBmbGFncylcbiB7XG5AQCAtNzEsMTI5ICYjNDM7NjAsNDA2IEBAIHN0YXRpYyBpbnQgZmxvd2xhYmVsX3B1dChpbnQgZmQsIHVpbnQzMl90IGxhYmVsKVxuIFx0cmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydW5fdGVzdHMoaW50IGZkKVxuJiM0MztzdGF0aWMgaW50IGZsb3dsYWJlbF9yZW5ldyhpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50MTZfdCBsaW5nZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVxID0ge1xuJiM0MztcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsXG4mIzQzO1x0XHQuZmxyX2xhYmVsID0gaHRvbmwobGFiZWwpLFxuJiM0MztcdFx0LmZscl9saW5nZXIgPSBsaW5nZXIsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luNiBsb29wYmFja19hZGRyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSB7XG4mIzQzO1x0XHQuc2luNl9mYW1pbHlcdD0gQUZfSU5FVDYsXG4mIzQzO1x0XHQuc2luNl9hZGRyXHQ9IElONkFERFJfTE9PUEJBQ0tfSU5JVCxcbiYjNDM7XHRcdC5zaW42X3BvcnRcdD0gaHRvbnMoODg4OCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFkZHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdGNwX2xpc3Rlbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0gbG9vcGJhY2tfYWRkcigpO1xuJiM0MztcdGNvbnN0IGludCBvbmUgPSAxO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTtcbiYjNDM7XHRpZiAoZmQgPT0gLTEpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7c29ja2V0IGxpc3RlbmVyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzZXRzb2Nrb3B0IFNPX1JFVVNFQUREUlwmIzM0Oyk7XG4mIzQzO1x0aWYgKGJpbmQoZmQsICh2b2lkICopXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtiaW5kXCYjMzQ7KTtcbiYjNDM7XHRpZiAobGlzdGVuKGZkLCAxKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtsaXN0ZW5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRjcF9jb25uZWN0KGludCBsaXN0ZW5lciwgdWludDMyX3QgZmxvd2xhYmVsLCBpbnQgKmNsaWVudCwgaW50ICphY2NlcHRlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkciA9IGxvb3BiYWNrX2FkZHIoKTtcbiYjNDM7XHRjb25zdCBpbnQgb25lID0gMTtcbiYjNDM7XHRpbnQgY2ZkLCBhZmQ7XG4mIzQzO1xuJiM0MztcdGNmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApO1xuJiM0MztcdGlmIChjZmQgPT0gLTEpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7c29ja2V0IGNsaWVudFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChmbG93bGFiZWxfZ2V0KGNmZCwgZmxvd2xhYmVsLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7Zmxvd2xhYmVsX2dldFwmIzM0Oyk7XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoY2ZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XSU5GT19TRU5ELCBcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzZXRzb2Nrb3B0IGZsb3dpbmZvX3NlbmRcJiMzNDspO1xuJiM0MztcdGFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7XG4mIzQzO1xuJiM0MztcdGlmIChjb25uZWN0KGNmZCwgKHZvaWQgKilcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2Nvbm5lY3RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRhZmQgPSBhY2NlcHQobGlzdGVuZXIsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmIChhZmQgPT0gLTEpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7YWNjZXB0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZsb3dsYWJlbF9wdXQoY2ZkLCBmbG93bGFiZWwpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2Zsb3dsYWJlbF9wdXRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQqY2xpZW50ID0gY2ZkO1xuJiM0MztcdCphY2NlcHRlZCA9IGFmZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChjYW5ub3RfZ2V0X25vbl9leGlzdGVudF9sYWJlbClcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDksIElQVjZfRkxfU19BTlksIDApO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIGdldCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoRU5PRU5ULCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVOT0VOVCwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMTApO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIHB1dCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFwmIzM0OywgZXJybm8pO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChjYW5ub3RfY3JlYXRlX2xhYmVsX2dyZWF0ZXJfdGhhbl8yMF9iaXRzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMHgxRkZGRkYsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIGxhYmVsIFx1MDAzZSAyMCBiaXRzIHRvIGJlIHJlamVjdGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVJTlZBTCwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGNhbl9jcmVhdGVfYW5kX2dldF9hbmRfcHV0X2xhYmVscylcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIChGTF9GX0NSRUFURSlcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCB0aGUgbGFiZWwgd2l0aG91dCBGTF9GX0NSRUFURVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gZ2V0IGl0IGFnYWluIHdpdGggY3JlYXRlIGZsYWcgc2V0LCB0b29cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEZMX0ZfRVhDTCB0byByZWplY3QgYW4gYWxyZWFkeS1leGlzdGluZyBsYWJlbFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKEVFWElTVCwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFRVhJU1QsIGdvdCAlZFwmIzM0OywgZXJybm8pO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCBmaXJzdCByZWZlcmVuY2VcJiMzNDspO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcHV0IHNlY29uZCByZWZlcmVuY2VcJiMzNDspO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcHV0IHRoaXJkIHJlZmVyZW5jZVwmIzM0Oyk7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgZm91cnRoIHB1dCB0byBmYWlsLCBubyByZWZlcmVuY2VzIGxlZnRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFU1JDSCwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGV4Y2x1c2l2ZV9sYWJlbF9zaGFyZSlcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTClcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCByZXVzZSBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVQRVJNLCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJldXNlIGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwgdG9vXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFwmIzM0OywgZXJybm8pO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAyKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgZXhjbHVzaXZlIGxhYmVsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgZHVlIHRvIGxpbmdlclwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVQRVJNLCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCByZXVzZSB0byBzdWNjZWVkIGFmdGVyIGxpbmdlclwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKHVzZXJfcHJpdmF0ZV9sYWJlbF9zaGFyZSlcbiB7XG4tXHRpbnQgd3N0YXR1cztcbiYjNDM7XHRpbnQgZmQsIGVyciwgd3N0YXR1cztcbiBcdHBpZF90IHBpZDtcbiBcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBub24tZXhpc3RlbnQgbGFiZWxcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCkpO1xuLVxuLVx0ZXhwbGFpbihcJiMzNDtjYW5ub3QgcHV0IG5vbi1leGlzdGVudCBsYWJlbFwmIzM0Oyk7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfcHV0KGZkLCAxKSk7XG4tXG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBjcmVhdGUgbGFiZWwgZ3JlYXRlciB0aGFuIDIwIGJpdHNcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMHgxRkZGRkYsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cbi1cdGV4cGxhaW4oXCYjMzQ7Y3JlYXRlIGEgbmV3IGxhYmVsIChGTF9GX0NSRUFURSlcJiMzNDspO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gZ2V0IHRoZSBsYWJlbCAod2l0aG91dCBGTF9GX0NSRUFURSlcJiMzNDspO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gZ2V0IGl0IGFnYWluIHdpdGggY3JlYXRlIGZsYWcgc2V0LCB0b29cJiMzNDspO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW5ub3QgZ2V0IGl0IGFnYWluIHdpdGggdGhlIGV4Y2x1c2l2ZSAoRkxfRkxfRVhDTCkgZmxhZ1wmIzM0Oyk7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLFxuLVx0XHRcdFx0XHQgSVBWNl9GTF9GX0NSRUFURSB8IElQVjZfRkxfRl9FWENMKSk7XG4tXHRleHBsYWluKFwmIzM0O2NhbiBub3cgcHV0IGV4YWN0bHkgdGhyZWUgcmVmZXJlbmNlc1wmIzM0Oyk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfcHV0KGZkLCAxKSk7XG4tXG4tXHRleHBsYWluKFwmIzM0O2NyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTClcJiMzNDspO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiBpbiBub24tZXhjbHVzaXZlIG1vZGVcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiBpbiBleGNsdXNpdmUgbW9kZSBlaXRoZXJcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDIpKTtcbi1cbi1cdGlmIChjZmdfbG9uZ19ydW5uaW5nKSB7XG4tXHRcdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IHJldXNlIHRoZSBsYWJlbCwgZHVlIHRvIGxpbmdlclwmIzM0Oyk7XG4tXHRcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHRcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0XHRleHBsYWluKFwmIzM0O2FmdGVyIHNsZWVwLCBjYW4gcmV1c2VcJiMzNDspO1xuLVx0XHRzbGVlcChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKTtcbi1cdFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHR9XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgZ2V0IGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFwmIzM0OywgZXJybm8pO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfRVhDTCwgMCk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgZ2V0IGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGVcJiMzNDspO1xuIFxuLVx0ZXhwbGFpbihcJiMzNDtjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiBpbiBleGNsdXNpdmUgbW9kZVwmIzM0Oyk7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfRVhDTCwgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVwmIzM0Oyk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjaGlsZCBwcm9jZXNzIGNhbiBnZXQgaXQgdG9vLCBidXQgbm90IGFmdGVyIHNldHVpZChub2JvZHkpXCYjMzQ7KTtcbiBcdHBpZCA9IGZvcmsoKTtcbi1cdGlmIChwaWQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtmb3JrXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFwmIzM0O2ZvcmsgZmFpbGVkXCYjMzQ7KTtcbiBcdGlmICghcGlkKSB7XG4tXHRcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XG4tXHRcdGlmIChzZXR1aWQoVVNIUlRfTUFYKSlcbiYjNDM7XHRcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbiYjNDM7XHRcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtjaGlsZCBmYWlsZWQgdG8gZ2V0IHRoZSB1c2VyLXByaXZhdGUgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzZXR1aWQoVVNIUlRfTUFYKSkge1xuIFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtbSU5GT10gc2tpcCBzZXR1aWQgY2hpbGQgdGVzdFxcblwmIzM0Oyk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xuJiM0MztcdFx0XHRleGl0KDApO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbiYjNDM7XHRcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2NoaWxkIHVuZXhwZWN0ZWRseSBnb3QgdGhlIGxhYmVsIGFmdGVyIHNldHVpZChub2JvZHkpXCYjMzQ7KTtcbiYjNDM7XHRcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4gXHRcdGV4aXQoMCk7XG4gXHR9XG4tXHRpZiAod2FpdChcdTAwMjZ3c3RhdHVzKSA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3dhaXRcJiMzNDspO1xuLVx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3dhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XCYjMzQ7KTtcbi1cbi1cdGV4cGxhaW4oXCYjMzQ7Y3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKVwmIzM0Oyk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gZ2V0IGl0IGFnYWluXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XG4tXHRleHBsYWluKFwmIzM0O2NoaWxkIHByb2Nlc3MgY2Fubm90IGNhbiBnZXQgaXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShwaWQsIHdhaXQoXHUwMDI2d3N0YXR1cykpIFRIX0xPRyhcJiMzNDt3YWl0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coXCYjMzQ7Y2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpIFRIX0xPRyhcJiMzNDtjaGlsZCByZXBvcnRlZCB1bmV4cGVjdGVkIHJlc3VsdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKHByb2Nlc3NfcHJpdmF0ZV9sYWJlbF9zaGFyZSlcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyLCB3c3RhdHVzO1xuJiM0MztcdHBpZF90IHBpZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgcHJvY2Vzcy1wcml2YXRlIGxhYmVsIChGTF9TX1BST0NFU1MpXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gZ2V0IGl0IGFnYWluXCYjMzQ7KTtcbiYjNDM7XG4gXHRwaWQgPSBmb3JrKCk7XG4tXHRpZiAocGlkID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7Zm9ya1wmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX05FKC0xLCBwaWQpIFRIX0xPRyhcJiMzNDtmb3JrIGZhaWxlZFwmIzM0Oyk7XG4gXHRpZiAoIXBpZCkge1xuLVx0XHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCkpO1xuJiM0MztcdFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApO1xuJiM0MztcdFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7Y2hpbGQgdW5leHBlY3RlZGx5IGdvdCB0aGUgcHJvY2Vzcy1wcml2YXRlIGxhYmVsXCYjMzQ7KTtcbiYjNDM7XHRcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4gXHRcdGV4aXQoMCk7XG4gXHR9XG4tXHRpZiAod2FpdChcdTAwMjZ3c3RhdHVzKSA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3dhaXRcJiMzNDspO1xuLVx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3dhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XCYjMzQ7KTtcbi19XG4tXG4tc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4te1xuLVx0aW50IGM7XG4tXG4tXHR3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgXCYjMzQ7bHZcJiMzNDspKSAhPSAtMSkge1xuLVx0XHRzd2l0Y2ggKGMpIHtcbi1cdFx0Y2FzZSAmIzM5O2wmIzM5Ozpcbi1cdFx0XHRjZmdfbG9uZ19ydW5uaW5nID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O3YmIzM5Ozpcbi1cdFx0XHRjZmdfdmVyYm9zZSA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7JXM6IHBhcnNlIGVycm9yXCYjMzQ7LCBhcmd2WzBdKTtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdEFTU0VSVF9FUShwaWQsIHdhaXQoXHUwMDI2d3N0YXR1cykpIFRIX0xPRyhcJiMzNDt3YWl0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coXCYjMzQ7Y2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpIFRIX0xPRyhcJiMzNDtjaGlsZCByZXBvcnRlZCB1bmV4cGVjdGVkIHJlc3VsdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuIH1cbiBcbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4mIzQzO1RFU1QoY2Fubm90X3JlbmV3X25vbl9leGlzdGVudF9sYWJlbClcbiB7XG4tXHRpbnQgZmQ7XG4mIzQzO1x0aW50IGZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA1LCAyICogKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpKTtcbiYjNDM7XHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCByZW5ldyBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFwmIzM0OywgZXJybm8pO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChjYW5fcmVuZXdfZXhpc3RpbmdfbGFiZWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA1LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgZm9yIHJlbmV3IHZhbGlkYXRpb25cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDUsIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSkpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcmVuZXcgYW4gZXhpc3RpbmcgdmFsaWQgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA1KTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWxcJiMzNDspO1xuIFxuLVx0cGFyc2Vfb3B0cyhhcmdjLCBhcmd2KTtcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChyZW5ld19sYWJlbF9saW5nZXIpXG4mIzQzO3tcbiYjNDM7XHQvKiBSRU5FVyBtdXN0IGV4dGVuZCBhIGxhYmVsJiMzOTtzIGxpbmdlciBwZXJpb2Q6IHB1dHRpbmcgYSByZW5ld2VkXG4mIzQzO1x0ICogbGFiZWwgYW5kIHdhaXRpbmcgb3V0IGl0cyBvcmlnaW5hbCBsaW5nZXIgdGltZSBtdXN0IG5vdCBiZVxuJiM0MztcdCAqIGVub3VnaCB0byBhbGxvdyB0aGUgbGFiZWwgdG8gYmUgcmVjcmVhdGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGludCBmZCwgZXJyO1xuIFxuIFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA2LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgd2l0aCBGTF9NSU5fTElOR0VSIGxpbmdlciB0aW1lXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA2LCAyICogKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHJlbmV3IHRoZSBsYWJlbCB0byBpbmNyZWFzZSBpdHMgbGluZ2VyIHRpbWVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA2KTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzbGVlcChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgbmV3IGxpbmdlciB0aW1lIG5vdCBvdmVyIHlldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVQRVJNLCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QocmVtb3RlX2ZsYWcpXG4mIzQzO3tcbiYjNDM7XHQvKiBUaGUgUkVNT1RFIGZsYWcsIHVzZWQgZm9yIGdldHNvY2tvcHQsIGlzIGV4cGVjdGVkIHRvIHJldHJpZXZlIHRoZVxuJiM0MztcdCAqIGxhYmVsIGZyb20gdGhlIGxhdGVzdCByZWNlaXZlZCBoZWFkZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIGZyZXEgPSB7XG4mIzQzO1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4mIzQzO1x0XHQuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFTU9URSxcbiYjNDM7XHR9O1xuJiM0MztcdHNvY2tsZW5fdCBmcmVxX2xlbiA9IHNpemVvZihmcmVxKTtcbiYjNDM7XHRpbnQgbGlzdGVuZXIsIGNmZCwgYWZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xuJiM0MztcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA3LCBcdTAwMjZjZmQsIFx1MDAyNmFmZCk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZmcmVxLCBcdTAwMjZmcmVxX2xlbik7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2dldHNvY2tvcHQgd2l0aCBJUFY2X0ZMX0ZfUkVNT1RFIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKDcsIG50b2hsKGZyZXEuZmxyX2xhYmVsKSkgVEhfTE9HKFwmIzM0O3VuZXhwZWN0ZWQgcmVtb3RlIGZsb3cgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoYWZkKSk7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGNsb3NlKGNmZCkpO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBmbG93bGFiZWxfY29uc2lzdGVuY3lfZW5hYmxlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMl0gPSB7fTtcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYvZmxvd2xhYmVsX2NvbnNpc3RlbmN5XCYjMzQ7LCBPX1JET05MWSk7XG4gXHRpZiAoZmQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzb2NrZXRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRydW5fdGVzdHMoZmQpO1xuJiM0MztcdGlmIChyZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSkgXHUwMDNjIDApXG4mIzQzO1x0XHRidWZbMF0gPSAmIzM5OzEmIzM5OztcbiYjNDM7XHRjbG9zZShmZCk7XG4gXG4tXHRpZiAoY2xvc2UoZmQpKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7Y2xvc2VcJiMzNDspO1xuJiM0MztcdHJldHVybiBidWZbMF0gIT0gJiMzOTswJiMzOTs7XG4mIzQzO31cbiBcbi1cdHJldHVybiAwO1xuJiM0MztURVNUKHJlZmxlY3RfZmxhZylcbiYjNDM7e1xuJiM0MztcdC8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1dcbiYjNDM7XHQgKiBpcyB0cmlnZ2VyZWQgZm9yIGEgc29ja2V0LCBpdCBhZG9wdHMgdGhlIGxhYmVsIHJlY2VpdmVkIGZyb20gdGhlXG4mIzQzO1x0ICogY29ubmVjdGVkIHNvY2tldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vbiA9IHtcbiYjNDM7XHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcbiYjNDM7XHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X3F1ZXJ5ID0ge1xuJiM0MztcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb2ZmID0ge1xuJiM0MztcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUFVULFxuJiM0MztcdFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxuJiM0MztcdH07XG4mIzQzO1x0c29ja2xlbl90IHJlZmxlY3RfcXVlcnlfbGVuID0gc2l6ZW9mKHJlZmxlY3RfcXVlcnkpO1xuJiM0MztcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGZsb3dsYWJlbF9jb25zaXN0ZW5jeV9lbmFibGVkKCkpXG4mIzQzO1x0XHRTS0lQKHJldHVybixcbiYjNDM7XHRcdCAgICAgXCYjMzQ7bmV0LmlwdjYuZmxvd2xhYmVsX2NvbnNpc3RlbmN5IG11c3QgYmUgMCAocnVuIHZpYSBpcHY2X2Zsb3dsYWJlbC5zaClcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRsaXN0ZW5lciA9IHRjcF9saXN0ZW4oKTtcbiYjNDM7XHRlcnIgPSBzZXRzb2Nrb3B0KGxpc3RlbmVyLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZWZsZWN0X29uLCBzaXplb2YocmVmbGVjdF9vbikpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIFJFRkxFQ1Qgb24gdGhlIGxpc3RlbmVyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0dGNwX2Nvbm5lY3QobGlzdGVuZXIsIDgsIFx1MDAyNmNmZCwgXHUwMDI2YWZkKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZ2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlZmxlY3RfcXVlcnksIFx1MDAyNnJlZmxlY3RfcXVlcnlfbGVuKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHF1ZXJ5IHRoZSBhY2NlcHRlZCBzb2NrZXQmIzM5O3Mgb3V0Z29pbmcgbGFiZWxcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUSg4LCBudG9obChyZWZsZWN0X3F1ZXJ5LmZscl9sYWJlbCkpXG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7YWNjZXB0ZWQgc29ja2V0IGRpZCBub3QgcmVmbGVjdCBjbGllbnQmIzM5O3MgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXHUwMDI2cmVmbGVjdF9vZmYsIHNpemVvZihyZWZsZWN0X29mZikpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBSRUZMRUNUIG9uIHRoZSBhY2NlcHRlZCBzb2NrZXRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXHUwMDI2cmVmbGVjdF9vZmYsIHNpemVvZihyZWZsZWN0X29mZikpO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIGRpc2FibGluZyBSRUZMRUNUIHR3aWNlIHRvIGZhaWxcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFU1JDSCwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShhZmQpKTtcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoY2ZkKSk7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGNsb3NlKGxpc3RlbmVyKSk7XG4gfVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMzoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzg5OGU2OWU3ODNiZDlmNzYxNmRhODRlYjVlYzNlYTA5ZDIwMzk5ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDM6Mjk6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2gKaW5kZXggY2VlOTVlMjUyYmVlNS4uNGMzZGUzYTI3ODA3YyAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaApAQCAtOCw3ICYjNDM7OCw4IEBACiBzZXQgLWUKIAogZWNobyAmIzM0O1RFU1QgbWFuYWdlbWVudCYjMzQ7Ci0uL2luX25ldG5zLnNoIC4vaXB2Nl9mbG93bGFiZWxfbWdyCiYjNDM7Li9pbl9uZXRucy5zaCBcCiYjNDM7ICBzaCAtYyAmIzM5O3N5c2N0bCAtcSAtdyBuZXQuaXB2Ni5mbG93bGFiZWxfY29uc2lzdGVuY3k9MCAmYW1wOyZhbXA7IC4vaXB2Nl9mbG93bGFiZWxfbWdyJiMzOTsKIAogZWNobyAmIzM0O1RFU1QgZGF0YXBhdGgmIzM0OwogLi9pbl9uZXRucy5zaCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMKaW5kZXggYWY5NWI0OGFjZWE5MC4uNDgyOTIxZjdlZTExOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYwpAQCAtNiw2ICYjNDM7Niw3IEBACiAjaW5jbHVkZSAmbHQ7YXJwYS9pbmV0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7ZXJyb3IuaCZndDsKICNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2luNi5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKQEAgLTE5LDMxICYjNDM7MjAsMTkgQEAKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiAKIC8qIHVhcGkvZ2xpYmMgd2VpcmRuZXNzIG1heSBsZWF2ZSB0aGlzIHVuZGVmaW5lZCAqLwogI2lmbmRlZiBJUFY2X0ZMT1dMQUJFTF9NR1IKICNkZWZpbmUgSVBWNl9GTE9XTEFCRUxfTUdSCTMyCiAjZW5kaWYKJiM0MzsjaWZuZGVmIElQVjZfRkxPV0lORk9fU0VORAomIzQzOyNkZWZpbmUgSVBWNl9GTE9XSU5GT19TRU5ECTMzCiYjNDM7I2VuZGlmCiAKIC8qIGZyb20gbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jICovCiAjZGVmaW5lIEZMX01JTl9MSU5HRVIJCTYKLQotI2RlZmluZSBleHBsYWluKHgpCQkJCQkJCVwKLQlkbyB7IGlmIChjZmdfdmVyYm9zZSkgZnByaW50ZihzdGRlcnIsICYjMzQ7ICAgICAgICYjMzQ7IHggJiMzNDtcbiYjMzQ7KTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfX2V4cGVjdCh4KQkJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAoISh4KSkJCQkJCQlcCi0JCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtbT0tdICAgJiMzNDsgI3ggJiMzNDtcbiYjMzQ7KTsJCVwKLQkJZWxzZQkJCQkJCQlcCi0JCQllcnJvcigxLCAwLCAmIzM0O1tFUlJdICAmIzM0OyAjeCAmIzM0OyAobGluZSAlZCkmIzM0OywgX19MSU5FX18pOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBleHBlY3RfcGFzcyh4KQlfX2V4cGVjdCh4KQotI2RlZmluZSBleHBlY3RfZmFpbCh4KQlfX2V4cGVjdCghKHgpKQotCi1zdGF0aWMgYm9vbCBjZmdfbG9uZ19ydW5uaW5nOwotc3RhdGljIGJvb2wgY2ZnX3ZlcmJvc2U7CiYjNDM7I2RlZmluZSBGTF9NQVhfTElOR0VSCTE1MAogCiBzdGF0aWMgaW50IGZsb3dsYWJlbF9nZXQoaW50IGZkLCB1aW50MzJfdCBsYWJlbCwgdWludDhfdCBzaGFyZSwgdWludDE2X3QgZmxhZ3MpCiB7CkBAIC03MSwxMjkgJiM0Mzs2MCw0MDYgQEAgc3RhdGljIGludCBmbG93bGFiZWxfcHV0KGludCBmZCwgdWludDMyX3QgbGFiZWwpCiAJcmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsICZhbXA7cmVxLCBzaXplb2YocmVxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ1bl90ZXN0cyhpbnQgZmQpCiYjNDM7c3RhdGljIGludCBmbG93bGFiZWxfcmVuZXcoaW50IGZkLCB1aW50MzJfdCBsYWJlbCwgdWludDE2X3QgbGluZ2VyKQomIzQzO3sKJiM0MzsJc3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHsKJiM0MzsJCS5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1JFTkVXLAomIzQzOwkJLmZscl9sYWJlbCA9IGh0b25sKGxhYmVsKSwKJiM0MzsJCS5mbHJfbGluZ2VyID0gbGluZ2VyLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gc2V0c29ja29wdChmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgJmFtcDtyZXEsIHNpemVvZihyZXEpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbjYgbG9vcGJhY2tfYWRkcih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0gewomIzQzOwkJLnNpbjZfZmFtaWx5CT0gQUZfSU5FVDYsCiYjNDM7CQkuc2luNl9hZGRyCT0gSU42QUREUl9MT09QQkFDS19JTklULAomIzQzOwkJLnNpbjZfcG9ydAk9IGh0b25zKDg4ODgpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gYWRkcjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0Y3BfbGlzdGVuKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSBsb29wYmFja19hZGRyKCk7CiYjNDM7CWNvbnN0IGludCBvbmUgPSAxOwomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7CiYjNDM7CWlmIChmZCA9PSAtMSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O3NvY2tldCBsaXN0ZW5lciYjMzQ7KTsKJiM0MzsJaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJmFtcDtvbmUsIHNpemVvZihvbmUpKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O3NldHNvY2tvcHQgU09fUkVVU0VBRERSJiMzNDspOwomIzQzOwlpZiAoYmluZChmZCwgKHZvaWQgKikmYW1wO2FkZHIsIHNpemVvZihhZGRyKSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtiaW5kJiMzNDspOwomIzQzOwlpZiAobGlzdGVuKGZkLCAxKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O2xpc3RlbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0Y3BfY29ubmVjdChpbnQgbGlzdGVuZXIsIHVpbnQzMl90IGZsb3dsYWJlbCwgaW50ICpjbGllbnQsIGludCAqYWNjZXB0ZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSBsb29wYmFja19hZGRyKCk7CiYjNDM7CWNvbnN0IGludCBvbmUgPSAxOwomIzQzOwlpbnQgY2ZkLCBhZmQ7CiYjNDM7CiYjNDM7CWNmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApOwomIzQzOwlpZiAoY2ZkID09IC0xKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7c29ja2V0IGNsaWVudCYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKGZsb3dsYWJlbF9nZXQoY2ZkLCBmbG93bGFiZWwsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O2Zsb3dsYWJlbF9nZXQmIzM0Oyk7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGNmZCwgU09MX0lQVjYsIElQVjZfRkxPV0lORk9fU0VORCwgJmFtcDtvbmUsIHNpemVvZihvbmUpKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O3NldHNvY2tvcHQgZmxvd2luZm9fc2VuZCYjMzQ7KTsKJiM0MzsJYWRkci5zaW42X2Zsb3dpbmZvID0gaHRvbmwoZmxvd2xhYmVsKTsKJiM0MzsKJiM0MzsJaWYgKGNvbm5lY3QoY2ZkLCAodm9pZCAqKSZhbXA7YWRkciwgc2l6ZW9mKGFkZHIpKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O2Nvbm5lY3QmIzM0Oyk7CiYjNDM7CiYjNDM7CWFmZCA9IGFjY2VwdChsaXN0ZW5lciwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmIChhZmQgPT0gLTEpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDthY2NlcHQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChmbG93bGFiZWxfcHV0KGNmZCwgZmxvd2xhYmVsKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O2Zsb3dsYWJlbF9wdXQmIzM0Oyk7CiYjNDM7CiYjNDM7CSpjbGllbnQgPSBjZmQ7CiYjNDM7CSphY2NlcHRlZCA9IGFmZDsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChjYW5ub3RfZ2V0X25vbl9leGlzdGVudF9sYWJlbCkKJiM0Mzt7CiYjNDM7CWludCBmZCwgZXJyOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgOSwgSVBWNl9GTF9TX0FOWSwgMCk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgZ2V0IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShFTk9FTlQsIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFTk9FTlQsIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShmZCkpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxMCk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcHV0IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVTUkNILCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChjYW5ub3RfY3JlYXRlX2xhYmVsX2dyZWF0ZXJfdGhhbl8yMF9iaXRzKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgbGFiZWwgJmd0OyAyMCBiaXRzIHRvIGJlIHJlamVjdGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoRUlOVkFMLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRUlOVkFMLCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChjYW5fY3JlYXRlX2FuZF9nZXRfYW5kX3B1dF9sYWJlbHMpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVycjsKJiM0MzsKJiM0MzsJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIChGTF9GX0NSRUFURSkmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gZ2V0IHRoZSBsYWJlbCB3aXRob3V0IEZMX0ZfQ1JFQVRFJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIEZMX0ZfRVhDTCB0byByZWplY3QgYW4gYWxyZWFkeS1leGlzdGluZyBsYWJlbCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKEVFWElTVCwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVFWElTVCwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBwdXQgZmlyc3QgcmVmZXJlbmNlJiMzNDspOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCBzZWNvbmQgcmVmZXJlbmNlJiMzNDspOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGlyZCByZWZlcmVuY2UmIzM0Oyk7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIGZvdXJ0aCBwdXQgdG8gZmFpbCwgbm8gcmVmZXJlbmNlcyBsZWZ0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFU1JDSCwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1QoZXhjbHVzaXZlX2xhYmVsX3NoYXJlKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJQVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCByZXVzZSBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJQVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCByZXVzZSBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsIHRvbyYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDIpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gcHV0IHRoZSBleGNsdXNpdmUgbGFiZWwmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIHJldXNlIHRvIGZhaWwsIGR1ZSB0byBsaW5nZXImIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVQRVJNLCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwlzbGVlcChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIHJldXNlIHRvIHN1Y2NlZWQgYWZ0ZXIgbGluZ2VyJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVCh1c2VyX3ByaXZhdGVfbGFiZWxfc2hhcmUpCiB7Ci0JaW50IHdzdGF0dXM7CiYjNDM7CWludCBmZCwgZXJyLCB3c3RhdHVzOwogCXBpZF90IHBpZDsKIAotCWV4cGxhaW4oJiMzNDtjYW5ub3QgZ2V0IG5vbi1leGlzdGVudCBsYWJlbCYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7Ci0KLQlleHBsYWluKCYjMzQ7Y2Fubm90IHB1dCBub24tZXhpc3RlbnQgbGFiZWwmIzM0Oyk7Ci0JZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpOwotCi0JZXhwbGFpbigmIzM0O2Nhbm5vdCBjcmVhdGUgbGFiZWwgZ3JlYXRlciB0aGFuIDIwIGJpdHMmIzM0Oyk7Ci0JZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMHgxRkZGRkYsIElQVjZfRkxfU19BTlksCi0JCQkJICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0KLQlleHBsYWluKCYjMzQ7Y3JlYXRlIGEgbmV3IGxhYmVsIChGTF9GX0NSRUFURSkmIzM0Oyk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGxhaW4oJiMzNDtjYW4gZ2V0IHRoZSBsYWJlbCAod2l0aG91dCBGTF9GX0NSRUFURSkmIzM0Oyk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCkpOwotCWV4cGxhaW4oJiMzNDtjYW4gZ2V0IGl0IGFnYWluIHdpdGggY3JlYXRlIGZsYWcgc2V0LCB0b28mIzM0Oyk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGxhaW4oJiMzNDtjYW5ub3QgZ2V0IGl0IGFnYWluIHdpdGggdGhlIGV4Y2x1c2l2ZSAoRkxfRkxfRVhDTCkgZmxhZyYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLAotCQkJCQkgSVBWNl9GTF9GX0NSRUFURSB8IElQVjZfRkxfRl9FWENMKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBub3cgcHV0IGV4YWN0bHkgdGhyZWUgcmVmZXJlbmNlcyYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfcHV0KGZkLCAxKSk7Ci0KLQlleHBsYWluKCYjMzQ7Y3JlYXRlIGEgbmV3IGV4Y2x1c2l2ZSBsYWJlbCAoRkxfU19FWENMKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGxhaW4oJiMzNDtjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZSYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCAgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGxhaW4oJiMzNDtjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlIGVpdGhlciYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDIpKTsKLQotCWlmIChjZmdfbG9uZ19ydW5uaW5nKSB7Ci0JCWV4cGxhaW4oJiMzNDtjYW5ub3QgcmV1c2UgdGhlIGxhYmVsLCBkdWUgdG8gbGluZ2VyJiMzNDspOwotCQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLAotCQkJCQkgIElQVjZfRkxfRl9DUkVBVEUpKTsKLQkJZXhwbGFpbigmIzM0O2FmdGVyIHNsZWVwLCBjYW4gcmV1c2UmIzM0Oyk7Ci0JCXNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpOwotCQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLAotCQkJCQkgIElQVjZfRkxfRl9DUkVBVEUpKTsKLQl9CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfQU5ZLCAwKTsKJiM0MzsJQVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCBnZXQgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVQRVJNLCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfRVhDTCwgMCk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgZ2V0IGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVQRVJNLCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlJiMzNDspOwogCi0JZXhwbGFpbigmIzM0O2NyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUikmIzM0Oyk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpKTsKLQlleHBsYWluKCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiBpbiBub24tZXhjbHVzaXZlIG1vZGUmIzM0Oyk7Ci0JZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCkpOwotCWV4cGxhaW4oJiMzNDtjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NoaWxkIHByb2Nlc3MgY2FuIGdldCBpdCB0b28sIGJ1dCBub3QgYWZ0ZXIgc2V0dWlkKG5vYm9keSkmIzM0Oyk7CiAJcGlkID0gZm9yaygpOwotCWlmIChwaWQgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O2ZvcmsmIzM0Oyk7CiYjNDM7CUFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coJiMzNDtmb3JrIGZhaWxlZCYjMzQ7KTsKIAlpZiAoIXBpZCkgewotCQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpOwotCQlpZiAoc2V0dWlkKFVTSFJUX01BWCkpCiYjNDM7CQllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7CiYjNDM7CQlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtjaGlsZCBmYWlsZWQgdG8gZ2V0IHRoZSB1c2VyLXByaXZhdGUgbGFiZWwmIzM0Oyk7CiYjNDM7CiYjNDM7CQlpZiAoc2V0dWlkKFVTSFJUX01BWCkpIHsKIAkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1tJTkZPXSBza2lwIHNldHVpZCBjaGlsZCB0ZXN0XG4mIzM0Oyk7Ci0JCWVsc2UKLQkJCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7CiYjNDM7CQkJZXhpdCgwKTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTsKJiM0MzsJCUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7Y2hpbGQgdW5leHBlY3RlZGx5IGdvdCB0aGUgbGFiZWwgYWZ0ZXIgc2V0dWlkKG5vYm9keSkmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkJiMzNDssIGVycm5vKTsKIAkJZXhpdCgwKTsKIAl9Ci0JaWYgKHdhaXQoJmFtcDt3c3RhdHVzKSA9PSAtMSkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7d2FpdCYjMzQ7KTsKLQlpZiAoIVdJRkVYSVRFRCh3c3RhdHVzKSB8fCBXRVhJVFNUQVRVUyh3c3RhdHVzKSAhPSAwKQotCQllcnJvcigxLCBlcnJubywgJiMzNDt3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdCYjMzQ7KTsKLQotCWV4cGxhaW4oJiMzNDtjcmVhdGUgYSBuZXcgcHJvY2Vzcy1wcml2YXRlIGxhYmVsIChGTF9TX1BST0NFU1MpJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBnZXQgaXQgYWdhaW4mIzM0Oyk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKTsKLQlleHBsYWluKCYjMzQ7Y2hpbGQgcHJvY2VzcyBjYW5ub3QgY2FuIGdldCBpdCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHBpZCwgd2FpdCgmYW1wO3dzdGF0dXMpKSBUSF9MT0coJiMzNDt3YWl0IGZhaWxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coJiMzNDtjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHkmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUSgwLCBXRVhJVFNUQVRVUyh3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7Y2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHQmIzM0Oyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShmZCkpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKHByb2Nlc3NfcHJpdmF0ZV9sYWJlbF9zaGFyZSkKJiM0Mzt7CiYjNDM7CWludCBmZCwgZXJyLCB3c3RhdHVzOwomIzQzOwlwaWRfdCBwaWQ7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgcHJvY2Vzcy1wcml2YXRlIGxhYmVsIChGTF9TX1BST0NFU1MpJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBnZXQgaXQgYWdhaW4mIzM0Oyk7CiYjNDM7CiAJcGlkID0gZm9yaygpOwotCWlmIChwaWQgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O2ZvcmsmIzM0Oyk7CiYjNDM7CUFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coJiMzNDtmb3JrIGZhaWxlZCYjMzQ7KTsKIAlpZiAoIXBpZCkgewotCQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCkpOwomIzQzOwkJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApOwomIzQzOwkJQVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtjaGlsZCB1bmV4cGVjdGVkbHkgZ290IHRoZSBwcm9jZXNzLXByaXZhdGUgbGFiZWwmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkJiMzNDssIGVycm5vKTsKIAkJZXhpdCgwKTsKIAl9Ci0JaWYgKHdhaXQoJmFtcDt3c3RhdHVzKSA9PSAtMSkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7d2FpdCYjMzQ7KTsKLQlpZiAoIVdJRkVYSVRFRCh3c3RhdHVzKSB8fCBXRVhJVFNUQVRVUyh3c3RhdHVzKSAhPSAwKQotCQllcnJvcigxLCBlcnJubywgJiMzNDt3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdCYjMzQ7KTsKLX0KLQotc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0JaW50IGM7Ci0KLQl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDtsdiYjMzQ7KSkgIT0gLTEpIHsKLQkJc3dpdGNoIChjKSB7Ci0JCWNhc2UgJiMzOTtsJiMzOTs6Ci0JCQljZmdfbG9uZ19ydW5uaW5nID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7diYjMzk7OgotCQkJY2ZnX3ZlcmJvc2UgPSB0cnVlOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnJvcigxLCAwLCAmIzM0OyVzOiBwYXJzZSBlcnJvciYjMzQ7LCBhcmd2WzBdKTsKLQkJfQotCX0KJiM0MzsJQVNTRVJUX0VRKHBpZCwgd2FpdCgmYW1wO3dzdGF0dXMpKSBUSF9MT0coJiMzNDt3YWl0IGZhaWxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coJiMzNDtjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHkmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUSgwLCBXRVhJVFNUQVRVUyh3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7Y2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHQmIzM0Oyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShmZCkpOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiYjNDM7VEVTVChjYW5ub3RfcmVuZXdfbm9uX2V4aXN0ZW50X2xhYmVsKQogewotCWludCBmZDsKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDUsIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSkpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIHJlbmV3IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVTUkNILCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChjYW5fcmVuZXdfZXhpc3RpbmdfbGFiZWwpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVycjsKJiM0MzsKJiM0MzsJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDUsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBsYWJlbCBmb3IgcmVuZXcgdmFsaWRhdGlvbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA1LCAyICogKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHJlbmV3IGFuIGV4aXN0aW5nIHZhbGlkIGxhYmVsJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA1KTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWwmIzM0Oyk7CiAKLQlwYXJzZV9vcHRzKGFyZ2MsIGFyZ3YpOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChyZW5ld19sYWJlbF9saW5nZXIpCiYjNDM7ewomIzQzOwkvKiBSRU5FVyBtdXN0IGV4dGVuZCBhIGxhYmVsJiMzOTtzIGxpbmdlciBwZXJpb2Q6IHB1dHRpbmcgYSByZW5ld2VkCiYjNDM7CSAqIGxhYmVsIGFuZCB3YWl0aW5nIG91dCBpdHMgb3JpZ2luYWwgbGluZ2VyIHRpbWUgbXVzdCBub3QgYmUKJiM0MzsJICogZW5vdWdoIHRvIGFsbG93IHRoZSBsYWJlbCB0byBiZSByZWNyZWF0ZWQuCiYjNDM7CSAqLwomIzQzOwlpbnQgZmQsIGVycjsKIAogCWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA2LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgd2l0aCBGTF9NSU5fTElOR0VSIGxpbmdlciB0aW1lJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDYsIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSkpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gcmVuZXcgdGhlIGxhYmVsIHRvIGluY3JlYXNlIGl0cyBsaW5nZXIgdGltZSYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgNik7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBwdXQgdGhlIGxhYmVsJiMzNDspOwomIzQzOwomIzQzOwlzbGVlcChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgbmV3IGxpbmdlciB0aW1lIG5vdCBvdmVyIHlldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShmZCkpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKHJlbW90ZV9mbGFnKQomIzQzO3sKJiM0MzsJLyogVGhlIFJFTU9URSBmbGFnLCB1c2VkIGZvciBnZXRzb2Nrb3B0LCBpcyBleHBlY3RlZCB0byByZXRyaWV2ZSB0aGUKJiM0MzsJICogbGFiZWwgZnJvbSB0aGUgbGF0ZXN0IHJlY2VpdmVkIGhlYWRlci4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSBmcmVxID0gewomIzQzOwkJLmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULAomIzQzOwkJLmZscl9mbGFncyA9IElQVjZfRkxfRl9SRU1PVEUsCiYjNDM7CX07CiYjNDM7CXNvY2tsZW5fdCBmcmVxX2xlbiA9IHNpemVvZihmcmVxKTsKJiM0MzsJaW50IGxpc3RlbmVyLCBjZmQsIGFmZCwgZXJyOwomIzQzOwomIzQzOwlsaXN0ZW5lciA9IHRjcF9saXN0ZW4oKTsKJiM0MzsJdGNwX2Nvbm5lY3QobGlzdGVuZXIsIDcsICZhbXA7Y2ZkLCAmYW1wO2FmZCk7CiYjNDM7CiYjNDM7CWVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCAmYW1wO2ZyZXEsICZhbXA7ZnJlcV9sZW4pOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtnZXRzb2Nrb3B0IHdpdGggSVBWNl9GTF9GX1JFTU9URSBmYWlsZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUSg3LCBudG9obChmcmVxLmZscl9sYWJlbCkpIFRIX0xPRygmIzM0O3VuZXhwZWN0ZWQgcmVtb3RlIGZsb3cgbGFiZWwmIzM0Oyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShhZmQpKTsKJiM0MzsJQVNTRVJUX0VRKDAsIGNsb3NlKGNmZCkpOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UobGlzdGVuZXIpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZmxvd2xhYmVsX2NvbnNpc3RlbmN5X2VuYWJsZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzJdID0ge307CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSYjMzQ7LCBPX1JET05MWSk7CiAJaWYgKGZkID09IC0xKQotCQllcnJvcigxLCBlcnJubywgJiMzNDtzb2NrZXQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAotCXJ1bl90ZXN0cyhmZCk7CiYjNDM7CWlmIChyZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSkgJmx0OyAwKQomIzQzOwkJYnVmWzBdID0gJiMzOTsxJiMzOTs7CiYjNDM7CWNsb3NlKGZkKTsKIAotCWlmIChjbG9zZShmZCkpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O2Nsb3NlJiMzNDspOwomIzQzOwlyZXR1cm4gYnVmWzBdICE9ICYjMzk7MCYjMzk7OwomIzQzO30KIAotCXJldHVybiAwOwomIzQzO1RFU1QocmVmbGVjdF9mbGFnKQomIzQzO3sKJiM0MzsJLyogVGhlIFJFRkxFQ1QgZmxhZyBhY3RzIGFzIGEgdHJpZ2dlciB0byB0aGUgUkVQRkxPVyBiaXQuIFdoZW4gUkVQRkxPVwomIzQzOwkgKiBpcyB0cmlnZ2VyZWQgZm9yIGEgc29ja2V0LCBpdCBhZG9wdHMgdGhlIGxhYmVsIHJlY2VpdmVkIGZyb20gdGhlCiYjNDM7CSAqIGNvbm5lY3RlZCBzb2NrZXQuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vbiA9IHsKJiM0MzsJCS5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCwKJiM0MzsJCS5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3RfcXVlcnkgPSB7CiYjNDM7CQkuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X29mZiA9IHsKJiM0MzsJCS5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1BVVCwKJiM0MzsJCS5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCwKJiM0MzsJfTsKJiM0MzsJc29ja2xlbl90IHJlZmxlY3RfcXVlcnlfbGVuID0gc2l6ZW9mKHJlZmxlY3RfcXVlcnkpOwomIzQzOwlpbnQgbGlzdGVuZXIsIGNmZCwgYWZkLCBlcnI7CiYjNDM7CiYjNDM7CWlmIChmbG93bGFiZWxfY29uc2lzdGVuY3lfZW5hYmxlZCgpKQomIzQzOwkJU0tJUChyZXR1cm4sCiYjNDM7CQkgICAgICYjMzQ7bmV0LmlwdjYuZmxvd2xhYmVsX2NvbnNpc3RlbmN5IG11c3QgYmUgMCAocnVuIHZpYSBpcHY2X2Zsb3dsYWJlbC5zaCkmIzM0Oyk7CiYjNDM7CiYjNDM7CWxpc3RlbmVyID0gdGNwX2xpc3RlbigpOwomIzQzOwllcnIgPSBzZXRzb2Nrb3B0KGxpc3RlbmVyLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCAmYW1wO3JlZmxlY3Rfb24sIHNpemVvZihyZWZsZWN0X29uKSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBlbmFibGUgUkVGTEVDVCBvbiB0aGUgbGlzdGVuZXImIzM0Oyk7CiYjNDM7CiYjNDM7CXRjcF9jb25uZWN0KGxpc3RlbmVyLCA4LCAmYW1wO2NmZCwgJmFtcDthZmQpOwomIzQzOwomIzQzOwllcnIgPSBnZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgJmFtcDtyZWZsZWN0X3F1ZXJ5LCAmYW1wO3JlZmxlY3RfcXVlcnlfbGVuKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHF1ZXJ5IHRoZSBhY2NlcHRlZCBzb2NrZXQmIzM5O3Mgb3V0Z29pbmcgbGFiZWwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUSg4LCBudG9obChyZWZsZWN0X3F1ZXJ5LmZscl9sYWJlbCkpCiYjNDM7CQlUSF9MT0coJiMzNDthY2NlcHRlZCBzb2NrZXQgZGlkIG5vdCByZWZsZWN0IGNsaWVudCYjMzk7cyBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsICZhbXA7cmVmbGVjdF9vZmYsIHNpemVvZihyZWZsZWN0X29mZikpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBSRUZMRUNUIG9uIHRoZSBhY2NlcHRlZCBzb2NrZXQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IHNldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCAmYW1wO3JlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTsKJiM0MzsJQVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCBkaXNhYmxpbmcgUkVGTEVDVCB0d2ljZSB0byBmYWlsJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFU1JDSCwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGNsb3NlKGFmZCkpOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoY2ZkKSk7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpOwogfQomIzQzOwomIzQzO1RFU1RfSEFSTkVTU19NQUlOCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NTUKCQkJCQkJCW91dHB1dDogNjMKCQkJCQkJCXRob3VnaHRzOiA1NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBBbmFseXppbmcgYSBTZWxmdGVzdCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2hgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7aG1tbSwgdGhhdCYjMzk7cyBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgc2VsZnRlc3RzIGRpcmVjdG9yeSwgdGhhdCYjMzk7cyBub3Qga2VybmVsIGV4ZWN1dGlvbi4mIzM0OyBMZXQgbWUganVzdCBkb3VibGUgY2hlY2ssIHRob3VnaCwgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guIFJpZ2h0LCB0aGUgZGlmZiBqdXN0IGNvbmZpcm1zIHRoZSB0d28gZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLgoKU2luY2UgdGhpcyBtb2RpZmllcyAqb25seSogc2VsZnRlc3RzLCB3aGljaCBhcmUgdXNlci1zcGFjZSBwcm9ncmFtcyBkZXNpZ25lZCBmb3IgdGVzdGluZywgbm90IHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgd29uJiMzOTt0IHRyaWdnZXIgYW55IG1lYW5pbmdmdWwgZnV6emluZyBvZiB0aGUga2VybmVsIGl0c2VsZi4gTm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgaW5zdHJ1Y3Rpb25zLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5IHNjZW5hcmlvcyB3aGVyZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQgbGlzdHMgdGhpbmdzIGxpa2UgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBjb21tZW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBwYXRocywgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzLiBJIGRvbiYjMzk7dCBzZWUgc2VsZnRlc3RzIGV4cGxpY2l0bHkgbGlzdGVkLCBidXQgaXQmIzM5O3MgY2xlYXIgdGhlc2UgYXJlIHVzZWQgdG8gdGVzdCBrZXJuZWwgZmVhdHVyZXMsIG5vdCB0byBleGVjdXRlIGNvZGUsIGFuZCB0aGVyZWZvcmUgaXQgZmFsbHMgd2l0aGluIHRoZSBzYW1lIHNwaXJpdCBvZiB0aGUgZ3VpZGVsaW5lcy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgbm8sIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBvbmx5IHRvdWNoZXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaGAgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNgLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQuIFRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZXNlIHVzZXItc3BhY2Ugc2VsZnRlc3RzLCByZXNpZGluZyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCwgYW5kIGl0IGlzbiYjMzk7dCBjaGFuZ2luZyBhbnkga2VybmVsIGNvZGUuIFRoaXMgZG9lc24mIzM5O3QgbmVjZXNzaXRhdGUgZnV6emluZyB0aGUga2VybmVsLgoKU28sIHRoZSBjb25jbHVzaW9uIGlzICoqV29ydGhGdXp6aW5nPWZhbHNlKiouIFdlIGNhbiBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMzoyOToyMC40MzA3ODEyMzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzI4NDEyNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjI5OjIwLjQzMDc4NjM4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA0NDY4MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzg5OGU2OWU3ODNiZDlmNzYxNmRhODRlYjVlYzNlYTA5ZDIwMzk5ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDAzOjI5OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxcbmluZGV4IGNlZTk1ZTI1MmJlZTUuLjRjM2RlM2EyNzgwN2MgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoXFxuQEAgLTgsNyArOCw4IEBAXFxuIHNldCAtZVxcbiBcXG4gZWNobyBcXFwiVEVTVCBtYW5hZ2VtZW50XFxcIlxcbi0uL2luX25ldG5zLnNoIC4vaXB2Nl9mbG93bGFiZWxfbWdyXFxuKy4vaW5fbmV0bnMuc2ggXFxcXFxcbisgIHNoIC1jICdzeXNjdGwgLXEgLXcgbmV0LmlwdjYuZmxvd2xhYmVsX2NvbnNpc3RlbmN5PTAgXFx1MDAyNlxcdTAwMjYgLi9pcHY2X2Zsb3dsYWJlbF9tZ3InXFxuIFxcbiBlY2hvIFxcXCJURVNUIGRhdGFwYXRoXFxcIlxcbiAuL2luX25ldG5zLnNoIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXFxuaW5kZXggYWY5NWI0OGFjZWE5MC4uNDgyOTIxZjdlZTExOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FycGEvaW5ldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZXJyb3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGltaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbjYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG5AQCAtMTksMzEgKzIwLDE5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuIFxcbiAvKiB1YXBpL2dsaWJjIHdlaXJkbmVzcyBtYXkgbGVhdmUgdGhpcyB1bmRlZmluZWQgKi9cXG4gI2lmbmRlZiBJUFY2X0ZMT1dMQUJFTF9NR1JcXG4gI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1JcXHQzMlxcbiAjZW5kaWZcXG4rI2lmbmRlZiBJUFY2X0ZMT1dJTkZPX1NFTkRcXG4rI2RlZmluZSBJUFY2X0ZMT1dJTkZPX1NFTkRcXHQzM1xcbisjZW5kaWZcXG4gXFxuIC8qIGZyb20gbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jICovXFxuICNkZWZpbmUgRkxfTUlOX0xJTkdFUlxcdFxcdDZcXG4tXFxuLSNkZWZpbmUgZXhwbGFpbih4KVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0ZG8geyBpZiAoY2ZnX3ZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCBcXFwiICAgICAgIFxcXCIgeCBcXFwiXFxcXG5cXFwiKTsgfSB3aGlsZSAoMClcXG4tXFxuLSNkZWZpbmUgX19leHBlY3QoeClcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdGlmICghKHgpKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJbT0tdICAgXFxcIiAjeCBcXFwiXFxcXG5cXFwiKTtcXHRcXHRcXFxcXFxuLVxcdFxcdGVsc2VcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCJbRVJSXSAgXFxcIiAjeCBcXFwiIChsaW5lICVkKVxcXCIsIF9fTElORV9fKTsgXFxcXFxcbi1cXHR9IHdoaWxlICgwKVxcbi1cXG4tI2RlZmluZSBleHBlY3RfcGFzcyh4KVxcdF9fZXhwZWN0KHgpXFxuLSNkZWZpbmUgZXhwZWN0X2ZhaWwoeClcXHRfX2V4cGVjdCghKHgpKVxcbi1cXG4tc3RhdGljIGJvb2wgY2ZnX2xvbmdfcnVubmluZztcXG4tc3RhdGljIGJvb2wgY2ZnX3ZlcmJvc2U7XFxuKyNkZWZpbmUgRkxfTUFYX0xJTkdFUlxcdDE1MFxcbiBcXG4gc3RhdGljIGludCBmbG93bGFiZWxfZ2V0KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsIHVpbnQxNl90IGZsYWdzKVxcbiB7XFxuQEAgLTcxLDEyOSArNjAsNDA2IEBAIHN0YXRpYyBpbnQgZmxvd2xhYmVsX3B1dChpbnQgZmQsIHVpbnQzMl90IGxhYmVsKVxcbiBcXHRyZXR1cm4gc2V0c29ja29wdChmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBydW5fdGVzdHMoaW50IGZkKVxcbitzdGF0aWMgaW50IGZsb3dsYWJlbF9yZW5ldyhpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50MTZfdCBsaW5nZXIpXFxuK3tcXG4rXFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHtcXG4rXFx0XFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsXFxuK1xcdFxcdC5mbHJfbGFiZWwgPSBodG9ubChsYWJlbCksXFxuK1xcdFxcdC5mbHJfbGluZ2VyID0gbGluZ2VyLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFxcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbjYgbG9vcGJhY2tfYWRkcih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkciA9IHtcXG4rXFx0XFx0LnNpbjZfZmFtaWx5XFx0PSBBRl9JTkVUNixcXG4rXFx0XFx0LnNpbjZfYWRkclxcdD0gSU42QUREUl9MT09QQkFDS19JTklULFxcbitcXHRcXHQuc2luNl9wb3J0XFx0PSBodG9ucyg4ODg4KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBhZGRyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHRjcF9saXN0ZW4odm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSBsb29wYmFja19hZGRyKCk7XFxuK1xcdGNvbnN0IGludCBvbmUgPSAxO1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApO1xcbitcXHRpZiAoZmQgPT0gLTEpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwic29ja2V0IGxpc3RlbmVyXFxcIik7XFxuK1xcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFxcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJzZXRzb2Nrb3B0IFNPX1JFVVNFQUREUlxcXCIpO1xcbitcXHRpZiAoYmluZChmZCwgKHZvaWQgKilcXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJiaW5kXFxcIik7XFxuK1xcdGlmIChsaXN0ZW4oZmQsIDEpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImxpc3RlblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIGZkO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0Y3BfY29ubmVjdChpbnQgbGlzdGVuZXIsIHVpbnQzMl90IGZsb3dsYWJlbCwgaW50ICpjbGllbnQsIGludCAqYWNjZXB0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0gbG9vcGJhY2tfYWRkcigpO1xcbitcXHRjb25zdCBpbnQgb25lID0gMTtcXG4rXFx0aW50IGNmZCwgYWZkO1xcbitcXG4rXFx0Y2ZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7XFxuK1xcdGlmIChjZmQgPT0gLTEpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwic29ja2V0IGNsaWVudFxcXCIpO1xcbitcXG4rXFx0aWYgKGZsb3dsYWJlbF9nZXQoY2ZkLCBmbG93bGFiZWwsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJmbG93bGFiZWxfZ2V0XFxcIik7XFxuK1xcdGlmIChzZXRzb2Nrb3B0KGNmZCwgU09MX0lQVjYsIElQVjZfRkxPV0lORk9fU0VORCwgXFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInNldHNvY2tvcHQgZmxvd2luZm9fc2VuZFxcXCIpO1xcbitcXHRhZGRyLnNpbjZfZmxvd2luZm8gPSBodG9ubChmbG93bGFiZWwpO1xcbitcXG4rXFx0aWYgKGNvbm5lY3QoY2ZkLCAodm9pZCAqKVxcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImNvbm5lY3RcXFwiKTtcXG4rXFxuK1xcdGFmZCA9IGFjY2VwdChsaXN0ZW5lciwgTlVMTCwgTlVMTCk7XFxuK1xcdGlmIChhZmQgPT0gLTEpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwiYWNjZXB0XFxcIik7XFxuK1xcbitcXHRpZiAoZmxvd2xhYmVsX3B1dChjZmQsIGZsb3dsYWJlbCkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwiZmxvd2xhYmVsX3B1dFxcXCIpO1xcbitcXG4rXFx0KmNsaWVudCA9IGNmZDtcXG4rXFx0KmFjY2VwdGVkID0gYWZkO1xcbit9XFxuK1xcbitURVNUKGNhbm5vdF9nZXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgOSwgSVBWNl9GTF9TX0FOWSwgMCk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCBnZXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoRU5PRU5ULCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFTk9FTlQsIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xcbit9XFxuK1xcbitURVNUKGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMTApO1xcbitcXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgcHV0IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWxcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFU1JDSCwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QoY2Fubm90X2NyZWF0ZV9sYWJlbF9ncmVhdGVyX3RoYW5fMjBfYml0cylcXG4re1xcbitcXHRpbnQgZmQsIGVycjtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDB4MUZGRkZGLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGxhYmVsIFxcdTAwM2UgMjAgYml0cyB0byBiZSByZWplY3RlZFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFSU5WQUwsIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xcbit9XFxuK1xcbitURVNUKGNhbl9jcmVhdGVfYW5kX2dldF9hbmRfcHV0X2xhYmVscylcXG4re1xcbitcXHRpbnQgZmQsIGVycjtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgbGFiZWwgKEZMX0ZfQ1JFQVRFKVxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGdldCB0aGUgbGFiZWwgd2l0aG91dCBGTF9GX0NSRUFURVxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpO1xcbitcXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRkxfRl9FWENMIHRvIHJlamVjdCBhbiBhbHJlYWR5LWV4aXN0aW5nIGxhYmVsXFxcIik7XFxuK1xcdEFTU0VSVF9FUShFRVhJU1QsIGVycm5vKSBUSF9MT0coXFxcImV4cGVjdGVkIEVFWElTVCwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIHB1dCBmaXJzdCByZWZlcmVuY2VcXFwiKTtcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIHB1dCBzZWNvbmQgcmVmZXJlbmNlXFxcIik7XFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBwdXQgdGhpcmQgcmVmZXJlbmNlXFxcIik7XFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xcbitcXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgZm91cnRoIHB1dCB0byBmYWlsLCBubyByZWZlcmVuY2VzIGxlZnRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFU1JDSCwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QoZXhjbHVzaXZlX2xhYmVsX3NoYXJlKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIHJldXNlIGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsXFxcIik7XFxuK1xcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIHJldXNlIGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwgdG9vXFxcIik7XFxuK1xcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDIpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBwdXQgdGhlIGV4Y2x1c2l2ZSBsYWJlbFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCByZXVzZSB0byBmYWlsLCBkdWUgdG8gbGluZ2VyXFxcIik7XFxuK1xcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdHNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICsgMSk7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJleHBlY3RlZCByZXVzZSB0byBzdWNjZWVkIGFmdGVyIGxpbmdlclxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QodXNlcl9wcml2YXRlX2xhYmVsX3NoYXJlKVxcbiB7XFxuLVxcdGludCB3c3RhdHVzO1xcbitcXHRpbnQgZmQsIGVyciwgd3N0YXR1cztcXG4gXFx0cGlkX3QgcGlkO1xcbiBcXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IGdldCBub24tZXhpc3RlbnQgbGFiZWxcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCkpO1xcbi1cXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IHB1dCBub24tZXhpc3RlbnQgbGFiZWxcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xcbi1cXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IGNyZWF0ZSBsYWJlbCBncmVhdGVyIHRoYW4gMjAgYml0c1xcXCIpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSxcXG4tXFx0XFx0XFx0XFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcbi1cXHRleHBsYWluKFxcXCJjcmVhdGUgYSBuZXcgbGFiZWwgKEZMX0ZfQ1JFQVRFKVxcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbiBnZXQgdGhlIGxhYmVsICh3aXRob3V0IEZMX0ZfQ1JFQVRFKVxcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbiBnZXQgaXQgYWdhaW4gd2l0aCBjcmVhdGUgZmxhZyBzZXQsIHRvb1xcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbm5vdCBnZXQgaXQgYWdhaW4gd2l0aCB0aGUgZXhjbHVzaXZlIChGTF9GTF9FWENMKSBmbGFnXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksXFxuLVxcdFxcdFxcdFxcdFxcdCBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2FuIG5vdyBwdXQgZXhhY3RseSB0aHJlZSByZWZlcmVuY2VzXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcXG4tXFxuLVxcdGV4cGxhaW4oXFxcImNyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTClcXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IGdldCBpdCBhZ2FpbiBpbiBub24tZXhjbHVzaXZlIG1vZGVcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IGdldCBpdCBhZ2FpbiBpbiBleGNsdXNpdmUgbW9kZSBlaXRoZXJcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMikpO1xcbi1cXG4tXFx0aWYgKGNmZ19sb25nX3J1bm5pbmcpIHtcXG4tXFx0XFx0ZXhwbGFpbihcXFwiY2Fubm90IHJldXNlIHRoZSBsYWJlbCwgZHVlIHRvIGxpbmdlclxcXCIpO1xcbi1cXHRcXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLFxcbi1cXHRcXHRcXHRcXHRcXHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0XFx0ZXhwbGFpbihcXFwiYWZ0ZXIgc2xlZXAsIGNhbiByZXVzZVxcXCIpO1xcbi1cXHRcXHRzbGVlcChGTF9NSU5fTElOR0VSICogMiArIDEpO1xcbi1cXHRcXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLFxcbi1cXHRcXHRcXHRcXHRcXHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0fVxcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFxcXCJzb2NrZXQgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUilcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApO1xcbitcXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgZ2V0IGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsXFxcIik7XFxuK1xcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGdldCBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsXFxcIik7XFxuK1xcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVxcXCIpO1xcbiBcXG4tXFx0ZXhwbGFpbihcXFwiY3JlYXRlIGEgbmV3IHVzZXItcHJpdmF0ZSBsYWJlbCAoRkxfU19VU0VSKVxcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZVxcXCIpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGVcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0VYQ0wsIDApKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2FuIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGVcXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2hpbGQgcHJvY2VzcyBjYW4gZ2V0IGl0IHRvbywgYnV0IG5vdCBhZnRlciBzZXR1aWQobm9ib2R5KVxcXCIpO1xcbiBcXHRwaWQgPSBmb3JrKCk7XFxuLVxcdGlmIChwaWQgPT0gLTEpXFxuLVxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwiZm9ya1xcXCIpO1xcbitcXHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFxcXCJmb3JrIGZhaWxlZFxcXCIpO1xcbiBcXHRpZiAoIXBpZCkge1xcbi1cXHRcXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xcbi1cXHRcXHRpZiAoc2V0dWlkKFVTSFJUX01BWCkpXFxuK1xcdFxcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcXG4rXFx0XFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJjaGlsZCBmYWlsZWQgdG8gZ2V0IHRoZSB1c2VyLXByaXZhdGUgbGFiZWxcXFwiKTtcXG4rXFxuK1xcdFxcdGlmIChzZXR1aWQoVVNIUlRfTUFYKSkge1xcbiBcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIltJTkZPXSBza2lwIHNldHVpZCBjaGlsZCB0ZXN0XFxcXG5cXFwiKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xcbitcXHRcXHRcXHRleGl0KDApO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7XFxuK1xcdFxcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJjaGlsZCB1bmV4cGVjdGVkbHkgZ290IHRoZSBsYWJlbCBhZnRlciBzZXR1aWQobm9ib2R5KVxcXCIpO1xcbitcXHRcXHRBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXFxcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcXFwiLCBlcnJubyk7XFxuIFxcdFxcdGV4aXQoMCk7XFxuIFxcdH1cXG4tXFx0aWYgKHdhaXQoXFx1MDAyNndzdGF0dXMpID09IC0xKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcIndhaXRcXFwiKTtcXG4tXFx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcXG4tXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJ3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdFxcXCIpO1xcbi1cXG4tXFx0ZXhwbGFpbihcXFwiY3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKVxcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW4gZ2V0IGl0IGFnYWluXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNoaWxkIHByb2Nlc3MgY2Fubm90IGNhbiBnZXQgaXRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHBpZCwgd2FpdChcXHUwMDI2d3N0YXR1cykpIFRIX0xPRyhcXFwid2FpdCBmYWlsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coXFxcImNoaWxkIGRpZCBub3QgZXhpdCBub3JtYWxseVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpIFRIX0xPRyhcXFwiY2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHRcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xcbit9XFxuK1xcbitURVNUKHByb2Nlc3NfcHJpdmF0ZV9sYWJlbF9zaGFyZSlcXG4re1xcbitcXHRpbnQgZmQsIGVyciwgd3N0YXR1cztcXG4rXFx0cGlkX3QgcGlkO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgcHJvY2Vzcy1wcml2YXRlIGxhYmVsIChGTF9TX1BST0NFU1MpXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpblxcXCIpO1xcbitcXG4gXFx0cGlkID0gZm9yaygpO1xcbi1cXHRpZiAocGlkID09IC0xKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImZvcmtcXFwiKTtcXG4rXFx0QVNTRVJUX05FKC0xLCBwaWQpIFRIX0xPRyhcXFwiZm9yayBmYWlsZWRcXFwiKTtcXG4gXFx0aWYgKCFwaWQpIHtcXG4tXFx0XFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKTtcXG4rXFx0XFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApO1xcbitcXHRcXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcXFwiY2hpbGQgdW5leHBlY3RlZGx5IGdvdCB0aGUgcHJvY2Vzcy1wcml2YXRlIGxhYmVsXFxcIik7XFxuK1xcdFxcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4gXFx0XFx0ZXhpdCgwKTtcXG4gXFx0fVxcbi1cXHRpZiAod2FpdChcXHUwMDI2d3N0YXR1cykgPT0gLTEpXFxuLVxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwid2FpdFxcXCIpO1xcbi1cXHRpZiAoIVdJRkVYSVRFRCh3c3RhdHVzKSB8fCBXRVhJVFNUQVRVUyh3c3RhdHVzKSAhPSAwKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcIndhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XFxcIik7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbi17XFxuLVxcdGludCBjO1xcbi1cXG4tXFx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFxcXCJsdlxcXCIpKSAhPSAtMSkge1xcbi1cXHRcXHRzd2l0Y2ggKGMpIHtcXG4tXFx0XFx0Y2FzZSAnbCc6XFxuLVxcdFxcdFxcdGNmZ19sb25nX3J1bm5pbmcgPSB0cnVlO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAndic6XFxuLVxcdFxcdFxcdGNmZ192ZXJib3NlID0gdHJ1ZTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCIlczogcGFyc2UgZXJyb3JcXFwiLCBhcmd2WzBdKTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdEFTU0VSVF9FUShwaWQsIHdhaXQoXFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXFxcIndhaXQgZmFpbGVkXFxcIik7XFxuK1xcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFxcXCJjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHlcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKSBUSF9MT0coXFxcImNoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0XFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcXG4gfVxcbiBcXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbitURVNUKGNhbm5vdF9yZW5ld19ub25fZXhpc3RlbnRfbGFiZWwpXFxuIHtcXG4tXFx0aW50IGZkO1xcbitcXHRpbnQgZmQsIGVycjtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgMiAqIChGTF9NSU5fTElOR0VSICogMiArIDEpKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIHJlbmV3IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWxcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFU1JDSCwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QoY2FuX3JlbmV3X2V4aXN0aW5nX2xhYmVsKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgZm9yIHJlbmV3IHZhbGlkYXRpb25cXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgMiAqIChGTF9NSU5fTElOR0VSICogMiArIDEpKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcmVuZXcgYW4gZXhpc3RpbmcgdmFsaWQgbGFiZWxcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDUpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBwdXQgdGhlIGxhYmVsXFxcIik7XFxuIFxcbi1cXHRwYXJzZV9vcHRzKGFyZ2MsIGFyZ3YpO1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcXG4rfVxcbitcXG4rVEVTVChyZW5ld19sYWJlbF9saW5nZXIpXFxuK3tcXG4rXFx0LyogUkVORVcgbXVzdCBleHRlbmQgYSBsYWJlbCdzIGxpbmdlciBwZXJpb2Q6IHB1dHRpbmcgYSByZW5ld2VkXFxuK1xcdCAqIGxhYmVsIGFuZCB3YWl0aW5nIG91dCBpdHMgb3JpZ2luYWwgbGluZ2VyIHRpbWUgbXVzdCBub3QgYmVcXG4rXFx0ICogZW5vdWdoIHRvIGFsbG93IHRoZSBsYWJlbCB0byBiZSByZWNyZWF0ZWQuXFxuK1xcdCAqL1xcbitcXHRpbnQgZmQsIGVycjtcXG4gXFxuIFxcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDYsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGxhYmVsIHdpdGggRkxfTUlOX0xJTkdFUiBsaW5nZXIgdGltZVxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA2LCAyICogKEZMX01JTl9MSU5HRVIgKiAyICsgMSkpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byByZW5ldyB0aGUgbGFiZWwgdG8gaW5jcmVhc2UgaXRzIGxpbmdlciB0aW1lXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA2KTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcHV0IHRoZSBsYWJlbFxcXCIpO1xcbitcXG4rXFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDYsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgbmV3IGxpbmdlciB0aW1lIG5vdCBvdmVyIHlldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXFxcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcXFwiLCBlcnJubyk7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcXG4rfVxcbitcXG4rVEVTVChyZW1vdGVfZmxhZylcXG4re1xcbitcXHQvKiBUaGUgUkVNT1RFIGZsYWcsIHVzZWQgZm9yIGdldHNvY2tvcHQsIGlzIGV4cGVjdGVkIHRvIHJldHJpZXZlIHRoZVxcbitcXHQgKiBsYWJlbCBmcm9tIHRoZSBsYXRlc3QgcmVjZWl2ZWQgaGVhZGVyLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIGZyZXEgPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRU1PVEUsXFxuK1xcdH07XFxuK1xcdHNvY2tsZW5fdCBmcmVxX2xlbiA9IHNpemVvZihmcmVxKTtcXG4rXFx0aW50IGxpc3RlbmVyLCBjZmQsIGFmZCwgZXJyO1xcbitcXG4rXFx0bGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7XFxuK1xcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA3LCBcXHUwMDI2Y2ZkLCBcXHUwMDI2YWZkKTtcXG4rXFxuK1xcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcXHUwMDI2ZnJlcSwgXFx1MDAyNmZyZXFfbGVuKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJnZXRzb2Nrb3B0IHdpdGggSVBWNl9GTF9GX1JFTU9URSBmYWlsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKDcsIG50b2hsKGZyZXEuZmxyX2xhYmVsKSkgVEhfTE9HKFxcXCJ1bmV4cGVjdGVkIHJlbW90ZSBmbG93IGxhYmVsXFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoYWZkKSk7XFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShjZmQpKTtcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGxpc3RlbmVyKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGZsb3dsYWJlbF9jb25zaXN0ZW5jeV9lbmFibGVkKHZvaWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbMl0gPSB7fTtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0ZmQgPSBvcGVuKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjYvZmxvd2xhYmVsX2NvbnNpc3RlbmN5XFxcIiwgT19SRE9OTFkpO1xcbiBcXHRpZiAoZmQgPT0gLTEpXFxuLVxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwic29ja2V0XFxcIik7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0cnVuX3Rlc3RzKGZkKTtcXG4rXFx0aWYgKHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKSBcXHUwMDNjIDApXFxuK1xcdFxcdGJ1ZlswXSA9ICcxJztcXG4rXFx0Y2xvc2UoZmQpO1xcbiBcXG4tXFx0aWYgKGNsb3NlKGZkKSlcXG4tXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJjbG9zZVxcXCIpO1xcbitcXHRyZXR1cm4gYnVmWzBdICE9ICcwJztcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1RFU1QocmVmbGVjdF9mbGFnKVxcbit7XFxuK1xcdC8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1dcXG4rXFx0ICogaXMgdHJpZ2dlcmVkIGZvciBhIHNvY2tldCwgaXQgYWRvcHRzIHRoZSBsYWJlbCByZWNlaXZlZCBmcm9tIHRoZVxcbitcXHQgKiBjb25uZWN0ZWQgc29ja2V0LlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb24gPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9xdWVyeSA9IHtcXG4rXFx0XFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vZmYgPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1BVVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxcbitcXHR9O1xcbitcXHRzb2NrbGVuX3QgcmVmbGVjdF9xdWVyeV9sZW4gPSBzaXplb2YocmVmbGVjdF9xdWVyeSk7XFxuK1xcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcXG4rXFxuK1xcdGlmIChmbG93bGFiZWxfY29uc2lzdGVuY3lfZW5hYmxlZCgpKVxcbitcXHRcXHRTS0lQKHJldHVybixcXG4rXFx0XFx0ICAgICBcXFwibmV0LmlwdjYuZmxvd2xhYmVsX2NvbnNpc3RlbmN5IG11c3QgYmUgMCAocnVuIHZpYSBpcHY2X2Zsb3dsYWJlbC5zaClcXFwiKTtcXG4rXFxuK1xcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xcbitcXHRlcnIgPSBzZXRzb2Nrb3B0KGxpc3RlbmVyLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcXHUwMDI2cmVmbGVjdF9vbiwgc2l6ZW9mKHJlZmxlY3Rfb24pKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZW5hYmxlIFJFRkxFQ1Qgb24gdGhlIGxpc3RlbmVyXFxcIik7XFxuK1xcbitcXHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgOCwgXFx1MDAyNmNmZCwgXFx1MDAyNmFmZCk7XFxuK1xcbitcXHRlcnIgPSBnZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXFx1MDAyNnJlZmxlY3RfcXVlcnksIFxcdTAwMjZyZWZsZWN0X3F1ZXJ5X2xlbik7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIHF1ZXJ5IHRoZSBhY2NlcHRlZCBzb2NrZXQncyBvdXRnb2luZyBsYWJlbFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoOCwgbnRvaGwocmVmbGVjdF9xdWVyeS5mbHJfbGFiZWwpKVxcbitcXHRcXHRUSF9MT0coXFxcImFjY2VwdGVkIHNvY2tldCBkaWQgbm90IHJlZmxlY3QgY2xpZW50J3MgbGFiZWxcXFwiKTtcXG4rXFxuK1xcdGVyciA9IHNldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcXHUwMDI2cmVmbGVjdF9vZmYsIHNpemVvZihyZWZsZWN0X29mZikpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBkaXNhYmxlIFJFRkxFQ1Qgb24gdGhlIGFjY2VwdGVkIHNvY2tldFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFxcdTAwMjZyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCBkaXNhYmxpbmcgUkVGTEVDVCB0d2ljZSB0byBmYWlsXFxcIik7XFxuK1xcdEFTU0VSVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShhZmQpKTtcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGNmZCkpO1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UobGlzdGVuZXIpKTtcXG4gfVxcbitcXG4rVEVTVF9IQVJORVNTX01BSU5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6Mjk6MjAuODM2ODE0MTM3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODkyMjM2OTg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjODk4ZTY5ZTc4M2JkOWY3NjE2ZGE4NGViNWVjM2VhMDlkMjAzOTlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAwMzoyOToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxuaW5kZXggY2VlOTVlMjUyYmVlNS4uNGMzZGUzYTI3ODA3YyAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoXG5AQCAtOCw3ICs4LDggQEBcbiBzZXQgLWVcbiBcbiBlY2hvIFwiVEVTVCBtYW5hZ2VtZW50XCJcbi0uL2luX25ldG5zLnNoIC4vaXB2Nl9mbG93bGFiZWxfbWdyXG4rLi9pbl9uZXRucy5zaCBcXFxuKyAgc2ggLWMgJ3N5c2N0bCAtcSAtdyBuZXQuaXB2Ni5mbG93bGFiZWxfY29uc2lzdGVuY3k9MCBcdTAwMjZcdTAwMjYgLi9pcHY2X2Zsb3dsYWJlbF9tZ3InXG4gXG4gZWNobyBcIlRFU1QgZGF0YXBhdGhcIlxuIC4vaW5fbmV0bnMuc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcbmluZGV4IGFmOTViNDhhY2VhOTAuLjQ4MjkyMWY3ZWUxMTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xuQEAgLTYsNiArNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXJwYS9pbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NlcnJvci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luNi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG5AQCAtMTksMzEgKzIwLDE5IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuIFxuIC8qIHVhcGkvZ2xpYmMgd2VpcmRuZXNzIG1heSBsZWF2ZSB0aGlzIHVuZGVmaW5lZCAqL1xuICNpZm5kZWYgSVBWNl9GTE9XTEFCRUxfTUdSXG4gI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1JcdDMyXG4gI2VuZGlmXG4rI2lmbmRlZiBJUFY2X0ZMT1dJTkZPX1NFTkRcbisjZGVmaW5lIElQVjZfRkxPV0lORk9fU0VORFx0MzNcbisjZW5kaWZcbiBcbiAvKiBmcm9tIG5ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyAqL1xuICNkZWZpbmUgRkxfTUlOX0xJTkdFUlx0XHQ2XG4tXG4tI2RlZmluZSBleHBsYWluKHgpXHRcdFx0XHRcdFx0XHRcXFxuLVx0ZG8geyBpZiAoY2ZnX3ZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCBcIiAgICAgICBcIiB4IFwiXFxuXCIpOyB9IHdoaWxlICgwKVxuLVxuLSNkZWZpbmUgX19leHBlY3QoeClcdFx0XHRcdFx0XHRcdFxcXG4tXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdGlmICghKHgpKVx0XHRcdFx0XHRcdFxcXG4tXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiW09LXSAgIFwiICN4IFwiXFxuXCIpO1x0XHRcXFxuLVx0XHRlbHNlXHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdGVycm9yKDEsIDAsIFwiW0VSUl0gIFwiICN4IFwiIChsaW5lICVkKVwiLCBfX0xJTkVfXyk7IFxcXG4tXHR9IHdoaWxlICgwKVxuLVxuLSNkZWZpbmUgZXhwZWN0X3Bhc3MoeClcdF9fZXhwZWN0KHgpXG4tI2RlZmluZSBleHBlY3RfZmFpbCh4KVx0X19leHBlY3QoISh4KSlcbi1cbi1zdGF0aWMgYm9vbCBjZmdfbG9uZ19ydW5uaW5nO1xuLXN0YXRpYyBib29sIGNmZ192ZXJib3NlO1xuKyNkZWZpbmUgRkxfTUFYX0xJTkdFUlx0MTUwXG4gXG4gc3RhdGljIGludCBmbG93bGFiZWxfZ2V0KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsIHVpbnQxNl90IGZsYWdzKVxuIHtcbkBAIC03MSwxMjkgKzYwLDQwNiBAQCBzdGF0aWMgaW50IGZsb3dsYWJlbF9wdXQoaW50IGZkLCB1aW50MzJfdCBsYWJlbClcbiBcdHJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnVuX3Rlc3RzKGludCBmZClcbitzdGF0aWMgaW50IGZsb3dsYWJlbF9yZW5ldyhpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50MTZfdCBsaW5nZXIpXG4re1xuK1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHtcbitcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsXG4rXHRcdC5mbHJfbGFiZWwgPSBodG9ubChsYWJlbCksXG4rXHRcdC5mbHJfbGluZ2VyID0gbGluZ2VyLFxuK1x0fTtcbitcbitcdHJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbjYgbG9vcGJhY2tfYWRkcih2b2lkKVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkciA9IHtcbitcdFx0LnNpbjZfZmFtaWx5XHQ9IEFGX0lORVQ2LFxuK1x0XHQuc2luNl9hZGRyXHQ9IElONkFERFJfTE9PUEJBQ0tfSU5JVCxcbitcdFx0LnNpbjZfcG9ydFx0PSBodG9ucyg4ODg4KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gYWRkcjtcbit9XG4rXG4rc3RhdGljIGludCB0Y3BfbGlzdGVuKHZvaWQpXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0gbG9vcGJhY2tfYWRkcigpO1xuK1x0Y29uc3QgaW50IG9uZSA9IDE7XG4rXHRpbnQgZmQ7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApO1xuK1x0aWYgKGZkID09IC0xKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJzb2NrZXQgbGlzdGVuZXJcIik7XG4rXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwic2V0c29ja29wdCBTT19SRVVTRUFERFJcIik7XG4rXHRpZiAoYmluZChmZCwgKHZvaWQgKilcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJiaW5kXCIpO1xuK1x0aWYgKGxpc3RlbihmZCwgMSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcImxpc3RlblwiKTtcbitcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGNwX2Nvbm5lY3QoaW50IGxpc3RlbmVyLCB1aW50MzJfdCBmbG93bGFiZWwsIGludCAqY2xpZW50LCBpbnQgKmFjY2VwdGVkKVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkciA9IGxvb3BiYWNrX2FkZHIoKTtcbitcdGNvbnN0IGludCBvbmUgPSAxO1xuK1x0aW50IGNmZCwgYWZkO1xuK1xuK1x0Y2ZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7XG4rXHRpZiAoY2ZkID09IC0xKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJzb2NrZXQgY2xpZW50XCIpO1xuK1xuK1x0aWYgKGZsb3dsYWJlbF9nZXQoY2ZkLCBmbG93bGFiZWwsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwiZmxvd2xhYmVsX2dldFwiKTtcbitcdGlmIChzZXRzb2Nrb3B0KGNmZCwgU09MX0lQVjYsIElQVjZfRkxPV0lORk9fU0VORCwgXHUwMDI2b25lLCBzaXplb2Yob25lKSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcInNldHNvY2tvcHQgZmxvd2luZm9fc2VuZFwiKTtcbitcdGFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7XG4rXG4rXHRpZiAoY29ubmVjdChjZmQsICh2b2lkICopXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwiY29ubmVjdFwiKTtcbitcbitcdGFmZCA9IGFjY2VwdChsaXN0ZW5lciwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoYWZkID09IC0xKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJhY2NlcHRcIik7XG4rXG4rXHRpZiAoZmxvd2xhYmVsX3B1dChjZmQsIGZsb3dsYWJlbCkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcImZsb3dsYWJlbF9wdXRcIik7XG4rXG4rXHQqY2xpZW50ID0gY2ZkO1xuK1x0KmFjY2VwdGVkID0gYWZkO1xuK31cbitcbitURVNUKGNhbm5vdF9nZXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgOSwgSVBWNl9GTF9TX0FOWSwgMCk7XG4rXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIGdldCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCIpO1xuK1x0QVNTRVJUX0VRKEVOT0VOVCwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVOT0VOVCwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuK31cbitcbitURVNUKGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMTApO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCBwdXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFwiKTtcbitcdEFTU0VSVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVTUkNILCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1QoY2Fubm90X2NyZWF0ZV9sYWJlbF9ncmVhdGVyX3RoYW5fMjBfYml0cylcbit7XG4rXHRpbnQgZmQsIGVycjtcbitcbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwic29ja2V0IGZhaWxlZFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDB4MUZGRkZGLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgbGFiZWwgXHUwMDNlIDIwIGJpdHMgdG8gYmUgcmVqZWN0ZWRcIik7XG4rXHRBU1NFUlRfRVEoRUlOVkFMLCBlcnJubykgVEhfTE9HKFwiZXhwZWN0ZWQgRUlOVkFMLCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1QoY2FuX2NyZWF0ZV9hbmRfZ2V0X2FuZF9wdXRfbGFiZWxzKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIChGTF9GX0NSRUFURSlcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBnZXQgdGhlIGxhYmVsIHdpdGhvdXQgRkxfRl9DUkVBVEVcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBnZXQgaXQgYWdhaW4gd2l0aCBjcmVhdGUgZmxhZyBzZXQsIHRvb1wiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCk7XG4rXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIEZMX0ZfRVhDTCB0byByZWplY3QgYW4gYWxyZWFkeS1leGlzdGluZyBsYWJlbFwiKTtcbitcdEFTU0VSVF9FUShFRVhJU1QsIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFRVhJU1QsIGdvdCAlZFwiLCBlcnJubyk7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBwdXQgZmlyc3QgcmVmZXJlbmNlXCIpO1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHNlY29uZCByZWZlcmVuY2VcIik7XG4rXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBwdXQgdGhpcmQgcmVmZXJlbmNlXCIpO1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4rXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIGZvdXJ0aCBwdXQgdG8gZmFpbCwgbm8gcmVmZXJlbmNlcyBsZWZ0XCIpO1xuK1x0QVNTRVJUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFwiZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFwiLCBlcnJubyk7XG4rXG4rXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVChleGNsdXNpdmVfbGFiZWxfc2hhcmUpXG4re1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGV4Y2x1c2l2ZSBsYWJlbCAoRkxfU19FWENMKVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCByZXVzZSBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbFwiKTtcbitcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCByZXVzZSBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsIHRvb1wiKTtcbitcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHRoZSBleGNsdXNpdmUgbGFiZWxcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgZHVlIHRvIGxpbmdlclwiKTtcbitcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZXhwZWN0ZWQgcmV1c2UgdG8gc3VjY2VlZCBhZnRlciBsaW5nZXJcIik7XG4rXG4rXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVCh1c2VyX3ByaXZhdGVfbGFiZWxfc2hhcmUpXG4ge1xuLVx0aW50IHdzdGF0dXM7XG4rXHRpbnQgZmQsIGVyciwgd3N0YXR1cztcbiBcdHBpZF90IHBpZDtcbiBcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IG5vbi1leGlzdGVudCBsYWJlbFwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcbi1cbi1cdGV4cGxhaW4oXCJjYW5ub3QgcHV0IG5vbi1leGlzdGVudCBsYWJlbFwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cbi1cdGV4cGxhaW4oXCJjYW5ub3QgY3JlYXRlIGxhYmVsIGdyZWF0ZXIgdGhhbiAyMCBiaXRzXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMHgxRkZGRkYsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cbi1cdGV4cGxhaW4oXCJjcmVhdGUgYSBuZXcgbGFiZWwgKEZMX0ZfQ1JFQVRFKVwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCJjYW4gZ2V0IHRoZSBsYWJlbCAod2l0aG91dCBGTF9GX0NSRUFURSlcIik7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7XG4tXHRleHBsYWluKFwiY2FuIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcImNhbm5vdCBnZXQgaXQgYWdhaW4gd2l0aCB0aGUgZXhjbHVzaXZlIChGTF9GTF9FWENMKSBmbGFnXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0IElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCkpO1xuLVx0ZXhwbGFpbihcImNhbiBub3cgcHV0IGV4YWN0bHkgdGhyZWUgcmVmZXJlbmNlc1wiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cbi1cdGV4cGxhaW4oXCJjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZVwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwiY2Fubm90IGdldCBpdCBhZ2FpbiBpbiBleGNsdXNpdmUgbW9kZSBlaXRoZXJcIik7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMikpO1xuLVxuLVx0aWYgKGNmZ19sb25nX3J1bm5pbmcpIHtcbi1cdFx0ZXhwbGFpbihcImNhbm5vdCByZXVzZSB0aGUgbGFiZWwsIGR1ZSB0byBsaW5nZXJcIik7XG4tXHRcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHRcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0XHRleHBsYWluKFwiYWZ0ZXIgc2xlZXAsIGNhbiByZXVzZVwiKTtcbi1cdFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcbi1cdFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHR9XG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IHVzZXItcHJpdmF0ZSBsYWJlbCAoRkxfU19VU0VSKVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCBnZXQgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcIik7XG4rXHRBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgZ2V0IGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcIik7XG4rXHRBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlXCIpO1xuIFxuLVx0ZXhwbGFpbihcImNyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUilcIik7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcImNhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCkpO1xuLVx0ZXhwbGFpbihcImNhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGVcIik7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfRVhDTCwgMCkpO1xuLVx0ZXhwbGFpbihcImNhbiBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcbi1cdGV4cGxhaW4oXCJjaGlsZCBwcm9jZXNzIGNhbiBnZXQgaXQgdG9vLCBidXQgbm90IGFmdGVyIHNldHVpZChub2JvZHkpXCIpO1xuIFx0cGlkID0gZm9yaygpO1xuLVx0aWYgKHBpZCA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwiZm9ya1wiKTtcbitcdEFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coXCJmb3JrIGZhaWxlZFwiKTtcbiBcdGlmICghcGlkKSB7XG4tXHRcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XG4tXHRcdGlmIChzZXR1aWQoVVNIUlRfTUFYKSlcbitcdFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApO1xuK1x0XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJjaGlsZCBmYWlsZWQgdG8gZ2V0IHRoZSB1c2VyLXByaXZhdGUgbGFiZWxcIik7XG4rXG4rXHRcdGlmIChzZXR1aWQoVVNIUlRfTUFYKSkge1xuIFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIltJTkZPXSBza2lwIHNldHVpZCBjaGlsZCB0ZXN0XFxuXCIpO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcbitcdFx0XHRleGl0KDApO1xuK1x0XHR9XG4rXG4rXHRcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbitcdFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJjaGlsZCB1bmV4cGVjdGVkbHkgZ290IHRoZSBsYWJlbCBhZnRlciBzZXR1aWQobm9ib2R5KVwiKTtcbitcdFx0QVNTRVJUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFwiLCBlcnJubyk7XG4gXHRcdGV4aXQoMCk7XG4gXHR9XG4tXHRpZiAod2FpdChcdTAwMjZ3c3RhdHVzKSA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwid2FpdFwiKTtcbi1cdGlmICghV0lGRVhJVEVEKHdzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHdzdGF0dXMpICE9IDApXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcIndhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XCIpO1xuLVxuLVx0ZXhwbGFpbihcImNyZWF0ZSBhIG5ldyBwcm9jZXNzLXByaXZhdGUgbGFiZWwgKEZMX1NfUFJPQ0VTUylcIik7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcImNhbiBnZXQgaXQgYWdhaW5cIik7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCkpO1xuLVx0ZXhwbGFpbihcImNoaWxkIHByb2Nlc3MgY2Fubm90IGNhbiBnZXQgaXRcIik7XG4rXHRBU1NFUlRfRVEocGlkLCB3YWl0KFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXCJ3YWl0IGZhaWxlZFwiKTtcbitcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFwiY2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5XCIpO1xuK1x0QVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKSBUSF9MT0coXCJjaGlsZCByZXBvcnRlZCB1bmV4cGVjdGVkIHJlc3VsdFwiKTtcbitcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuK31cbitcbitURVNUKHByb2Nlc3NfcHJpdmF0ZV9sYWJlbF9zaGFyZSlcbit7XG4rXHRpbnQgZmQsIGVyciwgd3N0YXR1cztcbitcdHBpZF90IHBpZDtcbitcbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwic29ja2V0IGZhaWxlZFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgcHJvY2Vzcy1wcml2YXRlIGxhYmVsIChGTF9TX1BST0NFU1MpXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpblwiKTtcbitcbiBcdHBpZCA9IGZvcmsoKTtcbi1cdGlmIChwaWQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcImZvcmtcIik7XG4rXHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFwiZm9yayBmYWlsZWRcIik7XG4gXHRpZiAoIXBpZCkge1xuLVx0XHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCkpO1xuK1x0XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7XG4rXHRcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiY2hpbGQgdW5leHBlY3RlZGx5IGdvdCB0aGUgcHJvY2Vzcy1wcml2YXRlIGxhYmVsXCIpO1xuK1x0XHRBU1NFUlRfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbiBcdFx0ZXhpdCgwKTtcbiBcdH1cbi1cdGlmICh3YWl0KFx1MDAyNndzdGF0dXMpID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCJ3YWl0XCIpO1xuLVx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwid2FpdDogdW5leHBlY3RlZCBjaGlsZCByZXN1bHRcIik7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuLXtcbi1cdGludCBjO1xuLVxuLVx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwibHZcIikpICE9IC0xKSB7XG4tXHRcdHN3aXRjaCAoYykge1xuLVx0XHRjYXNlICdsJzpcbi1cdFx0XHRjZmdfbG9uZ19ydW5uaW5nID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAndic6XG4tXHRcdFx0Y2ZnX3ZlcmJvc2UgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdGVycm9yKDEsIDAsIFwiJXM6IHBhcnNlIGVycm9yXCIsIGFyZ3ZbMF0pO1xuLVx0XHR9XG4tXHR9XG4rXHRBU1NFUlRfRVEocGlkLCB3YWl0KFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXCJ3YWl0IGZhaWxlZFwiKTtcbitcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFwiY2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5XCIpO1xuK1x0QVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKSBUSF9MT0coXCJjaGlsZCByZXBvcnRlZCB1bmV4cGVjdGVkIHJlc3VsdFwiKTtcbitcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuIH1cbiBcbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4rVEVTVChjYW5ub3RfcmVuZXdfbm9uX2V4aXN0ZW50X2xhYmVsKVxuIHtcbi1cdGludCBmZDtcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA1LCAyICogKEZMX01JTl9MSU5HRVIgKiAyICsgMSkpO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCByZW5ldyBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCIpO1xuK1x0QVNTRVJUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFwiZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFwiLCBlcnJubyk7XG4rXG4rXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVChjYW5fcmVuZXdfZXhpc3RpbmdfbGFiZWwpXG4re1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA1LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGxhYmVsIGZvciByZW5ldyB2YWxpZGF0aW9uXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA1LCAyICogKEZMX01JTl9MSU5HRVIgKiAyICsgMSkpO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIHJlbmV3IGFuIGV4aXN0aW5nIHZhbGlkIGxhYmVsXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgNSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHRoZSBsYWJlbFwiKTtcbiBcbi1cdHBhcnNlX29wdHMoYXJnYywgYXJndik7XG4rXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVChyZW5ld19sYWJlbF9saW5nZXIpXG4re1xuK1x0LyogUkVORVcgbXVzdCBleHRlbmQgYSBsYWJlbCdzIGxpbmdlciBwZXJpb2Q6IHB1dHRpbmcgYSByZW5ld2VkXG4rXHQgKiBsYWJlbCBhbmQgd2FpdGluZyBvdXQgaXRzIG9yaWdpbmFsIGxpbmdlciB0aW1lIG11c3Qgbm90IGJlXG4rXHQgKiBlbm91Z2ggdG8gYWxsb3cgdGhlIGxhYmVsIHRvIGJlIHJlY3JlYXRlZC5cbitcdCAqL1xuK1x0aW50IGZkLCBlcnI7XG4gXG4gXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA2LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGxhYmVsIHdpdGggRkxfTUlOX0xJTkdFUiBsaW5nZXIgdGltZVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNiwgMiAqIChGTF9NSU5fTElOR0VSICogMiArIDEpKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byByZW5ldyB0aGUgbGFiZWwgdG8gaW5jcmVhc2UgaXRzIGxpbmdlciB0aW1lXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgNik7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHRoZSBsYWJlbFwiKTtcbitcbitcdHNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICsgMSk7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA2LCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgbmV3IGxpbmdlciB0aW1lIG5vdCBvdmVyIHlldFwiKTtcbitcdEFTU0VSVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1QocmVtb3RlX2ZsYWcpXG4re1xuK1x0LyogVGhlIFJFTU9URSBmbGFnLCB1c2VkIGZvciBnZXRzb2Nrb3B0LCBpcyBleHBlY3RlZCB0byByZXRyaWV2ZSB0aGVcbitcdCAqIGxhYmVsIGZyb20gdGhlIGxhdGVzdCByZWNlaXZlZCBoZWFkZXIuXG4rXHQgKi9cbitcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSBmcmVxID0ge1xuK1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4rXHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVNT1RFLFxuK1x0fTtcbitcdHNvY2tsZW5fdCBmcmVxX2xlbiA9IHNpemVvZihmcmVxKTtcbitcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcbitcbitcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xuK1x0dGNwX2Nvbm5lY3QobGlzdGVuZXIsIDcsIFx1MDAyNmNmZCwgXHUwMDI2YWZkKTtcbitcbitcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZmcmVxLCBcdTAwMjZmcmVxX2xlbik7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJnZXRzb2Nrb3B0IHdpdGggSVBWNl9GTF9GX1JFTU9URSBmYWlsZWRcIik7XG4rXHRBU1NFUlRfRVEoNywgbnRvaGwoZnJlcS5mbHJfbGFiZWwpKSBUSF9MT0coXCJ1bmV4cGVjdGVkIHJlbW90ZSBmbG93IGxhYmVsXCIpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGFmZCkpO1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGNmZCkpO1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGxpc3RlbmVyKSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGZsb3dsYWJlbF9jb25zaXN0ZW5jeV9lbmFibGVkKHZvaWQpXG4re1xuK1x0Y2hhciBidWZbMl0gPSB7fTtcbitcdGludCBmZDtcbitcbitcdGZkID0gb3BlbihcIi9wcm9jL3N5cy9uZXQvaXB2Ni9mbG93bGFiZWxfY29uc2lzdGVuY3lcIiwgT19SRE9OTFkpO1xuIFx0aWYgKGZkID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCJzb2NrZXRcIik7XG4rXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0cnVuX3Rlc3RzKGZkKTtcbitcdGlmIChyZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSkgXHUwMDNjIDApXG4rXHRcdGJ1ZlswXSA9ICcxJztcbitcdGNsb3NlKGZkKTtcbiBcbi1cdGlmIChjbG9zZShmZCkpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcImNsb3NlXCIpO1xuK1x0cmV0dXJuIGJ1ZlswXSAhPSAnMCc7XG4rfVxuIFxuLVx0cmV0dXJuIDA7XG4rVEVTVChyZWZsZWN0X2ZsYWcpXG4re1xuK1x0LyogVGhlIFJFRkxFQ1QgZmxhZyBhY3RzIGFzIGEgdHJpZ2dlciB0byB0aGUgUkVQRkxPVyBiaXQuIFdoZW4gUkVQRkxPV1xuK1x0ICogaXMgdHJpZ2dlcmVkIGZvciBhIHNvY2tldCwgaXQgYWRvcHRzIHRoZSBsYWJlbCByZWNlaXZlZCBmcm9tIHRoZVxuK1x0ICogY29ubmVjdGVkIHNvY2tldC5cbitcdCAqL1xuK1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb24gPSB7XG4rXHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcbitcdFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxuK1x0fTtcbitcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X3F1ZXJ5ID0ge1xuK1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4rXHR9O1xuK1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb2ZmID0ge1xuK1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9QVVQsXG4rXHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCxcbitcdH07XG4rXHRzb2NrbGVuX3QgcmVmbGVjdF9xdWVyeV9sZW4gPSBzaXplb2YocmVmbGVjdF9xdWVyeSk7XG4rXHRpbnQgbGlzdGVuZXIsIGNmZCwgYWZkLCBlcnI7XG4rXG4rXHRpZiAoZmxvd2xhYmVsX2NvbnNpc3RlbmN5X2VuYWJsZWQoKSlcbitcdFx0U0tJUChyZXR1cm4sXG4rXHRcdCAgICAgXCJuZXQuaXB2Ni5mbG93bGFiZWxfY29uc2lzdGVuY3kgbXVzdCBiZSAwIChydW4gdmlhIGlwdjZfZmxvd2xhYmVsLnNoKVwiKTtcbitcbitcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xuK1x0ZXJyID0gc2V0c29ja29wdChsaXN0ZW5lciwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXHUwMDI2cmVmbGVjdF9vbiwgc2l6ZW9mKHJlZmxlY3Rfb24pKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBlbmFibGUgUkVGTEVDVCBvbiB0aGUgbGlzdGVuZXJcIik7XG4rXG4rXHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgOCwgXHUwMDI2Y2ZkLCBcdTAwMjZhZmQpO1xuK1xuK1x0ZXJyID0gZ2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlZmxlY3RfcXVlcnksIFx1MDAyNnJlZmxlY3RfcXVlcnlfbGVuKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBxdWVyeSB0aGUgYWNjZXB0ZWQgc29ja2V0J3Mgb3V0Z29pbmcgbGFiZWxcIik7XG4rXHRBU1NFUlRfRVEoOCwgbnRvaGwocmVmbGVjdF9xdWVyeS5mbHJfbGFiZWwpKVxuK1x0XHRUSF9MT0coXCJhY2NlcHRlZCBzb2NrZXQgZGlkIG5vdCByZWZsZWN0IGNsaWVudCdzIGxhYmVsXCIpO1xuK1xuK1x0ZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBkaXNhYmxlIFJFRkxFQ1Qgb24gdGhlIGFjY2VwdGVkIHNvY2tldFwiKTtcbitcbitcdGVyciA9IHNldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7XG4rXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIGRpc2FibGluZyBSRUZMRUNUIHR3aWNlIHRvIGZhaWxcIik7XG4rXHRBU1NFUlRfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFU1JDSCwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShhZmQpKTtcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShjZmQpKTtcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpO1xuIH1cbitcbitURVNUX0hBUk5FU1NfTUFJTlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDM6Mjk6MjAuODM2ODE1NzM3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkyMjM0NzY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IEFuYWx5emluZyBhIFNlbGZ0ZXN0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaGAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJobW1tLCB0aGF0J3MgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHNlbGZ0ZXN0cyBkaXJlY3RvcnksIHRoYXQncyBub3Qga2VybmVsIGV4ZWN1dGlvbi5cIiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2ssIHRob3VnaCwgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guIFJpZ2h0LCB0aGUgZGlmZiBqdXN0IGNvbmZpcm1zIHRoZSB0d28gZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLlxuXG5TaW5jZSB0aGlzIG1vZGlmaWVzICpvbmx5KiBzZWxmdGVzdHMsIHdoaWNoIGFyZSB1c2VyLXNwYWNlIHByb2dyYW1zIGRlc2lnbmVkIGZvciB0ZXN0aW5nLCBub3QgdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIHdvbid0IHRyaWdnZXIgYW55IG1lYW5pbmdmdWwgZnV6emluZyBvZiB0aGUga2VybmVsIGl0c2VsZi4gTm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRoZXJlLlxuXG5Ob3csIGxldCdzIGdvIGJhY2sgYW5kIGxvb2sgYXQgdGhlIGluc3RydWN0aW9ucywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmeSBzY2VuYXJpb3Mgd2hlcmUgYFdvcnRoRnV6emluZz1mYWxzZWAuIEl0IGxpc3RzIHRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24gY2hhbmdlcywgY29tbWVudHMsIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMsIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHJlcXVpcmluZyBzcGVjaWZpYyBoYXJkd2FyZSwgYW5kIHRlYXJkb3duIGNhbGxiYWNrcy4gSSBkb24ndCBzZWUgc2VsZnRlc3RzIGV4cGxpY2l0bHkgbGlzdGVkLCBidXQgaXQncyBjbGVhciB0aGVzZSBhcmUgdXNlZCB0byB0ZXN0IGtlcm5lbCBmZWF0dXJlcywgbm90IHRvIGV4ZWN1dGUgY29kZSwgYW5kIHRoZXJlZm9yZSBpdCBmYWxscyB3aXRoaW4gdGhlIHNhbWUgc3Bpcml0IG9mIHRoZSBndWlkZWxpbmVzLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIG5vLCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBvbmx5IHRvdWNoZXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaGAgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNgLlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50LiBUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGVzZSB1c2VyLXNwYWNlIHNlbGZ0ZXN0cywgcmVzaWRpbmcgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AsIGFuZCBpdCBpc24ndCBjaGFuZ2luZyBhbnkga2VybmVsIGNvZGUuIFRoaXMgZG9lc24ndCBuZWNlc3NpdGF0ZSBmdXp6aW5nIHRoZSBrZXJuZWwuXG5cblNvLCB0aGUgY29uY2x1c2lvbiBpcyAqKldvcnRoRnV6emluZz1mYWxzZSoqLiBXZSBjYW4gbm93IGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY1NSwiT3V0cHV0VG9rZW5zIjo2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAzOjI5OjI5Ljc1OTE2NjM0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownqt58[1] Phase: Running StartedAt: 2026-08-04 03:29:40 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqt58[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-04 03:29:40 +0000 UTC FinishedAt: 2026-08-04 03:29:45 +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,}